authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2024-07-28 23:53:06-07:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2024-07-28 23:54:49-07:00
log728024f9f3fc4f454c91cf29c169acb660a13c21
tree233574618f469ddd6cecebc6616b8bf15688d1c4
parent390c7d84b24355ba3346ec1214a0a8de8a7c5df3

start code: implement __init_array_start, __init_array_end


1 files changed, 16 insertions(+), 0 deletions(-)

lib/std/start.zig+16
......@@ -435,6 +435,22 @@ fn posixCallMainAndExit(argc_argv_ptr: [*]usize) callconv(.C) noreturn {
435435 // Here we look for the stack size in our program headers and use setrlimit
436436 // to ask for more stack space.
437437 expandStackSize(phdrs);
438
439 {
440 const opt_init_array_start = @extern([*]*const fn () callconv(.C) void, .{
441 .name = "__init_array_start",
442 .linkage = .weak,
443 });
444 const opt_init_array_end = @extern([*]*const fn () callconv(.C) void, .{
445 .name = "__init_array_end",
446 .linkage = .weak,
447 });
448 if (opt_init_array_start) |init_array_start| {
449 const init_array_end = opt_init_array_end.?;
450 const slice = init_array_start[0 .. init_array_end - init_array_start];
451 for (slice) |func| func();
452 }
453 }
438454 }
439455
440456 std.posix.exit(callMainWithArgs(argc, argv, envp));