Fix segfaults when using PC outside a section

This commit is contained in:
ISSOtm
2020-03-27 11:37:29 +01:00
parent 06fe27c516
commit 84cd9f2db9
8 changed files with 16 additions and 2 deletions

View File

@@ -106,7 +106,10 @@ void rpn_Symbol(struct Expression *expr, char *tzSym)
{
struct sSymbol *sym = sym_FindSymbol(tzSym);
if (!sym || !sym_IsConstant(sym)) {
if (sym == pPCSymbol && !pPCSymbol->pSection) {
yyerror("PC has no value outside a section");
rpn_Number(expr, 0);
} else if (!sym || !sym_IsConstant(sym)) {
rpn_Init(expr);
expr->isSymbol = true;

View File

@@ -230,7 +230,9 @@ uint32_t sym_GetConstantValue(char const *s)
struct sSymbol const *psym = sym_FindSymbol(s);
if (psym == pPCSymbol) {
if (pCurrentSection->nOrg == -1)
if (!pCurrentSection)
yyerror("PC has no value outside a section");
else if (pCurrentSection->nOrg == -1)
yyerror("Expected constant PC but section is not fixed");
else
return sym_GetValue(psym);

View File

@@ -0,0 +1 @@
assert @ || 1

View File

@@ -0,0 +1,3 @@
ERROR: assert@-no-sect.asm(1):
PC has no value outside a section
error: Assembly aborted (1 errors)!

View File

2
test/asm/if@-no-sect.asm Normal file
View File

@@ -0,0 +1,2 @@
if {@}
endc

3
test/asm/if@-no-sect.err Normal file
View File

@@ -0,0 +1,3 @@
ERROR: if@-no-sect.asm(1):
PC has no value outside a section
error: Assembly aborted (1 errors)!

0
test/asm/if@-no-sect.out Normal file
View File