On 06/09/2013 05:06 PM, Daniel Müller wrote:
Hi,
I tried booting a 64bit hello world program on L4/Fiasco but that fails with a region overlap:
============================================= xc: info: VIRTUAL MEMORY ARRANGEMENT: Loader: 0000000000100000->000000000019dd88 TOTAL: 0000000000000000->000000007f800000 ENTRY ADDRESS: 0000000000100000 xc: info: PHYSICAL MEMORY ALLOCATION: 4KB PAGES: 0x0000000000000200 2MB PAGES: 0x00000000000003fb 1GB PAGES: 0x0000000000000000 Daemon running with PID 9320 net0: 00:16:3e:72:79:e5 using rtl8139 on PCI00:04.0 (open) [Link:up, TX:0 TXE:0 RX:0 RXE:0] DHCP (net0 00:16:3e:72:79:e5)... ok net0: 192.168.178.200/255.255.255.0 gw 192.168.178.54 Booting from PXE menu boot PXEBS (net0 type 128).... ok Next server: 192.168.178.54 Filename: pxeboot.0 tftp://192.168.178.54/pxeboot.0... ok
L4 Bootstrapper Build: #7 Sun Jun 9 16:51:46 CEST 2013, x86-64, 4.6.3 RAM: 0000000000000000 - 000000000009a7ff: 618kB RAM: 0000000000100000 - 000000007f7b9fff: 2087656kB Total RAM: 2039MB New region for list regions: [ 20d000, 4c62c9] { 2b92ca} Root Module overlaps with: [ 2d0080, 2e45c7] { 14548} Boot bootstrap
This is problem is caused by the way bootstrap works on 64-bit systems. If there is a module at 0x2d0000, bootstrap will overwrite that with its own 64-bit code and then figure out later that things are b0rken.
I don't know a good workaround for this, except having a bootloader that moves modules out of the way. You might try bender in my firewire toolchain: https://github.com/TUD-OS/morbo
It is a multiboot 'kernel' whose purpose it is to find PCI serial controllers, but it will also move any remaining modules to high memory before executing them, so bootstrap will not destroy them.
Julian