Browse Source

further micro-optimize startup code for size

there is no reason (and seemingly there never was any) for
__init_security to be its own function. it's linked unconditionally
so it can just be placed inline in __init_libc.
Rich Felker 11 years ago
parent
commit
fbcfed7c2d
2 changed files with 14 additions and 23 deletions
  1. 0 21
      src/env/__init_security.c
  2. 14 2
      src/env/__libc_start_main.c

+ 0 - 21
src/env/__init_security.c

@@ -1,21 +0,0 @@
-#include <elf.h>
-#include <poll.h>
-#include <fcntl.h>
-#include "syscall.h"
-#include "libc.h"
-#include "atomic.h"
-
-void __init_security(size_t *aux)
-{
-	struct pollfd pfd[3] = { {.fd=0}, {.fd=1}, {.fd=2} };
-	int i;
-
-	if (aux[AT_UID]==aux[AT_EUID] && aux[AT_GID]==aux[AT_EGID]
-		&& !aux[AT_SECURE]) return;
-
-	__syscall(SYS_poll, pfd, 3, 0);
-	for (i=0; i<3; i++) if (pfd[i].revents&POLLNVAL)
-		if (__syscall(SYS_open, "/dev/null", O_RDWR|O_LARGEFILE)<0)
-			a_crash();
-	libc.secure = 1;
-}

+ 14 - 2
src/env/__libc_start_main.c

@@ -1,8 +1,11 @@
 #include <elf.h>
+#include <poll.h>
+#include <fcntl.h>
+#include "syscall.h"
+#include "atomic.h"
 #include "libc.h"
 
 void __init_tls(size_t *);
-void __init_security(size_t *);
 
 #ifndef SHARED
 static void dummy() {}
@@ -37,7 +40,16 @@ void __init_libc(char **envp, char *pn)
 
 	__init_tls(aux);
 	__init_ssp((void *)aux[AT_RANDOM]);
-	__init_security(aux);
+
+	if (aux[AT_UID]==aux[AT_EUID] && aux[AT_GID]==aux[AT_EGID]
+		&& !aux[AT_SECURE]) return;
+
+	struct pollfd pfd[3] = { {.fd=0}, {.fd=1}, {.fd=2} };
+	__syscall(SYS_poll, pfd, 3, 0);
+	for (i=0; i<3; i++) if (pfd[i].revents&POLLNVAL)
+		if (__syscall(SYS_open, "/dev/null", O_RDWR|O_LARGEFILE)<0)
+			a_crash();
+	libc.secure = 1;
 }
 
 int __libc_start_main(int (*main)(int,char **,char **), int argc, char **argv)