Hello, Genode
I'm trying to understand how env() and env()->parent() work from the source code.
First, I find the body of env function located at:
genode/base/src/base/env/env.cc
and looks like this:
namespace Genode {
/*
* Request pointer to static environment of the Genode application
*/
Env *env()
{
/*
* By placing the environment as static object here, we ensure that its
* constructor gets called when this function is used the first time.
*/
static Genode::Platform_env _env;
return &_env;
}
}
env() function looks like, at namespace Genode, it returns the pointer of singleton object _env (static Genode::Platform_env _env).
But, when I call env() at different places, it returns different addresses.
For instance,
- at genode/base/src/core/main.cc
- at dde_linux/src/drivers/usb/nic/nic.cc,
env() function returns different addresses like the following
- at genode/base/src/core/main.cc, it returns 801f01a0
- at dde_linux/src/drivers/usb/nic/nic.cc, it returns 10b716c.
For me, it is very strange, because both functions returns the address of a singleton object _env.
I think I miss some points and appreciate if you fill the gap.
And, one more thing: I was trying to print some debug message at Env *env() function like the following.
Env *env()
{
/*
* By placing the environment as static object here, we ensure that its
* constructor gets called when this function is used the first time.
*/
static Genode::Platform_env _env;
PDBG("Genode::env() function called"); // my debug message
return &_env;
}
And, when I run the genode, it always halt at core and child init is not running.
Do you have any clues?
Thanks always,
Jaeyong