diff options
author | Emery Hemingway <emery@vfemail.net> | 2018-05-17 12:56:18 +0200 |
---|---|---|
committer | Emery Hemingway <emery@vfemail.net> | 2018-06-07 07:21:20 +0200 |
commit | 22f714585b943d0b2457c66a78917113072f4503 (patch) | |
tree | f346be91bab4f267527043057ec3a5c5276eb7af /compiler/cgen.nim | |
parent | bf394ed1a1d27d8d38d4bc386946e3442736cd75 (diff) | |
download | Nim-22f714585b943d0b2457c66a78917113072f4503.tar.gz |
Native access to Genode environment
Add a 'GenodeEnv' type and a 'componentConstructHook' to the system module. The 'componentConstructHook' allows for detection of POSIX style programs that exit implicitly or native Genode components that initialize to serve RPC requests and OS signals. This hook takes a 'GenodeEnv' argument so that the environment interface is passed cleanly to application code after globals are initialized. This is an typed pointer to a C++ object, procedures for accessing the environment will be available from a Nimble library and not included in the standard library. The standard library has an internal pointer to the environment object but this is not for external use, the undocumented global environment pointer has been removed.
Diffstat (limited to 'compiler/cgen.nim')
-rw-r--r-- | compiler/cgen.nim | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/compiler/cgen.nim b/compiler/cgen.nim index 6a16474c0..e749c78db 100644 --- a/compiler/cgen.nim +++ b/compiler/cgen.nim @@ -1035,14 +1035,19 @@ proc genMainProc(m: BModule) = "}$N$N" GenodeNimMain = - "Libc::Env *genodeEnv;$N" & + "extern Genode::Env *nim_runtime_env;$N" & + "extern void nim_component_construct(Genode::Env*);$N$N" & NimMainBody ComponentConstruct = "void Libc::Component::construct(Libc::Env &env) {$N" & - "\tgenodeEnv = &env;$N" & + "\t// Set Env used during runtime initialization$N" & + "\tnim_runtime_env = &env;$N" & "\tLibc::with_libc([&] () {$N\t" & + "\t// Initialize runtime and globals$N" & MainProcs & + "\t// Call application construct$N" & + "\t\tnim_component_construct(&env);$N" & "\t});$N" & "}$N$N" @@ -1059,6 +1064,7 @@ proc genMainProc(m: BModule) = elif platform.targetOS == osGenode: nimMain = GenodeNimMain otherMain = ComponentConstruct + m.includeHeader("<libc/component.h>") elif optGenDynLib in m.config.globalOptions: nimMain = PosixNimDllMain otherMain = PosixCDllMain |