| ... | @@ -6197,8 +6197,6 @@ fn addRelocAssumeCapacity( | ... | @@ -6197,8 +6197,6 @@ fn addRelocAssumeCapacity( |
| 6197 | .GOT64_HI12 => elf.addGotRelocAssumeCapacity(node, offset, .{ .symbol = target }, addend, .larch_abs64_hi12), | 6197 | .GOT64_HI12 => elf.addGotRelocAssumeCapacity(node, offset, .{ .symbol = target }, addend, .larch_abs64_hi12), |
| 6198 | }, | 6198 | }, |
| 6199 | .SPARCV9 => switch (@"type".SPARC) { | 6199 | .SPARCV9 => switch (@"type".SPARC) { |
| 6200 | else => std.debug.panic("TODO: unsupported input relocation, {t}", .{@"type".SPARC}), | | |
| 6201 | | | |
| 6202 | _, | 6200 | _, |
| 6203 | .NONE, | 6201 | .NONE, |
| 6204 | .COPY, | 6202 | .COPY, |
| ... | @@ -6241,6 +6239,20 @@ fn addRelocAssumeCapacity( | ... | @@ -6241,6 +6239,20 @@ fn addRelocAssumeCapacity( |
| 6241 | .M44, | 6239 | .M44, |
| 6242 | .L44, | 6240 | .L44, |
| 6243 | .REGISTER, | 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 | .H34, | 6256 | .H34, |
| 6245 | .WDISP10, | 6257 | .WDISP10, |
| 6246 | => |t| @panic("TODO: " ++ @tagName(t)), | 6258 | => |t| @panic("TODO: " ++ @tagName(t)), |
| ... | @@ -6264,6 +6276,18 @@ fn addRelocAssumeCapacity( | ... | @@ -6264,6 +6276,18 @@ fn addRelocAssumeCapacity( |
| 6264 | .SIZE64 => try elf.addSymbolRelocAssumeCapacity(node, offset, target, addend, .size64), | 6276 | .SIZE64 => try elf.addSymbolRelocAssumeCapacity(node, offset, target, addend, .size64), |
| 6265 | | 6277 | |
| 6266 | // Relocations targeting a TLS symbol | 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 | // Relocations targeting a GOT entry | 6292 | // Relocations targeting a GOT entry |
| 6269 | .GOT10 => elf.addGotRelocAssumeCapacity(node, offset, .{ .symbol = target }, addend, .sparc_10), | 6293 | .GOT10 => elf.addGotRelocAssumeCapacity(node, offset, .{ .symbol = target }, addend, .sparc_10), |
| ... | @@ -6400,10 +6424,10 @@ fn addSymbolRelocAssumeCapacity( | ... | @@ -6400,10 +6424,10 @@ fn addSymbolRelocAssumeCapacity( |
| 6400 | .rel16 => .DISP16, | 6424 | .rel16 => .DISP16, |
| 6401 | .rel8 => .DISP8, | 6425 | .rel8 => .DISP8, |
| 6402 | .pltabs64, .pltabs32, .pltrel64, .pltrel32 => break :r .none, | 6426 | .pltabs64, .pltabs32, .pltrel64, .pltrel32 => break :r .none, |
| 6403 | .dtpoff64 => @panic("TODO: dtpoff64"), | 6427 | .dtpoff64 => .TLS_DTPOFF64, |
| 6404 | .dtpoff32 => @panic("TODO: dtpoff32"), | 6428 | .dtpoff32 => .TLS_DTPOFF32, |
| 6405 | .tpoff64 => @panic("TODO: tpoff64"), | 6429 | .tpoff64 => .TLS_TPOFF64, |
| 6406 | .tpoff32 => @panic("TODO: tpoff32"), | 6430 | .tpoff32 => .TLS_TPOFF32, |
| 6407 | .size64 => .SIZE64, | 6431 | .size64 => .SIZE64, |
| 6408 | .size32 => .SIZE32, | 6432 | .size32 => .SIZE32, |
| 6409 | | 6433 | |
| ... | @@ -6580,8 +6604,9 @@ fn updateGotEntry(elf: *Elf, got_index: usize) void { | ... | @@ -6580,8 +6604,9 @@ fn updateGotEntry(elf: *Elf, got_index: usize) void { |
| 6580 | } | 6604 | } |
| 6581 | const reloc_type: MachineRelocType = switch (elf.ehdrField(.machine)) { | 6605 | const reloc_type: MachineRelocType = switch (elf.ehdrField(.machine)) { |
| 6582 | else => |machine| @panic(@tagName(machine)), | 6606 | else => |machine| @panic(@tagName(machine)), |
| 6583 | .X86_64 => .{ .X86_64 = .TPOFF64 }, | | |
| 6584 | .LOONGARCH => .{ .LOONGARCH = if (elf.identClass() == .@"64") .TLS_TPREL64 else .TLS_TPREL32 }, | 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 | break :val switch (sym_id.unwrap()) { | 6611 | break :val switch (sym_id.unwrap()) { |
| 6587 | // For global symbols, just target the right dynsym with no addend. | 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,8 +6654,9 @@ fn updateGotEntry(elf: *Elf, got_index: usize) void { |
| 6629 | .dynamic => .{ .reloc = .{ | 6654 | .dynamic => .{ .reloc = .{ |
| 6630 | .type = switch (elf.ehdrField(.machine)) { | 6655 | .type = switch (elf.ehdrField(.machine)) { |
| 6631 | else => |machine| @panic(@tagName(machine)), | 6656 | else => |machine| @panic(@tagName(machine)), |
| 6632 | .X86_64 => .{ .X86_64 = .DTPMOD64 }, | | |
| 6633 | .LOONGARCH => .{ .LOONGARCH = if (elf.identClass() == .@"64") .TLS_DTPMOD64 else .TLS_DTPMOD32 }, | 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 | .dynsym_index = switch (elf.classifySymbolValue(sym)) { | 6661 | .dynsym_index = switch (elf.classifySymbolValue(sym)) { |
| 6636 | .static, .static_relative => 0, | 6662 | .static, .static_relative => 0, |
| ... | @@ -6647,8 +6673,9 @@ fn updateGotEntry(elf: *Elf, got_index: usize) void { | ... | @@ -6647,8 +6673,9 @@ fn updateGotEntry(elf: *Elf, got_index: usize) void { |
| 6647 | .dynamic => .{ .reloc = .{ | 6673 | .dynamic => .{ .reloc = .{ |
| 6648 | .type = switch (elf.ehdrField(.machine)) { | 6674 | .type = switch (elf.ehdrField(.machine)) { |
| 6649 | else => |machine| @panic(@tagName(machine)), | 6675 | else => |machine| @panic(@tagName(machine)), |
| 6650 | .X86_64 => .{ .X86_64 = .DTPMOD64 }, | | |
| 6651 | .LOONGARCH => .{ .LOONGARCH = if (elf.identClass() == .@"64") .TLS_DTPMOD64 else .TLS_DTPMOD32 }, | 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 | .dynsym_index = 0, | 6680 | .dynsym_index = 0, |
| 6654 | .addend = 0, | 6681 | .addend = 0, |