Hello
I 'm trying to boot my fresh l4linux, i used the following entry in grub as adam previously told me to.
title L4/Linux root (hd0,0) kernel /l4linux/rmgr -sigma0 task modname "L4Linux task" task modname "bmodfs" module module module modaddr 0x02000000 module /l4linux/fiasco -nowait -nokdb -serial_esc -comspeed 115200 -comport 1 module /l4linux/sigma0 module /l4linux/names module /l4linux/log module /l4linux/dm_phys module /l4linux/simple_ts -t 300 module /l4linux/l4io --noirq module /l4linux/bmodfs module /l4linux/libloader.s.so module /l4linux/run-l4 module /l4linux/vmlinuz26 module /l4linux/l4exec module /l4linux/loader --fprov=BMODFS run-l4
It starts but i get the following error messages :
simplets|configured for 300 tasks bmodfs | L4RM: [PF] read at 0x00000000, eip 0122c495, src A.01 bmodfs | [A.0] l4rm/lib/src/pagefault.c:78:__unknowm_pf(): bmodfs | unhandled page fault
It seems to be a problem with a null pointer and i'm sure it is a problem in my grub file but i don't know what's wrong. I tried to change some options but i always get this problem but it is not always the same server that crashes, it depends on my options.
Thanx for the help Fabien Chaillou
On Friday 10 June 2005 14:15, fabs0028@free.fr wrote:
Hello
I 'm trying to boot my fresh l4linux, i used the following entry in grub as adam previously told me to.
title L4/Linux root (hd0,0) kernel /l4linux/rmgr -sigma0 task modname "L4Linux task" task modname "bmodfs" module module module modaddr 0x02000000 module /l4linux/fiasco -nowait -nokdb -serial_esc -comspeed 115200 -comport 1 module /l4linux/sigma0 module /l4linux/names module /l4linux/log module /l4linux/dm_phys module /l4linux/simple_ts -t 300 module /l4linux/l4io --noirq module /l4linux/bmodfs module /l4linux/libloader.s.so module /l4linux/run-l4 module /l4linux/vmlinuz26 module /l4linux/l4exec module /l4linux/loader --fprov=BMODFS run-l4
It starts but i get the following error messages :
simplets|configured for 300 tasks bmodfs | L4RM: [PF] read at 0x00000000, eip 0122c495, src A.01 bmodfs | [A.0] l4rm/lib/src/pagefault.c:78:__unknowm_pf(): bmodfs | unhandled page fault
It seems to be a problem with a null pointer and i'm sure it is a problem in my grub file but i don't know what's wrong. I tried to change some options but i always get this problem but it is not always the same server that crashes, it depends on my options.
This bug report lacks of many information. Please start with debugging at the faulting eip: Press the ESC key and type
uta<space>122c495<space
You will (hopyfully) see a disassembler listing. If there are line numbers included into the listing, fine. If not, disassemble your bmodfs with
objdump -ld bmodfs | less
and search for the faulting eip. You have to find out the relation between the faulting eip and the source line.
Frank
I compiled l4env with the stripping option so i had to rebuild it. I did it and i relaunched the system.
I got this listing :
Welcome to Fiasco(ia32)! DD-L4(v2)/x86 microkernel (C) 1998-2005 TU Dresden Rev: Sun Jun 5 18:10:52 2005 compiled with gcc 3.4.2 for AMD Athlon Performance-critical config option(s) detected: CONFIG_NDEBUG is off CONFIG_NO_FRAME_PTR is off
Enabling special fully nested mode for PIC Using the PIT (i8254) on IRQ 0 for scheduling CPU: AuthenticAMD (6:4:2:0) Model: Athlon (Thunderbird) at 1000 MHz
16/256 Entry I TLB (4K pages) 8 Entry I TLB (4M pages) 24/256 Entry D TLB (4K pages) 8 Entry D TLB (4M pages) 64 KB L1 I Cache (2-way associative, 64 bytes per line) 64 KB L1 D Cache (2-way associative, 64 bytes per line) 256 KB L2 U Cache (8-way associative, 64 bytes per line)
Freeing init code/data: 20480 bytes (5 pages)
SIGMA0: Hello! Found Fiasco: KIP syscalls: no. Allocated 324kB for maintenance structures.
RMGR: Stage2 running on Fiasco bootloader loaded 11 modules at 02064000-0333c98b total RAM size = 1048191 KB (reported by bootloader) received 985260 KB RAM from sigma0 808 KB reserved for RMGR My symbols at 3c3ac000-3c3af000 (12kB), lines at 3c39f000-3c3ac000 (52kB) received no I/O ports attached irqs = [ <!0> 1 <!2> 3 <!4> 5 6 7 8 9 a b c d e f ]
RMGR: Parsing config. configured task 0x0d: [ m:0,ffffffff,ffffffff hm:0,ffffffff,ffffffff t:0,ffff,ffff i:ffff lmcp:ffff s:0,ff,ff mcp:ff prio:10 small:ff ] configured task 0x0a: [ m:0,ffffffff,ffffffff hm:0,ffffffff,ffffffff t:0,ffff,ffff i:ffff lmcp:ffff s:0,ff,ff mcp:ff prio:10 small:ff ] log_mask: 00000000, log_types: 00000000
RMGR: Starting tasks. #05: loading "/l4linux/names" from 02064000-02092ae2 to [ 00240000-002472c0 00248000-00251000 ] starting at entry 00240000 via trampoline page code 00056154 symbols at 3c39d000-3c39f000 (8kB), lines at 3c397000-3c39d000 (24kB) #06: loading "/l4linux/log" from 02093000-020be9e1 to [ 00400000-00407520 00408000-0043d000 ] starting at entry 00400000 via trampoline page code 00057154 symbols at 3c395000-3c397000 (8kB), lines at 3c38f000-3c395000 (24kB) #07: loading "/l4linux/dm_phys" from 020bf000-02125322 to [ 01500000-01513b40 01514000-0151e000 ] starting at entry 01500000 via trampoline page code 00058158 symbols at 3c38a000-3c38f000 (20kB), lines at 3c37d000-3c38a000 (52kB) #08: loading "/l4linux/simple_ts -t 300" from 02126000-0215abb8 to [ 01400000-01408c40 01409000-01417000 ] starting at entry 01400000 via trampoline page code 00059160 symbols at 3c37b000-3c37d000 (8kB), lines at 3c374000-3c37b000 (28kB) #09: loading "/l4linux/l4io --noirq" from 0215b000-02327a5d to [ 00b70000-00b93fc2 00b94000-00bc7000 ] starting at entry 00b70000 via trampoline page code 0005a15c symbols at 3c33c000-3c374000 (224kB), lines at 3c325000-3c33c000 (92kB) #0a: loading "/l4linux/bmodfs" from 02328000-023b7fc3 to [ 01220000-01238750 01239000-01241000 ] passing module /l4linux/libloader.s.so [ 023b8000-02443acb ] passing module /l4linux/run-l4 [ 02444000-0245e829 ] passing module /l4linux/vmlinuz26 [ 0245f000-0317801a ] starting at entry 01220000 via trampoline page code 0005b154 symbols at 3c320000-3c325000 (20kB), lines at 3c310000-3c320000 (64kB) #0e: loading "/l4linux/l4exec" from 03179000-0327108d to [ 01100000-01129f8a 0112a000-01134000 ] starting at entry 01100000 via trampoline page code 0005c154 symbols at 3c308000-3c310000 (32kB), lines at 3c2ef000-3c308000 (100kB) #0f: loading "/l4linux/loader --fprov=BMODFS run-l4" from 03272000-0333c98a to [ 01300000-01328662 01329000-01339000 ] starting at entry 01300000 via trampoline page code 0005d16c symbols at 3c2e8000-3c2ef000 (28kB), lines at 3c2d1000-3c2e8000 (92kB)
simplets| Configured for 300 tasks. loader | L4RM: [PF] read at 0x00000000, eip 01316df5, src F.01 loader | [F.0] l4rm/lib/src/pagefault.c:78:__unknown_pf(): loader | unhandled page fault
--PANIC-------------------------------------------------EIP: 01311aca
so i did disassembled the task to find the problem and here is the result:
/home/fab/ws/l4-linux-env/l4/pkg/thread/lib/src/l4.c:113 01316df4 in (%dx),%eax /home/fab/ws/l4-linux-env/l4/pkg/thread/lib/include/__asm.h:40 01316df1 mov %esp,%ebp <l4th_thread_entry>: 01316de9 lea 0x0(%edi,1),%edi <l4th_thread_entry>: /home/fab/ws/l4-linux-env/l4/pkg/thread/lib/src/l4.c:108 01316df0 push %ebp 01316df1 mov %esp,%ebp /home/fab/ws/l4-linux-env/l4/pkg/thread/lib/include/__asm.h:40 01316df3 xor %ebp,%ebp /home/fab/ws/l4-linux-env/l4/pkg/thread/lib/src/l4.c:113 01316df5 leave 01316df6 jmp 0x1314980 <l4th_thread_start>
so the leave instruction lead to a page fault :
i took a look to the source and here is the fonction concerned :
void l4th_thread_entry(void) { /* clear base pointer to make stack backtrace work */ l4th_clear_base_pointer();
/* nothing special to do in native L4 version, just start the thread */ l4th_thread_start(); }
thanx again for the help.
Fabien
Hi,
On Fri Jun 10, 2005 at 17:28:49 +0200, fabs0028@free.fr wrote:
simplets| Configured for 300 tasks. loader | L4RM: [PF] read at 0x00000000, eip 01316df5, src F.01 loader | [F.0] l4rm/lib/src/pagefault.c:78:__unknown_pf(): loader | unhandled page fault
--PANIC-------------------------------------------------EIP: 01311aca
so i did disassembled the task to find the problem and here is the result:
/home/fab/ws/l4-linux-env/l4/pkg/thread/lib/src/l4.c:113 01316df4 in (%dx),%eax /home/fab/ws/l4-linux-env/l4/pkg/thread/lib/include/__asm.h:40 01316df1 mov %esp,%ebp <l4th_thread_entry>: 01316de9 lea 0x0(%edi,1),%edi <l4th_thread_entry>: /home/fab/ws/l4-linux-env/l4/pkg/thread/lib/src/l4.c:108 01316df0 push %ebp 01316df1 mov %esp,%ebp /home/fab/ws/l4-linux-env/l4/pkg/thread/lib/include/__asm.h:40 01316df3 xor %ebp,%ebp /home/fab/ws/l4-linux-env/l4/pkg/thread/lib/src/l4.c:113 01316df5 leave 01316df6 jmp 0x1314980 <l4th_thread_start>
Thanks for the backtrace, this makes things more clear.
The important part here is that the 'leave' instruction copies ebp to esp and then pops ebp but epb was cleared before. So 'leave' pops with esp=0. So there's no suprise for the page fault at 0.
My gcc versions (Debian 3.3, Debian 3.4, stock 3.4.5-pre, stock 4.0.1-pre and stock gcc-4.1 exp) all place an 'pop %epb' instead of a 'leave' there. You were running FC3, right? Well, no comment...
Anyway, to fix this, just comment out the l4th_clear_base_pointer() call, this should fix the problem.
so the leave instruction lead to a page fault :
i took a look to the source and here is the fonction concerned :
void l4th_thread_entry(void) { /* clear base pointer to make stack backtrace work */ l4th_clear_base_pointer();
/* nothing special to do in native L4 version, just start the thread */ l4th_thread_start(); }
Adam
l4-hackers@os.inf.tu-dresden.de