mirror of
https://github.com/gbdev/rgbds.git
synced 2025-11-20 18:22:07 +00:00
Sort .sym files in ascending order, and test for it (#1355)
This commit is contained in:
@@ -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
15
test/link/symbols/a.asm
Normal 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
14
test/link/symbols/b.asm
Normal 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:
|
||||||
0
test/link/symbols/out.err
Normal file
0
test/link/symbols/out.err
Normal file
BIN
test/link/symbols/ref.out.bin
Normal file
BIN
test/link/symbols/ref.out.bin
Normal file
Binary file not shown.
16
test/link/symbols/ref.out.sym
Normal file
16
test/link/symbols/ref.out.sym
Normal 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
|
||||||
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user