|
|
Message-ID: <b8d3e5fa-afb1-67ba-d2a4-3102761d7ccc@mirbsd.de>
Date: Mon, 3 Mar 2025 11:47:35 +0100 (CET)
From: Thorsten Glaser <tg@...bsd.de>
To: musl@...ts.openwall.com
cc: Dmitry Vyukov <dvyukov@...gle.com>
Subject: Re: Support for -static-pie relocations
On Sat, 1 Mar 2025, Rich Felker wrote:
>I don't think we've hit that on x86_64, and it was long ago fixed on
>the archs we did hit it on, so I don't think that's what's going on.
I use static-pie for mksh/musl builds on Debian, so I can report
what works for me and what doesn’t.
Using musl 1.2.5 on: amd64, arm64, armel, armhf, i386, loong64,
m68k, mips64el, ppc64el, riscv64, s390x, sh4
(For mips64el I’m still patching the specs file as elaborated in
the earlier thread on this list or Debian #1050429.)
Test program:
#include <stdio.h>
int main(void) {
printf("main = 0x%lX\n", (unsigned long)main);
return (0);
}
Test compilation:
musl-gcc -fPIE -static -static-pie -fno-lto -Wl,-z,text \
-o t.exe t.c && test -x t.exe
For some reason, all three of -fPIE -static -static-pie are needed
(I put -fPIE into CFLAGS and -static -static-pie -Wl,-z,text into
LDFLAGS if the test succeeds).
Then, the following is tested:
x1=$(./t.exe)
x2=$(./t.exe)
x3=$(./t.exe)
x4=$(./t.exe)
if test x"$x1" = x"$x2" && test x"$x2" = x"$x3" && \
test x"$x3" = x"$x4"; then
x5=0
elif test -z "$x1"; then
x5=0
else
x5=1
fi
x6=$(env LC_ALL=C file t.exe)
case $x6 in
(*', static-pie linked'*)
x7=1 ;;
(*'pie executable'*)
echo >&2 "W: file(1) does not report static-pie, guessing"
x7=1 ;;
(*executable*)
x7=0 ;;
(*)
x7=2 ;;
esac
(Basically, whether a test program can be built, run, reports
different locations for main in each run, and whether file(1)
says it is indeed static-pie.)
Afterwards, the results:
• amd64: works
• arm64: works
• armel: works
• armhf: works
• i386: works
• loong64: works
• m68k: fails, see below
• mips64el: works
• ppc64el: works
• riscv64: musl static-pie blacklisted due to #1068350
• s390x: musl static-pie blacklisted due to #1068350
• sh4: fails to ASLR, see below
‣ m68k:
| qemu: uncaught target signal 11 (Segmentation fault) - core dumped
| Segmentation fault
Compilation seemed to succeed though:
| t.exe: ELF 32-bit MSB pie executable, Motorola m68k, 68020, version 1 (SYSV), static-pie linked, with debug_info, not stripped
‣ sh4:
| main = 0x40000674
| main = 0x40000674
| main = 0x40000674
| main = 0x40000674
| t.exe: ELF 32-bit LSB pie executable, Renesas SH, version 1 (SYSV), static-pie linked, with debug_info, not stripped
‣ riscv64, s390x
The last messages on the bugreport were also sent to this list,
<Pine.BSM.4.64L.2404061513110.25918@...c.mirbsd.org> being the
last one with a question I posed nobody seems to have had an idea
how to answer.
Good however is: all architectures marked as “works” above have
all tests passing, so things seem to work.
bye,
//mirabilos
--
11:56⎜«liwakura:#!/bin/mksh» also, i wanted to add mksh to my own distro │
i was disappointed that there is no makefile │ but somehow the Build.sh is
the least painful built system i've ever seen │ honours CC, {CPP,C,LD}FLAGS
properly │ looks cleary like done by someone who knows what they are doing
Powered by blists - more mailing lists
Confused about mailing lists and their use? Read about mailing lists on Wikipedia and check out these guidelines on proper formatting of your messages.