bug-hurd
[Top][All Lists]
Advanced

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

Re: [PATCH 03/14] add mach_host tests


From: Sergey Bugaev
Subject: Re: [PATCH 03/14] add mach_host tests
Date: Sat, 6 Jan 2024 22:02:58 +0300

On Sat, Jan 6, 2024 at 9:45 PM Samuel Thibault <samuel.thibault@gnu.org> wrote:
>
> Luca, le sam. 06 janv. 2024 19:41:17 +0100, a ecrit:
> > Il 29/12/23 15:14, Luca Dariz ha scritto:
> > > Il 29/12/23 14:44, Samuel Thibault ha scritto:
> > > > Also, it would be useful to compile the tests with
> > > > -ftrivial-auto-var-init=pattern so as to fill the structures with random
> > > > values before making the gnumach calls.
> >
> > with this option all tests fail on the first mig-generated stub entry, which
> > is task_get_special_port(), in _start(). Maybe it's related to SSE somehow,
> > I see a page fault here:
>
> Is $rbp unaligned?
>
> (we do want to fix such bug anyway)
>
> > (gdb) disassemble task_get_special_port
> > Dump of assembler code for function task_get_special_port:
> >    0x0000000000416bc6 <+0>:   push   %rbp
> >    0x0000000000416bc7 <+1>:   mov    %rsp,%rbp
> >    0x0000000000416bca <+4>:   sub    $0xa0,%rsp
> >    0x0000000000416bd1 <+11>:  mov    %edi,-0x94(%rbp)
> >    0x0000000000416bd7 <+17>:  mov    %esi,-0x98(%rbp)
> >    0x0000000000416bdd <+23>:  mov    %rdx,-0xa0(%rbp)
> >    0x0000000000416be4 <+30>:  lea    -0x60(%rbp),%rax
> >    0x0000000000416be8 <+34>:  movdqa 0x124f0(%rip),%xmm0        # 0x4290e0
> > => 0x0000000000416bf0 <+42>:  movaps %xmm0,(%rax)
> >    0x0000000000416bf3 <+45>:  movaps %xmm0,0x10(%rax)

Yes, you have to align the stack. An executable gets entered at _start
(or whatever the ELF header specifies) with %rsp 16-aligned, but you
must enter C code with %rsp being 8 modulo 8. To fix this, change your
_start like so:

asm(".global _start\n"
    "_start:\n"
    "  callq c_start");

void __attribute__((used, retain)) c_start()
{
    ...
}

This is only required on x86_64 (among the three architectures we care
about for now).

Sergey



reply via email to

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