diff options
| author | Jakub Konka <kubkon@jakubkonka.com> | 2023-11-03 19:30:51 +0100 |
|---|---|---|
| committer | Jakub Konka <kubkon@jakubkonka.com> | 2023-11-04 09:13:07 +0100 |
| commit | ed2984f335bfaf7cc3cb7841554f4cbb958476dd (patch) | |
| tree | 34d4629b23eb24cbe8e30ff1464960ce1c5842c4 /src | |
| parent | a333ac846dd2ac8ed67f84a15bef272ccd65df37 (diff) | |
| download | zig-ed2984f335bfaf7cc3cb7841554f4cbb958476dd.tar.gz zig-ed2984f335bfaf7cc3cb7841554f4cbb958476dd.zip | |
elf: do not align end of archive to 2bytes; fix archive parser
Diffstat (limited to 'src')
| -rw-r--r-- | src/link/Elf.zig | 7 | ||||
| -rw-r--r-- | src/link/Elf/Archive.zig | 5 |
2 files changed, 3 insertions, 9 deletions
diff --git a/src/link/Elf.zig b/src/link/Elf.zig index d938355da5..daf952811d 100644 --- a/src/link/Elf.zig +++ b/src/link/Elf.zig @@ -1682,13 +1682,6 @@ pub fn flushStaticLib(self: *Elf, comp: *Compilation) link.File.FlushError!void pos += @sizeOf(Archive.ar_hdr) + entry[2]; } - if (pos % 2 != 0) { - pos += 1; - try self.base.file.?.pwriteAll(&[1]u8{0}, pos); - } - - assert(mem.isAligned(pos, 2)); - // TODO parsed positionals // Magic bytes. diff --git a/src/link/Elf/Archive.zig b/src/link/Elf/Archive.zig index bdefbfad04..2083171ce7 100644 --- a/src/link/Elf/Archive.zig +++ b/src/link/Elf/Archive.zig @@ -85,11 +85,12 @@ pub fn parse(self: *Archive, elf_file: *Elf) !void { _ = try reader.readBytesNoEof(SARMAG); while (true) { + if (stream.pos >= self.data.len) break; + if (stream.pos % 2 != 0) { stream.pos += 1; } - // TODO flag an error if stream.pos > self.data.len after alignment - const hdr = reader.readStruct(ar_hdr) catch break; + const hdr = try reader.readStruct(ar_hdr); if (!mem.eql(u8, &hdr.ar_fmag, ARFMAG)) { // TODO convert into an error |
