]> git.sur5r.net Git - cc65/commitdiff
Output information about the item counts in the debug info file.
authoruz <uz@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Mon, 8 Aug 2011 17:15:18 +0000 (17:15 +0000)
committeruz <uz@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Mon, 8 Aug 2011 17:15:18 +0000 (17:15 +0000)
git-svn-id: svn://svn.cc65.org/cc65/trunk@5136 b7a2c559-68d2-44c3-8de9-860c34a00d81

src/ld65/dbgfile.c
src/ld65/fileinfo.c
src/ld65/fileinfo.h
src/ld65/library.c
src/ld65/library.h
src/ld65/objdata.c
src/ld65/objdata.h
src/ld65/scopes.c
src/ld65/scopes.h
src/ld65/segments.c
src/ld65/segments.h

index 956dcdc229ee436e8ac100244956759d22cd5867..20c64a1ec13c64b58fa58f5c52b351e5d00943a9 100644 (file)
@@ -102,6 +102,19 @@ 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 
+     * to preallocate the required memory.
+     */
+    fprintf (
+        F,
+        "info\tlib=%u,mod=%u,seg=%u,file=%u,scope=%u\n",
+        LibraryCount (),
+        ObjDataCount (),
+        SegmentCount (),
+        FileInfoCount (),
+        ScopeCount ()
+    );
+
     /* Assign the ids to the items */
     AssignIds ();
 
index 36a93f856b9b7d2ec4ddb650b2a0de155eb31141..6c17fbd4a23b8d722e72b990fe9713c347779f1f 100644 (file)
@@ -193,6 +193,14 @@ FileInfo* ReadFileInfo (FILE* F, ObjData* O)
 
 
 
