| ... | @@ -3013,6 +3013,13 @@ fn loadArchive(elf: *Elf, path: std.Build.Cache.Path, fr: *Io.File.Reader) !void | ... | @@ -3013,6 +3013,13 @@ fn loadArchive(elf: *Elf, path: std.Build.Cache.Path, fr: *Io.File.Reader) !void |
| 3013 | continue; | 3013 | continue; |
| 3014 | } | 3014 | } |
| 3015 | load_object: { | 3015 | load_object: { |
| | 3016 | if (std.mem.eql(u8, &header.ar_name, std.elf.SYMNAME) or |
| | 3017 | std.mem.eql(u8, &header.ar_name, std.elf.SYM64NAME) or |
| | 3018 | std.mem.eql(u8, &header.ar_name, std.elf.SYMDEFNAME) or |
| | 3019 | std.mem.eql(u8, &header.ar_name, std.elf.SYMDEFSORTEDNAME)) |
| | 3020 | { |
| | 3021 | break :load_object; |
| | 3022 | } |
| 3016 | const member = header.name() orelse member: { | 3023 | const member = header.name() orelse member: { |
| 3017 | const strtab_offset = header.nameOffset() catch |err| switch (err) { | 3024 | const strtab_offset = header.nameOffset() catch |err| switch (err) { |
| 3018 | error.Overflow => break :member error.Overflow, | 3025 | error.Overflow => break :member error.Overflow, |
| ... | @@ -3028,7 +3035,6 @@ fn loadArchive(elf: *Elf, path: std.Build.Cache.Path, fr: *Io.File.Reader) !void | ... | @@ -3028,7 +3035,6 @@ fn loadArchive(elf: *Elf, path: std.Build.Cache.Path, fr: *Io.File.Reader) !void |
| 3028 | } catch |err| switch (err) { | 3035 | } catch |err| switch (err) { |
| 3029 | error.Overflow => return diags.failParse(path, "bad member name offset", .{}), | 3036 | error.Overflow => return diags.failParse(path, "bad member name offset", .{}), |
| 3030 | }; | 3037 | }; |
| 3031 | if (!std.mem.endsWith(u8, member, ".o")) break :load_object; | | |
| 3032 | try elf.loadObject(path, member, fr, .{ .offset = offset, .size = size }); | 3038 | try elf.loadObject(path, member, fr, .{ .offset = offset, .size = size }); |
| 3033 | } | 3039 | } |
| 3034 | try fr.seekTo(std.mem.alignForward(u64, offset + size, 2)); | 3040 | try fr.seekTo(std.mem.alignForward(u64, offset + size, 2)); |