On 6/10/05, Frank Mehnert fm3@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