authorgravatar for alex@alexrp.comAlex Rønne Petersen <alex@alexrp.com> 2026-07-06 12:02:18+02:00
committergravatar for alex@alexrp.comAlex Rønne Petersen <alex@alexrp.com> 2026-07-09 10:49:18+02:00
log001d7ed757cf67ed955bfdb15d46cc57949c6ecb
treea07137a060a6cf9253398625f3d41e0663896c5e
parentf51bb018d71da1ab80af59b03eba207e12c231a6
signaturebadge-check Signed by SSH key SHA256:7B/LJ7bpR1eX8aCXSr4mtd5M45VMPKcx9zY8e95b5QM

Elf2: rename loongarch-specific relocation tags


1 files changed, 95 insertions(+), 91 deletions(-)

src/link/Elf2.zig+95-91
...@@ -784,13 +784,13 @@ const GotReloc = struct {...@@ -784,13 +784,13 @@ const GotReloc = struct {
784 rel64,784 rel64,
785 rel32,785 rel32,
786786
787 rel32_hi20,787 larch_rel32_hi20,
788 rel64_lo20,788 larch_rel64_lo20,
789 rel64_hi12,789 larch_rel64_hi12,
790 abs32_lo12,790 larch_abs32_lo12,
791 abs32_hi20,791 larch_abs32_hi20,
792 abs64_lo20,792 larch_abs64_lo20,
793 abs64_hi12,793 larch_abs64_hi12,
794 };794 };
795795
796 const Index = enum(u32) {796 const Index = enum(u32) {
...@@ -859,37 +859,38 @@ const GotReloc = struct {...@@ -859,37 +859,38 @@ const GotReloc = struct {
859 @intCast(@as(i64, @bitCast(got_vaddr +% got_offset +% addend -% dest_vaddr))),859 @intCast(@as(i64, @bitCast(got_vaddr +% got_offset +% addend -% dest_vaddr))),
860 target_endian,860 target_endian,
861 ),861 ),
862 .rel32_hi20 => {862
863 .larch_rel32_hi20 => {
863 assert(elf.ehdrField(.machine) == .LOONGARCH);864 assert(elf.ehdrField(.machine) == .LOONGARCH);
864 const target_value = got_vaddr +% got_offset +% addend;865 const target_value = got_vaddr +% got_offset +% addend;
865 link.loongarch.writeJ20(dest_slice[0..4], link.loongarch.toPcalaHi20(target_value, dest_vaddr));866 link.loongarch.writeJ20(dest_slice[0..4], link.loongarch.toPcalaHi20(target_value, dest_vaddr));
866 },867 },
867 .rel64_lo20 => {868 .larch_rel64_lo20 => {
868 assert(elf.ehdrField(.machine) == .LOONGARCH);869 assert(elf.ehdrField(.machine) == .LOONGARCH);
869 const target_value = got_vaddr +% got_offset +% addend;870 const target_value = got_vaddr +% got_offset +% addend;
870 link.loongarch.writeJ20(dest_slice[0..4], link.loongarch.toPcala64Lo20(target_value, dest_vaddr));871 link.loongarch.writeJ20(dest_slice[0..4], link.loongarch.toPcala64Lo20(target_value, dest_vaddr));
871 },872 },
872 .rel64_hi12 => {873 .larch_rel64_hi12 => {
873 assert(elf.ehdrField(.machine) == .LOONGARCH);874 assert(elf.ehdrField(.machine) == .LOONGARCH);
874 const target_value = got_vaddr +% got_offset +% addend;875 const target_value = got_vaddr +% got_offset +% addend;
875 link.loongarch.writeK12(dest_slice[0..4], link.loongarch.toPcala64Hi12(target_value, dest_vaddr));876 link.loongarch.writeK12(dest_slice[0..4], link.loongarch.toPcala64Hi12(target_value, dest_vaddr));
876 },877 },
877 .abs32_lo12 => {878 .larch_abs32_lo12 => {
878 assert(elf.ehdrField(.machine) == .LOONGARCH);879 assert(elf.ehdrField(.machine) == .LOONGARCH);
879 const target_value = got_vaddr +% got_offset +% addend;880 const target_value = got_vaddr +% got_offset +% addend;
880 link.loongarch.writeK12(dest_slice[0..4], @truncate(target_value));881 link.loongarch.writeK12(dest_slice[0..4], @truncate(target_value));
881 },882 },
882 .abs32_hi20 => {883 .larch_abs32_hi20 => {
883 assert(elf.ehdrField(.machine) == .LOONGARCH);884 assert(elf.ehdrField(.machine) == .LOONGARCH);
884 const target_value = got_vaddr +% got_offset +% addend;885 const target_value = got_vaddr +% got_offset +% addend;
885 link.loongarch.writeJ20(dest_slice[0..4], @truncate(target_value >> 12));886 link.loongarch.writeJ20(dest_slice[0..4], @truncate(target_value >> 12));
886 },887 },
887 .abs64_lo20 => {888 .larch_abs64_lo20 => {
888 assert(elf.ehdrField(.machine) == .LOONGARCH);889 assert(elf.ehdrField(.machine) == .LOONGARCH);
889 const target_value = got_vaddr +% got_offset +% addend;890 const target_value = got_vaddr +% got_offset +% addend;
890 link.loongarch.writeJ20(dest_slice[0..4], @truncate(target_value >> 32));891 link.loongarch.writeJ20(dest_slice[0..4], @truncate(target_value >> 32));
891 },892 },
892 .abs64_hi12 => {893 .larch_abs64_hi12 => {
893 assert(elf.ehdrField(.machine) == .LOONGARCH);894 assert(elf.ehdrField(.machine) == .LOONGARCH);
894 const target_value = got_vaddr +% got_offset +% addend;895 const target_value = got_vaddr +% got_offset +% addend;
895 link.loongarch.writeK12(dest_slice[0..4], @truncate(target_value >> 52));896 link.loongarch.writeK12(dest_slice[0..4], @truncate(target_value >> 52));
...@@ -1108,23 +1109,23 @@ const SymbolReloc = struct {...@@ -1108,23 +1109,23 @@ const SymbolReloc = struct {
1108 size64,1109 size64,
1109 size32,1110 size32,
11101111
1111 abs32_lo12,1112 larch_abs32_lo12,
1112 rel32_hi20,1113 larch_rel32_hi20,
1113 rel64_lo20,1114 larch_rel64_lo20,
1114 rel64_hi12,1115 larch_rel64_hi12,
1115 branch_rel18,1116 larch_branch_rel18,
1116 branch_rel23,1117 larch_branch_rel23,
1117 branch_rel28,1118 larch_branch_rel28,
1118 call_rel38,1119 larch_call_rel38,
1119 tpoff32_lo12,1120 larch_tpoff32_lo12,
1120 tpoff32_hi20,1121 larch_tpoff32_hi20,
1121 tpoff64_lo20,1122 larch_tpoff64_lo20,
1122 tpoff64_hi12,1123 larch_tpoff64_hi12,
11231124
1124 fn dependsOnTlsSize(t: SymbolReloc.Type) bool {1125 fn dependsOnTlsSize(t: SymbolReloc.Type) bool {
1125 return switch (t) {1126 return switch (t) {
1126 .tpoff32, .tpoff64 => true,1127 .tpoff32, .tpoff64 => true,
1127 .tpoff32_lo12, .tpoff32_hi20, .tpoff64_lo20, .tpoff64_hi12 => true,1128 .larch_tpoff32_lo12, .larch_tpoff32_hi20, .larch_tpoff64_lo20, .larch_tpoff64_hi12 => true,
1128 else => false,1129 else => false,
1129 };1130 };
1130 }1131 }
...@@ -1307,42 +1308,43 @@ const SymbolReloc = struct {...@@ -1307,42 +1308,43 @@ const SymbolReloc = struct {
1307 target_endian,1308 target_endian,
1308 );1309 );
1309 },1310 },
1310 .abs32_lo12 => {1311
1312 .larch_abs32_lo12 => {
1311 assert(elf.ehdrField(.machine) == .LOONGARCH);1313 assert(elf.ehdrField(.machine) == .LOONGARCH);
1312 link.loongarch.writeK12(dest_slice[0..4], @truncate(target_value));1314 link.loongarch.writeK12(dest_slice[0..4], @truncate(target_value));
1313 },1315 },
1314 .rel32_hi20 => {1316 .larch_rel32_hi20 => {
1315 assert(elf.ehdrField(.machine) == .LOONGARCH);1317 assert(elf.ehdrField(.machine) == .LOONGARCH);
1316 link.loongarch.writeJ20(dest_slice[0..4], link.loongarch.toPcalaHi20(target_value, dest_vaddr));1318 link.loongarch.writeJ20(dest_slice[0..4], link.loongarch.toPcalaHi20(target_value, dest_vaddr));
1317 },1319 },
1318 .rel64_lo20 => {1320 .larch_rel64_lo20 => {
1319 assert(elf.ehdrField(.machine) == .LOONGARCH);1321 assert(elf.ehdrField(.machine) == .LOONGARCH);
1320 link.loongarch.writeJ20(dest_slice[0..4], link.loongarch.toPcala64Lo20(target_value, dest_vaddr));1322 link.loongarch.writeJ20(dest_slice[0..4], link.loongarch.toPcala64Lo20(target_value, dest_vaddr));
1321 },1323 },
1322 .rel64_hi12 => {1324 .larch_rel64_hi12 => {
1323 assert(elf.ehdrField(.machine) == .LOONGARCH);1325 assert(elf.ehdrField(.machine) == .LOONGARCH);
1324 link.loongarch.writeK12(dest_slice[0..4], link.loongarch.toPcala64Hi12(target_value, dest_vaddr));1326 link.loongarch.writeK12(dest_slice[0..4], link.loongarch.toPcala64Hi12(target_value, dest_vaddr));
1325 },1327 },
1326 // TODO: handle bad alignment and overflow gracefully1328 // TODO: handle bad alignment and overflow gracefully
1327 .branch_rel18 => {1329 .larch_branch_rel18 => {
1328 assert(elf.ehdrField(.machine) == .LOONGARCH);1330 assert(elf.ehdrField(.machine) == .LOONGARCH);
1329 const target_rel: i64 = @bitCast(target_value -% dest_vaddr);1331 const target_rel: i64 = @bitCast(target_value -% dest_vaddr);
1330 const slot_target: i16 = @intCast(@shrExact(target_rel, 2));1332 const slot_target: i16 = @intCast(@shrExact(target_rel, 2));
1331 link.loongarch.writeK16(dest_slice[0..4], @bitCast(slot_target));1333 link.loongarch.writeK16(dest_slice[0..4], @bitCast(slot_target));
1332 },1334 },
1333 .branch_rel23 => {1335 .larch_branch_rel23 => {
1334 assert(elf.ehdrField(.machine) == .LOONGARCH);1336 assert(elf.ehdrField(.machine) == .LOONGARCH);
1335 const target_rel: i64 = @bitCast(target_value -% dest_vaddr);1337 const target_rel: i64 = @bitCast(target_value -% dest_vaddr);
1336 const slot_target: i21 = @intCast(@shrExact(target_rel, 2));1338 const slot_target: i21 = @intCast(@shrExact(target_rel, 2));
1337 link.loongarch.writeD5K16(dest_slice[0..4], @bitCast(slot_target));1339 link.loongarch.writeD5K16(dest_slice[0..4], @bitCast(slot_target));
1338 },1340 },
1339 .branch_rel28 => {1341 .larch_branch_rel28 => {
1340 assert(elf.ehdrField(.machine) == .LOONGARCH);1342 assert(elf.ehdrField(.machine) == .LOONGARCH);
1341 const target_rel: i64 = @bitCast(target_value -% dest_vaddr);1343 const target_rel: i64 = @bitCast(target_value -% dest_vaddr);
1342 const slot_target: i26 = @intCast(@shrExact(target_rel, 2));1344 const slot_target: i26 = @intCast(@shrExact(target_rel, 2));
1343 link.loongarch.writeD10K16(dest_slice[0..4], @bitCast(slot_target));1345 link.loongarch.writeD10K16(dest_slice[0..4], @bitCast(slot_target));
1344 },1346 },
1345 .call_rel38 => {1347 .larch_call_rel38 => {
1346 assert(elf.ehdrField(.machine) == .LOONGARCH);1348 assert(elf.ehdrField(.machine) == .LOONGARCH);
1347 const target_rel: i64 = @bitCast(target_value -% dest_vaddr);1349 const target_rel: i64 = @bitCast(target_value -% dest_vaddr);
1348 // We use i64 instead of i36 here because the allowed range is1350 // We use i64 instead of i36 here because the allowed range is
...@@ -1352,19 +1354,19 @@ const SymbolReloc = struct {...@@ -1352,19 +1354,19 @@ const SymbolReloc = struct {
1352 link.loongarch.writeJ20(dest_slice[0..4], @bitCast(@as(i20, @intCast((slot_target +% 0x8000) >> 16))));1354 link.loongarch.writeJ20(dest_slice[0..4], @bitCast(@as(i20, @intCast((slot_target +% 0x8000) >> 16))));
1353 link.loongarch.writeK16(dest_slice[4..8], @bitCast(@as(i16, @truncate(slot_target))));1355 link.loongarch.writeK16(dest_slice[4..8], @bitCast(@as(i16, @truncate(slot_target))));
1354 },1356 },
1355 .tpoff32_lo12 => {1357 .larch_tpoff32_lo12 => {
1356 assert(elf.ehdrField(.machine) == .LOONGARCH);1358 assert(elf.ehdrField(.machine) == .LOONGARCH);
1357 link.loongarch.writeK12(dest_slice[0..4], @truncate(target_value));1359 link.loongarch.writeK12(dest_slice[0..4], @truncate(target_value));
1358 },1360 },
1359 .tpoff32_hi20 => {1361 .larch_tpoff32_hi20 => {
1360 assert(elf.ehdrField(.machine) == .LOONGARCH);1362 assert(elf.ehdrField(.machine) == .LOONGARCH);
1361 link.loongarch.writeJ20(dest_slice[0..4], @truncate(target_value >> 12));1363 link.loongarch.writeJ20(dest_slice[0..4], @truncate(target_value >> 12));
1362 },1364 },
1363 .tpoff64_lo20 => {1365 .larch_tpoff64_lo20 => {
1364 assert(elf.ehdrField(.machine) == .LOONGARCH);1366 assert(elf.ehdrField(.machine) == .LOONGARCH);
1365 link.loongarch.writeJ20(dest_slice[0..4], @truncate(target_value >> 32));1367 link.loongarch.writeJ20(dest_slice[0..4], @truncate(target_value >> 32));
1366 },1368 },
1367 .tpoff64_hi12 => {1369 .larch_tpoff64_hi12 => {
1368 assert(elf.ehdrField(.machine) == .LOONGARCH);1370 assert(elf.ehdrField(.machine) == .LOONGARCH);
1369 link.loongarch.writeK12(dest_slice[0..4], @truncate(target_value >> 52));1371 link.loongarch.writeK12(dest_slice[0..4], @truncate(target_value >> 52));
1370 },1372 },
...@@ -2163,10 +2165,10 @@ fn addPltEntry(elf: *Elf, global_name: String(.strtab), dynsym_index: u32) void...@@ -2163,10 +2165,10 @@ fn addPltEntry(elf: *Elf, global_name: String(.strtab), dynsym_index: u32) void
2163 switch (elf.shdrPtr(elf.shndx.got_plt)) {2165 switch (elf.shdrPtr(elf.shndx.got_plt)) {
2164 inline else => |shdr, class| {2166 inline else => |shdr, class| {
2165 assert(elf.targetLoad(&shdr.size) == got_plt_offset);2167 assert(elf.targetLoad(&shdr.size) == got_plt_offset);
2166 elf.targetStore(&shdr.size, got_plt_offset + @sizeOf(shdr.ElfN().Addr));2168 elf.targetStore(&shdr.size, got_plt_offset + @sizeOf(class.ElfN().Addr));
2167 std.mem.writeInt(2169 std.mem.writeInt(
2168 class.ElfN().Addr,2170 class.ElfN().Addr,
2169 got_plt_ni.slice(&elf.mf)[got_plt_offset..][0..@sizeOf(shdr.ElfN().Addr)],2171 got_plt_ni.slice(&elf.mf)[got_plt_offset..][0..@sizeOf(class.ElfN().Addr)],
2170 @intCast(plt_addr),2172 @intCast(plt_addr),
2171 target_endian,2173 target_endian,
2172 );2174 );
...@@ -2225,10 +2227,10 @@ fn addPltEntry(elf: *Elf, global_name: String(.strtab), dynsym_index: u32) void...@@ -2225,10 +2227,10 @@ fn addPltEntry(elf: *Elf, global_name: String(.strtab), dynsym_index: u32) void
2225 switch (elf.shdrPtr(elf.shndx.got_plt)) {2227 switch (elf.shdrPtr(elf.shndx.got_plt)) {
2226 inline else => |shdr, class| {2228 inline else => |shdr, class| {
2227 assert(elf.targetLoad(&shdr.size) == got_plt_offset);2229 assert(elf.targetLoad(&shdr.size) == got_plt_offset);
2228 elf.targetStore(&shdr.size, got_plt_offset + @sizeOf(shdr.ElfN().Addr));2230 elf.targetStore(&shdr.size, got_plt_offset + @sizeOf(class.ElfN().Addr));
2229 std.mem.writeInt(2231 std.mem.writeInt(
2230 class.ElfN().Addr,2232 class.ElfN().Addr,
2231 got_plt_ni.slice(&elf.mf)[got_plt_offset..][0..@sizeOf(shdr.ElfN().Addr)],2233 got_plt_ni.slice(&elf.mf)[got_plt_offset..][0..@sizeOf(class.ElfN().Addr)],
2232 @intCast(plt_addr),2234 @intCast(plt_addr),
2233 target_endian,2235 target_endian,
2234 );2236 );
...@@ -3817,9 +3819,9 @@ fn initHeaders(...@@ -3817,9 +3819,9 @@ fn initHeaders(
3817 });3819 });
3818 elf.plt_first_symbol_reloc = @enumFromInt(elf.symbol_relocs.items.len);3820 elf.plt_first_symbol_reloc = @enumFromInt(elf.symbol_relocs.items.len);
3819 try elf.ensureUnusedRelocCapacity(plt_ni, 3);3821 try elf.ensureUnusedRelocCapacity(plt_ni, 3);
3820 try elf.addSymbolRelocAssumeCapacity(plt_ni, 0, got_plt_sym, 0, .rel32_hi20);3822 try elf.addSymbolRelocAssumeCapacity(plt_ni, 0, got_plt_sym, 0, .larch_rel32_hi20);
3821 try elf.addSymbolRelocAssumeCapacity(plt_ni, 8, got_plt_sym, 0, .abs32_lo12);3823 try elf.addSymbolRelocAssumeCapacity(plt_ni, 8, got_plt_sym, 0, .larch_abs32_lo12);
3822 try elf.addSymbolRelocAssumeCapacity(plt_ni, 16, got_plt_sym, 0, .abs32_lo12);3824 try elf.addSymbolRelocAssumeCapacity(plt_ni, 16, got_plt_sym, 0, .larch_abs32_lo12);
3823 },3825 },
3824 .SPARCV9 => {},3826 .SPARCV9 => {},
3825 }3827 }
...@@ -6037,33 +6039,33 @@ fn addRelocAssumeCapacity(...@@ -6037,33 +6039,33 @@ fn addRelocAssumeCapacity(
6037 .@"64_PCREL" => try elf.addSymbolRelocAssumeCapacity(node, offset, target, addend, .rel64),6039 .@"64_PCREL" => try elf.addSymbolRelocAssumeCapacity(node, offset, target, addend, .rel64),
6038 .@"32_PCREL" => try elf.addSymbolRelocAssumeCapacity(node, offset, target, addend, .rel32),6040 .@"32_PCREL" => try elf.addSymbolRelocAssumeCapacity(node, offset, target, addend, .rel32),
60396041
6040 .PCALA_LO12 => try elf.addSymbolRelocAssumeCapacity(node, offset, target, addend, .abs32_lo12),6042 .PCALA_LO12 => try elf.addSymbolRelocAssumeCapacity(node, offset, target, addend, .larch_abs32_lo12),
6041 .PCALA_HI20 => try elf.addSymbolRelocAssumeCapacity(node, offset, target, addend, .rel32_hi20),6043 .PCALA_HI20 => try elf.addSymbolRelocAssumeCapacity(node, offset, target, addend, .larch_rel32_hi20),
6042 .PCALA64_HI12 => try elf.addSymbolRelocAssumeCapacity(node, offset, target, addend, .rel64_hi12),6044 .PCALA64_HI12 => try elf.addSymbolRelocAssumeCapacity(node, offset, target, addend, .larch_rel64_hi12),
6043 .PCALA64_LO20 => try elf.addSymbolRelocAssumeCapacity(node, offset, target, addend, .rel64_lo20),6045 .PCALA64_LO20 => try elf.addSymbolRelocAssumeCapacity(node, offset, target, addend, .larch_rel64_lo20),
60446046
6045 .B16 => try elf.addSymbolRelocAssumeCapacity(node, offset, target, addend, .branch_rel18),6047 .B16 => try elf.addSymbolRelocAssumeCapacity(node, offset, target, addend, .larch_branch_rel18),
6046 .B21 => try elf.addSymbolRelocAssumeCapacity(node, offset, target, addend, .branch_rel23),6048 .B21 => try elf.addSymbolRelocAssumeCapacity(node, offset, target, addend, .larch_branch_rel23),
6047 .B26 => try elf.addSymbolRelocAssumeCapacity(node, offset, target, addend, .branch_rel28),6049 .B26 => try elf.addSymbolRelocAssumeCapacity(node, offset, target, addend, .larch_branch_rel28),
6048 .CALL36 => try elf.addSymbolRelocAssumeCapacity(node, offset, target, addend, .call_rel38),6050 .CALL36 => try elf.addSymbolRelocAssumeCapacity(node, offset, target, addend, .larch_call_rel38),
60496051
6050 // Relocations targeting a TLS symbol6052 // Relocations targeting a TLS symbol
6051 .TLS_LE_LO12, .TLS_LE_LO12_R => try elf.addSymbolRelocAssumeCapacity(node, offset, target, addend, .tpoff32_lo12),6053 .TLS_LE_LO12, .TLS_LE_LO12_R => try elf.addSymbolRelocAssumeCapacity(node, offset, target, addend, .larch_tpoff32_lo12),
6052 .TLS_LE_HI20, .TLS_LE_HI20_R => try elf.addSymbolRelocAssumeCapacity(node, offset, target, addend, .tpoff32_hi20),6054 .TLS_LE_HI20, .TLS_LE_HI20_R => try elf.addSymbolRelocAssumeCapacity(node, offset, target, addend, .larch_tpoff32_hi20),
6053 .TLS_LE64_LO20 => try elf.addSymbolRelocAssumeCapacity(node, offset, target, addend, .tpoff64_lo20),6055 .TLS_LE64_LO20 => try elf.addSymbolRelocAssumeCapacity(node, offset, target, addend, .larch_tpoff64_lo20),
6054 .TLS_LE64_HI12 => try elf.addSymbolRelocAssumeCapacity(node, offset, target, addend, .tpoff64_hi12),6056 .TLS_LE64_HI12 => try elf.addSymbolRelocAssumeCapacity(node, offset, target, addend, .larch_tpoff64_hi12),
6055 .TLS_LE_ADD_R => {}, // TODO: relaxation is not yet implemented6057 .TLS_LE_ADD_R => {}, // TODO: relaxation is not yet implemented
60566058
6057 // Relocations targeting a GOT entry6059 // Relocations targeting a GOT entry
6058 .GOT_PC_LO12 => elf.addGotRelocAssumeCapacity(node, offset, .{ .symbol = target }, addend, .abs32_lo12),6060 .GOT_PC_LO12 => elf.addGotRelocAssumeCapacity(node, offset, .{ .symbol = target }, addend, .larch_abs32_lo12),
6059 .GOT_PC_HI20 => elf.addGotRelocAssumeCapacity(node, offset, .{ .symbol = target }, addend, .rel32_hi20),6061 .GOT_PC_HI20 => elf.addGotRelocAssumeCapacity(node, offset, .{ .symbol = target }, addend, .larch_rel32_hi20),
6060 .GOT64_PC_LO20 => elf.addGotRelocAssumeCapacity(node, offset, .{ .symbol = target }, addend, .rel64_lo20),6062 .GOT64_PC_LO20 => elf.addGotRelocAssumeCapacity(node, offset, .{ .symbol = target }, addend, .larch_rel64_lo20),
6061 .GOT64_PC_HI12 => elf.addGotRelocAssumeCapacity(node, offset, .{ .symbol = target }, addend, .rel64_hi12),6063 .GOT64_PC_HI12 => elf.addGotRelocAssumeCapacity(node, offset, .{ .symbol = target }, addend, .larch_rel64_hi12),
60626064
6063 .GOT_LO12 => elf.addGotRelocAssumeCapacity(node, offset, .{ .symbol = target }, addend, .abs32_lo12),6065 .GOT_LO12 => elf.addGotRelocAssumeCapacity(node, offset, .{ .symbol = target }, addend, .larch_abs32_lo12),
6064 .GOT_HI20 => elf.addGotRelocAssumeCapacity(node, offset, .{ .symbol = target }, addend, .abs32_hi20),6066 .GOT_HI20 => elf.addGotRelocAssumeCapacity(node, offset, .{ .symbol = target }, addend, .larch_abs32_hi20),
6065 .GOT64_LO20 => elf.addGotRelocAssumeCapacity(node, offset, .{ .symbol = target }, addend, .abs64_lo20),6067 .GOT64_LO20 => elf.addGotRelocAssumeCapacity(node, offset, .{ .symbol = target }, addend, .larch_abs64_lo20),
6066 .GOT64_HI12 => elf.addGotRelocAssumeCapacity(node, offset, .{ .symbol = target }, addend, .abs64_hi12),6068 .GOT64_HI12 => elf.addGotRelocAssumeCapacity(node, offset, .{ .symbol = target }, addend, .larch_abs64_hi12),
6067 },6069 },
6068 },6070 },
6069 }6071 }
...@@ -6118,18 +6120,19 @@ fn addSymbolRelocAssumeCapacity(...@@ -6118,18 +6120,19 @@ fn addSymbolRelocAssumeCapacity(
6118 .tpoff32 => .TPOFF32,6120 .tpoff32 => .TPOFF32,
6119 .size64 => .SIZE64,6121 .size64 => .SIZE64,
6120 .size32 => .SIZE32,6122 .size32 => .SIZE32,
6121 .abs32_lo12,6123
6122 .rel32_hi20,6124 .larch_abs32_lo12,
6123 .rel64_lo20,6125 .larch_rel32_hi20,
6124 .rel64_hi12,6126 .larch_rel64_lo20,
6125 .branch_rel18,6127 .larch_rel64_hi12,
6126 .branch_rel23,6128 .larch_branch_rel18,
6127 .branch_rel28,6129 .larch_branch_rel23,
6128 .call_rel38,6130 .larch_branch_rel28,
6129 .tpoff32_lo12,6131 .larch_call_rel38,
6130 .tpoff32_hi20,6132 .larch_tpoff32_lo12,
6131 .tpoff64_lo20,6133 .larch_tpoff32_hi20,
6132 .tpoff64_hi12,6134 .larch_tpoff64_lo20,
6135 .larch_tpoff64_hi12,
6133 => unreachable,6136 => unreachable,
6134 } },6137 } },
6135 .LOONGARCH => .{ .LOONGARCH = switch (@"type") {6138 .LOONGARCH => .{ .LOONGARCH = switch (@"type") {
...@@ -6148,18 +6151,19 @@ fn addSymbolRelocAssumeCapacity(...@@ -6148,18 +6151,19 @@ fn addSymbolRelocAssumeCapacity(
6148 .dtpoff32 => .TLS_DTPREL32,6151 .dtpoff32 => .TLS_DTPREL32,
6149 .tpoff64 => .TLS_TPREL64,6152 .tpoff64 => .TLS_TPREL64,
6150 .tpoff32 => .TLS_TPREL32,6153 .tpoff32 => .TLS_TPREL32,
6151 .abs32_lo12 => .PCALA_LO12,6154
6152 .rel32_hi20 => .PCALA_HI20,6155 .larch_abs32_lo12 => .PCALA_LO12,
6153 .rel64_lo20 => .PCALA64_LO20,6156 .larch_rel32_hi20 => .PCALA_HI20,
6154 .rel64_hi12 => .PCALA64_HI12,6157 .larch_rel64_lo20 => .PCALA64_LO20,
6155 .branch_rel18 => .B16,6158 .larch_rel64_hi12 => .PCALA64_HI12,
6156 .branch_rel23 => .B21,6159 .larch_branch_rel18 => .B16,
6157 .branch_rel28 => .B26,6160 .larch_branch_rel23 => .B21,
6158 .call_rel38 => .CALL36,6161 .larch_branch_rel28 => .B26,
6159 .tpoff32_lo12 => .TLS_LE_LO12,6162 .larch_call_rel38 => .CALL36,
6160 .tpoff32_hi20 => .TLS_LE_HI20,6163 .larch_tpoff32_lo12 => .TLS_LE_LO12,
6161 .tpoff64_lo20 => .TLS_LE64_LO20,6164 .larch_tpoff32_hi20 => .TLS_LE_HI20,
6162 .tpoff64_hi12 => .TLS_LE64_HI12,6165 .larch_tpoff64_lo20 => .TLS_LE64_LO20,
6166 .larch_tpoff64_hi12 => .TLS_LE64_HI12,
6163 } },6167 } },
6164 };6168 };
61656169