diff options
| author | Jakub Konka <kubkon@jakubkonka.com> | 2024-01-22 19:24:58 +0100 |
|---|---|---|
| committer | Jakub Konka <kubkon@jakubkonka.com> | 2024-01-24 12:34:42 +0100 |
| commit | 46bc91ade533ad2f51ae32962b057952f90e8d2a (patch) | |
| tree | 5c76d612b614032f6aa3f6757e66dbbf397ec0b9 | |
| parent | f2dce0c33794f363d1b7448ee110ca2ae4bbafac (diff) | |
| download | zig-46bc91ade533ad2f51ae32962b057952f90e8d2a.tar.gz zig-46bc91ade533ad2f51ae32962b057952f90e8d2a.zip | |
macho: skip -r when single input object file
This is to ensure we don't unnecessarily strip debug info from
the final relocatable input file, so just copy the file out for now.
| -rw-r--r-- | src/link/MachO/relocatable.zig | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/src/link/MachO/relocatable.zig b/src/link/MachO/relocatable.zig index dcda59d607..1bcbe1f3ab 100644 --- a/src/link/MachO/relocatable.zig +++ b/src/link/MachO/relocatable.zig @@ -12,6 +12,20 @@ pub fn flush(macho_file: *MachO, comp: *Compilation, module_obj_path: ?[]const u if (module_obj_path) |path| try positionals.append(.{ .path = path }); + if (positionals.items.len == 1) { + // Instead of invoking a full-blown `-r` mode on the input which sadly will strip all + // debug info segments/sections (this is apparently by design by Apple), we copy + // the *only* input file over. + // TODO: in the future, when we implement `dsymutil` alternative directly in the Zig + // compiler, investigate if we can get rid of this `if` prong here. + const path = positionals.items[0].path; + const in_file = try std.fs.cwd().openFile(path, .{}); + const stat = try in_file.stat(); + const amt = try in_file.copyRangeAll(0, macho_file.base.file.?, 0, stat.size); + if (amt != stat.size) return error.InputOutput; // TODO: report an actual user error + return; + } + for (positionals.items) |obj| { macho_file.parsePositional(obj.path, obj.must_link) catch |err| switch (err) { error.MalformedObject, |
