| ... | @@ -2918,12 +2918,12 @@ pub const ExternSymbolOpts = struct { | ... | @@ -2918,12 +2918,12 @@ pub const ExternSymbolOpts = struct { |
| 2918 | }; | 2918 | }; |
| 2919 | pub fn externSymbol(elf: *Elf, opts: ExternSymbolOpts) link.Error!link.File.SymbolId { | 2919 | pub fn externSymbol(elf: *Elf, opts: ExternSymbolOpts) link.Error!link.File.SymbolId { |
| 2920 | const diags = &elf.base.comp.link_diags; | 2920 | 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) { |
| 2922 | error.MappedFileIo => return diags.fail("failed to write output file: {t}", .{elf.mf.io_err.?}), | 2922 | error.MappedFileIo => return diags.fail("failed to write output file: {t}", .{elf.mf.io_err.?}), |
| 2923 | else => |e| return e, | 2923 | else => |e| return e, |
| 2924 | }; | 2924 | }).toTypeErased(); |
| 2925 | } | 2925 | } |
| 2926 | fn externSymbolInner(elf: *Elf, opts: ExternSymbolOpts) Error!link.File.SymbolId { | 2926 | fn externSymbolInner(elf: *Elf, opts: ExternSymbolOpts) Error!Symbol.Id { |
| 2927 | try elf.ensureUnusedSymbolCapacity(1, .maybe_global); | 2927 | try elf.ensureUnusedSymbolCapacity(1, .maybe_global); |
| 2928 | const symbol = elf.addGlobalSymbolAssumeCapacity(.{ | 2928 | const symbol = elf.addGlobalSymbolAssumeCapacity(.{ |
| 2929 | .node = .none, | 2929 | .node = .none, |
| ... | @@ -2947,7 +2947,7 @@ fn externSymbolInner(elf: *Elf, opts: ExternSymbolOpts) Error!link.File.SymbolId | ... | @@ -2947,7 +2947,7 @@ fn externSymbolInner(elf: *Elf, opts: ExternSymbolOpts) Error!link.File.SymbolId |
| 2947 | }) catch |err| switch (err) { | 2947 | }) catch |err| switch (err) { |
| 2948 | error.MultipleDefinitions => unreachable, // shndx is undef | 2948 | error.MultipleDefinitions => unreachable, // shndx is undef |
| 2949 | }; | 2949 | }; |
| 2950 | return symbol.toTypeErased(); | 2950 | return symbol; |
| 2951 | } | 2951 | } |
| 2952 | pub fn addReloc( | 2952 | pub fn addReloc( |
| 2953 | elf: *Elf, | 2953 | elf: *Elf, |
| ... | @@ -6359,8 +6359,6 @@ fn addRelocAssumeCapacity( | ... | @@ -6359,8 +6359,6 @@ fn addRelocAssumeCapacity( |
| 6359 | .REGISTER, | 6359 | .REGISTER, |
| 6360 | .TLS_GD_HI22, | 6360 | .TLS_GD_HI22, |
| 6361 | .TLS_GD_LO10, | 6361 | .TLS_GD_LO10, |
| 6362 | .TLS_GD_CALL, | | |
| 6363 | .TLS_LDM_CALL, | | |
| 6364 | .TLS_IE_HI22, | 6362 | .TLS_IE_HI22, |
| 6365 | .TLS_IE_LO10, | 6363 | .TLS_IE_LO10, |
| 6366 | .TLS_DTPMOD32, | 6364 | .TLS_DTPMOD32, |
| ... | @@ -6391,6 +6389,11 @@ fn addRelocAssumeCapacity( | ... | @@ -6391,6 +6389,11 @@ fn addRelocAssumeCapacity( |
| 6391 | .L44 => try elf.addSymbolRelocAssumeCapacity(node, offset, target, addend, .sparc_l44), | 6389 | .L44 => try elf.addSymbolRelocAssumeCapacity(node, offset, target, addend, .sparc_l44), |
| 6392 | .UA64 => try elf.addSymbolRelocAssumeCapacity(node, offset, target, addend, .abs64), | 6390 | .UA64 => try elf.addSymbolRelocAssumeCapacity(node, offset, target, addend, .abs64), |
| 6393 | .UA16 => try elf.addSymbolRelocAssumeCapacity(node, offset, target, addend, .abs16), | 6391 | .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), |
| 6394 | .SIZE32 => try elf.addSymbolRelocAssumeCapacity(node, offset, target, addend, .size32), | 6397 | .SIZE32 => try elf.addSymbolRelocAssumeCapacity(node, offset, target, addend, .size32), |
| 6395 | .SIZE64 => try elf.addSymbolRelocAssumeCapacity(node, offset, target, addend, .size64), | 6398 | .SIZE64 => try elf.addSymbolRelocAssumeCapacity(node, offset, target, addend, .size64), |
| 6396 | | 6399 | |