From 9f82fa4cf7df9e18d8b44bc91c525411a51f8e2e Mon Sep 17 00:00:00 2001 From: ISSOtm Date: Tue, 7 Apr 2020 15:45:30 +0200 Subject: [PATCH] Fix `BANK(@)` outside sections causing crashes --- src/asm/rpn.c | 5 ++++- src/link/patch.c | 7 ++++++- test/asm/assert-nosect-bank.asm | 1 + test/asm/assert-nosect-bank.err | 3 +++ test/asm/assert-nosect-bank.out | 0 5 files changed, 14 insertions(+), 2 deletions(-) create mode 100644 test/asm/assert-nosect-bank.asm create mode 100644 test/asm/assert-nosect-bank.err create mode 100644 test/asm/assert-nosect-bank.out diff --git a/src/asm/rpn.c b/src/asm/rpn.c index 6ca9174c..3388cd1a 100644 --- a/src/asm/rpn.c +++ b/src/asm/rpn.c @@ -143,7 +143,10 @@ void rpn_BankSelf(struct Expression *expr) { rpn_Init(expr); - if (pCurrentSection->nBank == -1) { + if (!pCurrentSection) { + yyerror("PC has no bank outside a section"); + expr->nVal = 1; + } else if (pCurrentSection->nBank == -1) { makeUnknown(expr, "Current section's bank is not known"); expr->nRPNPatchSize++; *reserveSpace(expr, 1) = RPN_BANK_SELF; diff --git a/src/link/patch.c b/src/link/patch.c index 50733952..e25ddd12 100644 --- a/src/link/patch.c +++ b/src/link/patch.c @@ -282,7 +282,12 @@ static int32_t computeRPNExpr(struct Patch const *patch, break; case RPN_BANK_SELF: - value = patch->pcSection->bank; + if (!patch->pcSection) { + error("%s: PC has no bank outside a section"); + value = 1; + } else { + value = patch->pcSection->bank; + } break; case RPN_HRAM: diff --git a/test/asm/assert-nosect-bank.asm b/test/asm/assert-nosect-bank.asm new file mode 100644 index 00000000..50bce89d --- /dev/null +++ b/test/asm/assert-nosect-bank.asm @@ -0,0 +1 @@ +assert BANK(@) == 1 diff --git a/test/asm/assert-nosect-bank.err b/test/asm/assert-nosect-bank.err new file mode 100644 index 00000000..0477a71a --- /dev/null +++ b/test/asm/assert-nosect-bank.err @@ -0,0 +1,3 @@ +ERROR: assert-nosect-bank.asm(1): + PC has no bank outside a section +error: Assembly aborted (1 errors)! diff --git a/test/asm/assert-nosect-bank.out b/test/asm/assert-nosect-bank.out new file mode 100644 index 00000000..e69de29b