rgblink adjusts patches' PC offsets when merging FRAGMENTs

Fixes #869
This commit is contained in:
Rangi
2021-05-02 14:57:54 -04:00
committed by Eldred Habert
parent 9ab9d0f39c
commit 296e5489c9
8 changed files with 37 additions and 0 deletions

View File

@@ -165,6 +165,9 @@ static void mergeSections(struct Section *target, struct Section *other, enum Se
if (!target->data)
errx(1, "Failed to concatenate \"%s\"'s fragments", target->name);
memcpy(target->data + target->size - other->size, other->data, other->size);
/* Adjust patches' PC offsets */
for (uint32_t patchID = 0; patchID < other->nbPatches; patchID++)
other->patches[patchID].pcOffset += other->offset;
}
break;

View File

@@ -0,0 +1,4 @@
SECTION FRAGMENT "output", ROM0
LOAD FRAGMENT "loaded", SRAM
ds 128
ENDL

View File

@@ -0,0 +1,6 @@
SECTION FRAGMENT "output", ROM0
LOAD FRAGMENT "loaded", SRAM
label:
jr nz, label2
label2:
ENDL

Binary file not shown.

View File

@@ -0,0 +1,2 @@
SECTION FRAGMENT "output", ROM0
ds 128

View File

@@ -0,0 +1,4 @@
SECTION FRAGMENT "output", ROM0
label:
jr nz, label2
label2:

Binary file not shown.

View File

@@ -151,6 +151,24 @@ rc=$(($? || $rc))
tryCmp overlay/out.gb $gbtemp
rc=$(($? || $rc))
i="section-fragment/jr-offset.asm"
startTest
$RGBASM -o $otemp section-fragment/jr-offset/a.asm
$RGBASM -o $gbtemp2 section-fragment/jr-offset/b.asm
rgblinkQuiet -o $gbtemp $otemp $gbtemp2
dd if=$gbtemp count=1 bs=$(printf %s $(wc -c < section-fragment/jr-offset/ref.out.bin)) > $otemp 2>/dev/null
tryCmp section-fragment/jr-offset/ref.out.bin $otemp
rc=$(($? || $rc))
i="section-fragment/jr-offset-load.asm"
startTest
$RGBASM -o $otemp section-fragment/jr-offset-load/a.asm
$RGBASM -o $gbtemp2 section-fragment/jr-offset-load/b.asm
rgblinkQuiet -o $gbtemp $otemp $gbtemp2
dd if=$gbtemp count=1 bs=$(printf %s $(wc -c < section-fragment/jr-offset-load/ref.out.bin)) > $otemp 2>/dev/null
tryCmp section-fragment/jr-offset-load/ref.out.bin $otemp
rc=$(($? || $rc))
i="section-union/good.asm"
startTest
$RGBASM -o $otemp section-union/good/a.asm