X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=src%2Fld65%2Fdbgsyms.c;h=f52e082d75d99283e9a396c6f59f07c984bdda89;hb=0807da74bd7c3ebe3e6e75129a07a810b17174b2;hp=44c066094a5672e156c8b5684ab43abcf002848e;hpb=f3e0d3fbb13a724f88d2127e8d9107d883de2a11;p=cc65 diff --git a/src/ld65/dbgsyms.c b/src/ld65/dbgsyms.c index 44c066094..f52e082d7 100644 --- a/src/ld65/dbgsyms.c +++ b/src/ld65/dbgsyms.c @@ -6,10 +6,10 @@ /* */ /* */ /* */ -/* (C) 1998-2003 Ullrich von Bassewitz */ -/* Römerstrasse 52 */ -/* D-70794 Filderstadt */ -/* EMail: uz@cc65.org */ +/* (C) 1998-2010, Ullrich von Bassewitz */ +/* Roemerstrasse 52 */ +/* D-70794 Filderstadt */ +/* EMail: uz@cc65.org */ /* */ /* */ /* This software is provided 'as-is', without any expressed or implied */ @@ -36,6 +36,7 @@ #include /* common */ +#include "addrsize.h" #include "check.h" #include "symdefs.h" #include "xmalloc.h" @@ -70,7 +71,7 @@ static DbgSym* DbgSymPool[256]; -static DbgSym* NewDbgSym (unsigned char Type, ObjData* O) +static DbgSym* NewDbgSym (unsigned char Type, unsigned char AddrSize, ObjData* O) /* Create a new DbgSym and return it */ { /* Allocate memory */ @@ -81,8 +82,9 @@ static DbgSym* NewDbgSym (unsigned char Type, ObjData* O) D->Flags = 0; D->Obj = O; D->Expr = 0; - D->Name = 0; + D->Name = 0; D->Type = Type; + D->AddrSize = AddrSize; /* Return the new entry */ return D; @@ -97,9 +99,9 @@ static DbgSym* GetDbgSym (DbgSym* D, long Val) { /* Create the hash. We hash over the symbol value */ unsigned Hash = ((Val >> 24) & 0xFF) ^ - ((Val >> 16) & 0xFF) ^ - ((Val >> 8) & 0xFF) ^ - ((Val >> 0) & 0xFF); + ((Val >> 16) & 0xFF) ^ + ((Val >> 8) & 0xFF) ^ + ((Val >> 0) & 0xFF); /* Check for this symbol */ DbgSym* Sym = DbgSymPool[Hash]; @@ -139,11 +141,12 @@ static void InsertDbgSym (DbgSym* D, long Val) DbgSym* ReadDbgSym (FILE* F, ObjData* O) /* Read a debug symbol from a file, insert and return it */ { - /* Read the type */ + /* Read the type and address size */ unsigned char Type = Read8 (F); + unsigned char AddrSize = Read8 (F); /* Create a new debug symbol */ - DbgSym* D = NewDbgSym (Type, O); + DbgSym* D = NewDbgSym (Type, AddrSize, O); /* Read and assign the name */ D->Name = MakeGlobalStringId (O, ReadVar (F)); @@ -164,7 +167,7 @@ DbgSym* ReadDbgSym (FILE* F, ObjData* O) -static void ClearDbgSymTable (void) +void ClearDbgSymTable (void) /* Clear the debug symbol table */ { unsigned I; @@ -181,7 +184,7 @@ static void ClearDbgSymTable (void) -long GetDbgSymVal (DbgSym* D) +long GetDbgSymVal (const DbgSym* D) /* Get the value of this symbol */ { CHECK (D->Expr != 0); @@ -195,16 +198,13 @@ void PrintDbgSyms (ObjData* O, FILE* F) { unsigned I; - /* Clear the debug sym table */ - ClearDbgSymTable (); - /* Walk through all debug symbols in this module */ - for (I = 0; I < O->DbgSymCount; ++I) { + for (I = 0; I < CollCount (&O->DbgSyms); ++I) { long Val; /* Get the next debug symbol */ - DbgSym* D = O->DbgSyms [I]; + DbgSym* D = CollAt (&O->DbgSyms, I); /* Get the symbol value */ Val = GetDbgSymVal (D); @@ -217,10 +217,11 @@ void PrintDbgSyms (ObjData* O, FILE* F) /* Emit the debug file line */ fprintf (F, - "sym\t\"%s\", 0x%02X, 0x%08lX\n", + "sym\t\"%s\",value=0x%08lX,addrsize=%s,type=%s\n", GetString (D->Name), - D->Type, - Val); + Val, + AddrSizeToStr (D->AddrSize), + IS_EXP_LABEL (D->Type)? "label" : "equate"); /* Insert the symbol into the table */ InsertDbgSym (D, Val); @@ -235,16 +236,13 @@ void PrintDbgSymLabels (ObjData* O, FILE* F) { unsigned I; - /* Clear the debug sym table */ - ClearDbgSymTable (); - /* Walk through all debug symbols in this module */ - for (I = 0; I < O->DbgSymCount; ++I) { + for (I = 0; I < CollCount (&O->DbgSyms); ++I) { long Val; /* Get the next debug symbol */ - DbgSym* D = O->DbgSyms [I]; + DbgSym* D = CollAt (&O->DbgSyms, I); /* Emit this symbol only if it is a label (ignore equates) */ if (IS_EXP_EQUATE (D->Type)) { @@ -271,3 +269,4 @@ void PrintDbgSymLabels (ObjData* O, FILE* F) +