authorgravatar for alex@alexrp.comAlex Rønne Petersen <alex@alexrp.com> 2025-11-13 20:19:22+01:00
committergravatar for alex@alexrp.comAlex Rønne Petersen <alex@alexrp.com> 2025-11-14 12:19:38+01:00
log94538d8dd2fbfb8d23c43a813838f2ab5c4a8ad8
tree5977714450d9620dd83e17ae8f92ab04b4acf371
parent9ab7eec23e6aa1fc8d5659566e426816ba573537

std.pie: add missing clobbers on alpha and sparc

Also format all the assembly code in the file.

1 files changed, 17 insertions(+), 13 deletions(-)

lib/std/pie.zig+17-13
......@@ -56,8 +56,9 @@ inline fn getDynamicSymbol() [*]const elf.Dyn {
5656 \\ .weak _DYNAMIC
5757 \\ .hidden _DYNAMIC
5858 \\ call 1f
59 \\ 1: pop %[ret]
60 \\ lea _DYNAMIC-1b(%[ret]), %[ret]
59 \\1:
60 \\ pop %[ret]
61 \\ lea _DYNAMIC - 1b(%[ret]), %[ret]
6162 : [ret] "=r" (-> [*]const elf.Dyn),
6263 ),
6364 .x86_64 => asm volatile (
......@@ -79,8 +80,9 @@ inline fn getDynamicSymbol() [*]const elf.Dyn {
7980 \\ ldr %[ret], 1f
8081 \\ add %[ret], pc
8182 \\ b 2f
82 \\ 1: .word _DYNAMIC-1b
83 \\ 2:
83 \\1:
84 \\ .word _DYNAMIC-1b
85 \\2:
8486 : [ret] "=r" (-> [*]const elf.Dyn),
8587 ),
8688 // A simple `adr` is not enough as it has a limited offset range
......@@ -99,7 +101,7 @@ inline fn getDynamicSymbol() [*]const elf.Dyn {
99101 \\ ldq %[ret], -0x8000($29)
100102 : [ret] "=r" (-> [*]const elf.Dyn),
101103 :
102 : .{ .r26 = true }),
104 : .{ .r26 = true, .r29 = true }),
103105 // The CSKY ABI requires the gb register to point to the GOT. Additionally, the first
104106 // entry in the GOT is defined to hold the address of _DYNAMIC.
105107 .csky => asm volatile (
......@@ -112,7 +114,7 @@ inline fn getDynamicSymbol() [*]const elf.Dyn {
112114 \\ .hidden _DYNAMIC
113115 \\ jump 1f
114116 \\ .word _DYNAMIC - .
115 \\ 1:
117 \\1:
116118 \\ r1 = pc
117119 \\ r1 = add(r1, #-4)
118120 \\ %[ret] = memw(r1)
......@@ -198,7 +200,7 @@ inline fn getDynamicSymbol() [*]const elf.Dyn {
198200 \\ .hidden _DYNAMIC
199201 \\ bl 1f
200202 \\ .long _DYNAMIC - .
201 \\ 1:
203 \\1:
202204 \\ mflr %[ret]
203205 \\ lwz 4, 0(%[ret])
204206 \\ add %[ret], 4, %[ret]
......@@ -210,7 +212,7 @@ inline fn getDynamicSymbol() [*]const elf.Dyn {
210212 \\ .hidden _DYNAMIC
211213 \\ bl 1f
212214 \\ .quad _DYNAMIC - .
213 \\ 1:
215 \\1:
214216 \\ mflr %[ret]
215217 \\ ld 4, 0(%[ret])
216218 \\ add %[ret], 4, %[ret]
......@@ -229,8 +231,9 @@ inline fn getDynamicSymbol() [*]const elf.Dyn {
229231 \\ larl %[ret], 1f
230232 \\ ag %[ret], 0(%[ret])
231233 \\ jg 2f
232 \\ 1: .quad _DYNAMIC - .
233 \\ 2:
234 \\1:
235 \\ .quad _DYNAMIC - .
236 \\2:
234237 : [ret] "=a" (-> [*]const elf.Dyn),
235238 ),
236239 .sh, .sheb => asm volatile (
......@@ -252,11 +255,12 @@ inline fn getDynamicSymbol() [*]const elf.Dyn {
252255 .sparc, .sparc64 => asm volatile (
253256 \\ sethi %%hi(_GLOBAL_OFFSET_TABLE_ - 4), %%l7
254257 \\ call 1f
255 \\ add %%l7, %%lo(_GLOBAL_OFFSET_TABLE_ + 4), %%l7
256 \\ 1:
258 \\ add %%l7, %%lo(_GLOBAL_OFFSET_TABLE_ + 4), %%l7
259 \\1:
257260 \\ add %%l7, %%o7, %[ret]
258261 : [ret] "=r" (-> [*]const elf.Dyn),
259 ),
262 :
263 : .{ .l7 = true }),
260264 else => {
261265 @compileError("PIE startup is not yet supported for this target!");
262266 },