Merge pull request #20852 from ziglang/init-array-start-code

start code: implement __init_array_start, __init_array_end
This commit is contained in:
Andrew Kelley 2024-07-29 18:40:27 -07:00 committed by GitHub
commit f219286573
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -464,6 +464,23 @@ fn posixCallMainAndExit(argc_argv_ptr: [*]usize) callconv(.C) noreturn {
// Here we look for the stack size in our program headers and use setrlimit
// to ask for more stack space.
expandStackSize(phdrs);
// Disabled with the riscv backend because it cannot handle this code yet.
if (builtin.zig_backend != .stage2_riscv64) {
const opt_init_array_start = @extern([*]*const fn () callconv(.C) void, .{
.name = "__init_array_start",
.linkage = .weak,
});
const opt_init_array_end = @extern([*]*const fn () callconv(.C) void, .{
.name = "__init_array_end",
.linkage = .weak,
});
if (opt_init_array_start) |init_array_start| {
const init_array_end = opt_init_array_end.?;
const slice = init_array_start[0 .. init_array_end - init_array_start];
for (slice) |func| func();
}
}
}
std.posix.exit(callMainWithArgs(argc, argv, envp));