micro-optimize some startup code for size
authorRich Felker <dalias@aerifal.cx>
Mon, 21 Apr 2014 23:31:35 +0000 (19:31 -0400)
committerRich Felker <dalias@aerifal.cx>
Mon, 21 Apr 2014 23:31:35 +0000 (19:31 -0400)
moving the call to __init_ssp from __init_security to __init_libc
makes __init_security a leaf function, which allows the compiler to
make it smaller. __init_libc is already non-leaf, and the additional
call makes no difference to the amount of register spillage.

in addition, it really made no sense for the call to __init_ssp to be
buried inside __init_security rather than parallel with other init
functions.

src/env/__init_security.c
src/env/__libc_start_main.c

index da5ae94..ae62395 100644 (file)
@@ -5,18 +5,11 @@
 #include "libc.h"
 #include "atomic.h"
 
-static void dummy(void *ent)
-{
-}
-weak_alias(dummy, __init_ssp);
-
 void __init_security(size_t *aux)
 {
        struct pollfd pfd[3] = { {.fd=0}, {.fd=1}, {.fd=2} };
        int i;
 
-       __init_ssp((void *)aux[AT_RANDOM]);
-
        if (aux[AT_UID]==aux[AT_EUID] && aux[AT_GID]==aux[AT_EGID]
                && !aux[AT_SECURE]) return;
 
index ac37492..539f72e 100644 (file)
@@ -11,6 +11,9 @@ extern void (*const __init_array_start)() __attribute__((weak));
 extern void (*const __init_array_end)() __attribute__((weak));
 #endif
 
+static void dummy1(void *p) {}
+weak_alias(dummy1, __init_ssp);
+
 #define AUX_CNT 38
 
 extern size_t __hwcap, __sysinfo;
@@ -33,6 +36,7 @@ void __init_libc(char **envp, char *pn)
        }
 
        __init_tls(aux);
+       __init_ssp((void *)aux[AT_RANDOM]);
        __init_security(aux);
 }