Track export ids of debug symbols and write the to the object file.
git-svn-id: svn://svn.cc65.org/cc65/trunk@5183 b7a2c559-68d2-44c3-8de9-860c34a00d81
This commit is contained in:
@@ -94,6 +94,7 @@ SymEntry* NewSymEntry (const StrBuf* Name, unsigned Flags)
|
|||||||
S->Flags = Flags;
|
S->Flags = Flags;
|
||||||
S->DebugSymId = ~0U;
|
S->DebugSymId = ~0U;
|
||||||
S->ImportId = ~0U;
|
S->ImportId = ~0U;
|
||||||
|
S->ExportId = ~0U;
|
||||||
S->Expr = 0;
|
S->Expr = 0;
|
||||||
S->ExprRefs = AUTO_COLLECTION_INITIALIZER;
|
S->ExprRefs = AUTO_COLLECTION_INITIALIZER;
|
||||||
S->ExportSize = ADDR_SIZE_DEFAULT;
|
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)
|
unsigned GetSymInfoFlags (const SymEntry* S, long* ConstVal)
|
||||||
/* Return a set of flags used when writing symbol information into a file.
|
/* 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
|
* If the SYM_CONST bit is set, ConstVal will contain the constant value
|
||||||
|
|||||||
@@ -95,7 +95,8 @@ struct SymEntry {
|
|||||||
*/
|
*/
|
||||||
unsigned Flags; /* Symbol flags */
|
unsigned Flags; /* Symbol flags */
|
||||||
unsigned DebugSymId; /* Debug symbol id */
|
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 */
|
struct ExprNode* Expr; /* Symbol expression */
|
||||||
Collection ExprRefs; /* Expressions using this symbol */
|
Collection ExprRefs; /* Expressions using this symbol */
|
||||||
unsigned char ExportSize; /* Export address size */
|
unsigned char ExportSize; /* Export address size */
|
||||||
@@ -338,6 +339,9 @@ long GetSymVal (SymEntry* Sym);
|
|||||||
unsigned GetSymImportId (const SymEntry* Sym);
|
unsigned GetSymImportId (const SymEntry* Sym);
|
||||||
/* Return the import id for the given symbol */
|
/* 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);
|
unsigned GetSymInfoFlags (const SymEntry* Sym, long* ConstVal);
|
||||||
/* Return a set of flags used when writing symbol information into a file.
|
/* 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
|
* If the SYM_CONST bit is set, ConstVal will contain the constant value
|
||||||
|
|||||||
@@ -592,9 +592,9 @@ void SymCheck (void)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Count exports */
|
/* Count exports, assign the export ID */
|
||||||
if (S->Flags & SF_EXPORT) {
|
if (S->Flags & SF_EXPORT) {
|
||||||
++ExportCount;
|
S->ExportId = ExportCount++;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* If the symbol is defined but has an unknown address size,
|
/* If the symbol is defined but has an unknown address size,
|
||||||
@@ -865,10 +865,13 @@ void WriteDbgSyms (void)
|
|||||||
ObjWriteVar (Size);
|
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)) {
|
if (SYM_IS_IMPORT (SymFlags)) {
|
||||||
ObjWriteVar (GetSymImportId (S));
|
ObjWriteVar (GetSymImportId (S));
|
||||||
}
|
}
|
||||||
|
if (SYM_IS_EXPORT (SymFlags)) {
|
||||||
|
ObjWriteVar (GetSymExportId (S));
|
||||||
|
}
|
||||||
|
|
||||||
/* Write the line infos */
|
/* Write the line infos */
|
||||||
WriteLineInfo (&S->LineInfos);
|
WriteLineInfo (&S->LineInfos);
|
||||||
|
|||||||
Reference in New Issue
Block a user