]> git.sur5r.net Git - cc65/commitdiff
More changes to account for modules without debug info.
authoruz <uz@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Thu, 18 Aug 2011 10:26:13 +0000 (10:26 +0000)
committeruz <uz@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Thu, 18 Aug 2011 10:26:13 +0000 (10:26 +0000)
git-svn-id: svn://svn.cc65.org/cc65/trunk@5204 b7a2c559-68d2-44c3-8de9-860c34a00d81

src/dbginfo/dbginfo.c
src/dbginfo/dbginfo.h

index d0e58d4de95af35b393ff3de0ca2348042e3356c..c2179abc11c859391d77ca9200928ad130490a3b 100644 (file)
@@ -1254,8 +1254,12 @@ static void CopyModInfo (cc65_moduledata* D, const ModInfo* M)
         D->library_id = M->Lib.Info->Id;
     } else {
         D->library_id = CC65_INV_ID;
+    }                      
+    if (M->MainScope) {
+        D->scope_id   = M->MainScope->Id;
+    } else {
+        D->scope_id   = CC65_INV_ID;
     }
-    D->scope_id       = M->MainScope->Id;
 }
 
 
@@ -4313,14 +4317,20 @@ static void ProcessScopeInfo (InputData* D)
         }
     }
 
-    /* Walk over all modules, check that eacxh one has a main scope assigned,
-     * then sort the scopes by name
+    /* Walk over all modules. If a module doesn't have scopes, it wasn't 
+     * compiled with debug info which is ok. If it has debug info, it must
+     * also have a main scope. If there are scopes, sort them by name.
      */
     for (I = 0; I < CollCount (&D->Info->ModInfoById); ++I) {
 
         /* Get this module */
         ModInfo* M = CollAt (&D->Info->ModInfoById, I);
 
+        /* Ignore modules without any scopes (no debug info) */
+        if (CollCount (&M->ScopeInfoByName) == 0) {
+            continue;
+        }
+
         /* Must have a main scope */
         if (M->MainScope == 0) {
             ParseError (D,
index 71f7c5a7b373b6d2cf6bcadcfa023be1695ea726..664966f48599408751b81069c23593bb579c696c 100644 (file)
@@ -205,7 +205,11 @@ void cc65_free_lineinfo (cc65_dbginfo handle, const cc65_lineinfo* info);
 
 
 
-/* Module information */
+/* Module information 
+ * Notes:
+ *   - scope_id contains CC65_INV_ID if the module was compiled without
+ *     debug information.
+ */
 typedef struct cc65_moduledata cc65_moduledata;
 struct cc65_moduledata {
     unsigned            module_id;      /* The internal module id */
@@ -406,15 +410,15 @@ typedef enum {
 /* Notes:
  *  - If the symbol is segment relative, the segment id gives segment
  *    information, otherwise it contains CC65_INV_ID.
- *  - If the type is CC65_SYM_IMPORT, export_id may contain the id of the 
+ *  - If the type is CC65_SYM_IMPORT, export_id may contain the id of the
  *    export. This is not the case if the module contaiing the export doesn't
  *    have debug information.
  *  - For an import, the fields symbol_value and segment_id are taken from
  *    the export, if it is available, since imports have no value or segments
  *    by itself.
- *  - For an import symbol_type and symbol_size are more or less unusable 
+ *  - For an import symbol_type and symbol_size are more or less unusable
  *    because they don't have a meaning for imports.
- *  - For normal symbols (not cheap locals) parent_id contains CC65_INV_ID, 
+ *  - For normal symbols (not cheap locals) parent_id contains CC65_INV_ID,
  *    for cheap locals it contains the symbol id of the parent symbol.
  */
 typedef struct cc65_symboldata cc65_symboldata;