blob: a2305e942ed928da075a2877be09555aac2d48c7 [file] [log] [blame]
From fd4ec7febe5532b15fc66e213b589f22d543beb1 Mon Sep 17 00:00:00 2001
From: John Newlin <jnewlin@google.com>
Date: Mon, 20 Oct 2014 10:35:14 -0700
Subject: [PATCH 5/5] brcm auxv patch.
---
.../uclibc/0.9.33.2/uclibc-0064-brcm-auxvec.patch | 80 ++++++++++++++++++++++
1 file changed, 80 insertions(+)
create mode 100644 package/uclibc/0.9.33.2/uclibc-0064-brcm-auxvec.patch
diff --git a/package/uclibc/0.9.33.2/uclibc-0064-brcm-auxvec.patch b/package/uclibc/0.9.33.2/uclibc-0064-brcm-auxvec.patch
new file mode 100644
index 0000000..121084c
--- /dev/null
+++ b/package/uclibc/0.9.33.2/uclibc-0064-brcm-auxvec.patch
@@ -0,0 +1,80 @@
+commit c8a44ca1203244e18be053bd90b6b6df88d93d67
+Author: Kevin Cernekee <cernekee@gmail.com>
+Date: Wed Apr 13 19:34:46 2011 -0700
+
+ Cache AT_PLATFORM and AT_L1D_CACHESHAPE from auxvec
+
+ Allow uClibc internal functions to make optimizations at runtime, based
+ on the CPU type or D$ line size retrieved from the auxiliary vector.
+ This would nominally be used for functions like memcpy(), on processors
+ that do not have an unprivileged instruction along the lines of "CPUID".
+
+ Signed-off-by: Kevin Cernekee <cernekee@gmail.com>
+
+diff --git a/include/libc-internal.h b/include/libc-internal.h
+index 3ac0b05..ef5ce59 100644
+--- a/include/libc-internal.h
++++ b/include/libc-internal.h
+@@ -65,6 +65,10 @@ libc_hidden_proto(__glibc_strerror_r)
+ /* internal access to program name */
+ extern const char *__uclibc_progname attribute_hidden;
+
++/* internal access to auxvec AT_PLATFORM, cache info */
++extern const char *__auxv_platform attribute_hidden;
++extern int __auxv_l1d_cacheshape attribute_hidden;
++
+ # ifdef __UCLIBC_HAS_FORTIFY__
+ extern void __chk_fail(void) attribute_noreturn;
+ libc_hidden_proto(__chk_fail)
+diff --git a/libc/misc/internals/__uClibc_main.c b/libc/misc/internals/__uClibc_main.c
+index 315365a..bc2e253 100644
+--- a/libc/misc/internals/__uClibc_main.c
++++ b/libc/misc/internals/__uClibc_main.c
+@@ -30,6 +30,7 @@
+ #include <fcntl.h>
+ #include <sys/stat.h>
+ #include <sys/sysmacros.h>
++#include <libc-internal.h>
+ #ifdef __UCLIBC_HAS_THREADS_NATIVE__
+ #include <errno.h>
+ #include <pthread-functions.h>
+@@ -156,6 +157,12 @@ weak_alias (program_invocation_short_name, __progname)
+ weak_alias (program_invocation_name, __progname_full)
+ #endif
+
++/* Highest numbered auxvec entry to copy into auxvt[] */
++#define AT_MAX AT_L3_CACHESHAPE
++
++attribute_hidden const char *__auxv_platform = NULL;
++attribute_hidden int __auxv_l1d_cacheshape = 0;
++
+ /*
+ * Declare the __environ global variable and create a weak alias environ.
+ * This must be initialized; we cannot have a weak alias into bss.
+@@ -321,7 +328,7 @@ void __uClibc_main(int (*main)(int, char **, char **), int argc,
+ {
+ #ifndef __ARCH_HAS_NO_LDSO__
+ unsigned long *aux_dat;
+- ElfW(auxv_t) auxvt[AT_EGID + 1];
++ ElfW(auxv_t) auxvt[AT_MAX + 1];
+ #endif
+
+ #ifdef __UCLIBC_HAS_THREADS_NATIVE__
+@@ -355,7 +362,7 @@ void __uClibc_main(int (*main)(int, char **, char **), int argc,
+ aux_dat++;
+ while (*aux_dat) {
+ ElfW(auxv_t) *auxv_entry = (ElfW(auxv_t) *) aux_dat;
+- if (auxv_entry->a_type <= AT_EGID) {
++ if (auxv_entry->a_type <= AT_MAX) {
+ memcpy(&(auxvt[auxv_entry->a_type]), auxv_entry, sizeof(ElfW(auxv_t)));
+ }
+ aux_dat += 2;
+@@ -376,6 +383,8 @@ void __uClibc_main(int (*main)(int, char **, char **), int argc,
+ #ifndef __ARCH_HAS_NO_LDSO__
+ /* Make certain getpagesize() gives the correct answer */
+ __pagesize = (auxvt[AT_PAGESZ].a_un.a_val)? auxvt[AT_PAGESZ].a_un.a_val : PAGE_SIZE;
++ __auxv_platform = (char *)auxvt[AT_PLATFORM].a_un.a_val;
++ __auxv_l1d_cacheshape = (int)auxvt[AT_L1D_CACHESHAPE].a_un.a_val;
+
+ /* Prevent starting SUID binaries where the stdin. stdout, and
+ * stderr file descriptors are not already opened. */
--
2.1.0.rc2.206.gedb03e5