Set Hwi.excHandlerFunc earlier, before it's sealed
authorRobert Tivy <rtivy@ti.com>
Fri, 6 Jun 2014 18:18:53 +0000 (11:18 -0700)
committerRobert Tivy <rtivy@ti.com>
Tue, 10 Jun 2014 22:50:33 +0000 (15:50 -0700)
One of the newly-used SYS/BIOS or XDC releases introduced a change
that caused the setting of Hwi.excHandlerFunc in module$static$init()
to fail, due to it being "sealed" at that time.  Moving it to an
earlier-invoked module method solves this issue, albeit with a caveat
that is mentioned above where the Hwi delegate is retrieved.

This issue was seen when moving from
xdctools_3_25_05_94 -> xdctools_3_30_01_25
bios_6_37_02_27 -> bios_6_40_01_15

packages/ti/deh/Deh.xs

index ab4911af95373cc75042322091f039374edf7c6f..baa024d8b4949e224f5f1e4ae468bd4b6b61631a 100644 (file)
 
 var Deh = null;
 var MultiProc = null;
-var Hwi = null;
+
+function module$meta$init()
+{
+    var Settings = xdc.module("ti.sysbios.family.Settings");
+    var Hwi;
+
+    /* Only process during "cfg" phase */
+    if (xdc.om.$name != "cfg") {
+        return;
+    }
+
+    Deh = this;
+
+    /*
+     * It's possible for the Hwi delegate to later be assigned to something
+     * other than what it is at the time of this method's execution, but
+     * we know there exists only one that can be used at the time of this
+     * comment's writing (SYS/BIOS will never have more than one for a
+     * particular architecture).  If another choice comes into existence
+     * at some future time then we must take that into account here, since
+     * the Hwi delegate to which we're assigning here might not be the one
+     * in use at the end of the configuration.
+     */
+    Hwi = xdc.useModule(Settings.getDefaultHwiDelegate());
+    if ((Program.build.target.name.match(/M3/)) ||
+        (Program.build.target.name.match(/M4/))) {
+        /* Need to do this early before it gets sealed */
+        Hwi.excHandlerFunc = Deh.excHandler;
+    }
+}
 
 /*
  *  ======== module$use ========
@@ -47,13 +76,9 @@ function module$use()
     var Swi = null;
     var Task = null;
     var Exception = null;
-    var Settings = xdc.module("ti.sysbios.family.Settings");
-
-    Deh = this;
 
     xdc.useModule('xdc.runtime.System');
 
-    Hwi = xdc.useModule(Settings.getDefaultHwiDelegate());
     MultiProc = xdc.module('ti.sdo.utils.MultiProc');
 
     if ((Program.build.target.name.match(/C64T/)) ||
@@ -100,6 +125,5 @@ function module$static$init(mod, params)
     else {
         mod.isrStackSize = Program.stack;
         mod.isrStackBase = $externPtr('__TI_STACK_BASE');
-        Hwi.excHandlerFunc = Deh.excHandler;
     }
 }