const std = #import("std"); const builtin = #import("builtin"); comptime { if (builtin.link_libc) { _ = main; } else { _ = _start; } } const _start = fn naked, export () noreturn { #asm({ xor ebp, ebp; mov rdi, rsp; and rsp, 0xfffffffffffffff0; call {start}; }); } var argument_count: usize = 0; var argument_values: [&]const [&:0]const u8 = undefined; var environment_values: [&:null]const ?[&:null]const u8 = undefined; const start = fn export (argc_argv_address: usize) noreturn { var argument_address_iterator = argc_argv_address; const argument_count_ptr: &usize = #cast(argument_address_iterator); argument_count = argument_count_ptr.@; argument_address_iterator += #size(usize); argument_values = #cast(argument_address_iterator); argument_address_iterator += #size(usize) * (argument_count + 1); environment_values = #cast(argument_address_iterator); const result = #import("main").main(); std.os.exit(exit_code = result); } const main = fn export (argc: s32, argv: [&:null]?[&:null]u8, env: [&:null]?[&:null]u8) s32 { return #import("main").main(); }