mirror of
https://github.com/ziglang/zig.git
synced 2025-12-06 06:13:07 +00:00
start: Set std.os.linux.elf_aux_maybe after PIE relocations.
Accesses to this global variable can require relocations on some platforms (e.g. MIPS). If we do it before PIE relocations have been applied, we'll crash.
This commit is contained in:
parent
e33af8e902
commit
d6c637c36b
@ -455,7 +455,6 @@ fn posixCallMainAndExit(argc_argv_ptr: [*]usize) callconv(.C) noreturn {
|
|||||||
if (native_os == .linux) {
|
if (native_os == .linux) {
|
||||||
// Find the beginning of the auxiliary vector
|
// Find the beginning of the auxiliary vector
|
||||||
const auxv: [*]elf.Auxv = @ptrCast(@alignCast(envp.ptr + envp_count + 1));
|
const auxv: [*]elf.Auxv = @ptrCast(@alignCast(envp.ptr + envp_count + 1));
|
||||||
std.os.linux.elf_aux_maybe = auxv;
|
|
||||||
|
|
||||||
var at_hwcap: usize = 0;
|
var at_hwcap: usize = 0;
|
||||||
const phdrs = init: {
|
const phdrs = init: {
|
||||||
@ -479,6 +478,10 @@ fn posixCallMainAndExit(argc_argv_ptr: [*]usize) callconv(.C) noreturn {
|
|||||||
std.os.linux.pie.relocate(phdrs);
|
std.os.linux.pie.relocate(phdrs);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// This must be done after PIE relocations have been applied or we may crash
|
||||||
|
// while trying to access the global variable (happens on MIPS at least).
|
||||||
|
std.os.linux.elf_aux_maybe = auxv;
|
||||||
|
|
||||||
if (!builtin.single_threaded) {
|
if (!builtin.single_threaded) {
|
||||||
// ARMv6 targets (and earlier) have no support for TLS in hardware.
|
// ARMv6 targets (and earlier) have no support for TLS in hardware.
|
||||||
// FIXME: Elide the check for targets >= ARMv7 when the target feature API
|
// FIXME: Elide the check for targets >= ARMv7 when the target feature API
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user