authorgravatar for PecoraInPannaCotta@gmail.comGiuseppe Cesarano <PecoraInPannaCotta@gmail.com> 2025-08-08 20:32:17+02:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2025-08-08 12:47:00-07:00
log3ee4252183e92ee8ec51c9ba8631bd9524e26b1f
treec72e47defe12130819fcf0fbdcaff1651c7a0a98
parent1ba6838bc3919f2e1306b01a11fd3d5dd01fefe1

Fix: std.elf offset computation


1 files changed, 8 insertions(+), 4 deletions(-)

lib/std/elf.zig+8-4
......@@ -584,7 +584,8 @@ pub const ProgramHeaderIterator = struct {
584584 if (it.index >= it.elf_header.phnum) return null;
585585 defer it.index += 1;
586586
587 const offset = it.elf_header.phoff + if (it.elf_header.is_64) @sizeOf(Elf64_Phdr) else @sizeOf(Elf32_Phdr) * it.index;
587 const size: u64 = if (it.elf_header.is_64) @sizeOf(Elf64_Phdr) else @sizeOf(Elf32_Phdr);
588 const offset = it.elf_header.phoff + size * it.index;
588589 try it.file_reader.seekTo(offset);
589590
590591 return takePhdr(&it.file_reader.interface, it.elf_header);
......@@ -600,7 +601,8 @@ pub const ProgramHeaderBufferIterator = struct {
600601 if (it.index >= it.elf_header.phnum) return null;
601602 defer it.index += 1;
602603
603 const offset = it.elf_header.phoff + if (it.elf_header.is_64) @sizeOf(Elf64_Phdr) else @sizeOf(Elf32_Phdr) * it.index;
604 const size: u64 = if (it.elf_header.is_64) @sizeOf(Elf64_Phdr) else @sizeOf(Elf32_Phdr);
605 const offset = it.elf_header.phoff + size * it.index;
604606 var reader = std.Io.Reader.fixed(it.buf[offset..]);
605607
606608 return takePhdr(&reader, it.elf_header);
......@@ -635,7 +637,8 @@ pub const SectionHeaderIterator = struct {
635637 if (it.index >= it.elf_header.shnum) return null;
636638 defer it.index += 1;
637639
638 const offset = it.elf_header.shoff + if (it.elf_header.is_64) @sizeOf(Elf64_Shdr) else @sizeOf(Elf32_Shdr) * it.index;
640 const size: u64 = if (it.elf_header.is_64) @sizeOf(Elf64_Shdr) else @sizeOf(Elf32_Shdr);
641 const offset = it.elf_header.shoff + size * it.index;
639642 try it.file_reader.seekTo(offset);
640643
641644 return takeShdr(&it.file_reader.interface, it.elf_header);
......@@ -651,7 +654,8 @@ pub const SectionHeaderBufferIterator = struct {
651654 if (it.index >= it.elf_header.shnum) return null;
652655 defer it.index += 1;
653656
654 const offset = it.elf_header.shoff + if (it.elf_header.is_64) @sizeOf(Elf64_Shdr) else @sizeOf(Elf32_Shdr) * it.index;
657 const size: u64 = if (it.elf_header.is_64) @sizeOf(Elf64_Shdr) else @sizeOf(Elf32_Shdr);
658 const offset = it.elf_header.shoff + size * it.index;
655659 var reader = std.Io.Reader.fixed(it.buf[offset..]);
656660
657661 return takeShdr(&reader, it.elf_header);