diff options
| author | Jakub Konka <kubkon@jakubkonka.com> | 2024-08-02 18:32:07 +0200 |
|---|---|---|
| committer | Jakub Konka <kubkon@jakubkonka.com> | 2024-08-07 10:21:02 +0200 |
| commit | 8ca809d928219950ce606b4f8a18ccb52e644407 (patch) | |
| tree | a9a79983468181184c75dcbe168e8cca0956a746 /src/link/Elf | |
| parent | 41e9b8b6c84a1787ffa647fc42980dcce4942b7d (diff) | |
| download | zig-8ca809d928219950ce606b4f8a18ccb52e644407.tar.gz zig-8ca809d928219950ce606b4f8a18ccb52e644407.zip | |
elf: move getStartStopBasename into Object
Diffstat (limited to 'src/link/Elf')
| -rw-r--r-- | src/link/Elf/LinkerDefined.zig | 10 | ||||
| -rw-r--r-- | src/link/Elf/Object.zig | 8 |
2 files changed, 14 insertions, 4 deletions
diff --git a/src/link/Elf/LinkerDefined.zig b/src/link/Elf/LinkerDefined.zig index ee9a1e2956..f28b94e369 100644 --- a/src/link/Elf/LinkerDefined.zig +++ b/src/link/Elf/LinkerDefined.zig @@ -95,8 +95,9 @@ pub fn initSymbols(self: *LinkerDefined, elf_file: *Elf) !void { var start_stop_count: usize = 0; for (elf_file.objects.items) |index| { - for (elf_file.file(index).?.object.shdrs.items) |shdr| { - if (elf_file.getStartStopBasename(shdr)) |_| { + const object = elf_file.file(index).?.object; + for (object.shdrs.items) |shdr| { + if (object.getStartStopBasename(shdr)) |_| { start_stop_count += 2; // __start_, __stop_ } } @@ -140,8 +141,9 @@ pub fn initSymbols(self: *LinkerDefined, elf_file: *Elf) !void { } for (elf_file.objects.items) |index| { - for (elf_file.file(index).?.object.shdrs.items) |shdr| { - if (elf_file.getStartStopBasename(shdr)) |name| { + const object = elf_file.file(index).?.object; + for (object.shdrs.items) |shdr| { + if (object.getStartStopBasename(shdr)) |name| { const start_name = try std.fmt.allocPrintZ(gpa, "__start_{s}", .{name}); defer gpa.free(start_name); const stop_name = try std.fmt.allocPrintZ(gpa, "__stop_{s}", .{name}); diff --git a/src/link/Elf/Object.zig b/src/link/Elf/Object.zig index 47c74967eb..03bc60d937 100644 --- a/src/link/Elf/Object.zig +++ b/src/link/Elf/Object.zig @@ -1444,6 +1444,14 @@ pub fn comdatGroup(self: *Object, index: Elf.ComdatGroup.Index) *Elf.ComdatGroup return &self.comdat_groups.items[index]; } +pub fn getStartStopBasename(self: Object, shdr: elf.Elf64_Shdr) ?[]const u8 { + const name = self.getString(shdr.sh_name); + if (shdr.sh_flags & elf.SHF_ALLOC != 0 and name.len > 0) { + if (Elf.isCIdentifier(name)) return name; + } + return null; +} + pub fn format( self: *Object, comptime unused_fmt_string: []const u8, |
