From 33ceca4f228d02cf94212be79c2729f7745b8e04 Mon Sep 17 00:00:00 2001 From: epetrich Date: Tue, 18 May 2004 06:03:07 +0000 Subject: [PATCH] * src/hc08/main.c (_hc08_genAssemblerEnd), * src/SDCCdwarf2.c (dwOpenFile, dwCloseFile, dwWriteFunction, dwWriteModule, dwWriteCLine, dwWriteALine, dwarf2FinalizeFile): completely eliminated the use of a temporary file * src/SDCCdwarf2.c (dwWriteAttr): fixed bug with location list offset when more than one file linked * src/SDCCloop.c (pointerAssigned): fixed bug #954163 git-svn-id: https://sdcc.svn.sourceforge.net/svnroot/sdcc/trunk/sdcc@3318 4a8a32a2-be11-0410-ad9d-d568d2c75423 --- ChangeLog | 12 +++++++++++- src/SDCCdwarf2.c | 37 ++++++++----------------------------- src/SDCCloop.c | 17 ++++++++++++++++- src/hc08/main.c | 6 ++---- 4 files changed, 37 insertions(+), 35 deletions(-) diff --git a/ChangeLog b/ChangeLog index 78e9989c..d7d1a63c 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,6 +1,16 @@ +2004-05-18 Erik Petrich + + * src/hc08/main.c (_hc08_genAssemblerEnd), + * src/SDCCdwarf2.c (dwOpenFile, dwCloseFile, dwWriteFunction, + dwWriteModule, dwWriteCLine, dwWriteALine, dwarf2FinalizeFile): + completely eliminated the use of a temporary file + * src/SDCCdwarf2.c (dwWriteAttr): fixed bug with location list offset + when more than one file linked + * src/SDCCloop.c (pointerAssigned): fixed bug #954163 + 2004-05-17 Erik Petrich - * src/SDCCval.c (valForArray): applied Maarteen Brock's patch #947682 + * src/SDCCval.c (valForArray): applied Maarten Brock's patch #947682 which fixes bug #543481 * support/regression/tests/bug-751703.c: fixed comments left from a cut and paste error diff --git a/src/SDCCdwarf2.c b/src/SDCCdwarf2.c index 46c2f6b8..a84afe26 100644 --- a/src/SDCCdwarf2.c +++ b/src/SDCCdwarf2.c @@ -990,7 +990,7 @@ dwWriteAttr (dwattr * ap) break; case DW_AT_location: case DW_AT_frame_base: - dwWriteWord (NULL, ap->val.loclist->baseOffset, NULL); + dwWriteWord ("Ldebug_loc_start", ap->val.loclist->baseOffset, NULL); break; default: dwWriteWord (NULL, ap->val.data, NULL); @@ -2432,29 +2432,22 @@ dwTagFromType (sym_link * type, dwtag * parent) /*-----------------------------------------------------------------------*/ -/* dwOpenFile - opens a temporary file for debugging information */ +/* dwOpenFile - open the debugging file (just initialize, since all */ +/* DWARF data goes into the assembly output file) */ /*-----------------------------------------------------------------------*/ int dwOpenFile(char *file) { - dwarf2FilePtr = tempfile(); - if(!dwarf2FilePtr) return 0; - dwTypeTagTable = newHashTable (128); return 1; } /*-----------------------------------------------------------------------*/ -/* dwCloseFile - close (and deletes) the temporary file for debugging */ -/* information */ +/* dwCloseFile - close the debugging file (do nothing, since all DWARF */ +/* data goes into the assembly output file) */ /*-----------------------------------------------------------------------*/ int dwCloseFile(void) { - if(!dwarf2FilePtr) return 0; - - /* Don't explicitly close the file; this will be done automatically */ - dwarf2FilePtr = NULL; - return 1; } @@ -2681,8 +2674,6 @@ int dwWriteFunction(symbol *sym, iCode *ic) dwtag * tp; value * args; - if(!dwarf2FilePtr) return 0; - dwFuncTag = tp = dwNewTag (DW_TAG_subprogram); dwAddTagAttr (dwFuncTag, dwNewAttrString (DW_AT_name, sym->name)); @@ -2875,14 +2866,8 @@ int dwWriteType(structdef *sdef, int block, int inStruct, char *tag) int dwWriteModule(char *name) { dwtag * tp; - char * s; - - if(!dwarf2FilePtr) return 0; dwModuleName = Safe_strdup (name); - for (s = dwModuleName; *s; s++) - if (ispunct (*s) || isspace (*s)) - *s = '_'; tp = dwNewTag (DW_TAG_compile_unit); dwAddTagAttr (tp, dwNewAttrString (DW_AT_producer, "SDCC version " @@ -2909,8 +2894,6 @@ int dwWriteCLine(iCode *ic) dwline * lp; char * debugSym; - if(!dwarf2FilePtr) return 0; - lp = Safe_alloc (sizeof (dwline)); lp->line = ic->lineno; @@ -2947,8 +2930,6 @@ dwWriteFrameAddress(char *variable, struct regs *reg, int offset) dwloc * lp; int regNum; - if(!dwarf2FilePtr) return 0; - /* If there was a region open, close it */ if (dwFrameLastLoc) { @@ -3024,8 +3005,6 @@ dwWriteFrameAddress(char *variable, struct regs *reg, int offset) /*-----------------------------------------------------------------------*/ int dwWriteALine(char *module, int Line) { - if(!dwarf2FilePtr) return 0; - return 1; } @@ -3037,14 +3016,14 @@ int dwWriteALine(char *module, int Line) /* debug file */ /*-----------------------------------------------------------------------*/ int -dwarf2FinalizeFile(void) +dwarf2FinalizeFile(FILE *of) { int tagAddress = 11; int abbrevNum = 0; int attr; - - if(!dwarf2FilePtr) return 1; + dwarf2FilePtr = of; + /* Write the .debug_line section */ dwWriteLineNumbers (); diff --git a/src/SDCCloop.c b/src/SDCCloop.c index f23b41f0..52cc19af 100644 --- a/src/SDCCloop.c +++ b/src/SDCCloop.c @@ -379,7 +379,22 @@ DEFSETFUNC (pointerAssigned) eBBlock *ebp = item; V_ARG (operand *, op); - return ebp->hasFcall || bitVectBitValue (ebp->ptrsSet, op->key); + if (ebp->hasFcall) + return 1; + + if (bitVectBitValue (ebp->ptrsSet, op->key)) + return 1; + + /* Unfortunately, one of the other pointer set operations */ + /* may be using an alias of this operand, and the above */ + /* test would miss it. To be thorough, some aliasing */ + /* analysis should be done here. In the meantime, be */ + /* conservative and assume any other pointer set operation */ + /* is dangerous */ + if (!bitVectIsZero (ebp->ptrsSet)) + return 1; + + return 0; } /*-----------------------------------------------------------------*/ diff --git a/src/hc08/main.c b/src/hc08/main.c index aa2cbb0c..d28b72a5 100644 --- a/src/hc08/main.c +++ b/src/hc08/main.c @@ -12,9 +12,8 @@ void copyFile(FILE *dest, FILE *src); extern char * iComments2; -extern FILE * dwarf2FilePtr; extern DEBUGFILE dwarf2DebugFile; -extern int dwarf2FinalizeFile(void); +extern int dwarf2FinalizeFile(FILE *); static char _defaultRules[] = { @@ -240,8 +239,7 @@ _hc08_genAssemblerEnd (FILE * of) { if (options.out_fmt == 2 && options.debug) { - dwarf2FinalizeFile(); - copyFile(of, dwarf2FilePtr); + dwarf2FinalizeFile (of); } } -- 2.30.2