tech-toolchain archive

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

Re: fixing libffi on NetBSD



On Sun, Jan 29, 2017 at 10:01:46AM +0100, Martin Husemann wrote:
> On Sun, Jan 29, 2017 at 12:25:30AM +0100, Thomas Klausner wrote:
> > I've made a package for the latest GIT head in wip/libffi-git and
> > opened an upstream bug report about this, see
> > https://github.com/libffi/libffi/issues/294
> 
> It seems to not map its trampoline page executable, but I don't see
> exactly where the code sets up the proper protection.
> 
> Reading symbols from ./a.out...done.
> (gdb) run
> Starting program: /usr/pkgobj/wip/libffi-git/work/libffi/testsuite/libffi.call/a.out 
> 
> Program received signal SIGSEGV, Segmentation fault.
> 0x00007f7ff7b01050 in ?? ()
> (gdb) bt
> #0  0x00007f7ff7b01050 in ?? ()
> #1  0x0000000000400e90 in main () at closure_fn0.c:82
> (gdb) up
> #1  0x0000000000400e90 in main () at closure_fn0.c:82
> 82        res = (*((closure_test_type0)code))
> (gdb) p code
> $1 = (void *) 0x7f7ff7b01050
> (gdb) x/16i 0x7f7ff7b01050
>    0x7f7ff7b01050:      lea    -0x7(%rip),%r10        # 0x7f7ff7b01050
>    0x7f7ff7b01057:      jmpq   *0x3(%rip)        # 0x7f7ff7b01060
>    0x7f7ff7b0105d:      nopl   (%rax)
> 
> The call for that mapping is likely libffi/src/closures.c:
> 
>       kt =
>         vm_remap (mach_task_self (), &trampoline_page, PAGE_MAX_SIZE, 0x0, FALSE,
>                   mach_task_self (), trampoline_page_template, FALSE,   
>                   &cur_prot, &max_prot, VM_INHERIT_SHARE);
> 
> but I can't find the vm_remap() function.

That piece of code is likely for OS X (perhaps iOS) only. I found a
hit for vm_remap here:

http://web.mit.edu/darwin/src/modules/xnu/osfmk/man/vm_remap.html

where the URL contains "darwin", and the call is inside an

#ifdef __MACH__

 Thomas


Home | Main Index | Thread Index | Old Index