shithub: rgbds

Download patch

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