Merge pull request #23373 from alexrp/get-base-address

`std.process`: Some minor fixes for `getBaseAddress()`
This commit is contained in:
Alex Rønne Petersen 2025-03-27 15:39:24 +01:00 committed by GitHub
commit cc9634a2d3
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -1652,14 +1652,15 @@ pub fn posixGetUserInfo(name: []const u8) !UserInfo {
pub fn getBaseAddress() usize { pub fn getBaseAddress() usize {
switch (native_os) { switch (native_os) {
.linux => { .linux => {
const base = std.os.linux.getauxval(std.elf.AT_BASE); const getauxval = if (builtin.link_libc) std.c.getauxval else std.os.linux.getauxval;
const base = getauxval(std.elf.AT_BASE);
if (base != 0) { if (base != 0) {
return base; return base;
} }
const phdr = std.os.linux.getauxval(std.elf.AT_PHDR); const phdr = getauxval(std.elf.AT_PHDR);
return phdr - @sizeOf(std.elf.Ehdr); return phdr - @sizeOf(std.elf.Ehdr);
}, },
.macos, .freebsd, .netbsd => { .driverkit, .ios, .macos, .tvos, .visionos, .watchos => {
return @intFromPtr(&std.c._mh_execute_header); return @intFromPtr(&std.c._mh_execute_header);
}, },
.windows => return @intFromPtr(windows.kernel32.GetModuleHandleW(null)), .windows => return @intFromPtr(windows.kernel32.GetModuleHandleW(null)),