On Sat, 2003-03-29 at 07:52, Fabian Sturm wrote:
Its true that I don't have any serial port, but even with this function it doesn't boot any further.
I now tried to debug more of my problem with puts. Unfortunately I didn't have much results. I definitely now can say that I reach the last line of void Timer::init() in ia32/timer-rtc.c. (If I don't have sideeffects of puts and it is not buffered)
There should be no side effects on puts, and the output is completely unbuffered.
I'm not sure which constructors are called after the Timer, but I'll look for it tomorrow.
What is initialized next I can only guess. It seems to be some kind of linker magic with the minilib/construction.c which calls all the functions which are declared with STATIC_INITIALIZER_P?
The "magic" in construction.c does simply run all C++ and C constructors, that is not our invention but C standard. The STATIC_INITIALIZE[R][_P] macros declare certain functions as such constructors. The ...INITIALIZER (you see the R) macros are for declaring a special function as constructor and the variants without the R are for static initialization of classes that must have a static init method per convention. The last thing is the _P at the end, these macros take a second argument specifing the priority of the constructor (needed if the order of construction is relevant).
I have put a puts in uart_console_init() before the line with the if strstr -noserial. But this already doesn't seem to be called. Or it is just not compiled in?
I saw you have enabled KDB (GDB debugging stub) in your config, and in that case the uart_console_init() function is indeed not called because the GDB stub is responsible for handling the UART, if you have no UART you should say 'no' to the GDB debugger stub (KDB) option, because it tries to enable the UART on bootup. (It should not with -noserial, but it is safer to say 'no' for your setup.)
I have also a puts in kdb.cpp in the void kdb::init() function. But it is never reached.
I'll look for the concrete bootup sequence tomorrow and try to give some further advice.
Here I have some problems, why is the macro called with STATIC_INITIALIZE_P(kdb, KDB_INIT_PRIO); but only a kdb::init exists.
see above.
And in uart_console.cpp it is STATIC_INITIALIZER_P(uart_console_init ,UART_INIT_PRIO); and a function uartconsole_init() exists.
see above.
Hmm I am little bit confused now and would appreciate some advice for debbuging.
I hope there I could clear some confusions.