fix for XDCTOOLS-428
diff --git a/src/packages/xdc/rov/Program.xs b/src/packages/xdc/rov/Program.xs
index d8076d9..7aac796 100644
--- a/src/packages/xdc/rov/Program.xs
+++ b/src/packages/xdc/rov/Program.xs
@@ -1407,14 +1407,23 @@
     }
     return (jsType);
 }
+
 /*
  *  ======== lookupType ========
  */
-function lookupType(type)
+function lookupType(typename)
 {
-    var javaType = Program.ofReader.getType(type);
+    var javaType = Program.ofReader.getType(typename);
     if (javaType == null) {
-        return null;
+        /* try one of the standard C99 types */
+        var typespec = _c99Type(typename);
+        if (typespec == null) {
+            return null;
+        }
+        /* typespec is already a native JavaScript object, no need to call
+         * _convertType.
+         */
+        return (typespec)
     }
     else {
         return (_convertType(javaType));
@@ -1720,6 +1729,176 @@
 }
 
 /*
+ *  ======== _c99Type ========
+ *  Returns a typespec for most of the standard C99 types. This function is
+ *  called if the description of the type is not available in .dwarf_info.
+ */
+function _c99Type(typename) {
+    var spec = {
+        size: null,
+        encoding: null,
+        member: null,
+        offset: null,
+        elnum: null
+    };
+
+    var elfTarget = Program.ofReader.getTarget();
+    var stdTypes = Program.build.target.stdTypes;
+    switch (typename) {
+        case "uint8_t":
+            if (elfTarget.charsize > 1) {
+                return (null);
+            }
+            spec.encoding = 7;
+            spec.size = 1;
+            return (spec);
+        case "int8_t":
+            if (elfTarget.charsize > 1) {
+                return (null);
+            }
+            spec.encoding = 5;
+            spec.size = 1;
+            return (spec);
+        case "uint16_t":
+            spec.encoding = 7;
+            spec.size = 16/(elfTarget.charsize * 8);
+            return (spec);
+        case "int16_t":
+            spec.encoding = 5;
+            spec.size = 16/(elfTarget.charsize * 8);
+            return (spec);
+        case "uint32_t":
+            spec.encoding = 7;
+            spec.size = 32/(elfTarget.charsize * 8);
+            return (spec);
+        case "int32_t":
+            spec.encoding = 5;
+            spec.size = 32/(elfTarget.charsize * 8);
+            return (spec);
+        case "uint64_t":
+            spec.encoding = 7;
+            spec.size = 64/(elfTarget.charsize * 8);
+            return (spec);
+        case "int64_t":
+            spec.encoding = 5;
+            spec.size = 64/(elfTarget.charsize * 8);
+            return (spec);
+
+        case "uint_least8_t":
+            spec.encoding = 7;
+            spec.size = stdTypes.t_Int8.size;;
+            return (spec);
+        case "int_least8_t":
+            spec.encoding = 5;
+            spec.size = stdTypes.t_Int8.size;
+            return (spec);
+        case "uint_least16_t":
+            spec.encoding = 7;
+            spec.size = stdTypes.t_Int16.size;
+            return (spec);
+        case "int_least16_t":
+            spec.encoding = 5;
+            spec.size = stdTypes.t_Int16.size;
+            return (spec);
+        case "uint_least32_t":
+            spec.encoding = 7;
+            spec.size = stdTypes.t_Int32.size;
+            return (spec);
+        case "int_least32_t":
+            spec.encoding = 5;
+            spec.size = stdTypes.t_Int32.size;
+            return (spec);
+        case "uint_least64_t":
+            spec.encoding = 7;
+            spec.size = stdTypes.t_Int64.size;
+            return (spec);
+        case "int_least64_t":
+            spec.encoding = 5;
+            spec.size = stdTypes.t_Int64.size;
+            return (spec);
+        case "unsigned char":
+        case "char":
+            /* This is implementation specific for "char". It is an unsigned
+             * encoding because that's how it is on Arm.
+             */
+            spec.encoding = 8;
+            spec.size = stdTypes.t_Char.size;
+            return (spec);
+        case "signed char":
+            spec.encoding = 6;
+            spec.size = stdTypes.t_Char.size;
+            return (spec);
+        case "unsigned short":
+            spec.encoding = 7;
+            spec.size = stdTypes.t_Short.size;
+            return (spec);
+        case "signed short":
+        case "short":
+            spec.encoding = 5;
+            spec.size = stdTypes.t_Short.size;
+            return (spec);
+        case "unsigned":
+        case "unsigned int":
+            spec.encoding = 7;
+            spec.size = stdTypes.t_Int.size;
+            return (spec);
+        case "signed int":
+        case "int":
+            spec.encoding = 5;
+            spec.size = stdTypes.t_Int.size;
+            return (spec);
+        case "unsigned long":
+        case "unsigned long int":
+            spec.encoding = 7;
+            spec.size = stdTypes.t_Long.size;
+            return (spec);
+        case "signed long":
+        case "long":
+        case "long int":
+            spec.encoding = 5;
+            spec.size = stdTypes.t_Long.size;
+            return (spec);
+        case "unsigned long long":
+        case "unsigned long long int":
+            spec.encoding = 7;
+            spec.size = stdTypes.t_LLong.size;
+            return (spec);
+        case "signed long long":
+        case "long long":
+        case "long long int":
+            spec.encoding = 5;
+            spec.size = stdTypes.t_LLong.size;
+            return (spec);
+        case "float":
+            spec.encoding = 4;
+            spec.size = stdTypes.t_Float.size;
+            return (spec);
+        case "double":
+            spec.encoding = 4;
+            spec.size = stdTypes.t_Double.size;
+            return (spec);
+        case "long double":
+            spec.encoding = 4;
+            spec.size = stdTypes.t_LDouble.size;
+            return (spec);
+        case "uintptr_t":
+            spec.encoding = 7;
+            spec.size = stdTypes.t_IArg.size;
+            return (spec);
+        case "intptr_t":
+            spec.encoding = 5;
+            spec.size = stdTypes.t_IArg.size;
+            return (spec);
+        case "size_t":
+            spec.encoding = 7;
+            spec.size = stdTypes.t_SizeT.size;
+            return (spec);
+        default:
+            return (null);
+    }
+}
+
+/*
  *  ======== _getTabArgs ========
  *  Extract optional arguments from parameters passed to get a view
  */