authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2022-08-10 18:56:08-07:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2022-08-10 22:27:59-07:00
logcc56400e62ae7d59cccf78d0cfe2e4b990d53abc
tree527f2135419a2f5ac230830ffa7f4aeddeb0ad86
parent74673b7f69b27dc39a653f92eb58bba71e289f39

Revert "macho: allow unaligned offsets in object files"

This reverts commit 45c444ff18b43d30a7277e346174ba6eca4a6193.

1 files changed, 12 insertions(+), 13 deletions(-)

src/link/MachO/Object.zig+12-13
...@@ -99,11 +99,10 @@ pub fn parse(self: *Object, allocator: Allocator, cpu_arch: std.Target.Cpu.Arch)...@@ -99,11 +99,10 @@ pub fn parse(self: *Object, allocator: Allocator, cpu_arch: std.Target.Cpu.Arch)
99 },99 },
100 .SYMTAB => {100 .SYMTAB => {
101 const symtab = cmd.cast(macho.symtab_command).?;101 const symtab = cmd.cast(macho.symtab_command).?;
102 // Sadly, SYMTAB may be at an unaligned offset within the object file.102 self.in_symtab = @ptrCast(
103 self.in_symtab = @alignCast(@alignOf(macho.nlist_64), @ptrCast(103 [*]const macho.nlist_64,
104 [*]align(1) const macho.nlist_64,104 @alignCast(@alignOf(macho.nlist_64), &self.contents[symtab.symoff]),
105 self.contents.ptr + symtab.symoff,105 )[0..symtab.nsyms];
106 ))[0..symtab.nsyms];
107 self.in_strtab = self.contents[symtab.stroff..][0..symtab.strsize];106 self.in_strtab = self.contents[symtab.stroff..][0..symtab.strsize];
108 try self.symtab.appendSlice(allocator, self.in_symtab);107 try self.symtab.appendSlice(allocator, self.in_symtab);
109 },108 },
...@@ -303,10 +302,10 @@ pub fn splitIntoAtomsOneShot(self: *Object, macho_file: *MachO, object_id: u32)...@@ -303,10 +302,10 @@ pub fn splitIntoAtomsOneShot(self: *Object, macho_file: *MachO, object_id: u32)
303 const code: ?[]const u8 = if (!sect.isZerofill()) try self.getSectionContents(sect) else null;302 const code: ?[]const u8 = if (!sect.isZerofill()) try self.getSectionContents(sect) else null;
304303
305 // Read section's list of relocations304 // Read section's list of relocations
306 const relocs = @alignCast(@alignOf(macho.relocation_info), @ptrCast(305 const relocs = @ptrCast(
307 [*]align(1) const macho.relocation_info,306 [*]const macho.relocation_info,
308 self.contents.ptr + sect.reloff,307 @alignCast(@alignOf(macho.relocation_info), &self.contents[sect.reloff]),
309 ))[0..sect.nreloc];308 )[0..sect.nreloc];
310309
311 // Symbols within this section only.310 // Symbols within this section only.
312 const filtered_syms = filterSymbolsByAddress(311 const filtered_syms = filterSymbolsByAddress(
...@@ -549,10 +548,10 @@ pub fn parseDataInCode(self: Object) ?[]const macho.data_in_code_entry {...@@ -549,10 +548,10 @@ pub fn parseDataInCode(self: Object) ?[]const macho.data_in_code_entry {
549 .DATA_IN_CODE => {548 .DATA_IN_CODE => {
550 const dice = cmd.cast(macho.linkedit_data_command).?;549 const dice = cmd.cast(macho.linkedit_data_command).?;
551 const ndice = @divExact(dice.datasize, @sizeOf(macho.data_in_code_entry));550 const ndice = @divExact(dice.datasize, @sizeOf(macho.data_in_code_entry));
552 return @alignCast(@alignOf(macho.data_in_code_entry), @ptrCast(551 return @ptrCast(
553 [*]align(1) const macho.data_in_code_entry,552 [*]const macho.data_in_code_entry,
554 self.contents.ptr + dice.dataoff,553 @alignCast(@alignOf(macho.data_in_code_entry), &self.contents[dice.dataoff]),
555 ))[0..ndice];554 )[0..ndice];
556 },555 },
557 else => {},556 else => {},
558 }557 }