ref: 69d7f845025dfcc3017e58453273be46a0107993
parent: e970b6d6eb50125717e637375bd893f223d2c7e7
author: ISSOtm <eldredhabert0@gmail.com>
date: Fri May 21 05:06:48 EDT 2021
Reset LOAD offset when changing SECTIONs This would cause spurious section overflow messages, since the load offset is added to the section's when computing its size.
--- a/src/asm/section.c
+++ b/src/asm/section.c
@@ -418,6 +418,7 @@
changeSection();
curOffset = mod == SECTION_UNION ? 0 : sect->size;
+ loadOffset = 0; // This is still used when checking for section size overflow!
currentSection = sect;
}
@@ -989,16 +990,15 @@
if (currentLoadSection)
fatalerror("Cannot change the section within a `LOAD` block!\n");
- struct SectionStackEntry *sect;
+ struct SectionStackEntry *entry = sectionStack;
- sect = sectionStack;
changeSection();
- currentSection = sect->section;
- currentLoadSection = sect->loadSection;
- sym_SetCurrentSymbolScope(sect->scope);
- curOffset = sect->offset;
- loadOffset = sect->loadOffset;
+ currentSection = entry->section;
+ currentLoadSection = entry->loadSection;
+ sym_SetCurrentSymbolScope(entry->scope);
+ curOffset = entry->offset;
+ loadOffset = entry->loadOffset;
- sectionStack = sect->next;
- free(sect);
+ sectionStack = entry->next;
+ free(entry);
}
--- /dev/null
+++ b/test/asm/load-pushs-load.asm
@@ -1,0 +1,27 @@
+
+SECTION "Output", ROM0[0]
+ dw Rom0Label1
+ dw Rom0Label2
+ dw SramLabel1
+ dw SramLabel2
+ dw RomxLabel1
+ dw RomxLabel2
+ dw HramLabel
+
+
+SECTION "A", ROM0[$1324]
+Rom0Label1:
+LOAD "LA", SRAM[$BEAD]
+ SramLabel1:
+ PUSHS
+ ; not inside a section or load section here yet
+ SECTION "B", ROMX[$4698]
+ RomxLabel1:
+ LOAD "LB", HRAM[$FF86]
+ HramLabel:
+ ENDL
+ RomxLabel2:
+ POPS
+ SramLabel2:
+ENDL
+Rom0Label2:
--- /dev/null
+++ b/test/asm/load-pushs-load.out.bin
@@ -1,0 +1,1 @@
+$$�����F�F�
\ No newline at end of file
--- /dev/null
+++ b/test/asm/load-pushs.asm
@@ -1,0 +1,15 @@
+
+SECTION "Output", ROM0[0]
+ db SIZEOF("ROM CODE")
+ db SIZEOF("RAM CODE")
+ db SIZEOF("HRAM")
+
+
+SECTION "ROM CODE",ROM0
+ ds $80
+LOAD "RAM CODE",SRAM
+PUSHS
+SECTION "HRAM",HRAM
+ ds 1
+POPS
+ENDL
--- /dev/null
+++ b/test/asm/load-pushs.out.bin
@@ -1,0 +1,1 @@
+
\ No newline at end of file