mirror of
https://github.com/gbdev/rgbds.git
synced 2025-11-21 02:32:06 +00:00
Fix segfault in createpatch() when symbol is an inexistant local label or bank
Fixed as follows: if the symbol doesn't exist, don't add it to the relocation
table. The functions calling createpatch will nevertheless increment PC
correctly.
Test case:
SECTION "CODE", CODE
glob:
jp .loc
; from test/asm/banknoexist.asm:
SECTION "sec", ROM0
db BANK(noexist)
See also issue #68
This commit is contained in:
committed by
Anthony J. Bentley
parent
81675bc4c7
commit
49809f6caf
@@ -386,7 +386,10 @@ createpatch(ULONG type, struct Expression * expr)
|
|||||||
rpnexpr[rpnptr++] = value >> 16;
|
rpnexpr[rpnptr++] = value >> 16;
|
||||||
rpnexpr[rpnptr++] = value >> 24;
|
rpnexpr[rpnptr++] = value >> 24;
|
||||||
} else {
|
} else {
|
||||||
symptr = addsymbol(sym_FindSymbol(tzSym));
|
struct sSymbol *sym;
|
||||||
|
if ((sym = sym_FindSymbol(tzSym)) == NULL)
|
||||||
|
break;
|
||||||
|
symptr = addsymbol(sym);
|
||||||
rpnexpr[rpnptr++] = RPN_SYM;
|
rpnexpr[rpnptr++] = RPN_SYM;
|
||||||
rpnexpr[rpnptr++] = symptr & 0xFF;
|
rpnexpr[rpnptr++] = symptr & 0xFF;
|
||||||
rpnexpr[rpnptr++] = symptr >> 8;
|
rpnexpr[rpnptr++] = symptr >> 8;
|
||||||
@@ -394,15 +397,19 @@ createpatch(ULONG type, struct Expression * expr)
|
|||||||
rpnexpr[rpnptr++] = symptr >> 24;
|
rpnexpr[rpnptr++] = symptr >> 24;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case RPN_BANK:
|
case RPN_BANK: {
|
||||||
|
struct sSymbol *sym;
|
||||||
symptr = 0;
|
symptr = 0;
|
||||||
while ((tzSym[symptr++] = rpn_PopByte(expr)) != 0);
|
while ((tzSym[symptr++] = rpn_PopByte(expr)) != 0);
|
||||||
symptr = addsymbol(sym_FindSymbol(tzSym));
|
if ((sym = sym_FindSymbol(tzSym)) == NULL)
|
||||||
|
break;
|
||||||
|
symptr = addsymbol(sym);
|
||||||
rpnexpr[rpnptr++] = RPN_BANK;
|
rpnexpr[rpnptr++] = RPN_BANK;
|
||||||
rpnexpr[rpnptr++] = symptr & 0xFF;
|
rpnexpr[rpnptr++] = symptr & 0xFF;
|
||||||
rpnexpr[rpnptr++] = symptr >> 8;
|
rpnexpr[rpnptr++] = symptr >> 8;
|
||||||
rpnexpr[rpnptr++] = symptr >> 16;
|
rpnexpr[rpnptr++] = symptr >> 16;
|
||||||
rpnexpr[rpnptr++] = symptr >> 24;
|
rpnexpr[rpnptr++] = symptr >> 24;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
rpnexpr[rpnptr++] = rpndata;
|
rpnexpr[rpnptr++] = rpndata;
|
||||||
|
|||||||
Reference in New Issue
Block a user