Commit 7559418305

Alexandros Naskos <alex_naskos@hotmail.com>
2020-03-03 11:41:11
Added comment justifying wrapping operations
1 parent a48cd1c
Changed files (1)
lib
std
os
linux
lib/std/os/linux/vdso.zig
@@ -22,6 +22,10 @@ pub fn lookup(vername: []const u8, name: []const u8) usize {
         }) {
             const this_ph = @intToPtr(*elf.Phdr, ph_addr);
             switch (this_ph.p_type) {
+                // On WSL1 as well as older kernels, the VDSO ELF image is pre-linked in the upper half 
+                // of the memory space (e.g. p_vaddr = 0xffffffffff700000 on WSL1).
+                // Wrapping operations are used on this line as well as subsequent calculations relative to base
+                // (lines 47, 78) to ensure no overflow check is tripped.
                 elf.PT_LOAD => base = vdso_addr +% this_ph.p_offset -% this_ph.p_vaddr,
                 elf.PT_DYNAMIC => maybe_dynv = @intToPtr([*]usize, vdso_addr + this_ph.p_offset),
                 else => {},