aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJakub Konka <kubkon@jakubkonka.com>2023-11-03 19:30:51 +0100
committerJakub Konka <kubkon@jakubkonka.com>2023-11-04 09:13:07 +0100
commited2984f335bfaf7cc3cb7841554f4cbb958476dd (patch)
tree34d4629b23eb24cbe8e30ff1464960ce1c5842c4
parenta333ac846dd2ac8ed67f84a15bef272ccd65df37 (diff)
downloadzig-ed2984f335bfaf7cc3cb7841554f4cbb958476dd.tar.gz
zig-ed2984f335bfaf7cc3cb7841554f4cbb958476dd.zip
elf: do not align end of archive to 2bytes; fix archive parser
-rw-r--r--src/link/Elf.zig7
-rw-r--r--src/link/Elf/Archive.zig5
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