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