shithub: rgbds

Download patch

ref: 0f321bc7977ad34c93e1a4857e3a21e6f997f1ad
parent: 94d07c78d846f1a7a2af837f563a35bce468963a
author: martendo <51766598+martendo@users.noreply.github.com>
date: Tue Aug 17 14:03:46 EDT 2021

Fix section merge alignment error message (#919)

Co-authored-by: Eldred Habert <eldredhabert0@gmail.com>

--- a/src/asm/section.c
+++ b/src/asm/section.c
@@ -160,9 +160,9 @@
 		/* Check if alignment offsets are compatible */
 		} else if ((alignOffset & mask(sect->align))
 			   != (sect->alignOfs & mask(alignment))) {
-			fail("Section already declared with incompatible %" PRIu8
+			fail("Section already declared with incompatible %u"
 			     "-byte alignment (offset %" PRIu16 ")\n",
-			     sect->align, sect->alignOfs);
+			     1u << sect->align, sect->alignOfs);
 		} else if (alignment > sect->align) {
 			// If the section is not fixed, its alignment is the largest of both
 			sect->align = alignment;
@@ -213,9 +213,9 @@
 				     PRIx32 "\n", sect->org);
 		/* Check if alignment offsets are compatible */
 		} else if ((curOfs & mask(sect->align)) != (sect->alignOfs & mask(alignment))) {
-			fail("Section already declared with incompatible %" PRIu8
+			fail("Section already declared with incompatible %u"
 			     "-byte alignment (offset %" PRIu16 ")\n",
-			     sect->align, sect->alignOfs);
+			     1u << sect->align, sect->alignOfs);
 		} else if (alignment > sect->align) {
 			// If the section is not fixed, its alignment is the largest of both
 			sect->align = alignment;
--- /dev/null
+++ b/test/asm/incompatible-alignment.asm
@@ -1,0 +1,8 @@
+; These section fragments have alignments that make them non-contiguous,
+; and thus are incompatible
+
+SECTION FRAGMENT "Test", ROM0,ALIGN[8]
+
+	ds 1
+
+SECTION FRAGMENT "Test", ROM0,ALIGN[8]
--- /dev/null
+++ b/test/asm/incompatible-alignment.err
@@ -1,0 +1,4 @@
+ERROR: incompatible-alignment.asm(8):
+    Section already declared with incompatible 256-byte alignment (offset 0)
+FATAL: incompatible-alignment.asm(8):
+    Cannot create section "Test" (1 error)
--- a/test/link/section-union/align-ofs-conflict.out
+++ b/test/link/section-union/align-ofs-conflict.out
@@ -1,6 +1,6 @@
 error: Section "conflicting alignment" is defined with conflicting 8-byte alignment (offset 7) and 16-byte alignment (offset 14)
 ---
 ERROR: <stdin>(18):
-    Section already declared with incompatible 3-byte alignment (offset 7)
+    Section already declared with incompatible 8-byte alignment (offset 7)
 FATAL: <stdin>(18):
     Cannot create section "conflicting alignment" (1 error)
--- a/test/link/section-union/different-ofs.out
+++ b/test/link/section-union/different-ofs.out
@@ -1,6 +1,6 @@
 error: Section "conflicting alignment" is defined with conflicting 8-byte alignment (offset 7) and 8-byte alignment (offset 6)
 ---
 ERROR: <stdin>(18):
-    Section already declared with incompatible 3-byte alignment (offset 7)
+    Section already declared with incompatible 8-byte alignment (offset 7)
 FATAL: <stdin>(18):
     Cannot create section "conflicting alignment" (1 error)