]> git.sur5r.net Git - cc65/commitdiff
Maintain the types as separate indexed items in the debug info file.
authoruz <uz@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Mon, 22 Aug 2011 18:22:45 +0000 (18:22 +0000)
committeruz <uz@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Mon, 22 Aug 2011 18:22:45 +0000 (18:22 +0000)
git-svn-id: svn://svn.cc65.org/cc65/trunk@5263 b7a2c559-68d2-44c3-8de9-860c34a00d81

src/ld65/dbgfile.c
src/ld65/main.c
src/ld65/objdata.c
src/ld65/objdata.h
src/ld65/span.c
src/ld65/tpool.c
src/ld65/tpool.h

index 5f56460b58e67aa70247d1dc849d647aa0193b5d..35884910007413a0894f0b39f1fdca3aa6585aeb 100644 (file)
@@ -47,7 +47,8 @@
 #include "lineinfo.h"
 #include "scopes.h"
 #include "segments.h"
-#include "span.h"
+#include "span.h"     
+#include "tpool.h"
 
 
 
@@ -114,13 +115,14 @@ void CreateDbgFile (void)
      */
     fprintf (
         F,
-        "info\tfile=%u,lib=%u,mod=%u,scope=%u,seg=%u,span=%u\n",
+        "info\tfile=%u,lib=%u,mod=%u,scope=%u,seg=%u,span=%u,type=%u\n",
         FileInfoCount (),
         LibraryCount (),
         ObjDataCount (),
         ScopeCount (),
         SegmentCount (),
-        SpanCount ()
+        SpanCount (),
+        TypeCount ()
     );
 
     /* Assign the ids to the items */
@@ -143,6 +145,9 @@ void CreateDbgFile (void)
 
     /* Output spans */
     PrintDbgSpans (F);
+                    
+    /* Output types */
+    PrintDbgTypes (F);
 
     /* Output symbols */
     PrintDbgSyms (F);
index 78aab4baf39487402bc0d48985763e508151f5fe..6a0c09c061b2493d1472fa673b1f8a844f494d9c 100644 (file)
@@ -68,6 +68,7 @@
 #include "segments.h"
 #include "spool.h"
 #include "tgtcfg.h"
+#include "tpool.h"
 
 
 
@@ -554,6 +555,9 @@ int main (int argc, char* argv [])
     /* Initialize the string pool */
     InitStrPool ();
 
