From 3b871f91e295cbaa4dc512a7073963e1d895bfa9 Mon Sep 17 00:00:00 2001 From: Sam Clegg Date: Fri, 22 Jun 2018 08:07:42 -0700 Subject: [PATCH] Fix signatures of __libc_start_main/_init/_fini We should probably upstream these. The __libc_start_main is pretty clearly wrong in the current upstream. --- crt/crt1.c | 10 +++++----- crt/rcrt1.c | 8 ++++---- src/env/__libc_start_main.c | 3 ++- 3 files changed, 11 insertions(+), 10 deletions(-) diff --git a/crt/crt1.c b/crt/crt1.c index af02af94..4f8ff05d 100644 --- a/crt/crt1.c +++ b/crt/crt1.c @@ -4,15 +4,15 @@ #include "crt_arch.h" -int main(); -void _init() __attribute__((weak)); -void _fini() __attribute__((weak)); +int main(int argc, char *argv[]); +void _init(void) __attribute__((weak)); +void _fini(void) __attribute__((weak)); _Noreturn int __libc_start_main(int (*)(), int, char **, - void (*)(), void(*)(), void(*)()); + void (*)(), void(*)()); void _start_c(long *p) { int argc = p[0]; char **argv = (void *)(p+1); - __libc_start_main(main, argc, argv, _init, _fini, 0); + __libc_start_main(main, argc, argv, _init, _fini); } diff --git a/crt/rcrt1.c b/crt/rcrt1.c index be017153..569f0ecc 100644 --- a/crt/rcrt1.c +++ b/crt/rcrt1.c @@ -3,13 +3,13 @@ #include "../ldso/dlstart.c" int main(); -void _init() __attribute__((weak)); -void _fini() __attribute__((weak)); +void _init(void) __attribute__((weak)); +void _fini(void) __attribute__((weak)); _Noreturn int __libc_start_main(int (*)(), int, char **, - void (*)(), void(*)(), void(*)()); + void (*)(), void(*)()); __attribute__((__visibility__("hidden"))) _Noreturn void __dls2(unsigned char *base, size_t *sp) { - __libc_start_main(main, *sp, (void *)(sp+1), _init, _fini, 0); + __libc_start_main(main, *sp, (void *)(sp+1), _init, _fini); } diff --git a/src/env/__libc_start_main.c b/src/env/__libc_start_main.c index 5e18ce73..61c57825 100644 --- a/src/env/__libc_start_main.c +++ b/src/env/__libc_start_main.c @@ -67,7 +67,8 @@ static void libc_start_init(void) weak_alias(libc_start_init, __libc_start_init); -int __libc_start_main(int (*main)(int,char **,char **), int argc, char **argv) +int __libc_start_main(int (*main)(int,char **,char **), int argc, char **argv, + void(*init)(), void(*fini)()) { char **envp = argv+argc+1;