Port-amd64 archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: amd64 signal stack alignment



On Tue, May 13, 2014 at 10:23 AM, Masao Uebayashi 
<uebayasi%gmail.com@localhost> wrote:
> On Tue, May 13, 2014 at 10:15 AM, Masao Uebayashi 
> <uebayasi%gmail.com@localhost> wrote:
>> On Tue, May 13, 2014 at 9:57 AM, Masao Uebayashi 
>> <uebayasi%gmail.com@localhost> wrote:
>>> sys/arch/amd64/amd64/machdep.c:
>>>
>>>  562         /* Allocate space for the signal handler context. */
>>>  563         if (onstack)
>>>  564                 sp = ((char *)l->l_sigstk.ss_sp + l->l_sigstk.ss_size);
>>>  565         else
>>>  566                 /* AMD64 ABI 128-bytes "red zone". */
>>>  567                 sp = (char *)tf->tf_rsp - 128;
>>>  568
>>>  569         sp -= sizeof(struct sigframe_siginfo);
>>>  570         /* Round down the stackpointer to a multiple of 16 for the 
>>> ABI. */
>>>  571         fp = (struct sigframe_siginfo *)(((unsigned long)sp & ~15) - 
>>> 8);
>>>
>>> These calculation is very unclear to me.  IIUC:
>>>
>>> - 8-bytes fxsave is saved below "red zone" with 8-bytes alignment, and
>>
>> fxsave saved on stack was not part of ABI but just an implementation.
>> Now it's no longer on stack but in pcb, right?  If yes the "- 8" can
>> go away.
>
> Actually, s/can/must/.  Otherwise signal SP is always aligned to
> 8-bytes, not 16-bytes.   Correct me if I'm wrong.

OK, now I see AMD64 ABI says "SP + 8" must be aligned to 16-bytes.


Home | Main Index | Thread Index | Old Index