mirror of
https://github.com/gbdev/rgbds.git
synced 2025-11-20 18:22:07 +00:00
Add test cases for SECTION UNION defining multiple identical labels (#1349)
Exported labels should fail to link; non-exported ones should be okay.
This commit is contained in:
3
.github/workflows/testing.yml
vendored
3
.github/workflows/testing.yml
vendored
@@ -276,6 +276,7 @@ jobs:
|
|||||||
path: |
|
path: |
|
||||||
test/gfx/randtilegen.exe
|
test/gfx/randtilegen.exe
|
||||||
test/gfx/rgbgfx_test.exe
|
test/gfx/rgbgfx_test.exe
|
||||||
|
test/link/unmangle.exe
|
||||||
|
|
||||||
windows-mingw-testing:
|
windows-mingw-testing:
|
||||||
needs: windows-mingw-build
|
needs: windows-mingw-build
|
||||||
@@ -296,7 +297,7 @@ jobs:
|
|||||||
uses: actions/download-artifact@v4
|
uses: actions/download-artifact@v4
|
||||||
with:
|
with:
|
||||||
name: testing-programs-mingw-win${{ matrix.bits }}
|
name: testing-programs-mingw-win${{ matrix.bits }}
|
||||||
path: test/gfx
|
path: test
|
||||||
- name: Extract binaries
|
- name: Extract binaries
|
||||||
shell: bash
|
shell: bash
|
||||||
run: |
|
run: |
|
||||||
|
|||||||
9
Makefile
9
Makefile
@@ -129,6 +129,9 @@ test/gfx/randtilegen: test/gfx/randtilegen.cpp
|
|||||||
test/gfx/rgbgfx_test: test/gfx/rgbgfx_test.cpp
|
test/gfx/rgbgfx_test: test/gfx/rgbgfx_test.cpp
|
||||||
$Q${CXX} ${REALLDFLAGS} ${PNGLDFLAGS} -o $@ $^ ${REALCXXFLAGS} ${PNGLDLIBS}
|
$Q${CXX} ${REALLDFLAGS} ${PNGLDFLAGS} -o $@ $^ ${REALCXXFLAGS} ${PNGLDLIBS}
|
||||||
|
|
||||||
|
test/link/unmangle: test/link/unmangle.cpp
|
||||||
|
$Q${CXX} ${REALLDFLAGS} -o $@ $^ ${REALCXXFLAGS}
|
||||||
|
|
||||||
# Rules to process files
|
# Rules to process files
|
||||||
|
|
||||||
# We want the Bison invocation to pass through our rules, not default ones
|
# We want the Bison invocation to pass through our rules, not default ones
|
||||||
@@ -176,7 +179,7 @@ clean:
|
|||||||
$Q${RM} rgbshim.sh
|
$Q${RM} rgbshim.sh
|
||||||
$Q${RM} src/asm/parser.cpp src/asm/parser.hpp src/asm/stack.hh
|
$Q${RM} src/asm/parser.cpp src/asm/parser.hpp src/asm/stack.hh
|
||||||
$Q${RM} src/link/script.cpp src/link/script.hpp src/link/stack.hh
|
$Q${RM} src/link/script.cpp src/link/script.hpp src/link/stack.hh
|
||||||
$Q${RM} test/gfx/randtilegen test/gfx/rgbgfx_test
|
$Q${RM} test/gfx/randtilegen test/gfx/rgbgfx_test test/link/unmangle
|
||||||
|
|
||||||
# Target used to install the binaries and man pages.
|
# Target used to install the binaries and man pages.
|
||||||
|
|
||||||
@@ -233,13 +236,13 @@ coverage:
|
|||||||
# install instructions instead.
|
# install instructions instead.
|
||||||
|
|
||||||
mingw32:
|
mingw32:
|
||||||
$Q${MAKE} all test/gfx/randtilegen test/gfx/rgbgfx_test \
|
$Q${MAKE} all test/gfx/randtilegen test/gfx/rgbgfx_test test/link/unmangle \
|
||||||
CXX=i686-w64-mingw32-g++ \
|
CXX=i686-w64-mingw32-g++ \
|
||||||
CXXFLAGS="-O3 -flto -DNDEBUG -static-libgcc -static-libstdc++" \
|
CXXFLAGS="-O3 -flto -DNDEBUG -static-libgcc -static-libstdc++" \
|
||||||
PKG_CONFIG="PKG_CONFIG_SYSROOT_DIR=/usr/i686-w64-mingw32 pkg-config"
|
PKG_CONFIG="PKG_CONFIG_SYSROOT_DIR=/usr/i686-w64-mingw32 pkg-config"
|
||||||
|
|
||||||
mingw64:
|
mingw64:
|
||||||
$Q${MAKE} all test/gfx/randtilegen test/gfx/rgbgfx_test \
|
$Q${MAKE} all test/gfx/randtilegen test/gfx/rgbgfx_test test/link/unmangle \
|
||||||
CXX=x86_64-w64-mingw32-g++ \
|
CXX=x86_64-w64-mingw32-g++ \
|
||||||
PKG_CONFIG="PKG_CONFIG_SYSROOT_DIR=/usr/x86_64-w64-mingw32 pkg-config"
|
PKG_CONFIG="PKG_CONFIG_SYSROOT_DIR=/usr/x86_64-w64-mingw32 pkg-config"
|
||||||
|
|
||||||
|
|||||||
@@ -2,12 +2,18 @@
|
|||||||
|
|
||||||
add_executable(randtilegen gfx/randtilegen.cpp)
|
add_executable(randtilegen gfx/randtilegen.cpp)
|
||||||
add_executable(rgbgfx_test gfx/rgbgfx_test.cpp)
|
add_executable(rgbgfx_test gfx/rgbgfx_test.cpp)
|
||||||
|
add_executable(unmangle link/unmangle.cpp)
|
||||||
|
|
||||||
install(TARGETS randtilegen rgbgfx_test
|
install(TARGETS randtilegen rgbgfx_test
|
||||||
DESTINATION ${rgbds_SOURCE_DIR}/test/gfx
|
DESTINATION ${rgbds_SOURCE_DIR}/test/gfx
|
||||||
COMPONENT "Test support programs"
|
COMPONENT "Test support programs"
|
||||||
EXCLUDE_FROM_ALL
|
EXCLUDE_FROM_ALL
|
||||||
)
|
)
|
||||||
|
install(TARGETS unmangle
|
||||||
|
DESTINATION ${rgbds_SOURCE_DIR}/test/link
|
||||||
|
COMPONENT "Test support programs"
|
||||||
|
EXCLUDE_FROM_ALL
|
||||||
|
)
|
||||||
|
|
||||||
foreach(TARGET randtilegen rgbgfx_test)
|
foreach(TARGET randtilegen rgbgfx_test)
|
||||||
if(LIBPNG_FOUND) # pkg-config
|
if(LIBPNG_FOUND) # pkg-config
|
||||||
|
|||||||
2
test/link/.gitignore
vendored
Normal file
2
test/link/.gitignore
vendored
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
# Test binaries
|
||||||
|
/unmangle
|
||||||
5
test/link/section-union/same-export/a.asm
Normal file
5
test/link/section-union/same-export/a.asm
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
SECTION UNION "test", WRAM0
|
||||||
|
Same::
|
||||||
|
ds 1
|
||||||
|
Foo::
|
||||||
|
ds 2
|
||||||
5
test/link/section-union/same-export/b.asm
Normal file
5
test/link/section-union/same-export/b.asm
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
SECTION UNION "test", WRAM0
|
||||||
|
Same::
|
||||||
|
ds 2
|
||||||
|
Bar::
|
||||||
|
ds 1
|
||||||
1
test/link/section-union/same-export/out.err
Normal file
1
test/link/section-union/same-export/out.err
Normal file
@@ -0,0 +1 @@
|
|||||||
|
error: "Same" both in section-union/same-export/a.o from section-union/same-export/a.asm(2) and in section-union/same-export/b.o from section-union/same-export/b.asm(2)
|
||||||
5
test/link/section-union/same-label/a.asm
Normal file
5
test/link/section-union/same-label/a.asm
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
SECTION UNION "test", WRAM0
|
||||||
|
Same:
|
||||||
|
ds 1
|
||||||
|
Foo:
|
||||||
|
ds 2
|
||||||
5
test/link/section-union/same-label/b.asm
Normal file
5
test/link/section-union/same-label/b.asm
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
SECTION UNION "test", WRAM0
|
||||||
|
Same:
|
||||||
|
ds 2
|
||||||
|
Bar:
|
||||||
|
ds 1
|
||||||
0
test/link/section-union/same-label/out.err
Normal file
0
test/link/section-union/same-label/out.err
Normal file
@@ -3,6 +3,8 @@
|
|||||||
export LC_ALL=C
|
export LC_ALL=C
|
||||||
set -o pipefail
|
set -o pipefail
|
||||||
|
|
||||||
|
[[ -e ./unmangle ]] || make -C ../.. test/link/unmangle || exit
|
||||||
|
|
||||||
otemp="$(mktemp)"
|
otemp="$(mktemp)"
|
||||||
gbtemp="$(mktemp)"
|
gbtemp="$(mktemp)"
|
||||||
gbtemp2="$(mktemp)"
|
gbtemp2="$(mktemp)"
|
||||||
@@ -82,6 +84,16 @@ evaluateTest () {
|
|||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
substPath () {
|
||||||
|
# Escape regex metacharacters
|
||||||
|
subst="$(printf '%s\n' "$1" | sed 's:[][\/.^$*]:\\&:g')"
|
||||||
|
# Replace the file name with a different one to match changed output
|
||||||
|
sed -i'' -e "s|$subst|$2|g" "$3"
|
||||||
|
# Escape regex metacharacters in the un-MinGW-mangled path
|
||||||
|
subst="$(./unmangle "$1" | sed 's:[][\/.^$*]:\\&:g')"
|
||||||
|
sed -i'' -e "s|$subst|$2|g" "$3"
|
||||||
|
}
|
||||||
|
|
||||||
for i in *.asm; do
|
for i in *.asm; do
|
||||||
test=${i%.asm}
|
test=${i%.asm}
|
||||||
startTest
|
startTest
|
||||||
@@ -215,6 +227,28 @@ rgblinkQuiet -o "$gbtemp" "$otemp" "$gbtemp2"
|
|||||||
tryCmpRom "$test"/ref.out.bin
|
tryCmpRom "$test"/ref.out.bin
|
||||||
evaluateTest
|
evaluateTest
|
||||||
|
|
||||||
|
test="section-union/same-export"
|
||||||
|
startTest
|
||||||
|
"$RGBASM" -o "$otemp" "$test"/a.asm
|
||||||
|
"$RGBASM" -o "$gbtemp2" "$test"/b.asm
|
||||||
|
continueTest
|
||||||
|
rgblinkQuiet "$gbtemp2" "$otemp" 2>"$outtemp"
|
||||||
|
substPath "$otemp" "$test/a.o" "$outtemp"
|
||||||
|
substPath "$gbtemp2" "$test/b.o" "$outtemp"
|
||||||
|
tryDiff "$test"/out.err "$outtemp"
|
||||||
|
evaluateTest
|
||||||
|
|
||||||
|
test="section-union/same-label"
|
||||||
|
startTest
|
||||||
|
"$RGBASM" -o "$otemp" "$test"/a.asm
|
||||||
|
"$RGBASM" -o "$gbtemp2" "$test"/b.asm
|
||||||
|
continueTest
|
||||||
|
rgblinkQuiet "$gbtemp2" "$otemp" 2>"$outtemp"
|
||||||
|
substPath "$otemp" "$test/a.o" "$outtemp"
|
||||||
|
substPath "$gbtemp2" "$test/b.o" "$outtemp"
|
||||||
|
tryDiff "$test"/out.err "$outtemp"
|
||||||
|
evaluateTest
|
||||||
|
|
||||||
for i in section-union/*.asm; do
|
for i in section-union/*.asm; do
|
||||||
test=${i%.asm}
|
test=${i%.asm}
|
||||||
startTest
|
startTest
|
||||||
|
|||||||
16
test/link/unmangle.cpp
Normal file
16
test/link/unmangle.cpp
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
/**
|
||||||
|
* MinGW mangles path names before passing them as command-line arguments.
|
||||||
|
* Some RGBLINK warning/error messages include those mangled paths on Windows.
|
||||||
|
* We need to see those mangled paths in test.sh to replace them with placeholders.
|
||||||
|
* This tool simply echoes each argument, which will be mangled iff they are paths.
|
||||||
|
* (For example, the "/tmp/foo" will be unmangled to something like
|
||||||
|
* "C:/Users/RUNNER~1/AppData/Local/Temp/foo".)
|
||||||
|
*/
|
||||||
|
|
||||||
|
int main(int argc, char *argv[]) {
|
||||||
|
for (int i = 1; i < argc; i++)
|
||||||
|
puts(argv[i]);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user