@@ -15,6 +15,7 @@ const CrossTarget = std.zig.CrossTarget;
15
15
const LibStub = @import ("../tapi.zig" ).LibStub ;
16
16
const LoadCommandIterator = macho .LoadCommandIterator ;
17
17
const MachO = @import ("../MachO.zig" );
18
+ const MappedFile = @import ("../MappedFile.zig" );
18
19
19
20
id : ? Id = null ,
20
21
weak : bool = false ,
@@ -124,9 +125,10 @@ pub fn parseFromBinary(
124
125
dylib_id : u16 ,
125
126
dependent_libs : anytype ,
126
127
name : []const u8 ,
127
- data : [] const u8 ,
128
+ data : MappedFile ,
128
129
) ! void {
129
- var stream = std .io .fixedBufferStream (data );
130
+ const slice = data .slice ();
131
+ var stream = std .io .fixedBufferStream (slice );
130
132
const reader = stream .reader ();
131
133
132
134
log .debug ("parsing shared library '{s}'" , .{name });
@@ -151,17 +153,18 @@ pub fn parseFromBinary(
151
153
const should_lookup_reexports = header .flags & macho .MH_NO_REEXPORTED_DYLIBS == 0 ;
152
154
var it = LoadCommandIterator {
153
155
.ncmds = header .ncmds ,
154
- .buffer = data [@sizeOf (macho .mach_header_64 ).. ][0.. header .sizeofcmds ],
156
+ .buffer = slice [@sizeOf (macho .mach_header_64 ).. ][0.. header .sizeofcmds ],
155
157
};
156
158
while (it .next ()) | cmd | {
157
159
switch (cmd .cmd ()) {
158
160
.SYMTAB = > {
159
161
const symtab_cmd = cmd .cast (macho .symtab_command ).? ;
162
+ // SYMTAB in a final binary file (exe or lib) has to be aligned in file
160
163
const symtab = @ptrCast (
161
164
[* ]const macho .nlist_64 ,
162
- @alignCast (@alignOf (macho .nlist_64 ), & data [ symtab_cmd .symoff ] ),
165
+ @alignCast (@alignOf (macho .nlist_64 ), slice . ptr + symtab_cmd .symoff ),
163
166
)[0.. symtab_cmd .nsyms ];
164
- const strtab = data [symtab_cmd .stroff .. ][0.. symtab_cmd .strsize ];
167
+ const strtab = slice [symtab_cmd .stroff .. ][0.. symtab_cmd .strsize ];
165
168
166
169
for (symtab ) | sym | {
167
170
const add_to_symtab = sym .ext () and (sym .sect () or sym .indr ());
0 commit comments