From: johanknol Date: Mon, 17 Dec 2001 17:25:07 +0000 (+0000) Subject: change to initialized data segment before emitting the segment X-Git-Url: https://git.gag.com/?a=commitdiff_plain;h=63177e2f4a9a0cb897997b0da23cf4f5fe6209f4;p=fw%2Fsdcc change to initialized data segment before emitting the segment git-svn-id: https://sdcc.svn.sourceforge.net/svnroot/sdcc/trunk/sdcc@1687 4a8a32a2-be11-0410-ad9d-d568d2c75423 --- diff --git a/src/SDCCglue.c b/src/SDCCglue.c index 799639fd..a0f98225 100644 --- a/src/SDCCglue.c +++ b/src/SDCCglue.c @@ -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 { diff --git a/src/SDCCmem.c b/src/SDCCmem.c index 29fcc840..7e6c60b7 100644 --- a/src/SDCCmem.c +++ b/src/SDCCmem.c @@ -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)