Hello, Short story: something is clearing kernel_page_dir.
Long story follows. :) On Wed, Jun 09, 2010 at 08:24:55AM +0200, Samuel Thibault wrote: > > These are correct. So that must the the pagetable that is incorrect. > Check out cr3 and such. > While trying DDE I came across this problem too. I run a few tests and your guess is apparently correct: +-------+--------+--------+---------+------+-----+---------+ | Test# | eip | *esp | kpd | kpd' | CR3 | CR3' | + ------+--------+--------+---------+------+-----+---------+ | 1 | 107e92 | 1436c7 | --- | --- | --- | --- | +-------+--------+--------+---------+------+-----+---------+ | 2 | 1051f9 | --- | 1371000 | --- | kpd | 2e8f000 | +-------+--------+--------+---------+------+-----+---------+ | 3 | 107e92 | 1436c7 | 1371000 | 0 | kpd | 219a000 | +-------+--------+--------+---------+------+-----+---------+ | 4 | 107e92 | 1436c7 | 1371000 | 0 | kpd | 2d18000 | +-------+--------+--------+---------+------+-----+---------+ Where kpd is the contraction of kernel_page_dir, ' means after the trap and --- that there is no available information. Meaning of some addresses: # addr2line -e /boot/gnumach 0x107392 0x1436c7 0x1051f9 ...gnumach/i386/i386/spl.S:217 ...gnumach/i386/i386at/interrupt.S:40 ...gnumach/i386/i386at/kdasm.S:113 CR3 value was taken from qemu's monitor console: (qemu) info registers And this is where kpd was read from: # nm /boot/gnumach | grep kernel_page_dir 001aa2b0 B kernel_page_dir All the test were done by running the following commands: # settrans -acfgp /servers/drivers/eth0 /hurd/dde/dde_ne2k_pci ... # settrans -acfgp /dev/eth0 /hurd/dde/devnode eth0 \ > -M /servers/drivers/eth0 ... # settrans -acfgp /servers/socket/2 /hurd/dde/pfinet -i /dev/eth0 \ > -a 10.0.2.16 -g 10.0.2.2 -m 255.255.255.0 ... # wget www.google.com --2010-08-30 02:18:19-- http://www.google.com/ Resolving www.google.com... <<<<<trap point During the first test I collected the values of the registers. They are similar to what Zheng Da showed before. --------- Kernel General protection trap, eip 0x107e92 kernel: General protection (13), code=25a Stopped at 0x107e92: ret db> trace 0x107e92(646565,656b6f70,6761705f,66007365,5f656572) no memory is assigned to address 6c610077 db> show registers cs 0x8 ds 0x10 es 0x10 fs 0x10 gs 0x10 ss 0x10 eax 0x5 ecx 0x1c edx 0x5 ebx 0x44520 esp 0x1a9f20 ebp 0x12dbd1c esi 0x44560 edi 0x3c eip 0x107e92 efl 0x297 db> examine 0x1a9f20 1436c7 db> --------- The second test went really wrong for some reason and I couldn't get all the information. ----------- Kernel General protection trap, eip 0x1051f9rotection trap, eip 0x107e92 kernel: General protection (13), code=202 Stopped at 0x1051f9: repe movsw (%esi),%es:(%edi) db> trace Bad character ']' ? db> show registers Bad character ']' ? db> ---------