diff --git a/include/asm/symbol.h b/include/asm/symbol.h index 490786ce..d3cfb89a 100644 --- a/include/asm/symbol.h +++ b/include/asm/symbol.h @@ -101,7 +101,7 @@ uint32_t sym_GetConstantValue(char const *s); struct sSymbol *sym_FindSymbol(char const *tzName); char *sym_GetStringValue(struct sSymbol const *sym); struct sSymbol *sym_AddMacro(char const *tzSym, int32_t nDefLineNo); -void sym_Ref(char const *tzSym); +struct sSymbol *sym_Ref(char const *tzSym); struct sSymbol *sym_AddString(char const *tzSym, char const *tzValue); uint32_t sym_GetDefinedValue(char const *s); void sym_Purge(char const *tzName); diff --git a/src/asm/symbol.c b/src/asm/symbol.c index 9e204aad..abe9a6c1 100644 --- a/src/asm/symbol.c +++ b/src/asm/symbol.c @@ -500,9 +500,13 @@ struct sSymbol *sym_AddReloc(char const *tzSym) */ void sym_Export(char const *tzSym) { - sym_Ref(tzSym); struct sSymbol *nsym = sym_FindSymbol(tzSym); + /* If the symbol doesn't exist, create a ref that can be purged */ + if (!nsym) { + nsym = sym_Ref(tzSym); + nsym->isReferenced = false; + } nsym->isExported = true; } @@ -531,7 +535,7 @@ struct sSymbol *sym_AddMacro(char const *tzSym, int32_t nDefLineNo) * Flag that a symbol is referenced in an RPN expression * and create it if it doesn't exist yet */ -void sym_Ref(char const *tzSym) +struct sSymbol *sym_Ref(char const *tzSym) { struct sSymbol *nsym = sym_FindSymbol(tzSym); @@ -551,6 +555,8 @@ void sym_Ref(char const *tzSym) nsym->type = SYM_REF; } nsym->isReferenced = true; + + return nsym; } /*