further code/data footprint reductions....
diff --git a/packages/xdc/runtime/Startup.c b/packages/xdc/runtime/Startup.c
index ba8ccc1..725bfd3 100644
--- a/packages/xdc/runtime/Startup.c
+++ b/packages/xdc/runtime/Startup.c
@@ -20,6 +20,8 @@
/*
* ======== Startup_exec ========
*/
+
+/*
Void Startup_exec()
{
Int i;
@@ -40,6 +42,7 @@
Startup_lastFxns[i]();
}
}
+*/
/*
* ======== Startup_rtsDone ========
@@ -54,8 +57,6 @@
*/
Void Startup_startMods(Int state[], Int len)
{
-// static const Char STR_MSG[] = "xdc.runtime.Startup: 'maxPasses' exceeded";
-
Int curPass;
Int i;
Bool done;
@@ -81,6 +82,7 @@
}
done &= (state[i] == Startup_DONE);
}
+
if (done) {
break;
}
diff --git a/packages/xdc/runtime/Startup.xdt b/packages/xdc/runtime/Startup.xdt
index 47c57aa..3adfa13 100644
--- a/packages/xdc/runtime/Startup.xdt
+++ b/packages/xdc/runtime/Startup.xdt
@@ -79,3 +79,32 @@
`cname`();
% }
}
+
+/*
+ * ======== xdc_runtime_Startup_exec__F ========
+ */
+xdc_Void xdc_runtime_Startup_exec__F()
+{
+ if (xdc_runtime_Startup_Module__state__V.execFlag) {
+ return;
+ }
+
+ xdc_runtime_Startup_Module__state__V.execFlag = TRUE;
+
+ % for (var i = 0; i < Startup.firstFxns.length; i++) {
+ `Startup.firstFxns[i].$name`();
+ % }
+
+ % if (Startup.maxPasses > 0) {
+ (xdc_runtime_Startup_execImpl__C)();
+ % }
+ % else {
+ % for (var i = 0; i < Startup.sfxnTab.length; i++) {
+ `Startup.sfxnTab[i].$name`(xdc_runtime_Startup_NOTDONE);
+ % }
+ % }
+
+ % for (var i = 0; i < Startup.lastFxns.length; i++) {
+ `Startup.lastFxns[i].$name`();
+ % }
+}
diff --git a/packages/xdc/runtime/System.c b/packages/xdc/runtime/System.c
index 25972c5..b6f699a 100644
--- a/packages/xdc/runtime/System.c
+++ b/packages/xdc/runtime/System.c
@@ -58,13 +58,18 @@
Bool System_atexit(System_AtexitHandler handler)
{
IArg key;
- Bool status = TRUE;
+ Bool status;
+ if (System_maxAtexitHandlers == 0) {
+ return TRUE;
+ }
+
key = Gate_enterSystem();
if (module->numAtexitHandlers < System_maxAtexitHandlers) {
module->atexitHandlers[module->numAtexitHandlers] = handler;
module->numAtexitHandlers++;
+ status = TRUE;
}
else {
status = FALSE;
@@ -109,9 +114,12 @@
Gate_enterSystem();
- for (i = module->numAtexitHandlers; i > 0; i--) {
- (module->atexitHandlers[i - 1])(module->exitStatus);
+ if (System_maxAtexitHandlers > 0) {
+ for (i = module->numAtexitHandlers; i > 0; i--) {
+ (module->atexitHandlers[i - 1])(module->exitStatus);
+ }
}
+
System_SupportProxy_exit(module->exitStatus);
}