On Mon, Oct 5, 2015 at 9:46 AM, Steve Ellcey <sell...@imgtec.com> wrote:
> On Mon, 2015-10-05 at 09:21 -0700, H.J. Lu wrote:
>> On Mon, Oct 5, 2015 at 9:10 AM, Steve Ellcey <sell...@imgtec.com> wrote:
>
>> > There probably is some way to get dynamic stack alignment to work on
>> > MIPS, but I am not sure I can do it.  The only platform that I see that
>> > uses dynamic stack alignment is x86.  I think the difficulties in
>> > getting this to work correctly is why no other platform has implemented
>> > it.  The most common response I have gotten when asking around for help
>> > on dynamic stack alignment is usually "just break the ABI".
>> >
>> > My approach does waste some space, on MIPS I would be allocating 32
>> > bytes of stack space to spill a 16 byte MSA register, but the
>> > hope/belief is that MSA registers would not get spilled very often.
>>
>> We keep track stack frame information precisely in x86 backend,
>> including unwind info, and we fixed DWARF unwind info generation to
>> support it.  We used gcc_assert to verify that everything is in
>> sync.
>>
>> I don't know what is missing to support MIPS dynamic stack alignment.
>> Unless DWARF unwind info isn't sufficient for MIPS, I don't see why
>> dynamic stack alignment can't be done for MIPS.  If you get the wrong
>> DWARF unwind info, you can add assert to GCC source to track down
>> its origin and fix assert to generate the correct DWARF unwind info.
>
> The problem is that I don't know what is missing either.  I don't know
> what the 'correct' stack frame information should look like so I don't
> really know what I am trying to generate.  readelf cannot decode the
> unwind section of MIPS objects so I can't look at things that way and I
> have been trying to work based on what .cfi directives I think I should
> be generating and that has not been going well.

Does MIPS use DWARF unwind info? If yes, it should be easy
to fix readelf to dump MIPS unwind info.  If not, the current dynamic
stack realignment scheme won't work for you.

> One example of an issue I have run into is with the DWARF unwind
> generation and 'Rule 16' in dwarf2cfi.c.  It assumes the AND instruction
> has an integer constant argument but MIPS can't do an AND with a
> constant like -16 so it has to put it in a register first and do the AND
> with the register.  I just hacked that code as a temporary workaround
> but its the sort of x86 assumption that I have run into due to the fact
> that no platform other than x86 currently does dynamic stack alignment.

You need to update dwarf2cfi.c to generate proper unwind info for
whatever frame instructions MIPS generates, like what we did for
x86 dynamic stack realignment.

-- 
H.J.

Reply via email to