+2004-05-18 Erik Petrich <epetrich AT ivorytower.norman.ok.us>
+
+ * 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 <epetrich AT ivorytower.norman.ok.us>
- * 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
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);
/*-----------------------------------------------------------------------*/
-/* 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;
}
dwtag * tp;
value * args;
- if(!dwarf2FilePtr) return 0;
-
dwFuncTag = tp = dwNewTag (DW_TAG_subprogram);
dwAddTagAttr (dwFuncTag, dwNewAttrString (DW_AT_name, sym->name));
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 "
dwline * lp;
char * debugSym;
- if(!dwarf2FilePtr) return 0;
-
lp = Safe_alloc (sizeof (dwline));
lp->line = ic->lineno;
dwloc * lp;
int regNum;
- if(!dwarf2FilePtr) return 0;
-
/* If there was a region open, close it */
if (dwFrameLastLoc)
{
/*-----------------------------------------------------------------------*/
int dwWriteALine(char *module, int Line)
{
- if(!dwarf2FilePtr) return 0;
-
return 1;
}
/* 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 ();
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;
}
/*-----------------------------------------------------------------*/
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[] =
{
{
if (options.out_fmt == 2 && options.debug)
{
- dwarf2FinalizeFile();
- copyFile(of, dwarf2FilePtr);
+ dwarf2FinalizeFile (of);
}
}