]> git.sur5r.net Git - cc65/commitdiff
Rearrange debug info output. Add scopes to the debug info.
authoruz <uz@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Thu, 4 Aug 2011 15:58:54 +0000 (15:58 +0000)
committeruz <uz@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Thu, 4 Aug 2011 15:58:54 +0000 (15:58 +0000)
git-svn-id: svn://svn.cc65.org/cc65/trunk@5117 b7a2c559-68d2-44c3-8de9-860c34a00d81

13 files changed:
src/ld65/dbgfile.c
src/ld65/dbginfo.c [deleted file]
src/ld65/dbginfo.h [deleted file]
src/ld65/dbgsyms.c
src/ld65/dbgsyms.h
src/ld65/fileinfo.c
src/ld65/fileinfo.h
src/ld65/lineinfo.c
src/ld65/lineinfo.h
src/ld65/make/gcc.mak
src/ld65/make/watcom.mak
src/ld65/objfile.c
src/ld65/scopes.c

index 30d8bd1fd64b3e52ca9e04e6eb9ee6376147126f..1b369169c7c6e8241fc8654171bb4d4bbea52608 100644 (file)
 
 /* ld65 */
 #include "dbgfile.h"
-#include "dbginfo.h"
 #include "dbgsyms.h"
 #include "error.h"
+#include "fileinfo.h"
 #include "global.h"
+#include "lineinfo.h"
+#include "scopes.h"
 #include "segments.h"
 
 
