]> git.sur5r.net Git - cc65/commitdiff
Output spans to the debug info file.
authoruz <uz@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Thu, 11 Aug 2011 17:11:45 +0000 (17:11 +0000)
committeruz <uz@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Thu, 11 Aug 2011 17:11:45 +0000 (17:11 +0000)
git-svn-id: svn://svn.cc65.org/cc65/trunk@5152 b7a2c559-68d2-44c3-8de9-860c34a00d81

src/ld65/dbgfile.c
src/ld65/scopes.c
src/ld65/span.c
src/ld65/span.h

index 20c64a1ec13c64b58fa58f5c52b351e5d00943a9..a9df4ffff5bec995fb4597bf22a1f8d6ae5b1087 100644 (file)
@@ -47,6 +47,7 @@
 #include "lineinfo.h"
 #include "scopes.h"
 #include "segments.h"
+#include "span.h"
 
 
 
@@ -102,17 +103,18 @@ void CreateDbgFile (void)
     /* Output version information */
     fprintf (F, "version\tmajor=2,minor=0\n");
 
-    /* Output a line with the item numbers so the debug info module is able 
+    /* Output a line with the item numbers so the debug info module is able
      * to preallocate the required memory.
      */
     fprintf (
         F,
-        "info\tlib=%u,mod=%u,seg=%u,file=%u,scope=%u\n",
+        "info\tlib=%u,file=%u,mod=%u,scope=%u,seg=%u,span=%u\n",
+        FileInfoCount (),
         LibraryCount (),
         ObjDataCount (),
+        ScopeCount (),
         SegmentCount (),
-        FileInfoCount (),
-        ScopeCount ()
+        SpanCount ()
     );
 
     /* Assign the ids to the items */
@@ -133,6 +135,9 @@ void CreateDbgFile (void)
     /* Output line info */
     PrintDbgLineInfo (F);
 
+    /* Output spans */
+    PrintDbgSpans (F);
+
     /* Output symbols */
     PrintDbgSyms (F);
 
index e548fcad5a630ec841bcf822cece38392b03518c..775e89fea704694230d307a923e446550e771cb9 100644 (file)
@@ -89,7 +89,7 @@ Scope* ReadScope (FILE* F, ObjData* Obj, unsigned Id)
         S->LabelId  = ReadVar (F);
     }
 
-    /* Read the segment ranges for this scope */
+    /* Read the spans for this scope */
     ReadSpans (&S->Spans, F, Obj);
 
     /* Return the new Scope */
@@ -120,7 +120,7 @@ unsigned ScopeCount (void)
 void PrintDbgScopes (FILE* F)
 /* Output the scopes to a debug info file */
 {
-    unsigned I, J;
+    unsigned I, J, K;
 
     /* Print scopes from all modules we have linked into the output file */
     for (I = 0; I < CollCount (&ObjDataList); ++I) {
@@ -152,7 +152,7 @@ void PrintDbgScopes (FILE* F)
                            GetObjFileName (O), S->Type);
             }
 
-            /* Print the size if available */                 
+            /* Print the size if available */
             if (S->Size != 0) {
                 fprintf (F, ",size=%lu", S->Size);
             }
@@ -164,6 +164,15 @@ void PrintDbgScopes (FILE* F)
             if (SCOPE_HAS_LABEL (S->Flags)) {
                 fprintf (F, ",sym=%u", O->SymBaseId + S->LabelId);
             }
+            /* Print the list of spans for this scope */
+            if (CollCount (&S->Spans) > 0) {
+                const Span* SP = CollConstAt (&S->Spans, 0);
+                fprintf (F, ",span=%u", SP->Id);
+                for (K = 1; K < CollCount (&S->Spans); ++K) {
+                    SP = CollConstAt (&S->Spans, K);
+                    fprintf (F, "+%u", SP->Id);
+                }
+            }
 
             /* Terminate the output line */
             fputc ('\n', F);
index f1bf280c3e20218f5cd32bb89f346200fe058cef..69d0f4d432a51daa5fc6766ca6b967dd68217b8c 100644 (file)
@@ -36,7 +36,7 @@
 /* common */
 #include "xmalloc.h"
 
-/* ld65 */           
+/* ld65 */
 #include "fileio.h"
 #include "objdata.h"
 #include "segments.h"
 
 
 /*****************************************************************************/
-/*                                          Code                                    */
+/*                                   Data                                    */
+/*****************************************************************************/
+
+
+
+/* List of all spans */
+static Collection SpanList = STATIC_COLLECTION_INITIALIZER;
+
+
+
+/*****************************************************************************/
+/*                                          Code                                    */
 /*****************************************************************************/
 
 
@@ -57,12 +68,16 @@ Span* NewSpan (struct Segment* Seg, unsigned long Offs, unsigned long Size)
     Span* S = xmalloc (sizeof (*S));
 
     /* Initialize the fields */
+    S->Id       = CollCount (&SpanList);
     S->Seg      = Seg;
     S->Offs     = Offs;
     S->Size     = Size;
 
+    /* Remember this span in the global list */
+    CollAppend (&SpanList, S);
+
     /* Return the result */
-   return S;
+    return S;
 }
 
 
@@ -161,3 +176,29 @@ void AddSpan (Collection* Spans, struct Segment* Seg, unsigned long Offs,
 
 
 
+unsigned SpanCount (void)
+/* Return the total number of spans */
+{
+    return CollCount (&SpanList);
+}
+
+
+
+void PrintDbgSpans (FILE* F)
+/* Output the spans to a debug info file */
+{
+    /* Walk over all spans */                    
+    unsigned I;
+    for (I = 0; I < CollCount (&SpanList); ++I) {
+
+        /* Get this span */
+        const Span* S = CollAtUnchecked (&SpanList, I);
+
+        /* Output the data */
+        fprintf (F, "span\tid=%u,seg=%u,start=%lu,size=%lu\n",
+                 S->Id, S->Seg->Id, S->Offs, S->Size);
+    }
+}
+
+
+
index 82c7cf81bd57726c9bd62e20ea3f8e77a93fd941..d307b55642ef69cffdf6011051b1777b09a60b3e 100644 (file)
@@ -64,6 +64,7 @@ struct Segment;
 
 typedef struct Span Span;
 struct Span {
+    unsigned           Id;             /* Id of the span */
     struct Segment*     Seg;            /* Segment of this span */
     unsigned long       Offs;           /* Offset of span within segment */
     unsigned long       Size;           /* Size of span */
@@ -95,6 +96,12 @@ void AddSpan (Collection* Spans, struct Segment* Seg, unsigned long Offs,
  * possible - merge it with adjacent ones that already exist.
  */
 
+unsigned SpanCount (void);
+/* Return the total number of spans */
+
+void PrintDbgSpans (FILE* F);
+/* Output the spans to a debug info file */
+
 
 
 /* End of span.h */