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...@@ -1682,13 +1682,6 @@ pub fn flushStaticLib(self: *Elf, comp: *Compilation) link.File.FlushError!void
1682 pos += @sizeOf(Archive.ar_hdr) + entry[2];1682 pos += @sizeOf(Archive.ar_hdr) + entry[2];
1683 }1683 }
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
1692 // TODO parsed positionals1685 // TODO parsed positionals
16931686
1694 // Magic bytes.1687 // Magic bytes.
src/link/Elf/Archive.zig+3-2
...@@ -85,11 +85,12 @@ pub fn parse(self: *Archive, elf_file: *Elf) !void {...@@ -85,11 +85,12 @@ pub fn parse(self: *Archive, elf_file: *Elf) !void {
85 _ = try reader.readBytesNoEof(SARMAG);85 _ = try reader.readBytesNoEof(SARMAG);
8686
87 while (true) {87 while (true) {
88 if (stream.pos >= self.data.len) break;
89
88 if (stream.pos % 2 != 0) {90 if (stream.pos % 2 != 0) {
89 stream.pos += 1;91 stream.pos += 1;
90 }92 }
91 // TODO flag an error if stream.pos > self.data.len after alignment93 const hdr = try reader.readStruct(ar_hdr);
92 const hdr = reader.readStruct(ar_hdr) catch break;
9394
94 if (!mem.eql(u8, &hdr.ar_fmag, ARFMAG)) {95 if (!mem.eql(u8, &hdr.ar_fmag, ARFMAG)) {
95 // TODO convert into an error96 // TODO convert into an error