| ... | ... | @@ -83,7 +83,7 @@ inline fn getDynamicSymbol() [*]const elf.Dyn { |
| 83 | 83 | \\ add %[ret], pc |
| 84 | 84 | \\ b 2f |
| 85 | 85 | \\1: |
| 86 | | \\ .word _DYNAMIC-1b |
| 86 | \\ .word _DYNAMIC - 1b |
| 87 | 87 | \\2: |
| 88 | 88 | : [ret] "=r" (-> [*]const elf.Dyn), |
| 89 | 89 | ), |
| ... | ... | @@ -97,20 +97,29 @@ inline fn getDynamicSymbol() [*]const elf.Dyn { |
| 97 | 97 | ), |
| 98 | 98 | // The compiler is not required to load the GP register, so do it ourselves. |
| 99 | 99 | .alpha => asm volatile ( |
| 100 | \\ .weak _DYNAMIC |
| 101 | \\ .hidden _DYNAMIC |
| 100 | 102 | \\ br $29, 1f |
| 101 | 103 | \\1: |
| 102 | 104 | \\ ldgp $29, 0($29) |
| 103 | | \\ ldq %[ret], -0x8000($29) |
| 105 | \\ ldah %[ret], _DYNAMIC($29) !gprelhigh |
| 106 | \\ lda %[ret], _DYNAMIC(%[ret]) !gprellow |
| 104 | 107 | : [ret] "=r" (-> [*]const elf.Dyn), |
| 105 | 108 | : |
| 106 | | : .{ .r26 = true, .r29 = true }), |
| 107 | | // The CSKY ABI requires the gb register to point to the GOT. Additionally, the first |
| 108 | | // entry in the GOT is defined to hold the address of _DYNAMIC. |
| 109 | : .{ .r29 = true }), |
| 109 | 110 | .csky => asm volatile ( |
| 110 | | \\ mov %[ret], gb |
| 111 | | \\ ldw %[ret], %[ret] |
| 111 | \\ .weak _DYNAMIC |
| 112 | \\ .hidden _DYNAMIC |
| 113 | \\ grs %[ret], 1f |
| 114 | \\ br 2f |
| 115 | \\1: |
| 116 | \\ .long _DYNAMIC - 1b |
| 117 | \\2: |
| 118 | \\ ldw r12, (%[ret], 0) |
| 119 | \\ addu %[ret], %[ret], r12 |
| 112 | 120 | : [ret] "=r" (-> [*]const elf.Dyn), |
| 113 | | ), |
| 121 | : |
| 122 | : .{ .r12 = true }), |
| 114 | 123 | .hexagon => asm volatile ( |
| 115 | 124 | \\ .weak _DYNAMIC |
| 116 | 125 | \\ .hidden _DYNAMIC |
| ... | ... | @@ -146,9 +155,17 @@ inline fn getDynamicSymbol() [*]const elf.Dyn { |
| 146 | 155 | : [ret] "=r" (-> [*]const elf.Dyn), |
| 147 | 156 | ), |
| 148 | 157 | .microblaze, .microblazeel => asm volatile ( |
| 149 | | \\ lwi %[ret], r20, 0 |
| 158 | \\ .weak _DYNAMIC |
| 159 | \\ .hidden _DYNAMIC |
| 160 | \\ mfs %[ret], rpc |
| 161 | \\ bri 1f |
| 162 | \\ .word _DYNAMIC - . + 8 |
| 163 | \\1: |
| 164 | \\ lwi r18, %[ret], 8 |
| 165 | \\ add %[ret], %[ret], r18 |
| 150 | 166 | : [ret] "=r" (-> [*]const elf.Dyn), |
| 151 | | ), |
| 167 | : |
| 168 | : .{ .r18 = true }), |
| 152 | 169 | .mips, .mipsel => asm volatile ( |
| 153 | 170 | \\ .weak _DYNAMIC |
| 154 | 171 | \\ .hidden _DYNAMIC |