Loading shared objects in an l4env_freebsd application

Derick Swanepoel dswanepoel at gmail.com
Fri Jun 10 12:11:44 CEST 2005


On 6/10/05, Frank Mehnert <fm3 at os.inf.tu-dresden.de> wrote:
> On Friday 10 June 2005 10:43, Derick Swanepoel wrote:
> > Thanks for the advice. I have created a new mode to combine the loader
> > mode with what I need from l4env_freebsd, and I can successfully
> > compile and link my application. Unfortunately it causes a double
> > pagefault when loaded...:
> >
> > loader  | "(nd)/fiasco/ds/test" is a valid binary image
> > loader  | Setting libpath to (nd)/fiasco/ds/
> > exec    | test: Loading
> > exec    | test: Saved 457726 bytes of symbols
> > exec    | libloader.s.so: Relocating to 0000e000
> > exec    | libloader.s.so: Linking
> > exec    | libloader.s.so: Relocating entry 000058d0 => 000138d0
> > exec    | libloader.s.so: Setting section flag 0800
> > exec    | test: Setting section flag 0800
> > loader  | test: Starting l4env-style application
> > loader  | test,#11: Starting at l4loader_init (00014080)
> > loader  | test,#11: Double PF (r) at 00000000 eip 00000000 (11.00)
> 
> Ok, this is a pagefault in the loader library. Please look at the file
> l4/pkg/loader/server/src/app.c and search for APP_ADDR_LIBLOADER. Take
> that address as the base for libloader.s.so. Subtract that address from
> the pagefault address. The result is the offset into the loader lib. Do
> 
>   objdump -ld libloader.s.so | less
> 
> and search for the offset. Then scroll a little bit around and look
> for lines of source code contained in the listing. Or simply post the
> listing here.

The value of APP_LIBLOADER in my libloader.s.so is 0x0000E000. The
pagefault address is 0x00014057, which makes the offset 0x6057. Here
is the function containing that offset (and l4loader_init(), which
calls it):

00006020 <__do_l4loader_init>:
__do_l4loader_init():
/home/ljbrits/DROPS/l4/pkg/loader/lib/runtime/main.c:405
    6020:       55                      push   %ebp
    6021:       89 e5                   mov    %esp,%ebp
    6023:       56                      push   %esi
    6024:       53                      push   %ebx
    6025:       e8 00 00 00 00          call   602a <__do_l4loader_init+0xa>
    602a:       5b                      pop    %ebx
    602b:       81 c3 8a b7 01 00       add    $0x1b78a,%ebx
/home/ljbrits/DROPS/l4/pkg/loader/lib/runtime/main.c:408
    6031:       8b b3 80 03 00 00       mov    0x380(%ebx),%esi
    6037:       8b 45 08                mov    0x8(%ebp),%eax
    603a:       89 06                   mov    %eax,(%esi)
/home/ljbrits/DROPS/l4/pkg/loader/lib/runtime/main.c:410
    603c:       e8 6f f9 ff ff          call   59b0 <__setup_fixed>
/home/ljbrits/DROPS/l4/pkg/loader/lib/runtime/main.c:413
    6041:       8b 83 50 08 00 00       mov    0x850(%ebx),%eax
    6047:       52                      push   %edx
    6048:       50                      push   %eax
    6049:       8d 83 6c 08 00 00       lea    0x86c(%ebx),%eax
    604f:       50                      push   %eax
    6050:       6a 01                   push   $0x1
    6052:       e8 69 f3 ff ff          call   53c0 <l4env_get_infopage-0x510>
/home/ljbrits/DROPS/l4/pkg/loader/lib/runtime/main.c:418
    6057:       e8 b4 fa ff ff          call   5b10 <__attach_fixed>
/home/ljbrits/DROPS/l4/pkg/loader/lib/runtime/main.c:419
    605c:       58                      pop    %eax
    605d:       8b 06                   mov    (%esi),%eax
    605f:       50                      push   %eax
    6060:       e8 7b f7 ff ff          call   57e0 <l4env_get_infopage-0xf0>
/home/ljbrits/DROPS/l4/pkg/loader/lib/runtime/main.c:420
    6065:       e8 26 fe ff ff          call   5e90 <__fixup_modules>
/home/ljbrits/DROPS/l4/pkg/loader/lib/runtime/main.c:423
    606a:       e8 31 ff ff ff          call   5fa0 <__complete_load>
/home/ljbrits/DROPS/l4/pkg/loader/lib/runtime/main.c:427
    606f:       50                      push   %eax
    6070:       c3                      ret
/home/ljbrits/DROPS/l4/pkg/loader/lib/runtime/main.c:435
    6071:       8d 65 f8                lea    0xfffffff8(%ebp),%esp
    6074:       5b                      pop    %ebx
    6075:       5e                      pop    %esi
    6076:       5d                      pop    %ebp
    6077:       c3                      ret
    6078:       90                      nop
    6079:       8d b4 26 00 00 00 00    lea    0x0(%esi,1),%esi

00006080 <l4loader_init>:
l4loader_init():
/home/ljbrits/DROPS/l4/pkg/loader/lib/runtime/main.c:440
    6080:       55                      push   %ebp
    6081:       89 e5                   mov    %esp,%ebp
/home/ljbrits/DROPS/l4/pkg/loader/lib/runtime/main.c:441
    6083:       5d                      pop    %ebp
    6084:       eb 9a                   jmp    6020 <__do_l4loader_init>
    6086:       8d 76 00                lea    0x0(%esi),%esi
    6089:       8d bc 27 00 00 00 00    lea    0x0(%edi,1),%edi

Thanks,

Derick




More information about the l4-hackers mailing list