* fixed GCC 4.4.0 mingw compilation:
[fw/sdcc] / src / cdbFile.c
index 1e8e277bde8380d4182156cf46acf5bd9a427cc6..149fac225d7592f8c302b35ea6e6343ef95be93e 100644 (file)
@@ -45,6 +45,33 @@ DEBUGFILE cdbDebugFile =
 FILE *cdbFilePtr = NULL;
 char *cdbModuleName = NULL;
 
+/******************************************************************
+ * spacesToUnderscores - replace all non alpha-numerics with
+ * underscores
+ *
+ *
+ *****************************************************************/
+
+static char *
+spacesToUnderscores (char *dest, const char *src, size_t len)
+{
+  unsigned int i;
+  char *p;
+
+  assert(dest != NULL);
+  assert(src != NULL);
+  assert(len > 0);
+
+  --len;
+  for (p = dest, i = 0; *src != '\0' && i < len; ++src, ++i) {
+    *p++ = (isspace((unsigned char)*src) || (*src == '-')) ? '_' : *src;
+  }
+  *p = '\0';
+
+  return dest;
+}
+
+
 /******************************************************************
  *
  *
@@ -127,6 +154,7 @@ int cdbWriteEndFunction(symbol *pSym, iCode *ic, int offset)
       sprintf (debugSym, "C$%s$%d$%d$%d",
               FileBaseName (ic->filename), pSym->lastLine,
               ic->level, ic->block);
+      spacesToUnderscores (debugSym, debugSym, sizeof (debugSym));
       emitDebuggerSymbol (debugSym);
     }
 
@@ -263,6 +291,7 @@ int cdbWriteCLine(iCode *ic)
   sprintf (debugSym, "C$%s$%d$%d$%d", 
           FileBaseName (ic->filename), ic->lineno,
           ic->level, ic->block);
+  spacesToUnderscores (debugSym, debugSym, sizeof (debugSym));
   emitDebuggerSymbol (debugSym);
 
   return 1;
@@ -351,7 +380,7 @@ int cdbWriteBasicSymbol(symbol *sym, int isStructSym, int isFunc)
   fprintf (cdbFilePtr, "),");
 
   /* CHECK FOR REGISTER SYMBOL... */ 
-  if(sym->reqv)
+  if (!sym->allocreq && sym->reqv)
   {
     int a;
     symbol *TempSym = OP_SYMBOL (sym->reqv);
@@ -439,6 +468,7 @@ void cdbTypeInfo (sym_link * type)
            case V_CHAR: fprintf (cdbFilePtr, "SC"); break;
            case V_VOID: fprintf (cdbFilePtr, "SV"); break;
            case V_FLOAT: fprintf (cdbFilePtr, "SF"); break;
+           case V_FIXED16X16: fprintf(cdbFilePtr, "SQ"); break;
            case V_STRUCT: 
              fprintf (cdbFilePtr, "ST%s", SPEC_STRUCT (type)->tag); 
              break;