1
1
mirror of https://github.com/rui314/mold.git synced 2024-10-26 13:10:46 +03:00
mold/test/elf/exception.sh
Yao Zi d2774b0da9 Use $CXX to detect cxxflags
Use $CXX instead of $CC to detect whether C++ programs could be built
statically. Add function test_cxxflags for convenience.

Fix test error in an environment where C++ programs cannot be built
statically, with error like:

  mold: fatal: library not found: c++

Signed-off-by: Yao Zi <ziyao@disroot.org>
2024-06-16 20:16:34 +00:00

75 lines
1.4 KiB
Bash
Executable File

#!/bin/bash
. $(dirname $0)/common.inc
[ $MACHINE = m68k ] && skip
[ $MACHINE = sh4 ] && skip
static=
test_cxxflags -static && static=-static
# I don't know why, but we need -pthread on m68k
static="$static -pthread"
cat <<EOF > $t/a.cc
int main() {
try {
throw 0;
} catch (int x) {
return x;
}
return 1;
}
EOF
$CXX -c -o $t/b.o $t/a.cc -fPIC
$CXX -c -o $t/c.o $t/a.cc -fno-PIC
$CXX -B. -o $t/exe1 $t/b.o $static
$QEMU $t/exe1
$CXX -B. -o $t/exe2 $t/c.o -no-pie $static
$QEMU $t/exe2
$CXX -B. -o $t/exe3 $t/b.o -pie
$QEMU $t/exe3
$CXX -B. -o $t/exe4 $t/c.o -no-pie
$QEMU $t/exe4
$CXX -B. -o $t/exe5 $t/b.o -pie -Wl,--gc-sections
$QEMU $t/exe5
$CXX -B. -o $t/exe6 $t/c.o -no-pie $static -Wl,--gc-sections
$QEMU $t/exe6
if [ $MACHINE = x86_64 ]; then
$CXX -c -o $t/d.o $t/a.cc -mcmodel=large -fPIC
$CXX -B. -o $t/exe7 $t/d.o $static
$QEMU $t/exe7
$CXX -B. -o $t/exe8 $t/d.o -pie
$QEMU $t/exe8
fi
if [ $MACHINE = x86_64 -o $MACHINE = aarch64 ]; then
$CXX -c -o $t/e.o $t/a.cc -mcmodel=large -fno-PIC
$CXX -B. -o $t/exe9 $t/e.o -no-pie $static
$QEMU $t/exe9
$CXX -B. -o $t/exe10 $t/e.o -no-pie
$QEMU $t/exe10
fi
# riscv64-linux-gnu-strip crashes for some reason
if [ $MACHINE != riscv32 ]; then
$CXX -B. -o $t/exe11 $t/b.o -pie
$STRIP $t/exe11
$QEMU $t/exe11
$CXX -B. -o $t/exe12 $t/c.o -no-pie
$STRIP $t/exe12
$QEMU $t/exe12
fi