Sort .sym files in ascending order, and test for it (#1355)

This commit is contained in:
Sylvie
2024-03-13 18:32:35 -04:00
committed by GitHub
parent 658286c8e4
commit 8ec0d01fc4
7 changed files with 64 additions and 7 deletions

View File

@@ -284,9 +284,9 @@ static void printSymName(char const *name) {
// Comparator function for `std::stable_sort` to sort symbols // Comparator function for `std::stable_sort` to sort symbols
// Symbols are ordered by address, then by parentage // Symbols are ordered by address, then by parentage
static int compareSymbols(SortedSymbol const &sym1, SortedSymbol const &sym2) { static bool compareSymbols(SortedSymbol const &sym1, SortedSymbol const &sym2) {
if (sym1.addr != sym2.addr) if (sym1.addr != sym2.addr)
return sym1.addr < sym2.addr ? -1 : 1; return sym1.addr < sym2.addr;
std::string const &sym1_name = sym1.sym->name; std::string const &sym1_name = sym1.sym->name;
std::string const &sym2_name = sym2.sym->name; std::string const &sym2_name = sym2.sym->name;
@@ -299,14 +299,14 @@ static int compareSymbols(SortedSymbol const &sym1, SortedSymbol const &sym2) {
// Sort parent labels before their child local labels // Sort parent labels before their child local labels
if (sym2_name.starts_with(sym1_name) && sym2_name[sym1_len] == '.') if (sym2_name.starts_with(sym1_name) && sym2_name[sym1_len] == '.')
return -1; return true;
if (sym1_name.starts_with(sym2_name) && sym1_name[sym2_len] == '.') if (sym1_name.starts_with(sym2_name) && sym1_name[sym2_len] == '.')
return 1; return false;
// Sort local labels before unrelated global labels // Sort local labels before unrelated global labels
return sym1_local ? -1 : 1; return sym1_local;
} }
return 0; return false;
} }
/* /*

15
test/link/symbols/a.asm Normal file
View File

@@ -0,0 +1,15 @@
SECTION "alpha", ROM0
Alpha::
db 1, 2, 3
End:
SECTION "a", WRAM0
wAlpha::
ds 3
.End::
SECTION UNION "U", WRAM0
wStart:
.word1: dw
.word2: dw
wEnd:

14
test/link/symbols/b.asm Normal file
View File

@@ -0,0 +1,14 @@
SECTION "beta", ROM0
Beta::
db 4, 5, 6
End:
SECTION "b", WRAM0
wBeta::
ds 3
.End::
SECTION UNION "U", WRAM0
wStart:
.long1: dl
wEnd:

View File

Binary file not shown.

View File

@@ -0,0 +1,16 @@
; File generated by rgblink
00:0000 Beta
00:0003 End
00:0003 Alpha
00:0006 End
00:c000 wStart
00:c000 wStart
00:c000 wStart.long1
00:c000 wStart.word1
00:c002 wStart.word2
00:c004 wEnd
00:c004 wEnd
00:c004 wBeta
00:c007 wBeta.End
00:c007 wAlpha
00:c00a wAlpha.End

View File

@@ -9,13 +9,14 @@ otemp="$(mktemp)"
gbtemp="$(mktemp)" gbtemp="$(mktemp)"
gbtemp2="$(mktemp)" gbtemp2="$(mktemp)"
outtemp="$(mktemp)" outtemp="$(mktemp)"
outtemp2="$(mktemp)"
tests=0 tests=0
failed=0 failed=0
rc=0 rc=0
# Immediate expansion is the desired behavior. # Immediate expansion is the desired behavior.
# shellcheck disable=SC2064 # shellcheck disable=SC2064
trap "rm -f ${otemp@Q} ${gbtemp@Q} ${gbtemp2@Q} ${outtemp@Q}" EXIT trap "rm -f ${otemp@Q} ${gbtemp@Q} ${gbtemp2@Q} ${outtemp@Q} ${outtemp2@Q}" EXIT
bold="$(tput bold)" bold="$(tput bold)"
resbold="$(tput sgr0)" resbold="$(tput sgr0)"
@@ -276,6 +277,17 @@ for i in section-union/*.asm; do
evaluateTest evaluateTest
done done
test="symbols"
startTest
"$RGBASM" -o "$otemp" "$test"/a.asm
"$RGBASM" -o "$gbtemp2" "$test"/b.asm
continueTest
rgblinkQuiet -o "$gbtemp" -n "$outtemp2" "$gbtemp2" "$otemp" 2>"$outtemp"
tryDiff "$test"/out.err "$outtemp"
tryDiff "$test"/ref.out.sym "$outtemp2"
tryCmpRom "$test"/ref.out.bin
evaluateTest
if [[ "$failed" -eq 0 ]]; then if [[ "$failed" -eq 0 ]]; then
echo "${bold}${green}All ${tests} tests passed!${rescolors}${resbold}" echo "${bold}${green}All ${tests} tests passed!${rescolors}${resbold}"
else else