Init startup sequence
Stefan Kalkowski
stefan.kalkowski at ...1...
Fri May 21 15:41:10 CEST 2010
Hello Steffen
On Friday, 21. May 2010 14:44:41 Steffen Liebergeld wrote:
> Now init(1) calls init(0), does some initialization in finally gets
> stuck in __cxa_guard_acquire. The stack trace looks like this:
what do you mean with 'it gets stuck', does it spin at:
base/src/base/cxx/guard.cc:37 ?
> It is unclear to me, why init has to grab a lock. Is it using data
> structures that reside in shared memory with core? What should happen next?
This is a generic implementation of the c++ support library for all
applications, regardless of running single- or multi-threaded (in fact init
also becomes multi-threaded after its first initialization).
The functions __cxa_guard_aquire and __cxa_guard_release are used to guard the
construction of static objects in C++ and are required by gcc. Imagine a
static single object used by different threads (singleton pattern), like the
Genode::env() function returns one:
Env *env()
{
static Genode::Platform_env _env;
return &_env;
}
This pattern is often found in Genode components, which prevailing run
multi-threaded, that's why you need this lock-like mechanism.
regards Stefan
--
Stefan Kalkowski
Genode Labs Developer
http://genode-labs.com
More information about the users
mailing list