authorgravatar for alex@alexrp.comAlex Rønne Petersen <alex@alexrp.com> 2025-09-22 18:36:47+02:00
committergravatar for noreply@github.comGitHub <noreply@github.com> 2025-09-22 18:36:47+02:00
log7b92d5f4052be651e9bc5cd4ad78a69ccbee865d
treef5a1113435e60fbf691774ce7d36399ad90bc96d
parent26825e95066c104585d248787c0e56ce4e8413e0
signaturebadge-check Signed by PGP key B5690EEEBB952194

std.pie: fix register constraint in getDynamicSymbol() for s390x (#25327)

If the compiler happens to pick `ret = r0`, then this will assemble to `ag r0, 0` which is obviously not what we want. Using `a` instead of `r` will ensure that we get an appropriate address register, i.e. `r1` through `r15`. Re-enable pie_linux for s390x-linux which was disabled in ed7ff0b693037078f451a7c6c1124611060f4892.

2 files changed, 2 insertions(+), 2 deletions(-)

lib/std/pie.zig+1-1
...@@ -177,7 +177,7 @@ inline fn getDynamicSymbol() [*]const elf.Dyn {...@@ -177,7 +177,7 @@ inline fn getDynamicSymbol() [*]const elf.Dyn {
177 \\ jg 2f177 \\ jg 2f
178 \\ 1: .quad _DYNAMIC - .178 \\ 1: .quad _DYNAMIC - .
179 \\ 2:179 \\ 2:
180 : [ret] "=r" (-> [*]const elf.Dyn),180 : [ret] "=a" (-> [*]const elf.Dyn),
181 ),181 ),
182 // The compiler does not necessarily have any obligation to load the `l7` register (pointing182 // The compiler does not necessarily have any obligation to load the `l7` register (pointing
183 // to the GOT), so do it ourselves just in case.183 // to the GOT), so do it ourselves just in case.
test/cases/pie_linux.zig+1-1
...@@ -6,5 +6,5 @@ pub fn main() void {}...@@ -6,5 +6,5 @@ pub fn main() void {}
66
7// run7// run
8// backend=llvm8// backend=llvm
9// target=arm-linux,armeb-linux,thumb-linux,thumbeb-linux,aarch64-linux,aarch64_be-linux,loongarch64-linux,mips-linux,mipsel-linux,mips64-linux,mips64el-linux,powerpc-linux,powerpcle-linux,powerpc64-linux,powerpc64le-linux,riscv32-linux,riscv64-linux,x86-linux,x86_64-linux9// target=arm-linux,armeb-linux,thumb-linux,thumbeb-linux,aarch64-linux,aarch64_be-linux,loongarch64-linux,mips-linux,mipsel-linux,mips64-linux,mips64el-linux,powerpc-linux,powerpcle-linux,powerpc64-linux,powerpc64le-linux,riscv32-linux,riscv64-linux,s390x-linux,x86-linux,x86_64-linux
10// pie=true10// pie=true