LibC: Make _init and _fini weak symbols
These seem to be missing sometimes when making shared executables
This commit is contained in:
parent
a07cbabcb3
commit
4189a1c729
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue