diff options
author | Rich Felker <dalias@aerifal.cx> | 2017-10-13 10:39:51 -0400 |
---|---|---|
committer | Rich Felker <dalias@aerifal.cx> | 2017-10-13 10:39:51 -0400 |
commit | b3516058eb9ff9e52a8720f0e5c0f6936cce6047 (patch) | |
tree | 9503c6a8b1ed28f1dc70cf0f560283f69316eff2 /src | |
parent | e364774d7ca0a78db1b8457d5094b747eb2df318 (diff) | |
download | musl-b3516058eb9ff9e52a8720f0e5c0f6936cce6047.tar.gz musl-b3516058eb9ff9e52a8720f0e5c0f6936cce6047.tar.bz2 musl-b3516058eb9ff9e52a8720f0e5c0f6936cce6047.tar.xz musl-b3516058eb9ff9e52a8720f0e5c0f6936cce6047.zip |
for executing init array functions, use function type with prototype
this is for consistency with the way it's done in in the dynamic
linker, avoiding a deprecated C feature (non-prototype function
types), and improving code generation. GCC unnecessarily uses the
variadic calling convention (e.g. clearing rax on x86_64) when making
a call where the argument types are not known for compatibility with
wrong code which calls variadic functions this way. (C on the other
hand is clear that such calls have undefined behavior.)
Diffstat (limited to 'src')
-rw-r--r-- | src/env/__libc_start_main.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/src/env/__libc_start_main.c b/src/env/__libc_start_main.c index 18afdc1d..2d758af7 100644 --- a/src/env/__libc_start_main.c +++ b/src/env/__libc_start_main.c @@ -58,7 +58,7 @@ static void libc_start_init(void) _init(); uintptr_t a = (uintptr_t)&__init_array_start; for (; a<(uintptr_t)&__init_array_end; a+=sizeof(void(*)())) - (*(void (**)())a)(); + (*(void (**)(void))a)(); } weak_alias(libc_start_init, __libc_start_init); |