Genode 16.08 nova.iso rebooting on real Core 2 Duo after relocating modules

Paul Dufresne dufresnep at ...9...
Thu Sep 22 00:48:02 CEST 2016

2016-09-21 8:20 GMT-04:00 Christian Helmuth <christian.helmuth at ...1...>:
>> Need 05df2000 bytes to relocate modules.
>> Relocating to 7980d000:
>> Copying 483168 bytes...
> [...]
>> Copying 114820 bytes...
> If my calculations from this output are correct the boot modules cover
> RAM from 0x7980d000 to 0x7f5e9000. Maybe there's a collision in this
> region?
>> paul at ...445...:~$ cat /proc/meminfo
>> MemTotal:        2041768 kB
> Could you please compare the region above against
>   cat /proc/iomem'
> and check if it fits completely into "System RAM"?
Ehhh... At first I thought there was a problem... but i think it goes
just before ACPI Non-volatile Storage
00100000-7f5ffbff : System RAM
  01000000-015cb5d4 : Kernel code
  015cb5d5-01b10aff : Kernel data
  01c67000-01d34fff : Kernel bss
7f5ffc00-7f601bff : ACPI Non-volatile Storage
7f601c00-7f603bff : RAM buffer
7f603c00-7fffffff : reserved
  7f800000-7ff7ffff : Graphics Stolen Memory

It sure looks like a Nova bug (had time to load modules, but not to
show Nova welcome message).
In src/init I see:
void init (mword mbi)
// Setup 0-page and 1-page
memset (reinterpret_cast<void *>(&PAGE_0), 0, PAGE_SIZE);
memset (reinterpret_cast<void *>(&PAGE_1), ~0u, PAGE_SIZE);
for (void (**func)() = &CTORS_G; func != &CTORS_E; (*func++)()) ;
Hip::build (mbi);
for (void (**func)() = &CTORS_C; func != &CTORS_G; (*func++)()) ;
// Now we're ready to talk to the world
Console::print ("\fNOVA Microhypervisor v%d-%07lx (%s): %s %s [%s]\n",
CFG_VER, reinterpret_cast<mword>(&GIT_VER), ARCH, __DATE__, __TIME__,

I believe Hip::(build(mbr) reads the module, and I suppose do the
relocations shown.

I am thinking about adding some Console::print inside the loop:
for (void (**func)() = &CTORS_C; func != &CTORS_G; (*func++)()) ;
which I barely understand as calling each functions in an array of
Constructors (CTORS_C).

Wish I would knew where CTORS_C is defined, but I guess I need not to know.
I am not so good with coding... so it might be just to the limit of my
abilities to do and test that.

More information about the users mailing list