commit 728024f9f3fc4f454c91cf29c169acb660a13c21 (tree)
parent 390c7d84b24355ba3346ec1214a0a8de8a7c5df3
Author: Andrew Kelley <andrew@ziglang.org>
Date: Sun, 28 Jul 2024 23:53:06 -0700
start code: implement __init_array_start, __init_array_end
Diffstat:
1 file changed, 16 insertions(+), 0 deletions(-)
diff --git a/lib/std/start.zig b/lib/std/start.zig
@@ -435,6 +435,22 @@ 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);
+
+ {
+ 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));