LibC: Make _init and _fini weak symbols

These seem to be missing sometimes when making shared executables
This commit is contained in:
Bananymous 2024-09-11 14:31:26 +03:00
parent a07cbabcb3
commit 4189a1c729
3 changed files with 12 additions and 4 deletions

View File

@ -19,7 +19,11 @@ _start:
call _init_libc
# call global constructors
call _init
movl $_init, %eax
testl %eax, %eax
jz 1f
call *%eax
1:
movl $__init_array_start, %ebx
jmp 2f

View File

@ -20,7 +20,11 @@ _start:
call _init_libc
# call global constructors
call _init
movq $_init, %rax
testq %rax, %rax
jz 1f
call *%rax
1:
movq $__init_array_start, %rbx
jmp 2f

View File

@ -16,7 +16,7 @@
extern "C" char** environ;
extern "C" void _fini();
extern "C" __attribute__((weak)) void _fini();
static void (*at_exit_funcs[64])();
static uint32_t at_exit_funcs_count = 0;
@ -34,7 +34,7 @@ void exit(int status)
at_exit_funcs[i - 1]();
fflush(nullptr);
__cxa_finalize(nullptr);
_fini();
if (_fini) _fini();
_exit(status);
ASSERT_NOT_REACHED();
}