| ... | @@ -271,17 +271,17 @@ inline fn getDynamicSymbol() [*]const elf.Dyn { | ... | @@ -271,17 +271,17 @@ inline fn getDynamicSymbol() [*]const elf.Dyn { |
| 271 | : [ret] "=r" (-> [*]const elf.Dyn), | 271 | : [ret] "=r" (-> [*]const elf.Dyn), |
| 272 | : | 272 | : |
| 273 | : .{ .r0 = true }), | 273 | : .{ .r0 = true }), |
| 274 | // The compiler does not necessarily have any obligation to load the `l7` register (pointing | | |
| 275 | // to the GOT), so do it ourselves just in case. | | |
| 276 | .sparc, .sparc64 => asm volatile ( | 274 | .sparc, .sparc64 => asm volatile ( |
| 277 | \\ sethi %%hi(_GLOBAL_OFFSET_TABLE_ - 4), %%l7 | 275 | \\ .weak _DYNAMIC |
| | 276 | \\ .hidden _DYNAMIC |
| | 277 | \\ sethi %%pc22(_DYNAMIC - 4), %[ret] |
| 278 | \\ call 1f | 278 | \\ call 1f |
| 279 | \\ add %%l7, %%lo(_GLOBAL_OFFSET_TABLE_ + 4), %%l7 | 279 | \\ add %[ret], %%pc10(_DYNAMIC + 4), %[ret] |
| 280 | \\1: | 280 | \\1: |
| 281 | \\ add %%l7, %%o7, %[ret] | 281 | \\ add %[ret], %%o7, %[ret] |
| 282 | : [ret] "=r" (-> [*]const elf.Dyn), | 282 | : [ret] "=r" (-> [*]const elf.Dyn), |
| 283 | : | 283 | : |
| 284 | : .{ .l7 = true }), | 284 | : .{ .o7 = true }), |
| 285 | .xtensa, .xtensaeb => asm volatile ( | 285 | .xtensa, .xtensaeb => asm volatile ( |
| 286 | \\ .weak _DYNAMIC | 286 | \\ .weak _DYNAMIC |
| 287 | \\ .hidden _DYNAMIC | 287 | \\ .hidden _DYNAMIC |