Skip to content

Commit c093ccd

Browse files
SeanTheGleamingVexu
authored andcommitted
Update dynamic_library.zig
Reworked pointer arithmetic to reduce usage of `@intFromPtr`
1 parent f06925d commit c093ccd

File tree

1 file changed

+8
-8
lines changed

1 file changed

+8
-8
lines changed

lib/std/dynamic_library.zig

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -171,23 +171,23 @@ pub const ElfDynLib = struct {
171171
if (!mem.eql(u8, eh.e_ident[0..4], elf.MAGIC)) return error.NotElfFile;
172172
if (eh.e_type != elf.ET.DYN) return error.NotDynamicLibrary;
173173

174-
const elf_addr = @intFromPtr(file_bytes.ptr);
174+
const elf_addr: [*]u8 = file_bytes.ptr;
175175

176176
// Iterate over the program header entries to find out the
177177
// dynamic vector as well as the total size of the virtual memory.
178178
var maybe_dynv: ?[*]usize = null;
179179
var virt_addr_end: usize = 0;
180180
{
181181
var i: usize = 0;
182-
var ph_addr: usize = elf_addr + eh.e_phoff;
182+
var ph_addr: [*]u8 = elf_addr + eh.e_phoff;
183183
while (i < eh.e_phnum) : ({
184184
i += 1;
185185
ph_addr += eh.e_phentsize;
186186
}) {
187-
const ph = @as(*elf.Phdr, @ptrFromInt(ph_addr));
187+
const ph: *elf.Phdr = @ptrCast(@alignCast(ph_addr));
188188
switch (ph.p_type) {
189189
elf.PT_LOAD => virt_addr_end = @max(virt_addr_end, ph.p_vaddr + ph.p_memsz),
190-
elf.PT_DYNAMIC => maybe_dynv = @as([*]usize, @ptrFromInt(elf_addr + ph.p_offset)),
190+
elf.PT_DYNAMIC => maybe_dynv = @as([*]usize, @ptrCast(@alignCast(elf_addr + ph.p_offset))),
191191
else => {},
192192
}
193193
}
@@ -210,12 +210,12 @@ pub const ElfDynLib = struct {
210210
// Now iterate again and actually load all the program sections.
211211
{
212212
var i: usize = 0;
213-
var ph_addr: usize = elf_addr + eh.e_phoff;
213+
var ph_addr: [*]u8 = elf_addr + eh.e_phoff;
214214
while (i < eh.e_phnum) : ({
215215
i += 1;
216216
ph_addr += eh.e_phentsize;
217217
}) {
218-
const ph = @as(*elf.Phdr, @ptrFromInt(ph_addr));
218+
const ph: *elf.Phdr = @ptrCast(@alignCast(ph_addr));
219219
switch (ph.p_type) {
220220
elf.PT_LOAD => {
221221
// The VirtAddr may not be page-aligned; in such case there will be
@@ -343,9 +343,9 @@ fn checkver(def_arg: *elf.Verdef, vsym_arg: i32, vername: []const u8, strings: [
343343
break;
344344
if (def.vd_next == 0)
345345
return false;
346-
def = @as(*elf.Verdef, @ptrFromInt(@intFromPtr(def) + def.vd_next));
346+
def = @ptrCast(@as([*]elf.Verdef, @ptrCast(def)) + def.vd_next);
347347
}
348-
const aux = @as(*elf.Verdaux, @ptrFromInt(@intFromPtr(def) + def.vd_aux));
348+
const aux: *elf.Verdaux = @ptrCast(@as([*]elf.Verdef, @ptrCast(def)) + def.vd_aux);
349349
return mem.eql(u8, vername, mem.sliceTo(strings + aux.vda_name, 0));
350350
}
351351

0 commit comments

Comments
 (0)