From 80ebbc7cf58ab5818e5f1dffd74700652ae4fd2b Mon Sep 17 00:00:00 2001 From: Nikita Mikhailov Date: Wed, 22 Apr 2026 18:53:12 +0200 Subject: [PATCH 1/3] Make riscv64 / ppc64le / loongarch64 sysroots PIE-ready - riscv64: add librt.so -> librt.so.1 symlink so -lrt resolves to the shared library instead of falling back to the non-PIC librt.a, which would otherwise emit R_RISCV_HI20/LO12 errors under -pie. - ppc64le: add Scrt1.o from Debian trixie libc6-dev-ppc64el-cross (2.41-11cross1) so linking with -pie no longer fails at 'cannot open Scrt1.o'. - loongarch64: same, from libc6-dev-loong64-cross. Add refresh-linux-sysroot.sh so the procedure can be re-run later. --- README.md | 9 + .../usr/lib/loongarch64-linux-gnu/Scrt1.o | Bin 0 -> 2408 bytes .../powerpc64le-linux-gnu/libc/lib64/Scrt1.o | Bin 0 -> 2000 bytes .../libc/usr/lib64/Scrt1.o | Bin 0 -> 2000 bytes linux-riscv64/lib/riscv64-linux-gnu/librt.so | 1 + refresh-linux-sysroot.sh | 178 ++++++++++++++++++ 6 files changed, 188 insertions(+) create mode 100644 linux-loongarch64/usr/lib/loongarch64-linux-gnu/Scrt1.o create mode 100644 linux-powerpc64le/powerpc64le-linux-gnu/libc/lib64/Scrt1.o create mode 100644 linux-powerpc64le/powerpc64le-linux-gnu/libc/usr/lib64/Scrt1.o create mode 120000 linux-riscv64/lib/riscv64-linux-gnu/librt.so create mode 100755 refresh-linux-sysroot.sh diff --git a/README.md b/README.md index 2a4810f8..6f20609e 100644 --- a/README.md +++ b/README.md @@ -62,5 +62,14 @@ FreeBSD: - Run ./refresh-freebsd-sysroot.sh +PIE-readiness on Linux targets: + +- Run `./refresh-linux-sysroot.sh ` (or `./refresh-linux-sysroot.sh all`) + where `` is `riscv64`, `ppc64le`, or `loongarch64`. This adds the + minimal set of files missing from each sysroot so ClickHouse can be + linked as a Position-Independent Executable (`-pie`): a `librt.so` link + for riscv64, and `Scrt1.o` for ppc64le / loongarch64. See the header + comment of the script for details. + TODO: - simplify directory structure even more. diff --git a/linux-loongarch64/usr/lib/loongarch64-linux-gnu/Scrt1.o b/linux-loongarch64/usr/lib/loongarch64-linux-gnu/Scrt1.o new file mode 100644 index 0000000000000000000000000000000000000000..a03d046d37819c6c708cebaaf6b93ce2ddcdc448 GIT binary patch literal 2408 zcmbtV%}x|S5U$x(!3YW{YQV#=F@{8TLUbdV)pCf46^$%ahAcDi$P4}=?hxagqoM9Z#ao}oyaA%M^ z1JJ3)YcOWk1aMwG24~N4rbp`ryU4gvLk`tpaN5zz!>0zO($5+T%zTXY+o>O4m+!5^ z>xSOni5fQ>-6&|xHPXB=6V*qruX;2UW@(-`b((I6u}b>QK;=<$C(U$@oR?9SCutvP z3oUe27RHH=LcN<&sOoiZv>I=C@d1kJ#3MI#+0%j#+aTJ4U#h^}3jA^fK3jp$Rp9d# zc&h?mt-w1K_(lcZt-wq0uk)$mQ-9bZ=UL`c&p6n%A}$+eP)je$9O+3M6Br@+HwZ*o z#4(6Z-)|i1L@^?9SJ4~9ht9kMzORDB*J=w?fb9oAFjF;4kyT<%$jxa^&%F8!cf!!d5G;>Trs z0kzEsFW>KJ6`nGNY@!NnI%{YH6fLSTKsdbWhi`T}1^gL1V6VD0k%;wt-8 zKk+19>R&>Pw`iEM-Z$g@{bO@!_Aw56jiml^yo+yLlJ(m>N$(cjUs{Vq&i^FZ<+W-4fWh13SW>Q^ R?)aein7{wN6-#D0{wIq)l4<|| literal 0 HcmV?d00001 diff --git a/linux-powerpc64le/powerpc64le-linux-gnu/libc/lib64/Scrt1.o b/linux-powerpc64le/powerpc64le-linux-gnu/libc/lib64/Scrt1.o new file mode 100644 index 0000000000000000000000000000000000000000..440eb2b0ee0da1941703c0bd90d84586a33d43b0 GIT binary patch literal 2000 zcmb_c-D(q25S}C&qg9(01ksyqC=$UeMS~5ZxVBm?6r-Tv-S+Gc&0>-*yQh+3RlL#* zAHXN@$|v#4hw#QXC?e|2?o6^h?v*%jGBe-&?##(~b8l;-TB(3g1$4g);IvD90F8t0W`iN{s7N5o{SvpG_0Uh z2RGF!(G{q|G1QxQsQ&$jPw^Lk%AU$3$m{{iuP^-ivT?T$FI#$lH*DQ#1)PuZiBno$4v*(*xgIR0L{b5^Yh)iBisxkfzm2R zFe%ed8g)X!`R0LvMg-`OJGW}NO;N%wFGak}e54HgKm3rO5f_eWZJ z$aRwQfk;U>RJIN$8tf#dkF)($cflUVI<)bEckt%>&so2-w%N(1m05SupmstG%yPs& z*pz_vEEifZtv!r=H3ZvB(_&ZuEL#{!b2{>ks5^LwX_bm7a2{3rkmrUz;=wB+kH{&g|6-n%Z zJw~Azzs!cu%(XZ&H{%1usV9DJr`{GfD)SP9sk>;PoQ^m!Z*oGJGtHm+lz71-#LDWo zxxU#i!(0V`zOO8Pg&nP_XDfnyZP`fr!?Pybzsm;T=|X3p=C*(et@VbW#y?2<8w mZ*ag_M5#}+KD{MoZA$Qrlint!KxTb2F-hH#{U7>W{j2q literal 0 HcmV?d00001 diff --git a/linux-powerpc64le/powerpc64le-linux-gnu/libc/usr/lib64/Scrt1.o b/linux-powerpc64le/powerpc64le-linux-gnu/libc/usr/lib64/Scrt1.o new file mode 100644 index 0000000000000000000000000000000000000000..440eb2b0ee0da1941703c0bd90d84586a33d43b0 GIT binary patch literal 2000 zcmb_c-D(q25S}C&qg9(01ksyqC=$UeMS~5ZxVBm?6r-Tv-S+Gc&0>-*yQh+3RlL#* zAHXN@$|v#4hw#QXC?e|2?o6^h?v*%jGBe-&?##(~b8l;-TB(3g1$4g);IvD90F8t0W`iN{s7N5o{SvpG_0Uh z2RGF!(G{q|G1QxQsQ&$jPw^Lk%AU$3$m{{iuP^-ivT?T$FI#$lH*DQ#1)PuZiBno$4v*(*xgIR0L{b5^Yh)iBisxkfzm2R zFe%ed8g)X!`R0LvMg-`OJGW}NO;N%wFGak}e54HgKm3rO5f_eWZJ z$aRwQfk;U>RJIN$8tf#dkF)($cflUVI<)bEckt%>&so2-w%N(1m05SupmstG%yPs& z*pz_vEEifZtv!r=H3ZvB(_&ZuEL#{!b2{>ks5^LwX_bm7a2{3rkmrUz;=wB+kH{&g|6-n%Z zJw~Azzs!cu%(XZ&H{%1usV9DJr`{GfD)SP9sk>;PoQ^m!Z*oGJGtHm+lz71-#LDWo zxxU#i!(0V`zOO8Pg&nP_XDfnyZP`fr!?Pybzsm;T=|X3p=C*(et@VbW#y?2<8w mZ*ag_M5#}+KD{MoZA$Qrlint!KxTb2F-hH#{U7>W{j2q literal 0 HcmV?d00001 diff --git a/linux-riscv64/lib/riscv64-linux-gnu/librt.so b/linux-riscv64/lib/riscv64-linux-gnu/librt.so new file mode 120000 index 00000000..0820df44 --- /dev/null +++ b/linux-riscv64/lib/riscv64-linux-gnu/librt.so @@ -0,0 +1 @@ +librt.so.1 \ No newline at end of file diff --git a/refresh-linux-sysroot.sh b/refresh-linux-sysroot.sh new file mode 100755 index 00000000..d78172bf --- /dev/null +++ b/refresh-linux-sysroot.sh @@ -0,0 +1,178 @@ +#!/usr/bin/env bash +# +# Add the bits to each Linux cross-sysroot that are needed to link +# ClickHouse as a Position-Independent Executable (PIE). +# +# Design philosophy: do the smallest possible change per target. For each +# arch we only add what is missing: +# +# * riscv64 +# - The sysroot already ships `librt.so.1` (glibc 2.32) and a +# non-PIC `librt.a`. There is no `librt.so` symlink, so `-lrt` +# falls back to the static archive and the linker emits +# R_RISCV_HI20/LO12 errors against a PIE output. +# - Fix: add a `librt.so -> librt.so.1` symlink. (usr/lib is a +# symlink to ../lib in this sysroot, so we only touch one path.) +# That makes `-lrt` resolve to the shared library, which contains +# all the POSIX-timer symbols we need. +# - No new files are downloaded. No archives are replaced. The +# runtime glibc floor for the resulting binary is unchanged. +# +# * ppc64le +# - The sysroot has no PIE entry object. Linking with `-pie` fails +# with "cannot open Scrt1.o". +# - Fix: copy `Scrt1.o` from Debian trixie's libc6-dev-ppc64el-cross +# package into both lib64 paths the sysroot uses. `Scrt1.o` only +# references `__libc_start_main` (present since glibc 2.0), so it +# is safe to drop into an older sysroot. +# +# * loongarch64 +# - Same story as ppc64le: no `Scrt1.o`. +# - Fix: copy `Scrt1.o` from Debian trixie's libc6-dev-loong64-cross +# package into `usr/lib/loongarch64-linux-gnu/`. +# +# This script is intentionally not a "full sysroot refresh". Upgrading +# the glibc version compiled against is a separate, larger change. +# +# Usage: +# ./refresh-linux-sysroot.sh # refresh one arch +# ./refresh-linux-sysroot.sh all # refresh all three +# +# Supported : riscv64, ppc64le, loongarch64 +# +# Requires: docker (only for ppc64le / loongarch64). + +set -euo pipefail + +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" + +STAGE_ROOT="" +cleanup() { + if [[ -n "$STAGE_ROOT" && -d "$STAGE_ROOT" ]]; then + rm -rf "$STAGE_ROOT" + fi +} +trap cleanup EXIT + +# Extract libc6-dev--cross from Debian trixie into a staging dir. +# We run the container as root (apt-get needs it) and chown the output tree +# back to the invoking user so the host can clean it up without sudo. +# +# Result is placed in the global variable EXTRACTED_DIR. We avoid command +# substitution here because `FOO=$(func)` runs `func` in a subshell, so any +# modifications to globals (including STAGE_ROOT) and any EXIT traps are +# lost as soon as the subshell finishes. +EXTRACTED_DIR="" +extract_cross_dev() { + local deb_arch="$1" + if [[ -z "$STAGE_ROOT" ]]; then + STAGE_ROOT="$(mktemp -d)" + fi + local dest="$STAGE_ROOT/$deb_arch" + if [[ -d "$dest/usr" ]]; then + EXTRACTED_DIR="$dest" + return 0 + fi + mkdir -p "$dest" + local uid gid + uid="$(id -u)" + gid="$(id -g)" + docker run --rm -v "$dest":/out debian:trixie-slim bash -c " + set -e + apt-get update -qq >/dev/null + mkdir -p /tmp/debs && cd /tmp/debs + apt-get download libc6-dev-${deb_arch}-cross >/dev/null + for d in *.deb; do dpkg-deb -x \"\$d\" /out; done + chown -R ${uid}:${gid} /out + " >/dev/null + EXTRACTED_DIR="$dest" +} + +refresh_riscv64() { + local sysroot="$SCRIPT_DIR/linux-riscv64" + local dir="$sysroot/lib/riscv64-linux-gnu" + echo ">> riscv64: $sysroot" + if [[ ! -d "$dir" ]]; then + echo "Error: missing target dir $dir" >&2 + return 1 + fi + # Note: usr/lib is a symlink to ../lib in this sysroot so this also + # makes the file visible under usr/lib/riscv64-linux-gnu/librt.so. + if [[ -L "$dir/librt.so" ]]; then + echo " $dir/librt.so already a symlink, leaving it" + else + ln -sfv librt.so.1 "$dir/librt.so" + fi +} + +refresh_ppc64le() { + local sysroot="$SCRIPT_DIR/linux-powerpc64le" + local triplet="powerpc64le-linux-gnu" + echo ">> ppc64le: $sysroot" + + extract_cross_dev ppc64el + local src="$EXTRACTED_DIR/usr/${triplet}/lib/Scrt1.o" + if [[ ! -e "$src" ]]; then + echo "Error: Scrt1.o not found in libc6-dev-ppc64el-cross at $src" >&2 + return 1 + fi + + for rel in ${triplet}/libc/lib64 ${triplet}/libc/usr/lib64; do + local dir="$sysroot/$rel" + if [[ ! -d "$dir" ]]; then + echo " Skipping missing dir: $dir" >&2 + continue + fi + cp --preserve=mode,timestamps -v "$src" "$dir/Scrt1.o" + done +} + +refresh_loongarch64() { + local sysroot="$SCRIPT_DIR/linux-loongarch64" + local triplet="loongarch64-linux-gnu" + echo ">> loongarch64: $sysroot" + + # Debian calls this arch "loong64", but the GNU triplet is + # "loongarch64-linux-gnu" and that is what the sysroot uses. + extract_cross_dev loong64 + local src="$EXTRACTED_DIR/usr/${triplet}/lib/Scrt1.o" + if [[ ! -e "$src" ]]; then + echo "Error: Scrt1.o not found in libc6-dev-loong64-cross at $src" >&2 + return 1 + fi + + local dir="$sysroot/usr/lib/${triplet}" + if [[ ! -d "$dir" ]]; then + echo "Error: missing target dir $dir" >&2 + return 1 + fi + cp --preserve=mode,timestamps -v "$src" "$dir/Scrt1.o" +} + +ARCH="${1:-}" +if [[ -z "$ARCH" ]]; then + cat < + +Supported : riscv64, ppc64le, loongarch64, all +EOF + exit 1 +fi + +case "$ARCH" in + riscv64) refresh_riscv64 ;; + ppc64le) refresh_ppc64le ;; + loongarch64) refresh_loongarch64 ;; + all) + refresh_riscv64 + refresh_ppc64le + refresh_loongarch64 + ;; + *) + echo "Error: unsupported arch '$ARCH'." >&2 + exit 1 + ;; +esac + +echo +echo "Done. Review with: git -C ${SCRIPT_DIR} status" From bcd6cb58656e6132e0d5e3147411aa204bb31a8f Mon Sep 17 00:00:00 2001 From: Nikita Mikhailov Date: Wed, 22 Apr 2026 19:33:04 +0200 Subject: [PATCH 2/3] Make FreeBSD sysroots PIE-ready Drop Scrt1.o, crtbeginS.o, crtendS.o extracted from FreeBSD 13.5-RELEASE base.txz into each FreeBSD sysroot. Without them, linking with -pie fails at 'cannot open Scrt1.o' (and for freebsd-x86_64 also 'crtbeginS.o' / 'crtendS.o'). Also extend refresh-freebsd-sysroot.sh to copy the PIE startup objects as part of a full refresh so this doesn't regress next time the sysroot is regenerated, and bump the URL examples to 13.5-RELEASE (13.4 was removed from the mirror) with the corrected /releases/powerpc/powerpc64le/... path. --- freebsd-aarch64/lib/Scrt1.o | Bin 0 -> 14016 bytes freebsd-aarch64/lib/crtbeginS.o | Bin 0 -> 4528 bytes freebsd-aarch64/lib/crtendS.o | Bin 0 -> 2152 bytes freebsd-powerpc64le/lib/Scrt1.o | Bin 0 -> 14504 bytes freebsd-powerpc64le/lib/crtbeginS.o | Bin 0 -> 5600 bytes freebsd-powerpc64le/lib/crtendS.o | Bin 0 -> 3928 bytes freebsd-x86_64/lib/Scrt1.o | Bin 0 -> 13408 bytes freebsd-x86_64/lib/crtbeginS.o | Bin 0 -> 5248 bytes freebsd-x86_64/lib/crtendS.o | Bin 0 -> 3776 bytes refresh-freebsd-sysroot.sh | 7 ++++--- 10 files changed, 4 insertions(+), 3 deletions(-) create mode 100644 freebsd-aarch64/lib/Scrt1.o create mode 100644 freebsd-aarch64/lib/crtbeginS.o create mode 100644 freebsd-aarch64/lib/crtendS.o create mode 100644 freebsd-powerpc64le/lib/Scrt1.o create mode 100644 freebsd-powerpc64le/lib/crtbeginS.o create mode 100644 freebsd-powerpc64le/lib/crtendS.o create mode 100644 freebsd-x86_64/lib/Scrt1.o create mode 100644 freebsd-x86_64/lib/crtbeginS.o create mode 100644 freebsd-x86_64/lib/crtendS.o diff --git a/freebsd-aarch64/lib/Scrt1.o b/freebsd-aarch64/lib/Scrt1.o new file mode 100644 index 0000000000000000000000000000000000000000..30756ebd1e88040876fb2d155c43b48ea8536d4b GIT binary patch literal 14016 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 RsqS-fnkP`zhfjR}e*XSGsy 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 HI9LB4?&?cY literal 0 HcmV?d00001 diff --git a/freebsd-powerpc64le/lib/crtbeginS.o b/freebsd-powerpc64le/lib/crtbeginS.o new file mode 100644 index 0000000000000000000000000000000000000000..1a614f844140e656e92dda3cdc5997193e3358e8 GIT binary patch literal 5600 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 Crfq8g literal 0 HcmV?d00001 diff --git a/freebsd-x86_64/lib/Scrt1.o b/freebsd-x86_64/lib/Scrt1.o new file mode 100644 index 0000000000000000000000000000000000000000..98d4bff35b9c0ede996534d027a641305d4525d7 GIT binary patch literal 13408 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 HlfFI&*jylG literal 0 HcmV?d00001 diff --git a/freebsd-x86_64/lib/crtendS.o b/freebsd-x86_64/lib/crtendS.o new file mode 100644 index 0000000000000000000000000000000000000000..d592427548ef6e0149708ff641aed5e5d76670dd GIT binary patch literal 3776 zcmcguO>7%Q6n^8iV<%3XKa#YR5+k*OmS&xls7VV1H$TOJQlg|qDy3TN^~P~!JgmNhXyl{IU{dL?_oavD{;o*h1- z59_1ZhZbG;eB)>?SE;&-D<$2umvgn+1=$RqckCt0bam{^5^6h@K^ZtWG*~gqqeEju zhmKf7r9=B6x6*KO4adyYs->LSSjl0kWxJj;9oMRtbyE`T(vnXsE|(9F=w9mwc^(+X zQ`3 zD*wmqkFqAd8Z$xaL{fa(PbBB0^2fi)Rls~-s7bE;1*nc&|S94C#8zJ2P zE)aW%aW&3g*?&KRxAQ`M7{Vz=$wzFcJl)J!?@cb%9bn#95q^gG_l0opEN4HwvywV&er%uv%ZRL9g4cr9XM{^kBm+nlFJ)7l=_Tm+}6oY@yexb!!W-;1rh;k;!Vd zNq2y}Lv*a?7E7QvE-sUf9Qj)=gWw8LGxXmy?N9%f52bpHkCwke7@53`K6-$$@V7yo zd1_G9IVnAW=!rrgX05+v_6e)C?=>l#s2_}C`NssaeSVf zkf`@p5Uo$M`TLPCBQ-BHf1UWKcr|}-Bi5|`2G?J}{;)*3Z(?V&`dKcd>QH_92Z+{R qLrgodX`{M?k1u0Pq}(JFPZF(v6ER+DuU|DUa-iCW6xV@IwEo{J99;DP literal 0 HcmV?d00001 diff --git a/refresh-freebsd-sysroot.sh b/refresh-freebsd-sysroot.sh index f3c238c9..f17b8a07 100755 --- a/refresh-freebsd-sysroot.sh +++ b/refresh-freebsd-sysroot.sh @@ -9,9 +9,9 @@ if [[ -z "$URL" ]]; then Usage: ./refresh-freebsd-sysroot.sh URL examples: - https://download.freebsd.org/releases/arm64/13.4-RELEASE/base.txz - https://download.freebsd.org/releases/amd64/13.4-RELEASE/base.txz - https://download.freebsd.org/releases/powerpc64/13.4-RELEASE/base.txz + https://download.freebsd.org/releases/amd64/13.5-RELEASE/base.txz + https://download.freebsd.org/releases/arm64/13.5-RELEASE/base.txz + https://download.freebsd.org/releases/powerpc/powerpc64le/13.5-RELEASE/base.txz The sysroot directory is automatically determined from the URL architecture. EOF @@ -44,6 +44,7 @@ mkdir -p "$SYSROOT/usr/include" "$SYSROOT/lib" cp -va "$NEW_SYSROOT/usr/include/." "$SYSROOT/usr/include/" for p in crt1.o crtbegin.o crtend.o crti.o crtn.o \ + Scrt1.o crtbeginS.o crtendS.o \ libc.a libm.a librt.a; do cp -va "$NEW_SYSROOT/usr/lib/$p" "$SYSROOT/lib/" done From 778d8ad4bae0f20cff1ea094ff6a8d08d5098511 Mon Sep 17 00:00:00 2001 From: Nikita Mikhailov Date: Thu, 23 Apr 2026 19:03:58 +0200 Subject: [PATCH 3/3] Make x86_64-musl sysroot PIE-ready Add rcrt1.o (from Alpine musl-dev 1.2.5-r23) and crtbeginS.o / crtendS.o (from Alpine gcc-15.2.0-r2 libgcc) to linux-x86_64-musl/lib/. Combined with '-static-pie' in the ClickHouse build, this lets clang's driver pick these PIC variants instead of the non-PIC crtbeginT.o / crtend.o static-exe CRT, and lld then successfully emits a static Position-Independent Executable. The existing musl libc.a / crt1.o / crti.o / crtn.o were already PIC-clean and are used unchanged. Also extend refresh-linux-sysroot.sh with a 'x86_64-musl' target so the procedure can be re-run later. --- linux-x86_64-musl/lib/crtbeginS.o | Bin 0 -> 3256 bytes linux-x86_64-musl/lib/crtendS.o | Bin 0 -> 1168 bytes linux-x86_64-musl/lib/rcrt1.o | Bin 0 -> 10360 bytes refresh-linux-sysroot.sh | 95 ++++++++++++++++++++++++++++-- 4 files changed, 90 insertions(+), 5 deletions(-) create mode 100644 linux-x86_64-musl/lib/crtbeginS.o create mode 100644 linux-x86_64-musl/lib/crtendS.o create mode 100644 linux-x86_64-musl/lib/rcrt1.o diff --git a/linux-x86_64-musl/lib/crtbeginS.o b/linux-x86_64-musl/lib/crtbeginS.o new file mode 100644 index 0000000000000000000000000000000000000000..d490bef016362775b20f28b7939e36a5dbfc0eb8 GIT binary patch literal 3256 zcmbuB&2Jk;6u@WW6k5JQKdA&LmXIpK$H-|_sVxHRq>eY>q!D!lmuk9RuM^X?*X)i_ zj8qZvaY&;`oVb9*jT1tMKLE8t>Y=A1?kJZ?^is9ANUdt#+ntvkPuB>ECr#eG-@LD# zomuDea&>OZvKWcQ-eIXll(F3>(|IwT7TIBTh}m0jqh)XHi`Cg(dDPxa=3ifz2L{^{ zlk2$hyV869r(^%ANA|`&`^MdO?Hju}+q!B0@kk!g66_yrHzy{~r}67?Io7Kz+g~PA zdt*mFYj4KJ;3#JOdu1>f&@!wgEhcL>IpY? zk_?yboPqS@f9G{D;>ZzyDzmfa@~@WsZmZ+vr%&^fyfCFSMvTMA!@#yGi_2_`S=W)# zJFpBJmNEtX$JzbNR&smUhC_34^>3cPd)rv~HufK9dBv&z4>5mQ(Nz5g)91%hn`XC= zlcDKtnCCT{rVmH(WAGpc$F$3)0$u^0r(jK=9Kqik!I>M%NcP~wyG)3(E#^KbEtJJf zxiY^f1fbf&tfJ~94og}J$l<(jCKW~ybN^R)$$HV#jNZP%Q-?-eqD z&`i^*?pmE@0Gv|kG^gGT9uYkK58?BG@|4E$oDe^z_-mjKY5bJpW}b5z*Yn_gK*2nR zVNm`MAqeKd-X0|F46Y&s!JC2~P2$%Of}sBq7?kH5gdkHe(4YAC2thCpJ`3gf5g`cX z!S5OQ|AY_(^PoTRUlD?seg2u?IR6VUr~H2@PW~?`dq?AX-MfloUCcvu6^1WE^1Nh| zMvgVQ1e7Lzn>dg9ZRyk*k7StWRhosK?{Mj@NyZzFbQrHk5#!!!a&8!>%OxNV&L5Bc z(GzFf4_wDrFug2dfmc{7rZdqvqRogVLoLDvgqpL+fuIuEh9 z2j&;P2n=N(E^2~jRhJjR!1q(sABb5S>H(rlB($4K{uxxe7cBib{v|s* zorPIgCN?_B@aDalcRPE>YwfC@^E|NO!8uHsRRP`{(I3e^6kv5a(5P0=N_&-F|0!0b zqZ4r~%KL<7D34jfoX2dm?jQ%=htX_!#GPYoYX(g}51-#NB9a28H#%juvyQZwGpDi$ zQ=RESrz1j;vVK!()?}@9AtkcgW|e9X*)Y;U8&RiY?Al7J7Y*Ve&;f{cmVr=R*-3*) zfzXi*dr7P$T6)OCB#Kmw({ZAe!0R7oItZVMKgI*mPm{h%^^h(3ce;TV^Ntpn)o0vN z{=T=dVYE3rKvi`UqV8(IGv>C2=O doxm4WI}>GG@coM@^KWk^w`edO+a|x<{{x7&NPGYQ literal 0 HcmV?d00001 diff --git a/linux-x86_64-musl/lib/rcrt1.o b/linux-x86_64-musl/lib/rcrt1.o new file mode 100644 index 0000000000000000000000000000000000000000..d0f6d88684149689d4be455ec676fad760b66d2b GIT binary patch literal 10360 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 literal 0 HcmV?d00001 diff --git a/refresh-linux-sysroot.sh b/refresh-linux-sysroot.sh index d78172bf..3d774c49 100755 --- a/refresh-linux-sysroot.sh +++ b/refresh-linux-sysroot.sh @@ -31,16 +31,32 @@ # - Fix: copy `Scrt1.o` from Debian trixie's libc6-dev-loong64-cross # package into `usr/lib/loongarch64-linux-gnu/`. # +# * x86_64-musl +# - ClickHouse's musl build is statically linked (`-static -lc`). Under +# `-pie`, that combination is incoherent: clang's driver picks +# `crtbeginT.o` (the non-PIC "typical" static-exe CRT) and `lld` +# then rejects its absolute `R_X86_64_32` relocations against +# `__TMC_END__` etc. Switching to `-static-pie` makes the driver +# pick the PIC variants (`rcrt1.o`, `crtbeginS.o`, `crtendS.o`), +# but those files are not in this sysroot. +# - Fix: copy `rcrt1.o` (musl's relocatable CRT entry), `crtbeginS.o` +# and `crtendS.o` from Alpine's musl-dev / libgcc / gcc packages +# into `lib/`. musl's existing `libc.a` / `crt1.o` / `crti.o` / +# `crtn.o` are already PIC-clean, so no other changes are needed. +# The corresponding build-system change is to switch the musl +# build from `-static` to `-static-pie` in +# `cmake/linux/default_libs.cmake` in the main repo. +# # This script is intentionally not a "full sysroot refresh". Upgrading -# the glibc version compiled against is a separate, larger change. +# the glibc/musl version compiled against is a separate, larger change. # # Usage: # ./refresh-linux-sysroot.sh # refresh one arch -# ./refresh-linux-sysroot.sh all # refresh all three +# ./refresh-linux-sysroot.sh all # refresh all four # -# Supported : riscv64, ppc64le, loongarch64 +# Supported : riscv64, ppc64le, loongarch64, x86_64-musl # -# Requires: docker (only for ppc64le / loongarch64). +# Requires: docker (for all arches except riscv64). set -euo pipefail @@ -149,12 +165,79 @@ refresh_loongarch64() { cp --preserve=mode,timestamps -v "$src" "$dir/Scrt1.o" } +# Pull the PIC CRT startup objects for x86_64-linux-musl out of Alpine's +# `musl-dev` + `libgcc` packages. Unlike the Debian-based arches above we +# can't use `apt-get download` here because Debian does not ship a +# musl-dev-x86-64-cross package; Alpine is the canonical source. +extract_alpine_musl() { + if [[ -z "$STAGE_ROOT" ]]; then + STAGE_ROOT="$(mktemp -d)" + fi + local dest="$STAGE_ROOT/alpine-musl" + if [[ -d "$dest/usr" ]]; then + EXTRACTED_DIR="$dest" + return 0 + fi + mkdir -p "$dest" + local uid gid + uid="$(id -u)" + gid="$(id -g)" + # musl-dev ships rcrt1.o / crt1.o / crti.o / crtn.o / libc.a. + # The PIC crtstuff (crtbeginS.o, crtendS.o) lives in the `gcc` package, + # not `libgcc` — libgcc only has the shared runtime. + docker run --rm -v "$dest":/out alpine:latest sh -c " + set -e + cd /out + apk fetch --no-cache --quiet musl-dev gcc 2>/dev/null + for f in *.apk; do tar -xzf \"\$f\" 2>/dev/null || true; done + chown -R ${uid}:${gid} /out + " >/dev/null + EXTRACTED_DIR="$dest" +} + +refresh_x86_64_musl() { + local sysroot="$SCRIPT_DIR/linux-x86_64-musl" + echo ">> x86_64-musl: $sysroot" + + extract_alpine_musl + local dir="$sysroot/lib" + if [[ ! -d "$dir" ]]; then + echo "Error: missing target dir $dir" >&2 + return 1 + fi + + # musl's relocatable CRT entry object (driver picks this for -static-pie). + local rcrt1="$EXTRACTED_DIR/usr/lib/rcrt1.o" + if [[ ! -e "$rcrt1" ]]; then + echo "Error: rcrt1.o not found in Alpine musl-dev at $rcrt1" >&2 + return 1 + fi + cp --preserve=mode,timestamps -v "$rcrt1" "$dir/rcrt1.o" + + # PIC variants of libgcc's crtstuff. They live under a versioned + # gcc-toolchain directory inside the libgcc package; glob for the first + # one we find so we don't hard-code the gcc version. + local gcclib + gcclib=$(ls -d "$EXTRACTED_DIR"/usr/lib/gcc/x86_64-alpine-linux-musl/*/ 2>/dev/null | head -1 || true) + if [[ -z "$gcclib" ]]; then + echo "Error: no libgcc tree under $EXTRACTED_DIR/usr/lib/gcc/" >&2 + return 1 + fi + for f in crtbeginS.o crtendS.o; do + if [[ ! -e "$gcclib/$f" ]]; then + echo "Error: $f not found under $gcclib" >&2 + return 1 + fi + cp --preserve=mode,timestamps -v "$gcclib/$f" "$dir/$f" + done +} + ARCH="${1:-}" if [[ -z "$ARCH" ]]; then cat < -Supported : riscv64, ppc64le, loongarch64, all +Supported : riscv64, ppc64le, loongarch64, x86_64-musl, all EOF exit 1 fi @@ -163,10 +246,12 @@ case "$ARCH" in riscv64) refresh_riscv64 ;; ppc64le) refresh_ppc64le ;; loongarch64) refresh_loongarch64 ;; + x86_64-musl) refresh_x86_64_musl ;; all) refresh_riscv64 refresh_ppc64le refresh_loongarch64 + refresh_x86_64_musl ;; *) echo "Error: unsupported arch '$ARCH'." >&2