bug-hurd
[Top][All Lists]
Advanced

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

Re: [PATCH gnumach] Align the user stack correctly for 64 bit programs.


From: Samuel Thibault
Subject: Re: [PATCH gnumach] Align the user stack correctly for 64 bit programs.
Date: Mon, 3 Apr 2023 00:35:22 +0200
User-agent: NeoMutt/20170609 (1.8.3)

Hello,

Flávio Cruz, le lun. 20 mars 2023 23:58:32 -0400, a ecrit:
> On Mon, Mar 20, 2023 at 3:50 AM Luca <[1]luca@orpolo.org> wrote:
> 
>     Hi! This indeed seems to make rpc work, at least in my tests.
> 
>     Il 20/03/23 05:59, Flavio Cruz ha scritto:
>     > diff --git a/i386/i386/thread.h b/i386/i386/thread.h
>     > index cb317bee..c5da7522 100644
>     > --- a/i386/i386/thread.h
>     > +++ b/i386/i386/thread.h
>     > @@ -225,6 +225,17 @@ typedef struct pcb {
>     >   #define STACK_IEL(stack)    \
>     >       ((struct i386_exception_link *)STACK_IKS(stack) - 1)
>     >   
>     > +#ifdef __x86_64__
>     > +#ifdef USER32
>     > +#define STACK_ALIGN 4
>     > +#else
>     > +/* Follow System V AMD64 ABI guidelines. */
>     > +#define STACK_ALIGN 16
>     > +#endif
>     > +#else
>     > +#define STACK_ALIGN 4
>     > +#endif  /* __x86_64__ */
>     > +
>     >   #define USER_REGS(thread)   (&(thread)->pcb->iss)
> 
>     Maybe this should be BOOTSTRAP_STACK_ALIGN or something similar? Just to
>     differentiate from the alignment set in pcb_module_init(), which is for
>     the exception stack.
> 
> 
> Is the exception stack only used in kernel space? In that case, we could 
> define
> KERNEL_STACK_ALIGN and USER_STACK_ALIGN to differentiate between the
> two cases.

Please define these two indeed, yes.

> 64 bit user programs always need to have a 16-byte aligned stack when
> calling functions (at least gcc expects that).

That's part of the amd64 ABI, yes.

Samuel



reply via email to

[Prev in Thread] Current Thread [Next in Thread]