Skip to content

Commit d4b2141

Browse files
Merge #1134
1134: Use a linker script for libstdc++. r=Emilgardis a=Alexhuszagh Use a linker script for `libstdc++.so` since we remove the dylib, to ensure a static build is always used to avoid segfaults at runtime. However, the archive can reference missing symbols present in `libc` or `libgcc`, and itself depends on symbols in `libm`. To ensure these libraries are properly linked when forcing a build against the static `libstdc++`, create a linker script for `libstdc++.so` that links to the static archive, and as needed, all dependencies. Related to #1124. Co-authored-by: Alex Huszagh <[email protected]>
2 parents bc5976d + cd05ef7 commit d4b2141

19 files changed

+102
-162
lines changed
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
},
1313
{
1414
"type": "fixed",
15-
"description": "always link to libc when compiling alpine since static libstdc++ may have undefined references to libc symbols.",
15+
"description": "use a linker script for musl libstdc++ to ensure the archive links to libc, libm, and libgcc as needed.",
1616
"issues": [1124]
1717
}
1818
]

docker/Dockerfile.aarch64-unknown-linux-musl

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,7 @@ ENV CROSS_SYSROOT=/usr/local/aarch64-linux-musl
2121
COPY musl-symlink.sh /
2222
RUN /musl-symlink.sh $CROSS_SYSROOT aarch64
2323

24-
COPY aarch64-linux-musl-gcc.sh /usr/bin/
25-
COPY rustc_info.sh /
26-
24+
COPY musl-gcc.sh /usr/bin/"$CROSS_TOOLCHAIN_PREFIX"gcc.sh
2725
COPY qemu-runner base-runner.sh /
2826

2927
ENV CARGO_TARGET_AARCH64_UNKNOWN_LINUX_MUSL_LINKER="$CROSS_TOOLCHAIN_PREFIX"gcc.sh \
@@ -33,4 +31,5 @@ ENV CARGO_TARGET_AARCH64_UNKNOWN_LINUX_MUSL_LINKER="$CROSS_TOOLCHAIN_PREFIX"gcc.
3331
CXX_aarch64_unknown_linux_musl="$CROSS_TOOLCHAIN_PREFIX"g++ \
3432
BINDGEN_EXTRA_CLANG_ARGS_aarch64_unknown_linux_musl="--sysroot=$CROSS_SYSROOT" \
3533
QEMU_LD_PREFIX="$CROSS_SYSROOT" \
36-
RUST_TEST_THREADS=1
34+
RUST_TEST_THREADS=1 \
35+
CROSS_BUILTINS_PATCHED_MINOR_VERSION=48

docker/Dockerfile.arm-unknown-linux-musleabi

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,9 +27,7 @@ RUN /musl-symlink.sh $CROSS_SYSROOT arm
2727

2828
COPY qemu-runner base-runner.sh /
2929

30-
COPY musl-gcc.sh /usr/bin/"$CROSS_TOOLCHAIN_PREFIX"gcc.sh
31-
32-
ENV CARGO_TARGET_ARM_UNKNOWN_LINUX_MUSLEABI_LINKER="$CROSS_TOOLCHAIN_PREFIX"gcc.sh \
30+
ENV CARGO_TARGET_ARM_UNKNOWN_LINUX_MUSLEABI_LINKER="$CROSS_TOOLCHAIN_PREFIX"gcc \
3331
CARGO_TARGET_ARM_UNKNOWN_LINUX_MUSLEABI_RUNNER="/qemu-runner arm" \
3432
AR_arm_unknown_linux_musleabi="$CROSS_TOOLCHAIN_PREFIX"ar \
3533
CC_arm_unknown_linux_musleabi="$CROSS_TOOLCHAIN_PREFIX"gcc \

docker/Dockerfile.arm-unknown-linux-musleabihf

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,9 +28,7 @@ RUN /musl-symlink.sh $CROSS_SYSROOT armhf
2828

2929
COPY qemu-runner base-runner.sh /
3030

