| ... | ... | @@ -6197,8 +6197,6 @@ fn addRelocAssumeCapacity( |
| 6197 | 6197 | .GOT64_HI12 => elf.addGotRelocAssumeCapacity(node, offset, .{ .symbol = target }, addend, .larch_abs64_hi12), |
| 6198 | 6198 | }, |
| 6199 | 6199 | .SPARCV9 => switch (@"type".SPARC) { |
| 6200 | | else => std.debug.panic("TODO: unsupported input relocation, {t}", .{@"type".SPARC}), |
| 6201 | | |
| 6202 | 6200 | _, |
| 6203 | 6201 | .NONE, |
| 6204 | 6202 | .COPY, |
| ... | ... | @@ -6241,6 +6239,20 @@ fn addRelocAssumeCapacity( |
| 6241 | 6239 | .M44, |
| 6242 | 6240 | .L44, |
| 6243 | 6241 | .REGISTER, |
| 6242 | .TLS_GD_HI22, |
| 6243 | .TLS_GD_LO10, |
| 6244 | .TLS_GD_CALL, |
| 6245 | .TLS_LDM_HI22, |
| 6246 | .TLS_LDM_LO10, |
| 6247 | .TLS_LDM_CALL, |
| 6248 | .TLS_LDO_HIX22, |
| 6249 | .TLS_LDO_LOX10, |
| 6250 | .TLS_IE_HI22, |
| 6251 | .TLS_IE_LO10, |
| 6252 | .TLS_LE_HIX22, |
| 6253 | .TLS_LE_LOX10, |
| 6254 | .TLS_DTPMOD32, |
| 6255 | .TLS_DTPMOD64, |
| 6244 | 6256 | .H34, |
| 6245 | 6257 | .WDISP10, |
| 6246 | 6258 | => |t| @panic("TODO: " ++ @tagName(t)), |
| ... | ... | @@ -6264,6 +6276,18 @@ fn addRelocAssumeCapacity( |
| 6264 | 6276 | .SIZE64 => try elf.addSymbolRelocAssumeCapacity(node, offset, target, addend, .size64), |
| 6265 | 6277 | |
| 6266 | 6278 | // Relocations targeting a TLS symbol |
| 6279 | .TLS_DTPOFF32 => try elf.addSymbolRelocAssumeCapacity(node, offset, target, addend, .dtpoff32), |
| 6280 | .TLS_DTPOFF64 => try elf.addSymbolRelocAssumeCapacity(node, offset, target, addend, .dtpoff64), |
| 6281 | .TLS_TPOFF32 => try elf.addSymbolRelocAssumeCapacity(node, offset, target, addend, .tpoff32), |
| 6282 | .TLS_TPOFF64 => try elf.addSymbolRelocAssumeCapacity(node, offset, target, addend, .tpoff64), |
| 6283 | // We currently do no relaxation, so nothing to do for these. |
| 6284 | .TLS_GD_ADD, |
| 6285 | .TLS_LDM_ADD, |
| 6286 | .TLS_LDO_ADD, |
| 6287 | .TLS_IE_LD, |
| 6288 | .TLS_IE_LDX, |
| 6289 | .TLS_IE_ADD, |
| 6290 | => {}, |
| 6267 | 6291 | |
| 6268 | 6292 | // Relocations targeting a GOT entry |
| 6269 | 6293 | .GOT10 => elf.addGotRelocAssumeCapacity(node, offset, .{ .symbol = target }, addend, .sparc_10), |
| ... | ... | @@ -6400,10 +6424,10 @@ fn addSymbolRelocAssumeCapacity( |
| 6400 | 6424 | .rel16 => .DISP16, |
| 6401 | 6425 | .rel8 => .DISP8, |
| 6402 | 6426 | .pltabs64, .pltabs32, .pltrel64, .pltrel32 => break :r .none, |
| 6403 | | .dtpoff64 => @panic("TODO: dtpoff64"), |
| 6404 | | .dtpoff32 => @panic("TODO: dtpoff32"), |
| 6405 | | .tpoff64 => @panic("TODO: tpoff64"), |
| 6406 | | .tpoff32 => @panic("TODO: tpoff32"), |
| 6427 | .dtpoff64 => .TLS_DTPOFF64, |
| 6428 | .dtpoff32 => .TLS_DTPOFF32, |
| 6429 | .tpoff64 => .TLS_TPOFF64, |
| 6430 | .tpoff32 => .TLS_TPOFF32, |
| 6407 | 6431 | .size64 => .SIZE64, |
| 6408 | 6432 | .size32 => .SIZE32, |
| 6409 | 6433 | |
| ... | ... | @@ -6580,8 +6604,9 @@ fn updateGotEntry(elf: *Elf, got_index: usize) void { |
| 6580 | 6604 | } |
| 6581 | 6605 | const reloc_type: MachineRelocType = switch (elf.ehdrField(.machine)) { |
| 6582 | 6606 | else => |machine| @panic(@tagName(machine)), |
| 6583 | | .X86_64 => .{ .X86_64 = .TPOFF64 }, |
| 6584 | 6607 | .LOONGARCH => .{ .LOONGARCH = if (elf.identClass() == .@"64") .TLS_TPREL64 else .TLS_TPREL32 }, |
| 6608 | .SPARCV9 => .{ .SPARC = if (elf.identClass() == .@"64") .TLS_TPOFF64 else .TLS_TPOFF32 }, |
| 6609 | .X86_64 => .{ .X86_64 = .TPOFF64 }, |
| 6585 | 6610 | }; |
| 6586 | 6611 | break :val switch (sym_id.unwrap()) { |
| 6587 | 6612 | // For global symbols, just target the right dynsym with no addend. |
| ... | ... | @@ -6629,8 +6654,9 @@ fn updateGotEntry(elf: *Elf, got_index: usize) void { |
| 6629 | 6654 | .dynamic => .{ .reloc = .{ |
| 6630 | 6655 | .type = switch (elf.ehdrField(.machine)) { |
| 6631 | 6656 | else => |machine| @panic(@tagName(machine)), |
| 6632 | | .X86_64 => .{ .X86_64 = .DTPMOD64 }, |
| 6633 | 6657 | .LOONGARCH => .{ .LOONGARCH = if (elf.identClass() == .@"64") .TLS_DTPMOD64 else .TLS_DTPMOD32 }, |
| 6658 | .SPARCV9 => .{ .SPARC = if (elf.identClass() == .@"64") .TLS_DTPMOD64 else .TLS_DTPMOD32 }, |
| 6659 | .X86_64 => .{ .X86_64 = .DTPMOD64 }, |
| 6634 | 6660 | }, |
| 6635 | 6661 | .dynsym_index = switch (elf.classifySymbolValue(sym)) { |
| 6636 | 6662 | .static, .static_relative => 0, |
| ... | ... | @@ -6647,8 +6673,9 @@ fn updateGotEntry(elf: *Elf, got_index: usize) void { |
| 6647 | 6673 | .dynamic => .{ .reloc = .{ |
| 6648 | 6674 | .type = switch (elf.ehdrField(.machine)) { |
| 6649 | 6675 | else => |machine| @panic(@tagName(machine)), |
| 6650 | | .X86_64 => .{ .X86_64 = .DTPMOD64 }, |
| 6651 | 6676 | .LOONGARCH => .{ .LOONGARCH = if (elf.identClass() == .@"64") .TLS_DTPMOD64 else .TLS_DTPMOD32 }, |
| 6677 | .SPARCV9 => .{ .SPARC = if (elf.identClass() == .@"64") .TLS_DTPMOD64 else .TLS_DTPMOD32 }, |
| 6678 | .X86_64 => .{ .X86_64 = .DTPMOD64 }, |
| 6652 | 6679 | }, |
| 6653 | 6680 | .dynsym_index = 0, |
| 6654 | 6681 | .addend = 0, |