@@ -56,8 +58,6 @@
 void CreateDbgFile (void)
 /* Create a debug info file */
 {
-    unsigned I;
-
     /* Open the debug info file */
     FILE* F = fopen (DbgFileName, "w");
     if (F == 0) {
@@ -67,22 +67,20 @@ void CreateDbgFile (void)
     /* Output version information */
     fprintf (F, "version\tmajor=1,minor=2\n");
 
-    /* Clear the debug sym table (used to detect duplicates) */
-    ClearDbgSymTable ();
-
     /* Output the segment info */
     PrintDbgSegments (F);
 
-    /* Print line infos from all modules we have linked into the output file */
-    for (I = 0; I < CollCount (&ObjDataList); ++I) {
+    /* Output files */
+    PrintDbgFileInfo (F);
 
-        /* Get the object file */
-        ObjData* O = CollAtUnchecked (&ObjDataList, I);
+    /* Output line info */
+    PrintDbgLineInfo (F);
 
-        /* Output debug info */
-       PrintDbgInfo (O, F);
-        PrintDbgSyms (O, F);
-    }
+    /* Output symbols */
+    PrintDbgSyms (F);
+
+    /* Output scopes */
+    PrintDbgScopes (F);
 
     /* Close the file */
     if (fclose (F) != 0) {
diff --git a/src/ld65/dbginfo.c b/src/ld65/dbginfo.c
deleted file mode 100644 (file)
index 7dca2fe..0000000
+++ /dev/null
@@ -1,111 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                dbginfo.c                                 */
-/*                                                                           */
-/*                 Debug info handling for the ld65 linker                  */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2001-2011, Ullrich von Bassewitz                                      */
-/*                Roemerstrasse 52                                           */
-/*                D-70794 Filderstadt                                        */
-/* EMail:         uz@cc65.org                                                */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-/* common */
-#include "lidefs.h"
-
-/* ld65 */
-#include "dbginfo.h"
-#include "fileinfo.h"
-#include "lineinfo.h"
-#include "segments.h"
-#include "spool.h"
-
-
-
-/*****************************************************************************/
-/*                                          Code                                    */
-/*****************************************************************************/
-
-
-
-void PrintDbgInfo (ObjData* O, FILE* F)
-/* Print the debug info into a file */
-{
-    unsigned I, J;
-
-    /* Output the files section */
-    for (I = 0; I < CollCount (&O->Files); ++I) {
-       FileInfo* FI = CollAt (&O->Files, I);
-        if (!FI->Dumped) {
-            fprintf (F,
-                     "file\tid=%u,name=\"%s\",size=%lu,mtime=0x%08lX\n",
-                     FI->Id, GetString (FI->Name), FI->Size, FI->MTime);
-            FI->Dumped = 1;
-        }
-    }
-
-    /* Output the line infos */
-    for (I = 0; I < CollCount (&O->LineInfos); ++I) {
-
-       /* Get this line info */
-       const LineInfo* LI = CollConstAt (&O->LineInfos, I);
-
-        /* Get the line info type and count */
-        unsigned Type  = LI_GET_TYPE (LI->Type);
-        unsigned Count = LI_GET_COUNT (LI->Type);
-
-       /* Get a pointer to the spans */
-       const Collection* Spans = &LI->Spans;
-
-       /* Spans */
-       for (J = 0; J < CollCount (Spans); ++J) {
-
-           /* Get this code range */
-           const Span* S = CollConstAt (Spans, J);
-
-           /* Print it */
-            fprintf (F,
-                     "line\tfile=%u,line=%lu,segment=%u,range=0x%lX-0x%lX",
-                     LI->File->Id, GetSourceLine (LI), S->Seg->Id,
-                     S->Offs, S->Offs + S->Size - 1);
-
-            /* Print type if not LI_TYPE_ASM and count if not zero */
-            if (Type != LI_TYPE_ASM) {
-                fprintf (F, ",type=%u", Type);
-            }
-            if (Count != 0) {
-                fprintf (F, ",count=%u", Count);
-            }
-
-            /* Terminate line */
-            fputc ('\n', F);
-
-       }
-    }
-}
-
-
-
diff --git a/src/ld65/dbginfo.h b/src/ld65/dbginfo.h
deleted file mode 100644 (file)
index 5c88370..0000000
+++ /dev/null
@@ -1,66 +0,0 @@
-/*****************************************************************************/
-/*                                                                           */
-/*                                dbginfo.h                                 */
-/*                                                                           */
-/*                 Debug info handling for the ld65 linker                  */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2001      Ullrich von Bassewitz                                       */
-/*               Wacholderweg 14                                             */
-/*               D-70597 Stuttgart                                           */
-/* EMail:        uz@cc65.org                                                 */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
-/* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
-/* Permission is granted to anyone to use this software for any purpose,     */
-/* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
-/* 1. The origin of this software must not be misrepresented; you must not   */
-/*    claim that you wrote the original software. If you use this software   */
-/*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
-/* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
-/*****************************************************************************/
-
-
-
-#ifndef DBGINFO_H
-#define DBGINFO_H
-
-
-
-#include <stdio.h>
-
-/* ld65 */
-#include "objdata.h"
-
-
-
-/*****************************************************************************/
-/*                                          Code                                    */
-/*****************************************************************************/
-
-
-
-void PrintDbgInfo (ObjData* O, FILE* F);
-/* Print the debug info into a file */
-
-
-
-/* End of dbginfo.h */
-
-#endif
-
-
-
-
-
index a9c6ede28baf775fbb8ca9b055a5c8087c2c55bc..cf68714c8370d6268fde71a472e6fabdc967ffcf 100644 (file)
@@ -67,7 +67,7 @@ static DbgSym*        DbgSymPool[256];
 
 
 /*****************************************************************************/
-/*                                          Code                                    */
+/*                                          Code                                    */
 /*****************************************************************************/
 
 
@@ -205,32 +205,30 @@ long GetDbgSymVal (const DbgSym* D)
 
 
 
-void PrintDbgSyms (ObjData* O, FILE* F)
+void PrintDbgSyms (FILE* F)
 /* Print the debug symbols in a debug file */
 {
-    unsigned I;
+    unsigned I, J;
 
-    /* Walk through all debug symbols in this module */
-    for (I = 0; I < CollCount (&O->DbgSyms); ++I) {
+    for (I = 0; I < CollCount (&ObjDataList); ++I) {
 
-       long Val;
+        /* Get the object file */
+        const ObjData* O = CollAtUnchecked (&ObjDataList, I);
 
-       /* Get the next debug symbol */
-       DbgSym* S = CollAt (&O->DbgSyms, I);
+        /* Walk through all debug symbols in this module */
+        for (J = 0; J < CollCount (&O->DbgSyms); ++J) {
 
-       /* Get the symbol value */
-       Val = GetDbgSymVal (S);
+            long Val;
+            SegExprDesc D;
 
-       /* Lookup this symbol in the table. If it is found in the table, it was
-        * already written to the file, so don't emit it twice. If it is not in
-        * the table, insert and output it.
-        */
-               if (GetDbgSym (S, Val) == 0) {
+            /* Get the next debug symbol */
+            const DbgSym* S = CollConstAt (&O->DbgSyms, J);
 
-            SegExprDesc D;
+            /* Get the symbol value */
+            Val = GetDbgSymVal (S);
 
-           /* Emit the base data for the entry */
-                   fprintf (F,
+            /* Emit the base data for the entry */
+            fprintf (F,
                      "sym\tname=\"%s\",value=0x%lX,addrsize=%s,type=%s",
                      GetString (S->Name),
                      Val,
@@ -252,10 +250,7 @@ void PrintDbgSyms (ObjData* O, FILE* F)
 
             /* Terminate the output line */
             fputc ('\n', F);
-
-           /* Insert the symbol into the table */
-           InsertDbgSym (S, Val);
-               }
+        }
     }
 }
 
index e1b0aef235877b4ab63e7d9c9ae6fed6b2986670..18027e6ff5a2be9f1da722462393b27f32807649 100644 (file)
@@ -96,7 +96,7 @@ void ClearDbgSymTable (void);
  * or debug labels the first time.
  */
 
-void PrintDbgSyms (ObjData* O, FILE* F);
+void PrintDbgSyms (FILE* F);
 /* Print the debug symbols in a debug file */
 
 void PrintDbgSymLabels (ObjData* O, FILE* F);
index 7bf4e1d5588d79fd566505f0910379ced3a22222..d48280447bd0c29deb2fda4610302e97b90e18a9 100644 (file)
@@ -2,7 +2,7 @@
 /*                                                                           */
 /*                               fileinfo.c                                 */
 /*                                                                           */
-/*                       sOURCE FILE INFO STRUCTURE                         */
+/*                       Source file info structure                         */
 /*                                                                           */
 /*                                                                           */
 /*                                                                           */
@@ -40,6 +40,8 @@
 /* ld65 */
 #include "fileio.h"
 #include "fileinfo.h"
+#include "objdata.h"
+#include "spool.h"
 
 
 
@@ -110,7 +112,7 @@ static FileInfo* NewFileInfo (void)
     FileInfo* FI = xmalloc (sizeof (FileInfo));
 
     /* Initialize stuff */
-    FI->Id     = Id++; 
+    FI->Id     = Id++;
     FI->Dumped = 0;
 
     /* Return the new struct */
@@ -180,3 +182,29 @@ FileInfo* ReadFileInfo (FILE* F, ObjData* O)
 
 
 
+void PrintDbgFileInfo (FILE* F)
+/* Output the file info to a debug info file */
+{
+    unsigned I, J;
+
+    /* Print file infos from all modules we have linked into the output file */
+    for (I = 0; I < CollCount (&ObjDataList); ++I) {
+
+        /* Get the object file */
+        ObjData* O = CollAtUnchecked (&ObjDataList, I);
+
+        /* Output the files section */
+        for (J = 0; J < CollCount (&O->Files); ++J) {
+            FileInfo* FI = CollAt (&O->Files, J);
+            if (!FI->Dumped) {
+                fprintf (F,
+                         "file\tid=%u,name=\"%s\",size=%lu,mtime=0x%08lX\n",
+                         FI->Id, GetString (FI->Name), FI->Size, FI->MTime);
+                FI->Dumped = 1;
+            }
+        }
+    }
+}
+
+
+
index 1cd4fef92bcd7e864e49bea3af72dd2887f17883..a4499d83dba589dcd62a54b420dfd08ecfba146d 100644 (file)
@@ -75,6 +75,9 @@ struct FileInfo {
 FileInfo* ReadFileInfo (FILE* F, ObjData* O);
 /* Read a file info from a file and return it */
 
+void PrintDbgFileInfo (FILE* F);
+/* Output the file info to a debug info file */
+
 
 
 /* End of fileinfo.h */
index 219dcf1ccf57678eb7e145e97d6d527081d83faf..63b764e6a44ffca4a30f246063436f550c896f72 100644 (file)
@@ -204,4 +204,57 @@ void RelocLineInfo (Segment* S)
 
 
 
+void PrintDbgLineInfo (FILE* F)
+/* Output the line infos to a debug info file */
+{
+    unsigned I, J, K;
+
+    /* Print line infos from all modules we have linked into the output file */
+    for (I = 0; I < CollCount (&ObjDataList); ++I) {
+
+        /* Get the object file */
+        const ObjData* O = CollAtUnchecked (&ObjDataList, I);
+
+        /* Output the line infos */
+        for (J = 0; J < CollCount (&O->LineInfos); ++J) {
+
+            /* Get this line info */
+            const LineInfo* LI = CollConstAt (&O->LineInfos, J);
+
+            /* Get the line info type and count */
+            unsigned Type  = LI_GET_TYPE (LI->Type);
+            unsigned Count = LI_GET_COUNT (LI->Type);
+
+            /* Get a pointer to the spans */
+            const Collection* Spans = &LI->Spans;
+
+            /* Spans */
+            for (K = 0; K < CollCount (Spans); ++K) {
+
+                /* Get this code range */
+                const Span* S = CollConstAt (Spans, K);
+
+                /* Print it */
+                fprintf (F,
+                         "line\tfile=%u,line=%lu,segment=%u,range=0x%lX-0x%lX",
+                         LI->File->Id, GetSourceLine (LI), S->Seg->Id,
+                         S->Offs, S->Offs + S->Size - 1);
+
+                /* Print type if not LI_TYPE_ASM and count if not zero */
+                if (Type != LI_TYPE_ASM) {
+                    fprintf (F, ",type=%u", Type);
+                }
+                if (Count != 0) {
+                    fprintf (F, ",count=%u", Count);
+                }
+
+                /* Terminate line */
+                fputc ('\n', F);
+
+            }
+        }
+    }
+}
+
+
 
index bc7106effefc33a52f49810231a4bc8256b7c274..efe013990e62039a603a1dcd63347c015d8aeb56 100644 (file)
@@ -171,6 +171,9 @@ INLINE unsigned long GetSourceLineFromList (const Collection* LineInfos)
         GetSourceLine ((const LineInfo*) CollConstAt ((LineInfos), 0))
 #endif
 
+void PrintDbgLineInfo (FILE* F);
+/* Output the line infos to a debug info file */
+
 
 
 /* End of lineinfo.h */
index 89bce8d4c19d067108cbefc8cc10d517dc50e63f..9e071f685768569eca94c7a517cc7c998024b3c7 100644 (file)
@@ -36,7 +36,6 @@ OBJS =        asserts.o       \
        condes.o        \
        config.o        \
        dbgfile.o       \
-       dbginfo.o       \
        dbgsyms.o       \
        error.o         \
        exports.o       \
index 37a8e6fc6bb5411fd4694dff527193fb4d770191..cbad1d803e38074341cc374f057de4438612b01a 100644 (file)
@@ -67,7 +67,6 @@ OBJS =        asserts.obj     \
        condes.obj      \
        config.obj      \
         dbgfile.obj     \
-       dbginfo.obj     \
        dbgsyms.obj     \
        error.obj       \
        exports.obj     \
index 5eb60c5e7ef5143d95973527b83d19853ae98f07..8b85e2cfa385b162a8674703981d4ab7b1930b8d 100644 (file)
@@ -276,7 +276,7 @@ void ObjReadScopes (FILE* F, unsigned long Pos, ObjData* O)
     CollGrow (&O->Scopes, ScopeCount);
     for (I = 0; I < ScopeCount; ++I) {
         CollAppend (&O->Scopes,  ReadScope (F, O, I));
-    }
+    }   
 }
 
 
index 106bd46a979293fa01e0051f6e1e9ccf8c5179f6..0bf3f881b4cbcd4740fe1cb87b2050209e56f3a0 100644 (file)
@@ -41,6 +41,7 @@
 #include "fileio.h"
 #include "scopes.h"
 #include "span.h"
+#include "spool.h"
 
 
 
@@ -116,3 +117,45 @@ void ResolveScopes (ObjData* Obj)
 
 
 
+void PrintDbgScopes (FILE* F)
+/* Output the scopes to a debug info file */
+{
+    unsigned I, J;
+
+    /* Print scopes from all modules we have linked into the output file */
+    unsigned BaseId = 0;
+    for (I = 0; I < CollCount (&ObjDataList); ++I) {
+
+        /* Get the object file */
+        ObjData* O = CollAtUnchecked (&ObjDataList, I);
+
+        /* Output the scopes for this object file */
+        for (J = 0; J < CollCount (&O->Scopes); ++J) {
+            const Scope* S = CollConstAt (&O->Scopes, J);
+
+            fprintf (F,
+                     "scope\tid=%u,name=\"%s\",type=%u",
+                     BaseId + S->Id,
+                     GetString (S->Name),
+                     S->Type);
+
+            /* Print the size if available */
+            if (S->Size != 0) {
+                fprintf (F, ",size=%lu", S->Size);
+            }
+            /* Print parent if available */
+            if (S->Parent.Scope) {
+                fprintf (F, ",parent=%u", BaseId + S->Parent.Scope->Id);
+            }
+
+            /* Terminate the output line */
+            fputc ('\n', F);
+        }
+
+        /* Increment scope base id */
+        BaseId += CollCount (&O->Scopes);
+    }
+}
+
+
+