change to initialized data segment before emitting the segment
authorjohanknol <johanknol@4a8a32a2-be11-0410-ad9d-d568d2c75423>
Mon, 17 Dec 2001 17:25:07 +0000 (17:25 +0000)
committerjohanknol <johanknol@4a8a32a2-be11-0410-ad9d-d568d2c75423>
Mon, 17 Dec 2001 17:25:07 +0000 (17:25 +0000)
git-svn-id: https://sdcc.svn.sourceforge.net/svnroot/sdcc/trunk/sdcc@1687 4a8a32a2-be11-0410-ad9d-d568d2c75423

src/SDCCglue.c
src/SDCCmem.c

index 799639fddd96263ae1bedbae308001507d56c59f..a0f982254f7dc92083c4f27e28e112f57763778b 100644 (file)
@@ -232,28 +232,19 @@ emitRegularMap (memmap * map, bool addPublics, bool arFlag)
       /* if it has an initial value then do it only if
          it is a global variable */
       if (sym->ival && sym->level == 0) {
-       // can we copy xidata from xinit?
-       if (port->genXINIT &&
-           SPEC_OCLS(sym->etype)==xdata &&
-           !SPEC_ABSA(sym->etype)) {
-
-         // create a new "XINIT (CODE)" symbol
+       if (SPEC_OCLS(sym->etype)==xidata) {
+         // create a new "XINIT (CODE)" symbol, that will be emitted later
          newSym=copySymbol (sym);
          SPEC_OCLS(newSym->etype)=xinit;
          sprintf (newSym->name, "_xinit_%s", sym->name);
          sprintf (newSym->rname,"_xinit_%s", sym->rname);
          SPEC_CONST(newSym->etype)=1;
-         //SPEC_STAT(newSym->etype)=1;
+         SPEC_STAT(newSym->etype)=1;
          addSym (SymbolTab, newSym, newSym->name, 0, 0, 1);
          
          // add it to the "XINIT (CODE)" segment
          addSet(&xinit->syms, newSym);
 
-         // move sym from "XSEG (XDATA)" to "XISEG (XDATA)" segment
-         //deleteSetItem(&xdata->syms, sym);
-         addSet(&xidata->syms, sym);
-         SPEC_OCLS(sym->etype)=xidata;
-
          //fprintf (stderr, "moved %s from xdata to xidata\n", sym->rname);
          
        } else {
index 29fcc84093ee7fb5892fd63f5271e9cfcad77669..7e6c60b7349601954f95e6d2e08b3501a2fe88b5 100644 (file)
@@ -264,11 +264,16 @@ void
 allocIntoSeg (symbol * sym)
 {
   memmap *segment = SPEC_OCLS (sym->etype);
+  // should we move this to the initialized data segment?
+  if (port->genXINIT && segment==xdata &&
+      sym->ival && sym->level==0 && !SPEC_ABSA(sym->etype)) {
+    segment=SPEC_OCLS(sym->etype)=xidata;
+  }
   addSet (&segment->syms, sym);
 }
 
 /*-----------------------------------------------------------------*/
-/* allocGlobal - aassigns the output segment to a global var       */
+/* allocGlobal - assigns the output segment to a global var       */
 /*-----------------------------------------------------------------*/
 void 
 allocGlobal (symbol * sym)