31-
COPY musl-gcc.sh /usr/bin/"$CROSS_TOOLCHAIN_PREFIX"gcc.sh
32-
33-
ENV CARGO_TARGET_ARM_UNKNOWN_LINUX_MUSLEABIHF_LINKER="$CROSS_TOOLCHAIN_PREFIX"gcc.sh \
31+
ENV CARGO_TARGET_ARM_UNKNOWN_LINUX_MUSLEABIHF_LINKER="$CROSS_TOOLCHAIN_PREFIX"gcc \
3432
CARGO_TARGET_ARM_UNKNOWN_LINUX_MUSLEABIHF_RUNNER="/qemu-runner armhf" \
3533
AR_arm_unknown_linux_musleabihf="$CROSS_TOOLCHAIN_PREFIX"ar \
3634
CC_arm_unknown_linux_musleabihf="$CROSS_TOOLCHAIN_PREFIX"gcc \

docker/Dockerfile.armv5te-unknown-linux-musleabi

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -25,16 +25,15 @@ ENV CROSS_SYSROOT=/usr/local/arm-linux-musleabi
2525
COPY musl-symlink.sh /
2626
RUN /musl-symlink.sh $CROSS_SYSROOT arm
2727

28+
COPY musl-gcc.sh /usr/bin/"$CROSS_TOOLCHAIN_PREFIX"gcc.sh
2829
COPY qemu-runner base-runner.sh /
2930

30-
COPY rust-1-65-musl-gcc.sh /usr/bin/"$CROSS_TOOLCHAIN_PREFIX"gcc.sh
31-
COPY rustc_info.sh /
32-
3331
ENV CARGO_TARGET_ARMV5TE_UNKNOWN_LINUX_MUSLEABI_LINKER="$CROSS_TOOLCHAIN_PREFIX"gcc.sh \
3432
CARGO_TARGET_ARMV5TE_UNKNOWN_LINUX_MUSLEABI_RUNNER="/qemu-runner arm" \
3533
AR_armv5te_unknown_linux_musleabi="$CROSS_TOOLCHAIN_PREFIX"ar \
3634
CC_armv5te_unknown_linux_musleabi="$CROSS_TOOLCHAIN_PREFIX"gcc \
3735
CXX_armv5te_unknown_linux_musleabi="$CROSS_TOOLCHAIN_PREFIX"g++ \
3836
BINDGEN_EXTRA_CLANG_ARGS_armv5te_unknown_linux_musleabi="--sysroot=$CROSS_SYSROOT" \
3937
QEMU_LD_PREFIX="$CROSS_SYSROOT" \
40-
RUST_TEST_THREADS=1
38+
RUST_TEST_THREADS=1 \
39+
CROSS_BUILTINS_PATCHED_MINOR_VERSION=65

docker/Dockerfile.armv7-unknown-linux-musleabi

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,9 +28,7 @@ RUN /musl-symlink.sh $CROSS_SYSROOT arm
2828

2929
COPY qemu-runner base-runner.sh /
3030

31-
COPY musl-gcc.sh /usr/bin/"$CROSS_TOOLCHAIN_PREFIX"gcc.sh
32-
33-
ENV CARGO_TARGET_ARMV7_UNKNOWN_LINUX_MUSLEABI_LINKER="$CROSS_TOOLCHAIN_PREFIX"gcc.sh \
31+
ENV CARGO_TARGET_ARMV7_UNKNOWN_LINUX_MUSLEABI_LINKER="$CROSS_TOOLCHAIN_PREFIX"gcc \
3432
CARGO_TARGET_ARMV7_UNKNOWN_LINUX_MUSLEABI_RUNNER="/qemu-runner armv7" \
3533
AR_armv7_unknown_linux_musleabi="$CROSS_TOOLCHAIN_PREFIX"ar \
3634
CC_armv7_unknown_linux_musleabi="$CROSS_TOOLCHAIN_PREFIX"gcc \

docker/Dockerfile.armv7-unknown-linux-musleabihf

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,9 +28,7 @@ RUN /musl-symlink.sh $CROSS_SYSROOT armhf
2828

2929
COPY qemu-runner base-runner.sh /
3030

