authorgravatar for alex@alexrp.comAlex Rønne Petersen <alex@alexrp.com> 2026-07-06 21:20:54+02:00
committergravatar for alex@alexrp.comAlex Rønne Petersen <alex@alexrp.com> 2026-07-09 10:54:49+02:00
log1890872b5ecab1788f6d33d57e670b258f7c5805
tree19e142037ab7e0fb8aeec0d0b6a9ccb240b5aa07
parent0de1b576c590a67cd04691e7ac8686860b8e9400
signaturebadge-check Signed by SSH key SHA256:7B/LJ7bpR1eX8aCXSr4mtd5M45VMPKcx9zY8e95b5QM

Elf2: implement some sparc-specific __tls_get_addr() relocations


1 files changed, 9 insertions(+), 6 deletions(-)

src/link/Elf2.zig+9-6
......@@ -2918,12 +2918,12 @@ pub const ExternSymbolOpts = struct {
29182918};
29192919pub fn externSymbol(elf: *Elf, opts: ExternSymbolOpts) link.Error!link.File.SymbolId {
29202920 const diags = &elf.base.comp.link_diags;
2921 return elf.externSymbolInner(opts) catch |err| switch (err) {
2921 return (elf.externSymbolInner(opts) catch |err| switch (err) {
29222922 error.MappedFileIo => return diags.fail("failed to write output file: {t}", .{elf.mf.io_err.?}),
29232923 else => |e| return e,
2924 };
2924 }).toTypeErased();
29252925}
2926fn externSymbolInner(elf: *Elf, opts: ExternSymbolOpts) Error!link.File.SymbolId {
2926fn externSymbolInner(elf: *Elf, opts: ExternSymbolOpts) Error!Symbol.Id {
29272927 try elf.ensureUnusedSymbolCapacity(1, .maybe_global);
29282928 const symbol = elf.addGlobalSymbolAssumeCapacity(.{
29292929 .node = .none,
......@@ -2947,7 +2947,7 @@ fn externSymbolInner(elf: *Elf, opts: ExternSymbolOpts) Error!link.File.SymbolId
29472947 }) catch |err| switch (err) {
29482948 error.MultipleDefinitions => unreachable, // shndx is undef
29492949 };
2950 return symbol.toTypeErased();
2950 return symbol;
29512951}
29522952pub fn addReloc(
29532953 elf: *Elf,
......@@ -6359,8 +6359,6 @@ fn addRelocAssumeCapacity(
63596359 .REGISTER,
63606360 .TLS_GD_HI22,
63616361 .TLS_GD_LO10,
6362 .TLS_GD_CALL,
6363 .TLS_LDM_CALL,
63646362 .TLS_IE_HI22,
63656363 .TLS_IE_LO10,
63666364 .TLS_DTPMOD32,
......@@ -6391,6 +6389,11 @@ fn addRelocAssumeCapacity(
63916389 .L44 => try elf.addSymbolRelocAssumeCapacity(node, offset, target, addend, .sparc_l44),
63926390 .UA64 => try elf.addSymbolRelocAssumeCapacity(node, offset, target, addend, .abs64),
63936391 .UA16 => try elf.addSymbolRelocAssumeCapacity(node, offset, target, addend, .abs16),
6392 .TLS_GD_CALL, .TLS_LDM_CALL => try elf.addSymbolRelocAssumeCapacity(node, offset, try elf.externSymbolInner(.{
6393 .lib_name = null,
6394 .name = "__tls_get_addr",
6395 .type = .FUNC,
6396 }), addend, .sparc_wplt30),
63946397 .SIZE32 => try elf.addSymbolRelocAssumeCapacity(node, offset, target, addend, .size32),
63956398 .SIZE64 => try elf.addSymbolRelocAssumeCapacity(node, offset, target, addend, .size64),
63966399