2016-09-23 4:47 GMT-04:00 Christian Helmuth <christian.helmuth@...1...>:
Hello Paul,
I like the approach of narrowing the issue with 'while(1);' and suggest to go further (see below).
On Thu, Sep 22, 2016 at 10:02:51PM -0400, Paul Dufresne wrote:
/**** extern "C" INIT REGPARM (1) 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);
// Console::print ("paul1"); for (void (**func)() = &CTORS_G; func != &CTORS_E; (*func++)()) ; while(1); ****/
I'd move the 'while(1);' into the for loop like follows.
enum { STOP_AT = 0U }; unsigned i = 0; for (void (**func)() = &CTORS_C; func != &CTORS_G; ) { if (i == STOP_AT) while (1) ; ; (*func++)(); ++i; }
In my case the ctors table has only 2 entries.
Greets
With STOP_AT == 1 it hangs, With STOP_AT == 2 it reboots.
I think I will mail you my hypervisor file (now compiled with STOP_AT == 1) in case you want to check it.