Hi Luca
On Mon, Mar 20, 2023 at 3:50 AM Luca <[email protected]> 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. 64 bit user programs always need to have a 16-byte aligned stack
when
calling functions (at least gcc expects that).
>
>
> Luca
>
>