]> git.sur5r.net Git - cc65/commitdiff
Track export ids of debug symbols and write the to the object file.
authoruz <uz@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Tue, 16 Aug 2011 12:52:56 +0000 (12:52 +0000)
committeruz <uz@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Tue, 16 Aug 2011 12:52:56 +0000 (12:52 +0000)
git-svn-id: svn://svn.cc65.org/cc65/trunk@5183 b7a2c559-68d2-44c3-8de9-860c34a00d81

src/ca65/symentry.c
src/ca65/symentry.h
src/ca65/symtab.c

index 81e63df9866eea6b9617e30a632792faecfcf476..c9203c06eb325116af4f9c3e4326729d62195e93 100644 (file)
@@ -94,6 +94,7 @@ SymEntry* NewSymEntry (const StrBuf* Name, unsigned Flags)
     S->Flags             = Flags;
     S->DebugSymId = ~0U;
     S->ImportId   = ~0U;
+    S->ExportId   = ~0U;
     S->Expr       = 0;
     S->ExprRefs   = AUTO_COLLECTION_INITIALIZER;
     S->ExportSize = ADDR_SIZE_DEFAULT;
@@ -680,6 +681,15 @@ unsigned GetSymImportId (const SymEntry* S)
 
 
 
+unsigned GetSymExportId (const SymEntry* S)
+/* Return the export id for the given symbol */
+{
+    PRECONDITION (S != 0 && (S->Flags & SF_IMPORT) && S->ExportId != ~0U);
+    return S->ExportId;
+}
+
+
+
 unsigned GetSymInfoFlags (const SymEntry* S, long* ConstVal)
 /* Return a set of flags used when writing symbol information into a file.
  * If the SYM_CONST bit is set, ConstVal will contain the constant value
index 32c11ca5be1dccbd223722cb5c8f00746673b3a5..02afbcfdc2a5c825dfecc8b7e8d355f90558648d 100644 (file)
@@ -95,7 +95,8 @@ struct SymEntry {
                                          */
     unsigned            Flags;         /* Symbol flags */
     unsigned            DebugSymId;     /* Debug symbol id */
-    unsigned                   ImportId;       /* Id of import if this is one */
+    unsigned            ImportId;       /* Id of import if this is one */
+    unsigned            ExportId;       /* Id of export if this is one */
     struct ExprNode*    Expr;          /* Symbol expression */
     Collection          ExprRefs;       /* Expressions using this symbol */
     unsigned char       ExportSize;     /* Export address size */
@@ -338,6 +339,9 @@ long GetSymVal (SymEntry* Sym);
 unsigned GetSymImportId (const SymEntry* Sym);
 /* Return the import id for the given symbol */
 
+unsigned GetSymExportId (const SymEntry* Sym);
+/* Return the export id for the given symbol */
+
 unsigned GetSymInfoFlags (const SymEntry* Sym, long* ConstVal);
 /* Return a set of flags used when writing symbol information into a file.
  * If the SYM_CONST bit is set, ConstVal will contain the constant value
index f835dc60c4817930023abaebd9b6c633663a211c..b4d842661eb47c381ad57b3a9bca398306f6cbb0 100644 (file)
@@ -592,9 +592,9 @@ void SymCheck (void)
                }
            }
 
-            /* Count exports */
+            /* Count exports, assign the export ID */
            if (S->Flags & SF_EXPORT) {
-               ++ExportCount;
+                S->ExportId = ExportCount++;
            }
 
             /* If the symbol is defined but has an unknown address size,
@@ -865,10 +865,13 @@ void WriteDbgSyms (void)
                     ObjWriteVar (Size);
                 }
 
-                /* If the symbol is an import, write out its import id */
+                /* If the symbol is an im- or export, write out the ids */
                 if (SYM_IS_IMPORT (SymFlags)) {
                     ObjWriteVar (GetSymImportId (S));
                 }
+                if (SYM_IS_EXPORT (SymFlags)) {
+                    ObjWriteVar (GetSymExportId (S));
+                }
 
                /* Write the line infos */
                WriteLineInfo (&S->LineInfos);