+    /* Initialize the type pool */
+    InitTypePool ();
+
     /* Check the parameters */
     I = 1;
     while (I < ArgCount) {
index b0a17d0e98192c1a8ffd32d1c51da4cd52c3b9fd..efd4145c30ced02be06549db1b3494c4206a9cb6 100644 (file)
@@ -199,7 +199,15 @@ const char* GetObjFileName (const ObjData* O)
 
 
 
-struct Section* GetObjSection (ObjData* O, unsigned Id)
+const struct StrBuf* GetObjString (const ObjData* Obj, unsigned Id)
+/* Get a string from an object file checking for an invalid index */
+{
+    return GetStrBuf (MakeGlobalStringId (Obj, Id));
+}
+
+
+
+struct Section* GetObjSection (const ObjData* O, unsigned Id)
 /* Get a section from an object file checking for a valid index */
 {
     if (Id >= CollCount (&O->Sections)) {
@@ -211,7 +219,7 @@ struct Section* GetObjSection (ObjData* O, unsigned Id)
 
 
 
-struct Import* GetObjImport (ObjData* O, unsigned Id)
+struct Import* GetObjImport (const ObjData* O, unsigned Id)
 /* Get an import from an object file checking for a valid index */
 {
     if (Id >= CollCount (&O->Imports)) {
@@ -223,7 +231,7 @@ struct Import* GetObjImport (ObjData* O, unsigned Id)
 
 
 
-struct Export* GetObjExport (ObjData* O, unsigned Id)
+struct Export* GetObjExport (const ObjData* O, unsigned Id)
 /* Get an export from an object file checking for a valid index */
 {
     if (Id >= CollCount (&O->Exports)) {
@@ -235,7 +243,7 @@ struct Export* GetObjExport (ObjData* O, unsigned Id)
 
 
 
-struct Scope* GetObjScope (ObjData* O, unsigned Id)
+struct Scope* GetObjScope (const ObjData* O, unsigned Id)
 /* Get a scope from an object file checking for a valid index */
 {
     if (Id >= CollCount (&O->Scopes)) {
index 77d75f064dcd4a4766656bf546eeb37748d91de3..52a2663752317458bb118c908b3a3e3df0d773f9 100644 (file)
@@ -57,6 +57,7 @@ struct Import;
 struct Library;
 struct Scope;
 struct Section;
+struct StrBuf;
 
 /* Values for the Flags field */
 #define        OBJ_REF         0x0001          /* We have a reference to this file */
@@ -143,16 +144,19 @@ INLINE int ObjHasFiles (const ObjData* O)
 #  define ObjHasFiles(O)       ((O) != 0 && CollCount (&(O)->Files) != 0)
 #endif
 
-struct Section* GetObjSection (ObjData* Obj, unsigned Id);
+const struct StrBuf* GetObjString (const ObjData* Obj, unsigned Id);
+/* Get a string from an object file checking for an invalid index */
+
+struct Section* GetObjSection (const ObjData* Obj, unsigned Id);
 /* Get a section from an object file checking for a valid index */
 
-struct Import* GetObjImport (ObjData* Obj, unsigned Id);
+struct Import* GetObjImport (const ObjData* Obj, unsigned Id);
 /* Get an import from an object file checking for a valid index */
 
-struct Export* GetObjExport (ObjData* Obj, unsigned Id);
+struct Export* GetObjExport (const ObjData* Obj, unsigned Id);
 /* Get an export from an object file checking for a valid index */
 
-struct Scope* GetObjScope (ObjData* Obj, unsigned Id);
+struct Scope* GetObjScope (const ObjData* Obj, unsigned Id);
 /* Get a scope from an object file checking for a valid index */
 
 unsigned ObjDataCount (void);
index 877875e00ee83832dfb61089735672e24a1415be..0ff1e7e1a4f935655cbd767877f0b296d745b915 100644 (file)
@@ -42,7 +42,7 @@
 #include "objdata.h"
 #include "segments.h"
 #include "span.h"
-#include "spool.h"
+#include "tpool.h"
 
 
 
@@ -87,12 +87,21 @@ static Span* NewSpan (unsigned Id)
 Span* ReadSpan (FILE* F, ObjData* O, unsigned Id)
 /* Read a Span from a file and return it */
 {
+    unsigned Type;
+
     /* Create a new Span and initialize it */
     Span* S = NewSpan (Id);
     S->Sec  = ReadVar (F);
     S->Offs = ReadVar (F);
     S->Size = ReadVar (F);
-    S->Type = MakeGlobalStringId (O, ReadVar (F));
+
+    /* Read the type. An id of zero means an empty string (no need to check) */
+    Type    = ReadVar (F);
+    if (Type == 0) {
+        S->Type = INVALID_TYPE_ID;
+    } else {
+        S->Type = GetTypeId (GetObjString (O, Type));
+    }
 
     /* Return the new span */
     return S;
@@ -193,8 +202,6 @@ void PrintDbgSpans (FILE* F)
         /* Walk over all spans in this object file */
         for (J = 0; J < CollCount (&O->Spans); ++J) {
 
-            const StrBuf* Type;
-
             /* Get this span */
             const Span* S = CollAtUnchecked (&O->Spans, J);
 
@@ -209,9 +216,8 @@ void PrintDbgSpans (FILE* F)
                      S->Size);
 
             /* If we have a type, add it */
-            Type = GetStrBuf (S->Type);
-            if (SB_GetLen (Type) > 0) {
-                fprintf (F, ",type=\"%s\"", GT_AsString (Type, &SpanType));
+            if (S->Type != INVALID_TYPE_ID) {
+                fprintf (F, ",type=%u", S->Type);
             }
 
             /* Terminate the output line */
index 07b4bb3a35c196e8ea91e6c1faa3e925f858b4b1..06957cb5ddcb3aa8fb80d91631a99d199d739fd1 100644 (file)
@@ -33,6 +33,9 @@
 
 
 
+/* common */
+#include "gentype.h"
+
 /* ld65 */
 #include "tpool.h"
 
@@ -55,16 +58,35 @@ StringPool* TypePool = 0;
 
 
 
+void PrintDbgTypes (FILE* F)
+/* Output the types to a debug info file */
+{
+    StrBuf Type = STATIC_STRBUF_INITIALIZER;
+
+    /* Get the number of strings in the type pool */
+    unsigned Count = SP_GetCount (TypePool);
+
+    /* Output all of them */
+    unsigned Id;
+    for (Id = 0; Id < Count; ++Id) {
+
+        /* Output it */
+        fprintf (F, "type\tid=%u,val=\"%s\"\n", Id,
+                 GT_AsString (SP_Get (TypePool, Id), &Type));
+
+    }
+
+    /* Free the memory for the temporary string */
+    SB_Done (&Type);
+}
+
+
+
 void InitTypePool (void)
 /* Initialize the type pool */
 {
     /* Allocate a type pool */
     TypePool = NewStringPool (137);
-
-    /* We insert the empty string as first entry here, so it will have id
-     * zero.
-     */
-    SP_AddStr (TypePool, "");
 }
 
 
index 09a3eae2e38899e3edf321834dbbea138e2a8d28..2b1a63dd163b8232c928bb25a6a8d77ef5c5dd68 100644 (file)
@@ -38,6 +38,8 @@
 
 
 
+#include <stdio.h>
+
 /* common */
 #include "strpool.h"
 
@@ -49,8 +51,8 @@
 
 
 
-/* An empty type */
-#define EMPTY_TYPE_ID   0U
+/* An invalid type */
+#define INVALID_TYPE_ID   (~0U)
 
 /* The string pool we're using */
 extern StringPool* TypePool;
@@ -83,6 +85,19 @@ INLINE const StrBuf* GetType (unsigned Index)
 #  define GetType(Index)        SP_Get (TypePool, (Index))
 #endif
 
+#if defined(HAVE_INLINE)
+INLINE unsigned TypeCount (void)
+/* Return the number of types in the pool */
+{
+    return SP_GetCount (TypePool);
+}
+#else
+#  define TypeCount()   SP_GetCount (TypePool)
+#endif
+
+void PrintDbgTypes (FILE* F);
+/* Output the types to a debug info file */
+
 void InitTypePool (void);
 /* Initialize the type pool */