fix for XDCTOOLS-397 and XDCTOOLS-413
diff --git a/src/packages/xdc/rov/Model.xs b/src/packages/xdc/rov/Model.xs
index 8f09ad4..4b3671b 100644
--- a/src/packages/xdc/rov/Model.xs
+++ b/src/packages/xdc/rov/Model.xs
@@ -398,65 +398,12 @@
         if (elfTarget.bigendian == true) {
             targ.model.endian = "big";
         }
-        function getSize(typename) {
-            var tspec =
-                xdc.module("xdc.rov.Model").$private.ofReader.getType(typename);
-            var sz;
-            if (tspec != null) {
-                sz = tspec.size;
-            }
-            /* All the special cases below are because of IAR, which doesn't
-             * always define all basic types.
-             */
-            else if (typename == "long long") {
-                return (getSize("unsigned long long"));
-            }
-            else if (typename == "short") {
-                return (getSize("unsigned short"));
-            }
-            else if (typename.indexOf("int") == 0) {
-                return (getSize("u" + typename));
-            }
-            else if (typename.indexOf("least32") != -1) {
-                return 4;
-            }
-            else if (typename.indexOf("least64") != -1) {
-                return 8;
-            }
-            else if (typename == "float" || typename == "double"
-                || typename == "long double") {
-                    /* some toolchains (IAR, for example) don't always define
-                     * floating point types.
-                     */
-	        var Program = xdc.useModule('xdc.rov.Program');
-                Program.debugPrint("xdc.rov.Model: ELF file doesn't define "
-                    + typename);
-            }
-            else {
-	        var Program = xdc.useModule('xdc.rov.Program');
-                Program.debugPrint("xdc.rov.Model: ELF file doesn't define "
-                    + typename);
-            }
-            return (sz);
+        var stdTypes = recap.stdTypes[elfTarget.machine];
+        if (stdTypes == null) {
+            throw new Error("ROV cannot detect target architecture for the "
+                + "executable " + execPath);
+            );
         }
-        var stdTypes = {
-            t_Char:    {size: getSize("unsigned char")},
-            t_Double:  {size: getSize("double")},
-            t_Float:   {size: getSize("float")},
-            t_Fxn:     {size: elfTarget.ptrsize},
-            t_IArg:    {size: getSize("intptr_t")},
-            t_Int:     {size: getSize("int")},
-            t_Int8:    {size: getSize("int_least8_t")},
-            t_Int16:   {size: getSize("int_least16_t")},
-            t_Int32:   {size: getSize("int_least32_t")},
-            t_Int64:   {size: getSize("int_least64_t")},
-            t_LDouble: {size: getSize("long double")},
-            t_LLong:   {size: getSize("long long")},
-            t_Long:    {size: getSize("long")},
-            t_Ptr:     {size: elfTarget.ptrsize},
-            t_Short:   {size: getSize("short")},
-            t_Size:    {size: getSize("size_t")}
-        };
         targ.stdTypes = stdTypes;
         build.target = targ;
         recap.build = build;
diff --git a/src/packages/xdc/rov/noruntime.rov.xs b/src/packages/xdc/rov/noruntime.rov.xs
index cb09ec8..062cbdd 100644
--- a/src/packages/xdc/rov/noruntime.rov.xs
+++ b/src/packages/xdc/rov/noruntime.rov.xs
@@ -6055,4 +6055,72 @@
     __o['$name'] = String(java.net.URLDecoder.decode('ti.targets.arm.elf.M4F%2FversionMap', 'UTF-8'))
 
 delete __o
-delete __obj
\ No newline at end of file
+delete __obj
+
+this.stdTypes = [];
+
+/* ARM */
+this.stdTypes[40] = {
+        t_IArg          : { size: 4, align: 4 },
+        t_Char          : { size: 1, align: 1 },
+        t_Double        : { size: 8, align: 8 },
+        t_Float         : { size: 4, align: 4 },
+        t_Fxn           : { size: 4, align: 4 },
+        t_Int           : { size: 4, align: 4 },
+        t_Int8          : { size: 1, align: 1 },
+        t_Int16         : { size: 2, align: 2 },
+        t_Int32         : { size: 4, align: 4 },
+        t_Int64         : { size: 8, align: 8 },
+        t_Long          : { size: 4, align: 4 },
+        t_LDouble       : { size: 8, align: 8 },
+        t_LLong         : { size: 8, align: 8 },
+        t_Ptr           : { size: 4, align: 4 },
+        t_Short         : { size: 2, align: 2 },
+        t_Size          : { size: 4, align: 4 }
+};
+
+/* C6000 */
+this.stdTypes[140] = this.stdTypes[40];
+
+/* C2800 ELF */
+this.stdTypes[141] = {
+        t_IArg          : { size: 2, align: 2 },
+        t_Char          : { size: 1, align: 1 },
+        t_Double        : { size: 4, align: 4 },
+        t_Float         : { size: 2, align: 2 },
+        t_Fxn           : { size: 2, align: 2 },
+        t_Int           : { size: 1, align: 1 },
+        t_Int8          : { size: 1, align: 1 },
+        t_Int16         : { size: 1, align: 1 },
+        t_Int32         : { size: 2, align: 2 },
+        t_Int64         : { size: 4, align: 2 },
+        t_Long          : { size: 2, align: 2 },
+        t_LDouble       : { size: 2, align: 2 },
+        t_LLong         : { size: 4, align: 2 },
+        t_Ptr           : { size: 2, align: 2 },
+        t_Short         : { size: 1, align: 1 },
+        t_Size          : { size: 2, align: 2 },
+};
+
+/* C71 */
+this.stdTypes[145] = {
+        t_IArg          : { size: 8, align: 8 },
+        t_Char          : { size: 1, align: 1 },
+        t_Double        : { size: 8, align: 8 },
+        t_Float         : { size: 4, align: 4 },
+        t_Fxn           : { size: 8, align: 8 },
+        t_Int           : { size: 4, align: 4 },
+        t_Int8          : { size: 1, align: 1 },
+        t_Int16         : { size: 2, align: 2 },
+        t_Int32         : { size: 4, align: 4 },
+        t_Int64         : { size: 8, align: 8 },
+        t_Long          : { size: 8, align: 8 },
+        t_LDouble       : { size: 8, align: 8 },
+        t_LLong         : { size: 8, align: 8 },
+        t_Ptr           : { size: 8, align: 8 },
+        t_Short         : { size: 2, align: 2 },
+        t_Size          : { size: 8, align: 8 },
+};
+
+/* Arm 64 */
+this.stdTypes[183] = this.stdTypes[145];