authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2024-07-29 18:40:27-07:00
committergravatar for noreply@github.comGitHub <noreply@github.com> 2024-07-29 18:40:27-07:00
logf219286573a7a1edafe3e1b5bc1e521a379ee2e2
tree574312bd81d50c9d05370b7f404d9161330d5bd6
parent38e0f049c531e83ec2eec80d50b624e6c3b8c486
parent3f2d1b17fc304c8a71e6fcce4a17500b19c3fbac
signaturebadge-check Signed by PGP key B5690EEEBB952194

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

start code: implement __init_array_start, __init_array_end

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

lib/std/start.zig+17
......@@ -464,6 +464,23 @@ fn posixCallMainAndExit(argc_argv_ptr: [*]usize) callconv(.C) noreturn {
464464 // Here we look for the stack size in our program headers and use setrlimit
465465 // to ask for more stack space.
466466 expandStackSize(phdrs);
467
468 // Disabled with the riscv backend because it cannot handle this code yet.
469 if (builtin.zig_backend != .stage2_riscv64) {
470 const opt_init_array_start = @extern([*]*const fn () callconv(.C) void, .{
471 .name = "__init_array_start",
472 .linkage = .weak,
473 });
474 const opt_init_array_end = @extern([*]*const fn () callconv(.C) void, .{
475 .name = "__init_array_end",
476 .linkage = .weak,
477 });
478 if (opt_init_array_start) |init_array_start| {
479 const init_array_end = opt_init_array_end.?;
480 const slice = init_array_start[0 .. init_array_end - init_array_start];
481 for (slice) |func| func();
482 }
483 }
467484 }
468485
469486 std.posix.exit(callMainWithArgs(argc, argv, envp));