aboutsummaryrefslogtreecommitdiff
path: root/src/link/Elf
diff options
context:
space:
mode:
authorJakub Konka <kubkon@jakubkonka.com>2024-08-02 18:32:07 +0200
committerJakub Konka <kubkon@jakubkonka.com>2024-08-07 10:21:02 +0200
commit8ca809d928219950ce606b4f8a18ccb52e644407 (patch)
treea9a79983468181184c75dcbe168e8cca0956a746 /src/link/Elf
parent41e9b8b6c84a1787ffa647fc42980dcce4942b7d (diff)
downloadzig-8ca809d928219950ce606b4f8a18ccb52e644407.tar.gz
zig-8ca809d928219950ce606b4f8a18ccb52e644407.zip
elf: move getStartStopBasename into Object
Diffstat (limited to 'src/link/Elf')
-rw-r--r--src/link/Elf/LinkerDefined.zig10
-rw-r--r--src/link/Elf/Object.zig8
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,