parent
ab72d68ec8
commit
7c90e22ddd
2 changed files with 47 additions and 13 deletions
|
|
@ -1103,9 +1103,8 @@ proc genMainProc(m: BModule) =
|
|||
"}$N$N" &
|
||||
"void PreMain(void) {$N" &
|
||||
"\tvoid (*volatile inner)(void);$N" &
|
||||
"$1" &
|
||||
"\tinner = PreMainInner;$N" &
|
||||
"$4$5" &
|
||||
"$1" &
|
||||
"\t(*inner)();$N" &
|
||||
"}$N$N"
|
||||
|
||||
|
|
@ -1222,12 +1221,7 @@ proc genMainProc(m: BModule) =
|
|||
else: ropecg(m, "\t#initStackBottomWith((void *)&inner);$N")
|
||||
inc(m.labels)
|
||||
appcg(m, m.s[cfsProcs], PreMainBody, [
|
||||
m.g.mainDatInit, m.g.breakpoints, m.g.otherModsInit,
|
||||
if emulatedThreadVars(m.config) and m.config.target.targetOS != osStandalone:
|
||||
ropecg(m, "\t#initThreadVarsEmulation();$N")
|
||||
else:
|
||||
"".rope,
|
||||
initStackBottomCall])
|
||||
m.g.mainDatInit, m.g.breakpoints, m.g.otherModsInit])
|
||||
|
||||
appcg(m, m.s[cfsProcs], nimMain,
|
||||
[m.g.mainModInit, initStackBottomCall, rope(m.labels)])
|
||||
|
|
@ -1256,21 +1250,32 @@ proc getInitName(m: PSym): Rope =
|
|||
|
||||
proc getDatInitName(m: PSym): Rope = getSomeInitName(m, "DatInit000")
|
||||
|
||||
|
||||
proc registerModuleToMain(g: BModuleList; m: BModule) =
|
||||
if m.s[cfsDatInitProc].len > 0:
|
||||
let datInit = m.module.getDatInitName
|
||||
addf(g.mainModProcs, "N_LIB_PRIVATE N_NIMCALL(void, $1)(void);$N", [datInit])
|
||||
addf(g.mainDatInit, "\t$1();$N", [datInit])
|
||||
|
||||
# Initialization of TLS and GC should be done in between
|
||||
# systemDatInit and systemInit calls if any
|
||||
if sfSystemModule in m.module.flags:
|
||||
if emulatedThreadVars(m.config) and m.config.target.targetOS != osStandalone:
|
||||
add(g.mainDatInit, ropecg(m, "\t#initThreadVarsEmulation();$N"))
|
||||
if m.config.target.targetOS != osStandalone and m.config.selectedGC != gcNone:
|
||||
add(g.mainDatInit, ropecg(m, "\t#initStackBottomWith((void *)&inner);$N"))
|
||||
|
||||
if m.s[cfsInitProc].len > 0:
|
||||
let init = m.module.getInitName
|
||||
addf(g.mainModProcs, "N_LIB_PRIVATE N_NIMCALL(void, $1)(void);$N", [init])
|
||||
let initCall = "\t$1();$N" % [init]
|
||||
if sfMainModule in m.module.flags:
|
||||
add(g.mainModInit, initCall)
|
||||
elif sfSystemModule in m.module.flags:
|
||||
add(g.mainDatInit, initCall) # systemInit must called right after systemDatInit if any
|
||||
else:
|
||||
add(g.otherModsInit, initCall)
|
||||
|
||||
if m.s[cfsDatInitProc].len > 0:
|
||||
let datInit = m.module.getDatInitName
|
||||
addf(g.mainModProcs, "N_LIB_PRIVATE N_NIMCALL(void, $1)(void);$N", [datInit])
|
||||
addf(g.mainDatInit, "\t$1();$N", [datInit])
|
||||
|
||||
proc genDatInitCode(m: BModule) =
|
||||
## this function is called in cgenWriteModules after all modules are closed,
|
||||
## it means raising dependency on the symbols is too late as it will not propogate
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue