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