diff --git a/src/asm/symbol.c b/src/asm/symbol.c index 4f9f0c22..78367273 100644 --- a/src/asm/symbol.c +++ b/src/asm/symbol.c @@ -102,6 +102,19 @@ uint32_t calchash(char *s) return hash % HASHSIZE; } +/* + * Update a symbol's definition filename and line + */ +void updateSymbolFilename(struct sSymbol *nsym) +{ + if (snprintf(nsym->tzFileName, _MAX_PATH + 1, "%s", + tzCurrentFileName) > _MAX_PATH) { + fatalerror("%s: File name is too long: '%s'", __func__, + tzCurrentFileName); + } + nsym->nFileLine = fstk_GetLine(); +} + /* * Create a new symbol by name */ @@ -133,14 +146,7 @@ struct sSymbol *createsymbol(char *s) (*ppsym)->pMacro = NULL; (*ppsym)->pSection = NULL; (*ppsym)->Callback = NULL; - - if (snprintf((*ppsym)->tzFileName, _MAX_PATH + 1, "%s", - tzCurrentFileName) > _MAX_PATH) { - fatalerror("%s: File name is too long: '%s'", __func__, - tzCurrentFileName); - } - - (*ppsym)->nFileLine = fstk_GetLine(); + updateSymbolFilename(*ppsym); return *ppsym; } @@ -560,6 +566,7 @@ void sym_AddEqu(char *tzSym, int32_t value) nsym->nValue = value; nsym->nType |= SYMF_EQU | SYMF_DEFINED | SYMF_CONST; nsym->pScope = NULL; + updateSymbolFilename(nsym); } } } @@ -633,6 +640,7 @@ void sym_AddSet(char *tzSym, int32_t value) nsym->nValue = value; nsym->nType |= SYMF_SET | SYMF_DEFINED | SYMF_CONST; nsym->pScope = NULL; + updateSymbolFilename(nsym); } } @@ -710,6 +718,8 @@ void sym_AddReloc(char *tzSym) nsym->pScope = scope; nsym->pSection = pCurrentSection; + + updateSymbolFilename(nsym); } } pScope = findsymbol(tzSym, scope); @@ -840,6 +850,7 @@ void sym_AddMacro(char *tzSym) nsym->pScope = NULL; nsym->ulMacroSize = ulNewMacroSize; nsym->pMacro = tzNewMacro; + updateSymbolFilename(nsym); } } } diff --git a/test/asm/label-redefinition.asm b/test/asm/label-redefinition.asm new file mode 100644 index 00000000..e1bc63ae --- /dev/null +++ b/test/asm/label-redefinition.asm @@ -0,0 +1,7 @@ +SECTION "sec", ROM0 + dw Sym +m: MACRO +Sym:: +ENDM + m +Sym:: diff --git a/test/asm/label-redefinition.out b/test/asm/label-redefinition.out new file mode 100644 index 00000000..792aa3e7 --- /dev/null +++ b/test/asm/label-redefinition.out @@ -0,0 +1,3 @@ +ERROR: label-redefinition.asm(7): + 'Sym' already defined in m(6) +error: Assembly aborted in pass 1 (1 errors)!