authorgravatar for kubkon@jakubkonka.comJakub Konka <kubkon@jakubkonka.com> 2023-11-03 19:30:51+01:00
committergravatar for kubkon@jakubkonka.comJakub Konka <kubkon@jakubkonka.com> 2023-11-04 09:13:07+01:00
loged2984f335bfaf7cc3cb7841554f4cbb958476dd
tree34d4629b23eb24cbe8e30ff1464960ce1c5842c4
parenta333ac846dd2ac8ed67f84a15bef272ccd65df37

elf: do not align end of archive to 2bytes; fix archive parser


2 files changed, 3 insertions(+), 9 deletions(-)

src/link/Elf.zig-7
......@@ -1682,13 +1682,6 @@ pub fn flushStaticLib(self: *Elf, comp: *Compilation) link.File.FlushError!void
16821682 pos += @sizeOf(Archive.ar_hdr) + entry[2];
16831683 }
16841684
1685 if (pos % 2 != 0) {
1686 pos += 1;
1687 try self.base.file.?.pwriteAll(&[1]u8{0}, pos);
1688 }
1689
1690 assert(mem.isAligned(pos, 2));
1691
16921685 // TODO parsed positionals
16931686
16941687 // Magic bytes.
src/link/Elf/Archive.zig+3-2
......@@ -85,11 +85,12 @@ pub fn parse(self: *Archive, elf_file: *Elf) !void {
8585 _ = try reader.readBytesNoEof(SARMAG);
8686
8787 while (true) {
88 if (stream.pos >= self.data.len) break;
89
8890 if (stream.pos % 2 != 0) {
8991 stream.pos += 1;
9092 }
91 // TODO flag an error if stream.pos > self.data.len after alignment
92 const hdr = reader.readStruct(ar_hdr) catch break;
93 const hdr = try reader.readStruct(ar_hdr);
9394
9495 if (!mem.eql(u8, &hdr.ar_fmag, ARFMAG)) {
9596 // TODO convert into an error