]> git.sur5r.net Git - cc65/blobdiff - src/ld65/dbgsyms.c
Corrected indentation - no code change.
[cc65] / src / ld65 / dbgsyms.c
index 44c066094a5672e156c8b5684ab43abcf002848e..f52e082d75d99283e9a396c6f59f07c984bdda89 100644 (file)
@@ -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 <string.h>
 
 /* 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)
 
 
 
+