ISSOtm
d43ef53745
Remove unreachable bank range check
...
The only case where it is not generated by our own code
(which we ought to be `assume`ing is correct) is when the bank
is used-specified, but that is caught by an earlier check.
2026-09-18 21:19:37 +02:00
ISSOtm
ef709fade6
Refactor and fix sect packing's bank iteration
...
Moving both pieces of related code together, as it were.
This also ends up changing the behaviour of scrambling,
where sections could “leak” out of the scrambling's bank pool
and resume being placed normally.
We have discussed it offline, and decided that this was a bug.
The test suite has been updated accordingly, which even gives
the occasion to move this test from a special case to the main
generic loop!
2026-09-18 21:19:37 +02:00
ISSOtm
8685bcbfbf
Refactor all scrambling-related dispatch into a single func
...
Yay for (poor man's) pattern matching! 🦀
2026-09-18 21:19:37 +02:00
ISSOtm
1ca4282e31
Move a function closer to its usage point
...
Trying to keep code grouped together well.
2026-09-18 21:19:37 +02:00
Eldred Habert
afe1f01d00
Fix linker script align 16 in floating address context ( #2115 )
...
Turns out we were just using the wrong var lmao
2026-09-17 20:46:55 -04:00
ISSOtm
f234796428
Avoid allocating for our linkdef names ( #2111 )
...
This reverts a change introduced in fd78a9ae8 , though it wasn't that commit's main point
so I'm feeling okay with undoing that.
This feels like an overkill change, using a static string is good enough for this
since we never modify this. I have considered using `string_view` instead, to have
the best of both worlds, but that's not NUL-terminated so our print functions
get a little grumpy.
2026-09-17 13:58:30 -04:00
ISSOtm
0b9f8ab523
Use Section::typeInfo() more
2026-09-17 13:19:26 -04:00
Eldred Habert
3b250d5386
Emit auxiliary files even if asserts fail ( #2104 )
...
Closes #2100
2026-09-17 17:47:53 +02:00
Rangi
b4988afc8a
Fix RGBLINK ignoring alignment constraints when placing empty sections
...
Fixes #2095
2026-09-17 11:16:18 -04:00
ISSOtm
960f82126f
Fix to actually allow one-past-the-end zero-sized sections in linker scripts
2026-09-17 10:19:47 -04:00
ISSOtm
b9b5c9a2b4
Avoid reporting redundant errors on too-large fixed sect addr
...
This would happen for any such section of non-zero size.
2026-09-17 10:17:26 -04:00
Rangi
aa657cd481
Make array buffers for snprintf just large enough for their uint32_t and uint16_t types
...
Note that `bank` can store 9 bytes (8 digits plus NUL terminator)
even though `section.bank` should never go above 16-bit (4 digits).
2026-09-17 10:12:05 -04:00
ISSOtm
9f175f7923
Use SectionTypeInfo struct member functions for section type info
2026-09-17 09:33:21 -04:00
Rangi
589616338f
Remove redundant conditional check ( #2099 )
...
If `nbBanks > 1` is true, then `sectionTypeInfo[type].firstBank !=
sectionTypeInfo[type].lastBank` must also be true, so checking
whether either is true is unnecessary.
(On the other hand, if `nbBanks == 1`, then we might still have
`sectionTypeInfo[type].firstBank != sectionTypeInfo[type].lastBank`,
since only one of many valid banks for `type` could be in use.)
2026-09-17 00:27:22 +02:00
ISSOtm
6587941512
Allow scrambling SRAM banks up to the full 8-bit range
2026-09-15 23:06:19 -04:00
Rangi
febdf63896
Fix invalid UTF-8 byte $E2 at the end of a symbol name reading past the string's end ( #2092 )
...
This is only possible in an invalid object file, but we do have other safety checks for those.
Assisted-by: opencode:big-pickle
2026-09-15 20:22:06 -04:00
Rangi
b0f49a36b7
Fix -t/--tiny for ROMX in bank 1, and -w/--wramx for WRAMX in bank 1 ( #2089 )
2026-09-14 15:53:45 -04:00
Rangi
a662cad7ce
Fix infinite loop when an aligned HRAM section cannot be placed ( #2064 )
2026-09-11 05:21:26 +02:00
Max Freedom Pollard
631ef003e7
Avoid signed overflow in RGBLINK's +, -, and * ( #2060 )
...
RGBASM computes these with unsigned arithmetic and casts back, since
signed overflow is UB in C++, but RGBLINK's RPN evaluator used `int32_t`
directly, so `src/link/patch.cpp` tripped UBSan on lines 117, 121, and
124. Share the three operators through `opmath.cpp` so both evaluators
stay in step.
2026-09-07 16:15:07 -04:00
Rangi
0888600cb7
Avoid OOM allocation error from invalid too-high bank numbers
2026-08-22 18:31:26 -04:00
Rangi
8bc7de35f9
Prevent SECTION FRAGMENT combined sizes from overflowing their uint16_t size
2026-08-22 18:24:17 -04:00
Rangi
ed0a2d1075
Fix infinite loop when a symbol name in an invalid object file starts with an invalid UTF-8 byte like 0xC0
2026-08-22 18:06:32 -04:00
Rangi
ec5e6cbabb
Handle -Wtruncation for link-time jr values
...
Fixes #2028
2026-07-21 14:51:58 -04:00
Rangi
c691ec6607
Use std::optional<uint64_t> instead of long with a special -1 sentinel for seekSize
2026-07-21 14:31:05 -04:00
Rangi
9def9c9aa8
Fix an SDAS object error message to use the valid section name variable
2026-07-21 13:41:53 -04:00
Rangi
106ec399d5
Fix reading value of relocations symbol/section index from SDAS objects
2026-07-21 13:14:35 -04:00
Rangi
d9c0d37fd5
Explicitly allow JR offsets to wrap around in RGBLINK
...
This reverts commit f27a8132d9 .
2026-07-20 19:23:11 -04:00
Rangi
c0e2f8340b
Output negative values with correct with in .sym files
2026-07-20 00:09:06 -04:00
Rangi
8883251bf9
Avoid UB from FileStackNodeType(type) on an invalid type
2026-07-20 00:06:09 -04:00
Rangi
f27a8132d9
Avoid truncating too-large JR offset from an invalid object file
2026-07-20 00:02:39 -04:00
Rangi
8d2275dc48
Use rpnErrorAt wrapper to ensure setting isError on all RPN errors
...
Two possible RPN errors were missing `isError = true;`
2026-07-19 23:45:45 -04:00
Rangi
57c9bab3a5
Addresses are 16-bit in .map files, consistent with .sym files
2026-07-15 22:59:50 -04:00
Rangi
4ada3e85d8
Avoid overflow for very large ROMs (e.g. TPP1)
2026-07-15 22:57:25 -04:00
Rangi
ba4a7f2e6a
Explicitly assume what was verified earlier by readSection
2026-07-15 22:56:43 -04:00
Rangi
b0948566bb
Fail-safe treat 16-bit alignment as a fixed address even in RGBLINK
...
RGBASM does this itself, so should not output sections with 16-bit
alignment, but an invalid object file could otherwise cause
`getPlacement` to infinitely loop.
2026-07-15 22:46:57 -04:00
Rangi
b13b0c8eb8
Fix the same shifting UB for SDAS objects as for RGBDS ones
2026-07-14 11:13:30 -04:00
Rangi
7e2a3491a5
Encapsulate fseek+ftell idiom in seekSize
...
This allows a single check for the return value of `seekSize`
to verify all three `fseek`+`ftell`+`fseek` calls.
2026-07-14 01:32:18 -04:00
Rangi
19e60d9864
Fix large ds in linker script overflowing the PC
2026-07-14 00:42:42 -04:00
Rangi
5869e0dc60
Fix RGBLINK scrambling algorithm to work for SRAM
...
Since SRAM sections start from 0, we had been using a signed
`int8_t curScrambleSRAM` counter to allow 0 as a scrambled bank,
but this actually just placed all floating SRAM sections in bank 0.
2026-07-13 22:39:41 -04:00
Rangi
304cbb464f
Factor out verboseDo to encapsulate magenta output color
2026-07-13 18:05:55 -04:00
Rangi
f0419eb183
More guards against invalid object file patch data
2026-07-13 17:47:38 -04:00
Rangi
08354cf573
Explicitly encode assumption that an overlapping section exists
2026-07-13 17:47:38 -04:00
Rangi
417b5212d4
Fix OOM for too-small overlay files in 32K mode (rgblink -t)
2026-07-13 16:17:30 -04:00
Rangi
66312f55dd
Avoid unsigned overflow/truncation from bad offset values in invalid object files
2026-07-13 13:17:09 -04:00
Rangi
e9fa1e4e94
Avoid closing stdin/stdout/stderr standard streams
2026-07-13 13:02:46 -04:00
Rangi
0e1e5e80f6
Use correct PRIu32 format spec for uint32_t usedTotal
2026-07-10 17:01:43 -04:00
Rangi
b8011947a8
Correct assumption to avoid UB with 1 << 31
2026-07-09 21:36:34 -04:00
Rangi
30fd4514dc
Add fail-safe for invalid RPN commands in bad object files
2026-07-07 17:02:46 -04:00
Rangi
08e83601f5
Fix CRLF check in parsing SDAS objects
2026-07-07 17:02:46 -04:00
Rangi
e606f4e997
Fix condition for invalid bank range check ( #2016 )
2026-07-07 17:02:35 -04:00