aboutsummaryrefslogtreecommitdiff
path: root/src/link/Elf.zig
diff options
context:
space:
mode:
authorAndrew Kelley <andrew@ziglang.org>2024-12-03 17:35:47 -0800
committerAndrew Kelley <andrew@ziglang.org>2025-01-15 15:11:35 -0800
commitda25ed95fce32449f70942ea77aa5e00e75dbbdd (patch)
tree6e9e979184325aa9f4d73e0c29de5e1f55f5e4f5 /src/link/Elf.zig
parent6235cc3da4d2c6ebf7fd31242e8d82d39f5c81cf (diff)
downloadzig-da25ed95fce32449f70942ea77aa5e00e75dbbdd.tar.gz
zig-da25ed95fce32449f70942ea77aa5e00e75dbbdd.zip
macho linker conforms to explicit error sets, again
Diffstat (limited to 'src/link/Elf.zig')
-rw-r--r--src/link/Elf.zig15
1 files changed, 13 insertions, 2 deletions
diff --git a/src/link/Elf.zig b/src/link/Elf.zig
index 543cd80f6a..be9ab135a8 100644
--- a/src/link/Elf.zig
+++ b/src/link/Elf.zig
@@ -807,7 +807,6 @@ pub fn flushModule(self: *Elf, arena: Allocator, tid: Zcu.PerThread.Id, prog_nod
defer tracy.end();
const comp = self.base.comp;
- const gpa = comp.gpa;
const diags = &comp.link_diags;
if (self.llvm_object) |llvm_object| {
@@ -821,6 +820,18 @@ pub fn flushModule(self: *Elf, arena: Allocator, tid: Zcu.PerThread.Id, prog_nod
const sub_prog_node = prog_node.start("ELF Flush", 0);
defer sub_prog_node.end();
+ return flushModuleInner(self, arena, tid) catch |err| switch (err) {
+ error.OutOfMemory => return error.OutOfMemory,
+ error.LinkFailure => return error.LinkFailure,
+ else => |e| return diags.fail("ELF flush failed: {s}", .{@errorName(e)}),
+ };
+}
+
+fn flushModuleInner(self: *Elf, arena: Allocator, tid: Zcu.PerThread.Id) !void {
+ const comp = self.base.comp;
+ const gpa = comp.gpa;
+ const diags = &comp.link_diags;
+
const module_obj_path: ?Path = if (self.base.zcu_object_sub_path) |path| .{
.root_dir = self.base.emit.root_dir,
.sub_path = if (fs.path.dirname(self.base.emit.sub_path)) |dirname|
@@ -2432,7 +2443,7 @@ pub fn addCommentString(self: *Elf) !void {
self.comment_merge_section_index = msec_index;
}
-pub fn resolveMergeSections(self: *Elf) link.File.FlushError!void {
+pub fn resolveMergeSections(self: *Elf) !void {
const tracy = trace(@src());
defer tracy.end();