summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorRich Felker <dalias@aerifal.cx>2017-10-13 10:39:51 -0400
committerRich Felker <dalias@aerifal.cx>2017-10-13 10:39:51 -0400
commitb3516058eb9ff9e52a8720f0e5c0f6936cce6047 (patch)
tree9503c6a8b1ed28f1dc70cf0f560283f69316eff2 /src
parente364774d7ca0a78db1b8457d5094b747eb2df318 (diff)
downloadmusl-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.c2
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);