Hacked const and volatile modifiers a bit.
[fw/sdcc] / src / SDCCmem.c
index 0c05b2322e73f2dc728af5c66d714b162ecd27ef..ca5a3513946c71f1dc8b0d23428ba2a9a118503f 100644 (file)
@@ -1,3 +1,9 @@
+//#define LIVERANGEHUNT
+#ifdef LIVERANGEHUNT
+  #define LRH(x) x
+#else
+  #define LRH(x)
+#endif
 /*-----------------------------------------------------------------*/
 /* SDCCmem.c - 8051 memory management routines                     */
 /*-----------------------------------------------------------------*/
@@ -303,10 +309,13 @@ allocGlobal (symbol * sym)
 
   /* symbol name is internal name  */
   if (!sym->level)             /* local statics can come here */
-    sprintf (sym->rname, "%s%s", port->fun_prefix, sym->name);
+    SNPRINTF (sym->rname, sizeof(sym->rname), 
+             "%s%s", port->fun_prefix, sym->name);
 
   /* add it to the operandKey reset */
-  addSet (&operKeyReset, sym);
+  if (!isinSet (operKeyReset, sym)) {
+    addSet(&operKeyReset, sym);
+  }
 
   /* if this is a literal e.g. enumerated type */
   /* put it in the data segment & do nothing   */
@@ -518,8 +527,9 @@ allocParms (value * val)
       else
        { /* allocate them in the automatic space */
          /* generate a unique name  */
-         sprintf (lval->sym->rname, "%s%s_PARM_%d", port->fun_prefix, currFunc->name, pNum);
-         strcpy (lval->name, lval->sym->rname);
+         SNPRINTF (lval->sym->rname, sizeof(lval->sym->rname),
+                   "%s%s_PARM_%d", port->fun_prefix, currFunc->name, pNum);
+         strncpyz (lval->name, lval->sym->rname, sizeof(lval->name));
          
          /* if declared in external storage */
          if (SPEC_SCLS (lval->etype) == S_XDATA)
@@ -576,14 +586,17 @@ deallocParms (value * val)
       if (lval->sym->rname[0])
        {
          char buffer[SDCC_NAME_MAX];
-         strcpy (buffer, lval->sym->rname);
+         strncpyz (buffer, lval->sym->rname, sizeof(buffer));
          lval->sym = copySymbol (lval->sym);
-         strcpy (lval->sym->rname, buffer);
-         strcpy (lval->name, strcpy (lval->sym->name, lval->sym->rname));
+         strncpyz (lval->sym->rname, buffer, sizeof(lval->sym->rname));
+         strncpyz (lval->sym->name, buffer, sizeof(lval->sym->name));
+         strncpyz (lval->name, buffer, sizeof(lval->name)); 
          addSym (SymbolTab, lval->sym, lval->sym->name,
                  lval->sym->level, lval->sym->block, 1);
          lval->sym->_isparm = 1;
-         addSet (&operKeyReset, lval->sym);
+         if (!isinSet (operKeyReset, lval->sym)) {
+           addSet(&operKeyReset, lval->sym);
+         }
        }
 
     }
@@ -599,9 +612,10 @@ allocLocal (symbol * sym)
 {
 
   /* generate an unique name */
-  sprintf (sym->rname, "%s%s_%s_%d_%d",
-          port->fun_prefix,
-          currFunc->name, sym->name, sym->level, sym->block);
+  SNPRINTF (sym->rname, sizeof(sym->rname), 
+           "%s%s_%s_%d_%d",
+           port->fun_prefix,
+           currFunc->name, sym->name, sym->level, sym->block);
 
   sym->islocal = 1;
   sym->localof = currFunc;
@@ -1011,6 +1025,10 @@ printAllocInfoSeg (memmap * map, symbol * func, FILE * of)
       if (!sym->allocreq && sym->reqv)
        {
          int i;
+         if (!OP_SYMBOL(sym->reqv)->nRegs) {
+           LRH(printf ("*** warning: %s -> %s\n", sym->name, \
+                   OP_SYMBOL(sym->reqv)->name));
+         }
          sym = OP_SYMBOL (sym->reqv);
          fprintf (of, "registers ");
          for (i = 0; i < 4 && sym->regs[i]; i++)