mold: Many tests fail with musl libc
These tests fail with musl libc (used in Alpine Linux & is optional in Void Linux).
I think some of them can’t run successfully due to musl lacking some features of glibc e. g ifunc. So it would be nice to detect system libc somewhere in test/Makefile and conditionally skip those tests. Though some tests can be fixed I guess.
Note: Void Linux package build environment uses grep compiled without pcre support. Normal grep can’t be installed due to name conflicts (you can’t have 2 /usr/bin/grep binaries). As a workaround, I’m replacing grep -P with rg -P in all tests via sed (rg is ripgrep, a faster grep alternative). This is only Void specific, so never mind.
ctors-dtors.sh
+ set -e
++ dirname test/ctors-dtors.sh.fail
+ cd test
++ basename -s .sh test/ctors-dtors.sh.fail
+ echo -n 'Testing ctors-dtors.sh.fail ... '
Testing ctors-dtors.sh.fail ... ++ pwd
++ basename -s .sh test/ctors-dtors.sh.fail
+ t=/builddir/mold-0.9.3-rc2/test/tmp/ctors-dtors.sh.fail
+ mkdir -p /builddir/mold-0.9.3-rc2/test/tmp/ctors-dtors.sh.fail
+ cat
+ clang -c -o /builddir/mold-0.9.3-rc2/test/tmp/ctors-dtors.sh.fail/a.o -x assembler -
+ cat
+ clang -c -o /builddir/mold-0.9.3-rc2/test/tmp/ctors-dtors.sh.fail/b.o -x assembler -
+ cat
+ clang -c -o /builddir/mold-0.9.3-rc2/test/tmp/ctors-dtors.sh.fail/c.o -xc -
++ pwd
+ clang -fuse-ld=/builddir/mold-0.9.3-rc2/test/../mold -o /builddir/mold-0.9.3-rc2/test/tmp/ctors-dtors.sh.fail/exe /builddir/mold-0.9.3-rc2/test/tmp/ctors-dtors.sh.fail/a.o /builddir/mold-0.9.3-rc2/test/tmp/ctors-dtors.sh.fail/b.o /builddir/mold-0.9.3-rc2/test/tmp/ctors-dtors.sh.fail/c.o
+ /builddir/mold-0.9.3-rc2/test/tmp/ctors-dtors.sh.fail/exe
+ grep -q '^013289baefdc6754$'
dt_init.sh
+ set -e
++ dirname test/dt_init.sh.fail
+ cd test
++ basename -s .sh test/dt_init.sh.fail
+ echo -n 'Testing dt_init.sh.fail ... '
Testing dt_init.sh.fail ... ++ pwd
++ basename -s .sh test/dt_init.sh.fail
+ t=/builddir/mold-0.9.3-rc2/test/tmp/dt_init.sh.fail
+ mkdir -p /builddir/mold-0.9.3-rc2/test/tmp/dt_init.sh.fail
+ cat
+ clang -c -o /builddir/mold-0.9.3-rc2/test/tmp/dt_init.sh.fail/a.o -x assembler -
++ pwd
+ clang -fuse-ld=/builddir/mold-0.9.3-rc2/test/../mold -o /builddir/mold-0.9.3-rc2/test/tmp/dt_init.sh.fail/exe /builddir/mold-0.9.3-rc2/test/tmp/dt_init.sh.fail/a.o
+ readelf -a /builddir/mold-0.9.3-rc2/test/tmp/dt_init.sh.fail/exe
+ rg -PqU '(?s)\(INIT\)\s+0x([0-9a-f]+)\b.*\1\s+0 FUNC GLOBAL HIDDEN\s+\d+ _init\b' /builddir/mold-0.9.3-rc2/test/tmp/dt_init.sh.fail/log
dynamic.sh
+ set -e
++ dirname test/dynamic.sh.fail
+ cd test
++ basename -s .sh test/dynamic.sh.fail
+ echo -n 'Testing dynamic.sh.fail ... '
Testing dynamic.sh.fail ... ++ pwd
++ basename -s .sh test/dynamic.sh.fail
+ t=/builddir/mold-0.9.3-rc2/test/tmp/dynamic.sh.fail
+ mkdir -p /builddir/mold-0.9.3-rc2/test/tmp/dynamic.sh.fail
+ echo '.globl main; main:'
+ cc -o /builddir/mold-0.9.3-rc2/test/tmp/dynamic.sh.fail/a.o -c -x assembler -
++ pwd
+ clang -fuse-ld=/builddir/mold-0.9.3-rc2/test/../mold -o /builddir/mold-0.9.3-rc2/test/tmp/dynamic.sh.fail/exe /builddir/mold-0.9.3-rc2/test/tmp/dynamic.sh.fail/a.o
+ readelf --dynamic /builddir/mold-0.9.3-rc2/test/tmp/dynamic.sh.fail/exe
+ fgrep -q 'Shared library: [libc.so.6]' /builddir/mold-0.9.3-rc2/test/tmp/dynamic.sh.fail/log
exception.sh
+ set -e
++ dirname test/exception.sh.fail
+ cd test
++ basename -s .sh test/exception.sh.fail
+ echo -n 'Testing exception.sh.fail ... '
Testing exception.sh.fail ... ++ pwd
++ basename -s .sh test/exception.sh.fail
+ t=/builddir/mold-0.9.3-rc2/test/tmp/exception.sh.fail
+ mkdir -p /builddir/mold-0.9.3-rc2/test/tmp/exception.sh.fail
+ cat
++ pwd
+ clang++ -fuse-ld=/builddir/mold-0.9.3-rc2/test/../mold -o /builddir/mold-0.9.3-rc2/test/tmp/exception.sh.fail/exe /builddir/mold-0.9.3-rc2/test/tmp/exception.sh.fail/a.cc -static
+ /builddir/mold-0.9.3-rc2/test/tmp/exception.sh.fail/exe
test/exception.sh.fail: line 20: 487 Segmentation fault $t/exe
hello-dynamic.sh
+ set -e
++ dirname test/hello-dynamic.sh.fail
+ cd test
++ basename -s .sh test/hello-dynamic.sh.fail
+ echo -n 'Testing hello-dynamic.sh.fail ... '
Testing hello-dynamic.sh.fail ... ++ pwd
++ basename -s .sh test/hello-dynamic.sh.fail
+ t=/builddir/mold-0.9.3-rc2/test/tmp/hello-dynamic.sh.fail
+ mkdir -p /builddir/mold-0.9.3-rc2/test/tmp/hello-dynamic.sh.fail
+ cat
+ cc -o /builddir/mold-0.9.3-rc2/test/tmp/hello-dynamic.sh.fail/a.o -c -x assembler -
++ pwd
+ clang -fuse-ld=/builddir/mold-0.9.3-rc2/test/../mold -o /builddir/mold-0.9.3-rc2/test/tmp/hello-dynamic.sh.fail/exe /builddir/mold-0.9.3-rc2/test/tmp/hello-dynamic.sh.fail/a.o
+ /builddir/mold-0.9.3-rc2/test/tmp/hello-dynamic.sh.fail/exe
+ grep -q 'Hello world'
hello-static.sh
+ set -e
++ dirname test/hello-static.sh.fail
+ cd test
++ basename -s .sh test/hello-static.sh.fail
+ echo -n 'Testing hello-static.sh.fail ... '
Testing hello-static.sh.fail ... ++ pwd
++ basename -s .sh test/hello-static.sh.fail
+ t=/builddir/mold-0.9.3-rc2/test/tmp/hello-static.sh.fail
+ mkdir -p /builddir/mold-0.9.3-rc2/test/tmp/hello-static.sh.fail
+ cat
+ cc -o /builddir/mold-0.9.3-rc2/test/tmp/hello-static.sh.fail/a.o -c -x assembler -
++ pwd
+ clang -fuse-ld=/builddir/mold-0.9.3-rc2/test/../mold -o /builddir/mold-0.9.3-rc2/test/tmp/hello-static.sh.fail/exe /builddir/mold-0.9.3-rc2/test/tmp/hello-static.sh.fail/a.o -static
+ clang -fuse-ld=gold -o /builddir/mold-0.9.3-rc2/test/tmp/hello-static.sh.fail/exe /builddir/mold-0.9.3-rc2/test/tmp/hello-static.sh.fail/a.o -static
+ /builddir/mold-0.9.3-rc2/test/tmp/hello-static.sh.fail/exe
+ grep -q 'Hello world'
ifunc-dso.sh
+ set -e
++ dirname test/ifunc-dso.sh.fail
+ cd test
++ basename -s .sh test/ifunc-dso.sh.fail
+ echo -n 'Testing ifunc-dso.sh.fail ... '
Testing ifunc-dso.sh.fail ... ++ pwd
++ basename -s .sh test/ifunc-dso.sh.fail
+ t=/builddir/mold-0.9.3-rc2/test/tmp/ifunc-dso.sh.fail
+ mkdir -p /builddir/mold-0.9.3-rc2/test/tmp/ifunc-dso.sh.fail
+ cat
+ cc -o /builddir/mold-0.9.3-rc2/test/tmp/ifunc-dso.sh.fail/a.o -c -x assembler -
+ cat
+ cc -shared -fPIC -o /builddir/mold-0.9.3-rc2/test/tmp/ifunc-dso.sh.fail/b.so -x assembler -
++ pwd
+ clang -fuse-ld=/builddir/mold-0.9.3-rc2/test/../mold -o /builddir/mold-0.9.3-rc2/test/tmp/ifunc-dso.sh.fail/exe /builddir/mold-0.9.3-rc2/test/tmp/ifunc-dso.sh.fail/a.o /builddir/mold-0.9.3-rc2/test/tmp/ifunc-dso.sh.fail/b.so
+ /builddir/mold-0.9.3-rc2/test/tmp/ifunc-dso.sh.fail/exe
+ grep -q 'Hello world'
Error relocating /builddir/mold-0.9.3-rc2/test/tmp/ifunc-dso.sh.fail/exe: foobar: symbol not found
ifunc-dynamic.sh
+ set -e
++ dirname test/ifunc-dynamic.sh.fail
+ cd test
++ basename -s .sh test/ifunc-dynamic.sh.fail
+ echo -n 'Testing ifunc-dynamic.sh.fail ... '
Testing ifunc-dynamic.sh.fail ... ++ pwd
++ basename -s .sh test/ifunc-dynamic.sh.fail
+ t=/builddir/mold-0.9.3-rc2/test/tmp/ifunc-dynamic.sh.fail
+ mkdir -p /builddir/mold-0.9.3-rc2/test/tmp/ifunc-dynamic.sh.fail
+ cat
+ cc -o /builddir/mold-0.9.3-rc2/test/tmp/ifunc-dynamic.sh.fail/a.o -c -x assembler -
++ pwd
+ clang -fuse-ld=/builddir/mold-0.9.3-rc2/test/../mold -o /builddir/mold-0.9.3-rc2/test/tmp/ifunc-dynamic.sh.fail/exe /builddir/mold-0.9.3-rc2/test/tmp/ifunc-dynamic.sh.fail/a.o
+ /builddir/mold-0.9.3-rc2/test/tmp/ifunc-dynamic.sh.fail/exe
+ grep -q 'Hello world'
Error relocating /builddir/mold-0.9.3-rc2/test/tmp/ifunc-dynamic.sh.fail/exe: unsupported relocation type 37
ifunc-static.sh
+ set -e
++ dirname test/ifunc-static.sh.fail
+ cd test
++ basename -s .sh test/ifunc-static.sh.fail
+ echo -n 'Testing ifunc-static.sh.fail ... '
Testing ifunc-static.sh.fail ... ++ pwd
++ basename -s .sh test/ifunc-static.sh.fail
+ t=/builddir/mold-0.9.3-rc2/test/tmp/ifunc-static.sh.fail
+ mkdir -p /builddir/mold-0.9.3-rc2/test/tmp/ifunc-static.sh.fail
+ cat
+ clang -o /builddir/mold-0.9.3-rc2/test/tmp/ifunc-static.sh.fail/a.o -c -xc -
++ pwd
+ clang -fuse-ld=/builddir/mold-0.9.3-rc2/test/../mold -o /builddir/mold-0.9.3-rc2/test/tmp/ifunc-static.sh.fail/exe /builddir/mold-0.9.3-rc2/test/tmp/ifunc-static.sh.fail/a.o -static
+ /builddir/mold-0.9.3-rc2/test/tmp/ifunc-static.sh.fail/exe
+ grep -q 'Hello world'
image-base.sh
+ set -e
++ dirname test/image-base.sh.fail
+ cd test
++ basename -s .sh test/image-base.sh.fail
+ echo -n 'Testing image-base.sh.fail ... '
Testing image-base.sh.fail ... ++ pwd
++ basename -s .sh test/image-base.sh.fail
+ t=/builddir/mold-0.9.3-rc2/test/tmp/image-base.sh.fail
+ mkdir -p /builddir/mold-0.9.3-rc2/test/tmp/image-base.sh.fail
+ cat
+ cc -o /builddir/mold-0.9.3-rc2/test/tmp/image-base.sh.fail/a.o -c -xc -
++ pwd
+ clang -fuse-ld=/builddir/mold-0.9.3-rc2/test/../mold -o /builddir/mold-0.9.3-rc2/test/tmp/image-base.sh.fail/exe /builddir/mold-0.9.3-rc2/test/tmp/image-base.sh.fail/a.o -Wl,--image-base=0x8000000
+ /builddir/mold-0.9.3-rc2/test/tmp/image-base.sh.fail/exe
+ grep -q 'Hello world'
+ readelf -W --sections /builddir/mold-0.9.3-rc2/test/tmp/image-base.sh.fail/exe
+ rg -Pq '.interp\s+PROGBITS\s+0000000008000...\b'
incompatible-libs.sh
+ set -e
++ dirname test/incompatible-libs.sh.fail
+ cd test
++ basename -s .sh test/incompatible-libs.sh.fail
+ echo -n 'Testing incompatible-libs.sh.fail ... '
Testing incompatible-libs.sh.fail ... ++ pwd
++ basename -s .sh test/incompatible-libs.sh.fail
+ t=/builddir/mold-0.9.3-rc2/test/tmp/incompatible-libs.sh.fail
+ mkdir -p /builddir/mold-0.9.3-rc2/test/tmp/incompatible-libs.sh.fail
+ cat
+ cc -m32 -c -o /builddir/mold-0.9.3-rc2/test/tmp/incompatible-libs.sh.fail/a.o -xc -
+ mkdir -p /builddir/mold-0.9.3-rc2/test/tmp/incompatible-libs.sh.fail/lib32
+ ar crs /builddir/mold-0.9.3-rc2/test/tmp/incompatible-libs.sh.fail/lib32/libfoo.a /builddir/mold-0.9.3-rc2/test/tmp/incompatible-libs.sh.fail/a.o
+ clang -m32 -shared -o /builddir/mold-0.9.3-rc2/test/tmp/incompatible-libs.sh.fail/lib32/libfoo.so /builddir/mold-0.9.3-rc2/test/tmp/incompatible-libs.sh.fail/a.o
/usr/bin/x86_64-unknown-linux-musl-ld: cannot find crtbeginS.o: No such file or directory
/usr/bin/x86_64-unknown-linux-musl-ld: cannot find -lgcc
/usr/bin/x86_64-unknown-linux-musl-ld: skipping incompatible /usr/bin/../lib/libgcc_s.so.1 when searching for libgcc_s.so.1
/usr/bin/x86_64-unknown-linux-musl-ld: skipping incompatible /usr/bin/../lib/libgcc_s.so.1 when searching for libgcc_s.so.1
/usr/bin/x86_64-unknown-linux-musl-ld: skipping incompatible /lib/libgcc_s.so.1 when searching for libgcc_s.so.1
/usr/bin/x86_64-unknown-linux-musl-ld: skipping incompatible /usr/lib/libgcc_s.so.1 when searching for libgcc_s.so.1
/usr/bin/x86_64-unknown-linux-musl-ld: skipping incompatible /lib/libgcc_s.so.1 when searching for libgcc_s.so.1
/usr/bin/x86_64-unknown-linux-musl-ld: skipping incompatible /usr/lib/libgcc_s.so.1 when searching for libgcc_s.so.1
/usr/bin/x86_64-unknown-linux-musl-ld: cannot find libgcc_s.so.1
/usr/bin/x86_64-unknown-linux-musl-ld: skipping incompatible /usr/bin/../lib/libgcc_s.so.1 when searching for libgcc_s.so.1
/usr/bin/x86_64-unknown-linux-musl-ld: skipping incompatible /lib/libgcc_s.so.1 when searching for libgcc_s.so.1
/usr/bin/x86_64-unknown-linux-musl-ld: skipping incompatible /usr/lib/libgcc_s.so.1 when searching for libgcc_s.so.1
/usr/bin/x86_64-unknown-linux-musl-ld: skipping incompatible /lib/libgcc_s.so.1 when searching for libgcc_s.so.1
/usr/bin/x86_64-unknown-linux-musl-ld: skipping incompatible /usr/lib/libgcc_s.so.1 when searching for libgcc_s.so.1
/usr/bin/x86_64-unknown-linux-musl-ld: cannot find -lgcc
clang-12: error: linker command failed with exit code 1 (use -v to see invocation)
library-path-dynamic.sh
+ set -e
++ dirname test/library-path-dynamic.sh.fail
+ cd test
++ basename -s .sh test/library-path-dynamic.sh.fail
+ echo -n 'Testing library-path-dynamic.sh.fail ... '
Testing library-path-dynamic.sh.fail ... ++ pwd
++ basename -s .sh test/library-path-dynamic.sh.fail
+ t=/builddir/mold-0.9.3-rc2/test/tmp/library-path-dynamic.sh.fail
+ mkdir -p /builddir/mold-0.9.3-rc2/test/tmp/library-path-dynamic.sh.fail
+ cat
+ cc -o /builddir/mold-0.9.3-rc2/test/tmp/library-path-dynamic.sh.fail/a.o -c -x assembler -
+ clang -o /builddir/mold-0.9.3-rc2/test/tmp/library-path-dynamic.sh.fail/exe /builddir/mold-0.9.3-rc2/test/tmp/library-path-dynamic.sh.fail/a.o
+ /builddir/mold-0.9.3-rc2/test/tmp/library-path-dynamic.sh.fail/exe
+ grep -q 'Hello world'
linker_script.sh
+ set -e
++ dirname test/linker-script.sh.fail
+ cd test
++ basename -s .sh test/linker-script.sh.fail
+ echo -n 'Testing linker-script.sh.fail ... '
Testing linker-script.sh.fail ... ++ pwd
++ basename -s .sh test/linker-script.sh.fail
+ t=/builddir/mold-0.9.3-rc2/test/tmp/linker-script.sh.fail
+ mkdir -p /builddir/mold-0.9.3-rc2/test/tmp/linker-script.sh.fail
+ cat
+ cc -o /builddir/mold-0.9.3-rc2/test/tmp/linker-script.sh.fail/a.o -c -x assembler -
+ cat
++ pwd
+ clang -fuse-ld=/builddir/mold-0.9.3-rc2/test/../mold -o /builddir/mold-0.9.3-rc2/test/tmp/linker-script.sh.fail/exe /builddir/mold-0.9.3-rc2/test/tmp/linker-script.sh.fail/script
+ + grep /builddir/mold-0.9.3-rc2/test/tmp/linker-script.sh.fail/exe-q
'Hello world'
mergeable-strings.sh
+ set -e
++ dirname test/mergeable-strings.sh.fail
+ cd test
++ basename -s .sh test/mergeable-strings.sh.fail
+ echo -n 'Testing mergeable-strings.sh.fail ... '
Testing mergeable-strings.sh.fail ... ++ pwd
++ basename -s .sh test/mergeable-strings.sh.fail
+ t=/builddir/mold-0.9.3-rc2/test/tmp/mergeable-strings.sh.fail
+ mkdir -p /builddir/mold-0.9.3-rc2/test/tmp/mergeable-strings.sh.fail
+ cat
+ cc -o /builddir/mold-0.9.3-rc2/test/tmp/mergeable-strings.sh.fail/a.o -c -x assembler -
++ pwd
+ clang -fuse-ld=/builddir/mold-0.9.3-rc2/test/../mold -static -o /builddir/mold-0.9.3-rc2/test/tmp/mergeable-strings.sh.fail/exe /builddir/mold-0.9.3-rc2/test/tmp/mergeable-strings.sh.fail/a.o
+ /builddir/mold-0.9.3-rc2/test/tmp/mergeable-strings.sh.fail/exe
+ grep -q 'Hello world'
nocopyreloc.sh
+ set -e
++ dirname test/nocopyreloc.sh.fail
+ cd test
++ basename -s .sh test/nocopyreloc.sh.fail
+ echo -n 'Testing nocopyreloc.sh.fail ... '
Testing nocopyreloc.sh.fail ... ++ pwd
++ basename -s .sh test/nocopyreloc.sh.fail
+ t=/builddir/mold-0.9.3-rc2/test/tmp/nocopyreloc.sh.fail
+ mkdir -p /builddir/mold-0.9.3-rc2/test/tmp/nocopyreloc.sh.fail
+ cat
+ cc -shared -o /builddir/mold-0.9.3-rc2/test/tmp/nocopyreloc.sh.fail/a.so -xc -
+ cat
+ cc -fno-PIC -c -o /builddir/mold-0.9.3-rc2/test/tmp/nocopyreloc.sh.fail/b.o -xc -
++ pwd
+ clang -fuse-ld=/builddir/mold-0.9.3-rc2/test/../mold -no-pie -o /builddir/mold-0.9.3-rc2/test/tmp/nocopyreloc.sh.fail/exe /builddir/mold-0.9.3-rc2/test/tmp/nocopyreloc.sh.fail/a.so /builddir/mold-0.9.3-rc2/test/tmp/nocopyreloc.sh.fail/b.o
+ /builddir/mold-0.9.3-rc2/test/tmp/nocopyreloc.sh.fail/exe
+ grep -q '3 5'
plt.sh
+ set -e
++ dirname test/plt.sh.fail
+ cd test
++ basename -s .sh test/plt.sh.fail
+ echo -n 'Testing plt.sh.fail ... '
Testing plt.sh.fail ... ++ pwd
++ basename -s .sh test/plt.sh.fail
+ t=/builddir/mold-0.9.3-rc2/test/tmp/plt.sh.fail
+ mkdir -p /builddir/mold-0.9.3-rc2/test/tmp/plt.sh.fail
+ cat
+ cc -o /builddir/mold-0.9.3-rc2/test/tmp/plt.sh.fail/a.o -c -x assembler -
++ pwd
+ clang -fuse-ld=/builddir/mold-0.9.3-rc2/test/../mold -o /builddir/mold-0.9.3-rc2/test/tmp/plt.sh.fail/exe /builddir/mold-0.9.3-rc2/test/tmp/plt.sh.fail/a.o
+ readelf --sections /builddir/mold-0.9.3-rc2/test/tmp/plt.sh.fail/exe
+ fgrep -q .got
+ readelf --sections /builddir/mold-0.9.3-rc2/test/tmp/plt.sh.fail/exe
+ fgrep -q .got.plt
+ /builddir/mold-0.9.3-rc2/test/tmp/plt.sh.fail/exe
+ grep -q 'Hello world'
preload.sh
+ set -e
++ dirname test/preload.sh.fail
+ cd test
++ basename -s .sh test/preload.sh.fail
+ echo -n 'Testing preload.sh.fail ... '
Testing preload.sh.fail ... ++ pwd
++ basename -s .sh test/preload.sh.fail
+ t=/builddir/mold-0.9.3-rc2/test/tmp/preload.sh.fail
+ mkdir -p /builddir/mold-0.9.3-rc2/test/tmp/preload.sh.fail
+ cat
+ cc -o /builddir/mold-0.9.3-rc2/test/tmp/preload.sh.fail/a.o -c -x assembler -
+ rm -f /builddir/mold-0.9.3-rc2/test/tmp/preload.sh.fail/exe
++ pwd
+ clang -fuse-ld=/builddir/mold-0.9.3-rc2/test/../mold -o /builddir/mold-0.9.3-rc2/test/tmp/preload.sh.fail/exe /builddir/mold-0.9.3-rc2/test/tmp/preload.sh.fail/a.o -Wl,-preload
+ test -e /builddir/mold-0.9.3-rc2/test/tmp/preload.sh.fail/exe
++ pwd
+ clang -fuse-ld=/builddir/mold-0.9.3-rc2/test/../mold -o /builddir/mold-0.9.3-rc2/test/tmp/preload.sh.fail/exe /builddir/mold-0.9.3-rc2/test/tmp/preload.sh.fail/a.o
+ /builddir/mold-0.9.3-rc2/test/tmp/preload.sh.fail/exe
+ grep -q 'Hello world'
reloc.sh
+ set -e
++ dirname test/reloc.sh.fail
+ cd test
++ basename -s .sh test/reloc.sh.fail
+ echo -n 'Testing reloc.sh.fail ... '
Testing reloc.sh.fail ... ++ pwd
++ basename -s .sh test/reloc.sh.fail
+ t=/builddir/mold-0.9.3-rc2/test/tmp/reloc.sh.fail
+ mkdir -p /builddir/mold-0.9.3-rc2/test/tmp/reloc.sh.fail
+ cat
+ cc -fPIC -c -o /builddir/mold-0.9.3-rc2/test/tmp/reloc.sh.fail/a.o -x assembler -
+ cat
+ cc -fPIC -c -o /builddir/mold-0.9.3-rc2/test/tmp/reloc.sh.fail/b.o -xc -
+ cc -shared -o /builddir/mold-0.9.3-rc2/test/tmp/reloc.sh.fail/c.so /builddir/mold-0.9.3-rc2/test/tmp/reloc.sh.fail/a.o /builddir/mold-0.9.3-rc2/test/tmp/reloc.sh.fail/b.o
+ cat
++ pwd
+ clang -fuse-ld=/builddir/mold-0.9.3-rc2/test/../mold -o /builddir/mold-0.9.3-rc2/test/tmp/reloc.sh.fail/exe /builddir/mold-0.9.3-rc2/test/tmp/reloc.sh.fail/c.so /builddir/mold-0.9.3-rc2/test/tmp/reloc.sh.fail/d.s -no-pie
+ /builddir/mold-0.9.3-rc2/test/tmp/reloc.sh.fail/exe
+ grep -q 42
shared.sh
+ set -e
++ dirname test/shared.sh.fail
+ cd test
++ basename -s .sh test/shared.sh.fail
+ echo -n 'Testing shared.sh.fail ... '
Testing shared.sh.fail ... ++ pwd
++ basename -s .sh test/shared.sh.fail
+ t=/builddir/mold-0.9.3-rc2/test/tmp/shared.sh.fail
+ mkdir -p /builddir/mold-0.9.3-rc2/test/tmp/shared.sh.fail
+ cat
+ clang -fPIC -c -o /builddir/mold-0.9.3-rc2/test/tmp/shared.sh.fail/a.o -x assembler -
++ pwd
+ clang -shared -fuse-ld=/builddir/mold-0.9.3-rc2/test/../mold -o /builddir/mold-0.9.3-rc2/test/tmp/shared.sh.fail/b.so /builddir/mold-0.9.3-rc2/test/tmp/shared.sh.fail/a.o
+ readelf --dyn-syms /builddir/mold-0.9.3-rc2/test/tmp/shared.sh.fail/b.so
+ grep -q '0000000000000000 0 NOTYPE GLOBAL DEFAULT UND fn2' /builddir/mold-0.9.3-rc2/test/tmp/shared.sh.fail/log
+ rg -Pq '0 NOTYPE GLOBAL DEFAULT \d+ fn1' /builddir/mold-0.9.3-rc2/test/tmp/shared.sh.fail/log
+ cat
+ clang -fPIC -c -o /builddir/mold-0.9.3-rc2/test/tmp/shared.sh.fail/c.o -xc -
++ pwd
+ clang -fuse-ld=/builddir/mold-0.9.3-rc2/test/../mold -o /builddir/mold-0.9.3-rc2/test/tmp/shared.sh.fail/exe /builddir/mold-0.9.3-rc2/test/tmp/shared.sh.fail/c.o /builddir/mold-0.9.3-rc2/test/tmp/shared.sh.fail/b.so
+ /builddir/mold-0.9.3-rc2/test/tmp/shared.sh.fail/exe
+ grep -q hello
synthetic-symbols.sh
+ set -e
++ dirname test/synthetic-symbols.sh.fail
+ cd test
++ basename -s .sh test/synthetic-symbols.sh.fail
+ echo -n 'Testing synthetic-symbols.sh.fail ... '
Testing synthetic-symbols.sh.fail ... ++ pwd
++ basename -s .sh test/synthetic-symbols.sh.fail
+ t=/builddir/mold-0.9.3-rc2/test/tmp/synthetic-symbols.sh.fail
+ mkdir -p /builddir/mold-0.9.3-rc2/test/tmp/synthetic-symbols.sh.fail
+ cat
+ clang -c -o /builddir/mold-0.9.3-rc2/test/tmp/synthetic-symbols.sh.fail/a.o -x assembler -
+ cat
+ clang -c -o /builddir/mold-0.9.3-rc2/test/tmp/synthetic-symbols.sh.fail/b.o -xc -
++ pwd
+ clang -fuse-ld=/builddir/mold-0.9.3-rc2/test/../mold -Wl,--image-base=0x40000 -o /builddir/mold-0.9.3-rc2/test/tmp/synthetic-symbols.sh.fail/exe /builddir/mold-0.9.3-rc2/test/tmp/synthetic-symbols.sh.fail/a.o /builddir/mold-0.9.3-rc2/test/tmp/synthetic-symbols.sh.fail/b.o
+ /builddir/mold-0.9.3-rc2/test/tmp/synthetic-symbols.sh.fail/exe
+ grep -q '^__ehdr_start=0x40000$' /builddir/mold-0.9.3-rc2/test/tmp/synthetic-symbols.sh.fail/log
versioned-undef.sh
+ set -e
++ dirname test/versioned-undef.sh.fail
+ cd test
++ basename -s .sh test/versioned-undef.sh.fail
+ echo -n 'Testing versioned-undef.sh.fail ... '
Testing versioned-undef.sh.fail ... ++ pwd
++ basename -s .sh test/versioned-undef.sh.fail
+ t=/builddir/mold-0.9.3-rc2/test/tmp/versioned-undef.sh.fail
+ mkdir -p /builddir/mold-0.9.3-rc2/test/tmp/versioned-undef.sh.fail
+ cat
+ cc -fPIC -c -o /builddir/mold-0.9.3-rc2/test/tmp/versioned-undef.sh.fail/a.o -xc -
+ echo 'VER1 { local: *; }; VER2 { local: *; }; VER3 { local: *; };'
++ pwd
+ clang -fuse-ld=/builddir/mold-0.9.3-rc2/test/../mold -shared -o /builddir/mold-0.9.3-rc2/test/tmp/versioned-undef.sh.fail/c.so /builddir/mold-0.9.3-rc2/test/tmp/versioned-undef.sh.fail/a.o -Wl,--version-script=/builddir/mold-0.9.3-rc2/test/tmp/versioned-undef.sh.fail/b.ver
+ cat
+ cc -c -o /builddir/mold-0.9.3-rc2/test/tmp/versioned-undef.sh.fail/d.o -x assembler -
+ cat
+ cc -c -o /builddir/mold-0.9.3-rc2/test/tmp/versioned-undef.sh.fail/e.o -xc -
++ pwd
+ clang -fuse-ld=/builddir/mold-0.9.3-rc2/test/../mold -o /builddir/mold-0.9.3-rc2/test/tmp/versioned-undef.sh.fail/exe /builddir/mold-0.9.3-rc2/test/tmp/versioned-undef.sh.fail/d.o /builddir/mold-0.9.3-rc2/test/tmp/versioned-undef.sh.fail/e.o /builddir/mold-0.9.3-rc2/test/tmp/versioned-undef.sh.fail/c.so
+ /builddir/mold-0.9.3-rc2/test/tmp/versioned-undef.sh.fail/exe
+ grep -q '^1 2$'
z_text.sh
+ set -e
++ dirname test/z_text.sh.fail
+ cd test
++ basename -s .sh test/z_text.sh.fail
+ echo -n 'Testing z_text.sh.fail ... '
Testing z_text.sh.fail ... ++ pwd
++ basename -s .sh test/z_text.sh.fail
+ t=/builddir/mold-0.9.3-rc2/test/tmp/z_text.sh.fail
+ mkdir -p /builddir/mold-0.9.3-rc2/test/tmp/z_text.sh.fail
+ cat
+ clang -c -o /builddir/mold-0.9.3-rc2/test/tmp/z_text.sh.fail/a.o -x assembler -
+ cat
+ clang -c -o /builddir/mold-0.9.3-rc2/test/tmp/z_text.sh.fail/b.o -xc -
++ pwd
+ clang -fuse-ld=/builddir/mold-0.9.3-rc2/test/../mold -pie -o /builddir/mold-0.9.3-rc2/test/tmp/z_text.sh.fail/exe /builddir/mold-0.9.3-rc2/test/tmp/z_text.sh.fail/a.o /builddir/mold-0.9.3-rc2/test/tmp/z_text.sh.fail/b.o
+ /builddir/mold-0.9.3-rc2/test/tmp/z_text.sh.fail/exe
+ grep -q 3
About this issue
- Original URL
- State: closed
- Created 3 years ago
- Comments: 25 (25 by maintainers)
Commits related to this issue
- Fix a broken test Fixes https://github.com/rui314/mold/issues/89 — committed to rui314/mold by rui314 3 years ago
- Skip i386/aarch64 tests if cross compilers are not available https://github.com/rui314/mold/issues/89 — committed to rui314/mold by rui314 3 years ago
@Logarithmus They failed because a stack frame was not properly aligned to a 16-byte boundary. The x86-64 psABI requires that when you make a function call (i.e. when you execute
callinstruction), %rsp must be aligned to a 16-byte boundary.callinstruction pushes a 8-byte return address to the stack. So, at the beginning of a function, %rsp is not aligned to a 16-byte boundary, so you need to adjust %rsp (e.g. pushing %rsp by 8 bytes) before making anothercall. I didn’t do that.If you do not do that, some instructions sensitive to alignment requirement may fail. glibc’s printf is not sensitive to the alignment requirement unless you try to print out floating-point values (if you try to do that, it segfaults). It looks like musl’s printf is always sensitive. So the tests failed.