aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorH. Peter Anvin <hpa@zytor.com>2015-11-05 08:52:33 -0800
committerH. Peter Anvin <hpa@zytor.com>2015-11-05 14:22:01 -0800
commitbc18ea796db39b8d3575948b3d0de28daee38261 (patch)
tree20e7f1894fc0173e88f10ce0cc5cd0b842fac432
parent3438d861da2e6939a6b0d454ffe247c19ead5993 (diff)
downloadklibc-bc18ea796db39b8d3575948b3d0de28daee38261.tar.gz
[klibc] Inline __arch_libcinit()
__arch_libcinit() is only ever used as part of __libc_init(), so we might as well make it an inline function. Signed-off-by: H. Peter Anvin <hpa@zytor.com>
-rw-r--r--scripts/Kbuild.klibc.include11
-rw-r--r--usr/include/arch/i386/klibc/archconfig.h2
-rw-r--r--usr/include/arch/i386/klibc/archinit.h (renamed from usr/klibc/arch/i386/archinit.c)4
-rw-r--r--usr/include/klibc/sysconfig.h2
-rw-r--r--usr/klibc/arch/i386/Kbuild2
-rw-r--r--usr/klibc/libc_init.c7
6 files changed, 22 insertions, 6 deletions
diff --git a/scripts/Kbuild.klibc.include b/scripts/Kbuild.klibc.include
new file mode 100644
index 00000000000000..b3172866a0c2ff
--- /dev/null
+++ b/scripts/Kbuild.klibc.include
@@ -0,0 +1,11 @@
+
+# klibc-cc-option
+# Usage: cflags-y += $(call klibc-cc-option,-march=winchip-c6,-march=i586)
+
+klibc-cc-option = $(call try-run,\
+ $(CC) $(KLIBCCPPFLAGS) $(KLIBCCFLAGS) $(1) -c -xc /dev/null -o "$$TMP",$(1),$(2))
+
+# klibc-cc-option-yn
+# Usage: flag := $(call klibc-cc-option-yn,-march=winchip-c6)
+klibc-cc-option-yn = $(call try-run,\
+ $(CC) $(KLIBCCPPFLAGS) $(KLIBCCFLAGS) $(1) -c -xc /dev/null -o "$$TMP",y,n)
diff --git a/usr/include/arch/i386/klibc/archconfig.h b/usr/include/arch/i386/klibc/archconfig.h
index d8db763e70052d..f070f5bb4daa5e 100644
--- a/usr/include/arch/i386/klibc/archconfig.h
+++ b/usr/include/arch/i386/klibc/archconfig.h
@@ -12,7 +12,7 @@
/* The i386 <asm/signal.h> is still not clean enough for this... */
#define _KLIBC_USE_RT_SIG 0
-/* We have __libc_arch_init() */
+/* We have klibc/archinit.h and __libc_archinit() */
#define _KLIBC_HAS_ARCHINIT 1
#endif /* _KLIBC_ARCHCONFIG_H */
diff --git a/usr/klibc/arch/i386/archinit.c b/usr/include/arch/i386/klibc/archinit.h
index 111d130d356b44..8995ebfdd8215f 100644
--- a/usr/klibc/arch/i386/archinit.c
+++ b/usr/include/arch/i386/klibc/archinit.h
@@ -1,5 +1,5 @@
/*
- * arch/i386/archinit.c
+ * arch/i386/include/klibc/archinit.h
*
* Architecture-specific libc initialization
*/
@@ -11,7 +11,7 @@
extern void (*__syscall_entry)(int, ...);
-void __libc_archinit(void)
+static inline void __libc_archinit(void)
{
if (__auxval[AT_SYSINFO])
__syscall_entry = (void (*)(int, ...)) __auxval[AT_SYSINFO];
diff --git a/usr/include/klibc/sysconfig.h b/usr/include/klibc/sysconfig.h
index ab947c0bfc0077..c91d5b85a31059 100644
--- a/usr/include/klibc/sysconfig.h
+++ b/usr/include/klibc/sysconfig.h
@@ -219,7 +219,7 @@
/*
* _KLIBC_HAS_ARCHINIT
*
- * This architecture uses __libc_archinit()
+ * This architecture has klibc/archinit.h and __libc_archinit()
*/
#ifndef _KLIBC_HAS_ARCHINIT
# define _KLIBC_HAS_ARCHINIT 0
diff --git a/usr/klibc/arch/i386/Kbuild b/usr/klibc/arch/i386/Kbuild
index 16423742919c13..edc7b3ccfd653c 100644
--- a/usr/klibc/arch/i386/Kbuild
+++ b/usr/klibc/arch/i386/Kbuild
@@ -2,7 +2,7 @@
# klibc .o files for i386
#
-klib-y := archinit.o socketcall.o setjmp.o syscall.o varsyscall.o
+klib-y := socketcall.o setjmp.o syscall.o varsyscall.o
klib-y += open.o openat.o vfork.o
klib-y += libgcc/__ashldi3.o libgcc/__ashrdi3.o libgcc/__lshrdi3.o
klib-y += libgcc/__muldi3.o libgcc/__negdi2.o
diff --git a/usr/klibc/libc_init.c b/usr/klibc/libc_init.c
index c54d0224281786..c5b9bab4ef0c87 100644
--- a/usr/klibc/libc_init.c
+++ b/usr/klibc/libc_init.c
@@ -28,6 +28,12 @@
#include <klibc/sysconfig.h>
#include "atexit.h"
+#if _KLIBC_HAS_ARCHINIT
+# include "klibc/archinit.h"
+#else
+# define __libc_archinit() ((void)0)
+#endif
+
/* This file is included from __static_init.c or __shared_init.c */
#ifndef SHARED
# error "SHARED should be defined to 0 or 1"
@@ -42,7 +48,6 @@ struct auxentry {
};
extern void __libc_init_stdio(void);
-extern void __libc_archinit(void);
unsigned long __auxval[_AUXVAL_MAX];