31-
COPY musl-gcc.sh /usr/bin/"$CROSS_TOOLCHAIN_PREFIX"gcc.sh
32-
33-
ENV CARGO_TARGET_ARMV7_UNKNOWN_LINUX_MUSLEABIHF_LINKER="$CROSS_TOOLCHAIN_PREFIX"gcc.sh \
31+
ENV CARGO_TARGET_ARMV7_UNKNOWN_LINUX_MUSLEABIHF_LINKER="$CROSS_TOOLCHAIN_PREFIX"gcc \
3432
CARGO_TARGET_ARMV7_UNKNOWN_LINUX_MUSLEABIHF_RUNNER="/qemu-runner armv7hf" \
3533
AR_armv7_unknown_linux_musleabihf="$CROSS_TOOLCHAIN_PREFIX"ar \
3634
CC_armv7_unknown_linux_musleabihf="$CROSS_TOOLCHAIN_PREFIX"gcc \

docker/Dockerfile.i586-unknown-linux-musl

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,7 @@ RUN /musl-symlink.sh $CROSS_SYSROOT i386
2323

2424
COPY qemu-runner base-runner.sh /
2525

26-
COPY musl-gcc.sh /usr/bin/"$CROSS_TOOLCHAIN_PREFIX"gcc.sh
27-
28-
ENV CARGO_TARGET_I586_UNKNOWN_LINUX_MUSL_LINKER="$CROSS_TOOLCHAIN_PREFIX"gcc.sh \
26+
ENV CARGO_TARGET_I586_UNKNOWN_LINUX_MUSL_LINKER="$CROSS_TOOLCHAIN_PREFIX"gcc \
2927
CARGO_TARGET_I586_UNKNOWN_LINUX_MUSL_RUNNER="/qemu-runner i586" \
3028
AR_i586_unknown_linux_musl="$CROSS_TOOLCHAIN_PREFIX"ar \
3129
CC_i586_unknown_linux_musl="$CROSS_TOOLCHAIN_PREFIX"gcc \

docker/Dockerfile.i686-unknown-linux-musl

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,7 @@ RUN /musl-symlink.sh $CROSS_SYSROOT i386
2323

2424
COPY qemu-runner base-runner.sh /
2525

26-
COPY musl-gcc.sh /usr/bin/"$CROSS_TOOLCHAIN_PREFIX"gcc.sh
27-
28-
ENV CARGO_TARGET_I686_UNKNOWN_LINUX_MUSL_LINKER="$CROSS_TOOLCHAIN_PREFIX"gcc.sh \
26+
ENV CARGO_TARGET_I686_UNKNOWN_LINUX_MUSL_LINKER="$CROSS_TOOLCHAIN_PREFIX"gcc \
2927
CARGO_TARGET_I686_UNKNOWN_LINUX_MUSL_RUNNER="/qemu-runner i686" \
3028
AR_i686_unknown_linux_musl="$CROSS_TOOLCHAIN_PREFIX"ar \
3129
CC_i686_unknown_linux_musl="$CROSS_TOOLCHAIN_PREFIX"gcc \

docker/Dockerfile.mips-unknown-linux-musl

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,9 +27,7 @@ RUN /musl-symlink.sh $CROSS_SYSROOT mips-sf
2727

2828
COPY qemu-runner base-runner.sh /
2929

30-
COPY musl-gcc.sh /usr/bin/"$CROSS_TOOLCHAIN_PREFIX"gcc.sh
31-
32-
ENV CARGO_TARGET_MIPS_UNKNOWN_LINUX_MUSL_LINKER="$CROSS_TOOLCHAIN_PREFIX"gcc.sh \
30+
ENV CARGO_TARGET_MIPS_UNKNOWN_LINUX_MUSL_LINKER="$CROSS_TOOLCHAIN_PREFIX"gcc \
3331
CARGO_TARGET_MIPS_UNKNOWN_LINUX_MUSL_RUNNER="/qemu-runner mips" \
3432
AR_mips_unknown_linux_musl="$CROSS_TOOLCHAIN_PREFIX"ar \
3533
CC_mips_unknown_linux_musl="$CROSS_TOOLCHAIN_PREFIX"gcc \

0 commit comments

Comments
 (0)