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);

 }