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
+4 -1
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;
+3 -1
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);
+1
View File
@@ -0,0 +1 @@
assert @ || 1
+3
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
View File
@@ -0,0 +1,2 @@
if {@}
endc
+3
View File
@@ -0,0 +1,3 @@
ERROR: if@-no-sect.asm(1):
PC has no value outside a section
error: Assembly aborted (1 errors)!
View File