+unsigned FileInfoCount (void)
+/* Return the total number of file infos */
+{
+    return CollCount (&FileInfos);
+}
+
+
+
 void AssignFileInfoIds (void)
 /* Remove unused file infos and assign the ids to the remaining ones */
 {
index 23c5b4700aba884891a50e93f1f502eb952b1fdb..c4efc5a3a9417eb9910a4a0238b4c1f83d3c2e8b 100644 (file)
@@ -75,6 +75,9 @@ struct FileInfo {
 FileInfo* ReadFileInfo (FILE* F, ObjData* O);
 /* Read a file info from a file and return it */
 
+unsigned FileInfoCount (void);
+/* Return the total number of file infos */
+
 void AssignFileInfoIds (void);
 /* Assign the ids to the file infos */
 
index 56fd1d3a526da0a25db940b3a2a36960baa640e2..b74816e9c83b54f084af6cf82d22f1e49804f59e 100644 (file)
@@ -76,7 +76,7 @@ struct Library {
 static Collection OpenLibs = STATIC_COLLECTION_INITIALIZER;
 
 /* List of used libraries */
-static Collection Libraries = STATIC_COLLECTION_INITIALIZER;
+static Collection LibraryList = STATIC_COLLECTION_INITIALIZER;
 
 /* Flag for library grouping */
 static int Grouping = 0;
@@ -431,8 +431,8 @@ static void LibResolve (void)
          */
         if (CollCount (&L->Modules) > 0) {
             CloseLibrary (L);
-            L->Id = CollCount (&Libraries);
-            CollAppend (&Libraries, L);
+            L->Id = CollCount (&LibraryList);
+            CollAppend (&LibraryList, L);  
         } else {
             /* Delete the library */
             FreeLibrary (L);
@@ -526,15 +526,23 @@ unsigned GetLibId (const Library* L)
 
 
 
+unsigned LibraryCount (void)
+/* Return the total number of libraries */
+{
+    return CollCount (&LibraryList);
+}
+
+
+
 void PrintDbgLibraries (FILE* F)
 /* Output the libraries to a debug info file */
 {
     unsigned I;
 
     /* Output information about all libraries */
-    for (I = 0; I < CollCount (&Libraries); ++I) {
+    for (I = 0; I < CollCount (&LibraryList); ++I) {
         /* Get the library */
-        const Library* L = CollAtUnchecked (&Libraries, I);
+        const Library* L = CollAtUnchecked (&LibraryList, I);
 
         /* Output the info */
         fprintf (F, "library\tid=%u,name=\"%s\"\n", L->Id, GetString (L->Name));
index 6cae0d8cf3c83f544702e954a5e996299f62d1a6..425b32181eb7e30b6e5382d854c4972fc5f3678f 100644 (file)
@@ -81,6 +81,9 @@ const char* GetLibFileName (const struct Library* L);
 unsigned GetLibId (const struct Library* L);
 /* Get the id of a library file. */
 
+unsigned LibraryCount (void);
+/* Return the total number of libraries */
+
 void PrintDbgLibraries (FILE* F);
 /* Output the libraries to a debug info file */
 
index 1635c14a07fa0263e276ecf3f709fcc03a2be79d..15336b35d45f4a8b080fb7f67220c431162bf150 100644 (file)
@@ -216,6 +216,14 @@ struct Scope* GetObjScope (ObjData* O, unsigned Id)
 
 
 
+unsigned ObjDataCount (void)
+/* Return the total number of modules */
+{
+    return CollCount (&ObjDataList);
+}
+
+
+
 void PrintDbgModules (FILE* F)
 /* Output the modules to a debug info file */
 {
index 349384d7a1acdb7d2e135a08f0b3b8ac91479535..975acef01aa4e524e80a0a287cf10b092565ef82 100644 (file)
@@ -145,6 +145,9 @@ struct Section* GetObjSection (ObjData* Obj, unsigned Id);
 struct Scope* GetObjScope (ObjData* Obj, unsigned Id);
 /* Get a scope from an object file checking for a valid index */
 
+unsigned ObjDataCount (void);
+/* Return the total number of modules */
+
 void PrintDbgModules (FILE* F);
 /* Output the modules to a debug info file */
 
index c315ec9cdb17111921295b2073b3c019e67fae87..4f06b6d23411686bb61871a72d9e451df491ee5b 100644 (file)
@@ -98,6 +98,25 @@ Scope* ReadScope (FILE* F, ObjData* Obj, unsigned Id)
 
 
 
+unsigned ScopeCount (void)
+/* Return the total number of scopes */
+{              
+
+    /* Count scopes from all modules we have linked into the output file */
+    unsigned I;
+    unsigned Count = 0;
+    for (I = 0; I < CollCount (&ObjDataList); ++I) {
+        /* Get the object file */
+        const ObjData* O = CollAtUnchecked (&ObjDataList, I);
+
+        /* Account for the scopes in this file */
+        Count += CollCount (&O->Scopes);
+    }
+    return Count;
+}
+
+
+
 void PrintDbgScopes (FILE* F)
 /* Output the scopes to a debug info file */
 {
@@ -132,7 +151,7 @@ void PrintDbgScopes (FILE* F)
             if (SCOPE_HAS_LABEL (S->Flags)) {
                 fprintf (F, ",sym=%u", O->SymBaseId + S->LabelId);
             }
-       
+
             /* Terminate the output line */
             fputc ('\n', F);
         }
index 6c772e43054a6ddf5eb4aeca06769e9a806dcf40..60c1c71b100e905e4065ad8742fd41c5b48cdc4d 100644 (file)
@@ -62,7 +62,7 @@ struct Scope {
     ObjData*                   Obj;            /* Object file that contains the scope */
     unsigned            ParentId;       /* Id of parent scope */
     unsigned            LabelId;        /* Id of the scope label if any */
-    unsigned            LexicalLevel;   /* Lexical level */               
+    unsigned            LexicalLevel;   /* Lexical level */
     unsigned            Flags;
     unsigned            Type;           /* Type of scope */
     unsigned            Name;           /* Name of scope */
@@ -81,6 +81,9 @@ struct Scope {
 Scope* ReadScope (FILE* F, ObjData* Obj, unsigned Id);
 /* Read a scope from a file, insert and return it */
 
+unsigned ScopeCount (void);
+/* Return the total number of scopes */
+
 void PrintDbgScopes (FILE* F);
 /* Output the scopes to a debug info file */
 
index 10f23bbe24ad5c4bf782c7eef734e2df40622c29..ae709d0eb186e6bde67aa278397b583d9de91fdf 100644 (file)
@@ -347,7 +347,7 @@ void SegDump (void)
     unsigned I;
     unsigned long Count;
     unsigned char* Data;
-                             
+
     for (I = 0; I < CollCount (&SegmentList); ++I) {
         const Segment* Seg = CollConstAt (&SegmentList, I);
        Section* S = Seg->SecRoot;
@@ -546,6 +546,14 @@ void SegWrite (const char* TgtName, FILE* Tgt, Segment* S, SegWriteFunc F, void*
 
 
 
+unsigned SegmentCount (void)
+/* Return the total number of segments */
+{
+    return CollCount (&SegmentList);
+}
+
+
+
 static int CmpSegStart (const void* K1, const void* K2)
 /* Compare function for qsort */
 {
@@ -613,7 +621,7 @@ void PrintSegmentMap (FILE* F)
 
 void PrintDbgSegments (FILE* F)
 /* Output the segments to the debug file */
-{                                           
+{
     /* Walk over all segments */
     unsigned I;
     for (I = 0; I < CollCount (&SegmentList); ++I) {
index 5d7e10532a3044207aa53679e696f68daf766b8c..32d7ab114643113dd41b34998ac13bb8d4be25c5 100644 (file)
@@ -147,6 +147,9 @@ void SegWrite (const char* TgtName, FILE* Tgt, Segment* S, SegWriteFunc F, void*
  * called (see description of SegWriteFunc above).
  */
 
+unsigned SegmentCount (void);
+/* Return the total number of segments */
+
 void PrintSegmentMap (FILE* F);
 /* Print a segment map to the given file */