aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--main/libc0.9.32/0001-ldso-limited-support-for-ORIGIN-in-rpath.patch198
-rw-r--r--main/libc0.9.32/0002-stdlib-fix-arc4random-return-type-to-u_int32_t.patch61
-rw-r--r--main/libc0.9.32/0003-ldso-support-RTLD_NOLOAD.patch234
-rw-r--r--main/libc0.9.32/APKBUILD30
-rw-r--r--main/libc0.9.32/arm-nptl-tls.patch69
-rw-r--r--main/libc0.9.32/compat-stack-guard.patch70
-rw-r--r--main/libc0.9.32/config-has-fortify.patch125
-rw-r--r--main/libc0.9.32/pthread.patch81
-rw-r--r--main/libc0.9.32/uclibcconfig.arm6
-rw-r--r--main/libc0.9.32/uclibcconfig.powerpc28
-rw-r--r--main/libc0.9.32/uclibcconfig.x866
-rw-r--r--main/libc0.9.32/uclibcconfig.x86_646
12 files changed, 561 insertions, 353 deletions
diff --git a/main/libc0.9.32/0001-ldso-limited-support-for-ORIGIN-in-rpath.patch b/main/libc0.9.32/0001-ldso-limited-support-for-ORIGIN-in-rpath.patch
new file mode 100644
index 0000000000..73e0fab2bf
--- /dev/null
+++ b/main/libc0.9.32/0001-ldso-limited-support-for-ORIGIN-in-rpath.patch
@@ -0,0 +1,198 @@
+From 0ba7ee452f26088f6b738c37e05c16c7c9eb1caf Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Timo=20Ter=C3=A4s?= <timo.teras@iki.fi>
+Date: Fri, 18 Mar 2011 10:53:56 +0200
+Subject: [PATCH 1/3] ldso: limited support for $ORIGIN in rpath
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Handle it if it's in the beginning of the rpath entry as it
+should be.
+
+Signed-off-by: Timo Teräs <timo.teras@iki.fi>
+---
+ ldso/ldso/dl-elf.c | 80 ++++++++++++++++++++++++++++-----------------------
+ ldso/ldso/ldso.c | 18 ++++++++++--
+ 2 files changed, 59 insertions(+), 39 deletions(-)
+
+diff --git a/ldso/ldso/dl-elf.c b/ldso/ldso/dl-elf.c
+index 505247e..2b2d429 100644
+--- a/ldso/ldso/dl-elf.c
++++ b/ldso/ldso/dl-elf.c
+@@ -133,53 +133,60 @@ _dl_protect_relro (struct elf_resolve *l)
+ * in uClibc/ldso/util/ldd.c */
+ static struct elf_resolve *
+ search_for_named_library(const char *name, int secure, const char *path_list,
+- struct dyn_elf **rpnt)
++ struct dyn_elf **rpnt, const char *origin)
+ {
+- char *path, *path_n, *mylibname;
++ char *mylibname;
++ const char *p, *pn;
+ struct elf_resolve *tpnt;
+- int done;
++ int plen;
+
+ if (path_list==NULL)
+ return NULL;
+
+- /* We need a writable copy of this string, but we don't
+- * need this allocated permanently since we don't want
+- * to leak memory, so use alloca to put path on the stack */
+- done = _dl_strlen(path_list);
+- path = alloca(done + 1);
+-
+ /* another bit of local storage */
+ mylibname = alloca(2050);
+
+- _dl_memcpy(path, path_list, done+1);
+-
+ /* Unlike ldd.c, don't bother to eliminate double //s */
+
+ /* Replace colons with zeros in path_list */
+ /* : at the beginning or end of path maps to CWD */
+ /* :: anywhere maps CWD */
+ /* "" maps to CWD */
+- done = 0;
+- path_n = path;
+- do {
+- if (*path == 0) {
+- *path = ':';
+- done = 1;
+- }
+- if (*path == ':') {
+- *path = 0;
+- if (*path_n)
+- _dl_strcpy(mylibname, path_n);
+- else
+- _dl_strcpy(mylibname, "."); /* Assume current dir if empty path */
+- _dl_strcat(mylibname, "/");
+- _dl_strcat(mylibname, name);
+- if ((tpnt = _dl_load_elf_shared_library(secure, rpnt, mylibname)) != NULL)
+- return tpnt;
+- path_n = path+1;
++ for (p = path_list; p != NULL; p = pn) {
++ pn = _dl_strchr(p + 1, ':');
++ if (pn != NULL) {
++ plen = pn - p;
++ pn++;
++ } else
++ plen = _dl_strlen(p);
++
++ if (plen >= 7 && _dl_memcmp(p, "$ORIGIN", 7) == 0) {
++ int olen;
++ if (secure && plen != 7)
++ continue;
++ if (origin == NULL)
++ continue;
++ for (olen = _dl_strlen(origin) - 1; olen >= 0 && origin[olen] != '/'; olen--)
++ ;
++ if (olen <= 0)
++ continue;
++ _dl_memcpy(&mylibname[0], origin, olen);
++ _dl_memcpy(&mylibname[olen], p + 7, plen - 7);
++ mylibname[olen + plen - 7] = 0;
++ } else if (plen != 0) {
++ _dl_memcpy(mylibname, p, plen);
++ mylibname[plen] = 0;
++ } else {
++ _dl_strcpy(mylibname, ".");
+ }
+- path++;
+- } while (!done);
++ _dl_strcat(mylibname, "/");
++ _dl_strcat(mylibname, name);
++
++ tpnt = _dl_load_elf_shared_library(secure, rpnt, mylibname);
++ if (tpnt != NULL)
++ return tpnt;
++ }
++
+ return NULL;
+ }
+
+@@ -231,7 +238,8 @@ struct elf_resolve *_dl_load_shared_library(int secure, struct dyn_elf **rpnt,
+ if (pnt) {
+ pnt += (unsigned long) tpnt->dynamic_info[DT_STRTAB];
+ _dl_if_debug_dprint("\tsearching RPATH='%s'\n", pnt);
+- if ((tpnt1 = search_for_named_library(libname, secure, pnt, rpnt)) != NULL)
++ if ((tpnt1 = search_for_named_library(libname, secure, pnt, rpnt,
++ tpnt->libname)) != NULL)
+ return tpnt1;
+ }
+ #endif
+@@ -239,7 +247,7 @@ struct elf_resolve *_dl_load_shared_library(int secure, struct dyn_elf **rpnt,
+ /* Check in LD_{ELF_}LIBRARY_PATH, if specified and allowed */
+ if (_dl_library_path) {
+ _dl_if_debug_dprint("\tsearching LD_LIBRARY_PATH='%s'\n", _dl_library_path);
+- if ((tpnt1 = search_for_named_library(libname, secure, _dl_library_path, rpnt)) != NULL)
++ if ((tpnt1 = search_for_named_library(libname, secure, _dl_library_path, rpnt, NULL)) != NULL)
+ {
+ return tpnt1;
+ }
+@@ -253,7 +261,7 @@ struct elf_resolve *_dl_load_shared_library(int secure, struct dyn_elf **rpnt,
+ if (pnt) {
+ pnt += (unsigned long) tpnt->dynamic_info[DT_STRTAB];
+ _dl_if_debug_dprint("\tsearching RUNPATH='%s'\n", pnt);
+- if ((tpnt1 = search_for_named_library(libname, secure, pnt, rpnt)) != NULL)
++ if ((tpnt1 = search_for_named_library(libname, secure, pnt, rpnt, NULL)) != NULL)
+ return tpnt1;
+ }
+ #endif
+@@ -287,7 +295,7 @@ struct elf_resolve *_dl_load_shared_library(int secure, struct dyn_elf **rpnt,
+ /* Look for libraries wherever the shared library loader
+ * was installed */
+ _dl_if_debug_dprint("\tsearching ldso dir='%s'\n", _dl_ldsopath);
+- tpnt1 = search_for_named_library(libname, secure, _dl_ldsopath, rpnt);
++ tpnt1 = search_for_named_library(libname, secure, _dl_ldsopath, rpnt, NULL);
+ if (tpnt1 != NULL)
+ return tpnt1;
+
+@@ -300,7 +308,7 @@ struct elf_resolve *_dl_load_shared_library(int secure, struct dyn_elf **rpnt,
+ #ifndef __LDSO_CACHE_SUPPORT__
+ ":" UCLIBC_RUNTIME_PREFIX "usr/X11R6/lib"
+ #endif
+- , rpnt);
++ , rpnt, NULL);
+ if (tpnt1 != NULL)
+ return tpnt1;
+
+diff --git a/ldso/ldso/ldso.c b/ldso/ldso/ldso.c
+index 7ee9257..9423670 100644
+--- a/ldso/ldso/ldso.c
++++ b/ldso/ldso/ldso.c
+@@ -272,6 +272,20 @@ static void __attribute__ ((destructor)) __attribute_used__ _dl_fini(void)
+ }
+ }
+
++static void _dl_setup_progname(const char *argv0)
++{
++ char image[PATH_MAX];
++ ssize_t s;
++
++ s = _dl_readlink("/proc/self/exe", image, sizeof(image));
++ if (s > 0 && image[0] == '/') {
++ image[s] = 0;
++ _dl_progname = _dl_strdup(image);
++ } else if (argv0) {
++ _dl_progname = argv0;
++ }
++}
++
+ void _dl_get_ready_to_run(struct elf_resolve *tpnt, DL_LOADADDR_TYPE load_addr,
+ ElfW(auxv_t) auxvt[AT_EGID + 1], char **envp,
+ char **argv
+@@ -321,9 +335,7 @@ void _dl_get_ready_to_run(struct elf_resolve *tpnt, DL_LOADADDR_TYPE load_addr,
+ * been fixed up by now. Still no function calls outside of this
+ * library, since the dynamic resolver is not yet ready.
+ */
+- if (argv[0]) {
+- _dl_progname = argv[0];
+- }
++ _dl_setup_progname(argv[0]);
+
+ if (_start == (void *) auxvt[AT_ENTRY].a_un.a_val) {
+ _dl_dprintf(_dl_debug_file, "Standalone execution is not supported yet\n");
+--
+1.7.1
+
diff --git a/main/libc0.9.32/0002-stdlib-fix-arc4random-return-type-to-u_int32_t.patch b/main/libc0.9.32/0002-stdlib-fix-arc4random-return-type-to-u_int32_t.patch
new file mode 100644
index 0000000000..9d924655df
--- /dev/null
+++ b/main/libc0.9.32/0002-stdlib-fix-arc4random-return-type-to-u_int32_t.patch
@@ -0,0 +1,61 @@
+From 70debeff167858502d99e92a221fe14f5428a9b6 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Timo=20Ter=C3=A4s?= <timo.teras@iki.fi>
+Date: Fri, 18 Mar 2011 10:57:31 +0200
+Subject: [PATCH 2/3] stdlib: fix arc4random return type to u_int32_t
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+It's documented to be u_int32_t and not uint32_t:
+ http://www.manpagez.com/man/3/arc4random/
+
+This also fixes a major bug that stdlib.h includes stdint.h. Things
+might go very wrong because stdint.h has conditional defines and
+if stdlib.h is included before #define's for stdint.h we end up
+missing things and breaking builds (e.g. openjdk).
+
+Signed-off-by: Timo Teräs <timo.teras@iki.fi>
+---
+ include/stdlib.h | 4 ++--
+ libc/stdlib/arc4random.c | 3 ++-
+ 2 files changed, 4 insertions(+), 3 deletions(-)
+
+diff --git a/include/stdlib.h b/include/stdlib.h
+index e9a8b84..7b35840 100644
+--- a/include/stdlib.h
++++ b/include/stdlib.h
+@@ -902,8 +902,8 @@ extern int getloadavg (double __loadavg[], int __nelem)
+ #endif
+
+ #ifdef __UCLIBC_HAS_ARC4RANDOM__
+-#include <stdint.h>
+-extern uint32_t arc4random(void);
++# include <sys/types.h>
++extern u_int32_t arc4random(void);
+ extern void arc4random_stir(void);
+ extern void arc4random_addrandom(unsigned char *, int);
+ #endif
+diff --git a/libc/stdlib/arc4random.c b/libc/stdlib/arc4random.c
+index c7aed66..7b9b12d 100644
+--- a/libc/stdlib/arc4random.c
++++ b/libc/stdlib/arc4random.c
+@@ -30,6 +30,7 @@
+ #include <fcntl.h>
+ #include <stdlib.h>
+ #include <unistd.h>
++#include <stdint.h>
+ #include <sys/types.h>
+ #include <sys/param.h>
+ #include <sys/time.h>
+@@ -175,7 +176,7 @@ arc4random_addrandom(u_char *dat, int datlen)
+ arc4_addrandom(&rs, dat, datlen);
+ }
+
+-uint32_t
++u_int32_t
+ arc4random(void)
+ {
+ if (!rs_initialized)
+--
+1.7.1
+
diff --git a/main/libc0.9.32/0003-ldso-support-RTLD_NOLOAD.patch b/main/libc0.9.32/0003-ldso-support-RTLD_NOLOAD.patch
new file mode 100644
index 0000000000..f10d6f002d
--- /dev/null
+++ b/main/libc0.9.32/0003-ldso-support-RTLD_NOLOAD.patch
@@ -0,0 +1,234 @@
+From 4bb377585b95cb67c90ff4ffc21a6870a4e78a37 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Timo=20Ter=C3=A4s?= <timo.teras@iki.fi>
+Date: Fri, 18 Mar 2011 11:40:04 +0200
+Subject: [PATCH 3/3] ldso: support RTLD_NOLOAD
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+So application query if specified modile is loaded or not with
+dlopen.
+
+Signed-off-by: Timo Teräs <timo.teras@iki.fi>
+---
+ ldso/include/dl-elf.h | 6 ++++--
+ ldso/ldso/dl-elf.c | 30 +++++++++++++++++-------------
+ ldso/ldso/ldso.c | 4 +++-
+ ldso/libdl/libdl.c | 5 +++--
+ libc/sysdeps/linux/common/bits/dlfcn.h | 4 ++--
+ 5 files changed, 29 insertions(+), 20 deletions(-)
+
+diff --git a/ldso/include/dl-elf.h b/ldso/include/dl-elf.h
+index 7fbb373..7102351 100644
+--- a/ldso/include/dl-elf.h
++++ b/ldso/include/dl-elf.h
+@@ -25,16 +25,18 @@ static __inline__ void _dl_map_cache(void) { }
+ static __inline__ void _dl_unmap_cache(void) { }
+ #endif
+
++#define DL_RESOLVE_SECURE 0x0001
++#define DL_RESOLVE_NOLOAD 0x0002
+
+ /* Function prototypes for non-static stuff in readelflib1.c */
+ extern void _dl_parse_lazy_relocation_information(struct dyn_elf *rpnt,
+ unsigned long rel_addr, unsigned long rel_size);
+ extern int _dl_parse_relocation_information(struct dyn_elf *rpnt,
+ unsigned long rel_addr, unsigned long rel_size);
+-extern struct elf_resolve * _dl_load_shared_library(int secure,
++extern struct elf_resolve * _dl_load_shared_library(int resolve_flags,
+ struct dyn_elf **rpnt, struct elf_resolve *tpnt, char *full_libname,
+ int trace_loaded_objects);
+-extern struct elf_resolve * _dl_load_elf_shared_library(int secure,
++extern struct elf_resolve * _dl_load_elf_shared_library(int resolve_flags,
+ struct dyn_elf **rpnt, char *libname);
+ extern struct elf_resolve *_dl_check_if_named_library_is_loaded(const char *full_libname,
+ int trace_loaded_objects);
+diff --git a/ldso/ldso/dl-elf.c b/ldso/ldso/dl-elf.c
+index 2b2d429..6d35bf2 100644
+--- a/ldso/ldso/dl-elf.c
++++ b/ldso/ldso/dl-elf.c
+@@ -132,7 +132,7 @@ _dl_protect_relro (struct elf_resolve *l)
+ /* This function's behavior must exactly match that
+ * in uClibc/ldso/util/ldd.c */
+ static struct elf_resolve *
+-search_for_named_library(const char *name, int secure, const char *path_list,
++search_for_named_library(const char *name, int resolve_flags, const char *path_list,
+ struct dyn_elf **rpnt, const char *origin)
+ {
+ char *mylibname;
+@@ -162,7 +162,7 @@ search_for_named_library(const char *name, int secure, const char *path_list,
+
+ if (plen >= 7 && _dl_memcmp(p, "$ORIGIN", 7) == 0) {
+ int olen;
+- if (secure && plen != 7)
++ if ((resolve_flags & DL_RESOLVE_SECURE) && plen != 7)
+ continue;
+ if (origin == NULL)
+ continue;
+@@ -182,7 +182,7 @@ search_for_named_library(const char *name, int secure, const char *path_list,
+ _dl_strcat(mylibname, "/");
+ _dl_strcat(mylibname, name);
+
+- tpnt = _dl_load_elf_shared_library(secure, rpnt, mylibname);
++ tpnt = _dl_load_elf_shared_library(resolve_flags, rpnt, mylibname);
+ if (tpnt != NULL)
+ return tpnt;
+ }
+@@ -194,7 +194,7 @@ search_for_named_library(const char *name, int secure, const char *path_list,
+ unsigned long _dl_error_number;
+ unsigned long _dl_internal_error_number;
+
+-struct elf_resolve *_dl_load_shared_library(int secure, struct dyn_elf **rpnt,
++struct elf_resolve *_dl_load_shared_library(int resolve_flags, struct dyn_elf **rpnt,
+ struct elf_resolve *tpnt, char *full_libname, int attribute_unused trace_loaded_objects)
+ {
+ char *pnt;
+@@ -223,7 +223,7 @@ struct elf_resolve *_dl_load_shared_library(int secure, struct dyn_elf **rpnt,
+
+ if (libname != full_libname) {
+ _dl_if_debug_dprint("\ttrying file='%s'\n", full_libname);
+- tpnt1 = _dl_load_elf_shared_library(secure, rpnt, full_libname);
++ tpnt1 = _dl_load_elf_shared_library(resolve_flags, rpnt, full_libname);
+ if (tpnt1) {
+ return tpnt1;
+ }
+@@ -238,7 +238,7 @@ struct elf_resolve *_dl_load_shared_library(int secure, struct dyn_elf **rpnt,
+ if (pnt) {
+ pnt += (unsigned long) tpnt->dynamic_info[DT_STRTAB];
+ _dl_if_debug_dprint("\tsearching RPATH='%s'\n", pnt);
+- if ((tpnt1 = search_for_named_library(libname, secure, pnt, rpnt,
++ if ((tpnt1 = search_for_named_library(libname, resolve_flags, pnt, rpnt,
+ tpnt->libname)) != NULL)
+ return tpnt1;
+ }
+@@ -247,7 +247,7 @@ struct elf_resolve *_dl_load_shared_library(int secure, struct dyn_elf **rpnt,
+ /* Check in LD_{ELF_}LIBRARY_PATH, if specified and allowed */
+ if (_dl_library_path) {
+ _dl_if_debug_dprint("\tsearching LD_LIBRARY_PATH='%s'\n", _dl_library_path);
+- if ((tpnt1 = search_for_named_library(libname, secure, _dl_library_path, rpnt, NULL)) != NULL)
++ if ((tpnt1 = search_for_named_library(libname, resolve_flags, _dl_library_path, rpnt, NULL)) != NULL)
+ {
+ return tpnt1;
+ }
+@@ -261,7 +261,7 @@ struct elf_resolve *_dl_load_shared_library(int secure, struct dyn_elf **rpnt,
+ if (pnt) {
+ pnt += (unsigned long) tpnt->dynamic_info[DT_STRTAB];
+ _dl_if_debug_dprint("\tsearching RUNPATH='%s'\n", pnt);
+- if ((tpnt1 = search_for_named_library(libname, secure, pnt, rpnt, NULL)) != NULL)
++ if ((tpnt1 = search_for_named_library(libname, resolve_flags, pnt, rpnt, NULL)) != NULL)
+ return tpnt1;
+ }
+ #endif
+@@ -284,7 +284,7 @@ struct elf_resolve *_dl_load_shared_library(int secure, struct dyn_elf **rpnt,
+ || libent[i].flags == LIB_ELF_LIBC0
+ || libent[i].flags == LIB_ELF_LIBC5)
+ && _dl_strcmp(libname, strs + libent[i].sooffset) == 0
+- && (tpnt1 = _dl_load_elf_shared_library(secure, rpnt, strs + libent[i].liboffset))
++ && (tpnt1 = _dl_load_elf_shared_library(resolve_flags, rpnt, strs + libent[i].liboffset))
+ ) {
+ return tpnt1;
+ }
+@@ -295,14 +295,14 @@ struct elf_resolve *_dl_load_shared_library(int secure, struct dyn_elf **rpnt,
+ /* Look for libraries wherever the shared library loader
+ * was installed */
+ _dl_if_debug_dprint("\tsearching ldso dir='%s'\n", _dl_ldsopath);
+- tpnt1 = search_for_named_library(libname, secure, _dl_ldsopath, rpnt, NULL);
++ tpnt1 = search_for_named_library(libname, resolve_flags, _dl_ldsopath, rpnt, NULL);
+ if (tpnt1 != NULL)
+ return tpnt1;
+
+ /* Lastly, search the standard list of paths for the library.
+ This list must exactly match the list in uClibc/ldso/util/ldd.c */
+ _dl_if_debug_dprint("\tsearching full lib path list\n");
+- tpnt1 = search_for_named_library(libname, secure,
++ tpnt1 = search_for_named_library(libname, resolve_flags,
+ UCLIBC_RUNTIME_PREFIX "lib:"
+ UCLIBC_RUNTIME_PREFIX "usr/lib"
+ #ifndef __LDSO_CACHE_SUPPORT__
+@@ -329,7 +329,7 @@ goof:
+ * are required.
+ */
+
+-struct elf_resolve *_dl_load_elf_shared_library(int secure,
++struct elf_resolve *_dl_load_elf_shared_library(int resolve_flags,
+ struct dyn_elf **rpnt, char *libname)
+ {
+ ElfW(Ehdr) *epnt;
+@@ -368,7 +368,7 @@ struct elf_resolve *_dl_load_elf_shared_library(int secure,
+ }
+ /* If we are in secure mode (i.e. a setu/gid binary using LD_PRELOAD),
+ we don't load the library if it isn't setuid. */
+- if (secure) {
++ if (resolve_flags & DL_RESOLVE_SECURE) {
+ if (!(st.st_mode & S_ISUID)) {
+ _dl_close(infile);
+ return NULL;
+@@ -384,6 +384,10 @@ struct elf_resolve *_dl_load_elf_shared_library(int secure,
+ return tpnt;
+ }
+ }
++ if (resolve_flags & DL_RESOLVE_NOLOAD) {
++ _dl_close(infile);
++ return NULL;
++ }
+ header = _dl_mmap((void *) 0, _dl_pagesize, PROT_READ | PROT_WRITE,
+ MAP_PRIVATE | MAP_ANONYMOUS | MAP_UNINITIALIZE, -1, 0);
+ if (_dl_mmap_check_error(header)) {
+diff --git a/ldso/ldso/ldso.c b/ldso/ldso/ldso.c
+index 9423670..b71af34 100644
+--- a/ldso/ldso/ldso.c
++++ b/ldso/ldso/ldso.c
+@@ -646,7 +646,9 @@ void _dl_get_ready_to_run(struct elf_resolve *tpnt, DL_LOADADDR_TYPE load_addr,
+ if (!_dl_secure || _dl_strchr(str, '/') == NULL) {
+ _dl_if_debug_dprint("\tfile='%s'; needed by '%s'\n", str, _dl_progname);
+
+- tpnt1 = _dl_load_shared_library(_dl_secure, &rpnt, NULL, str, trace_loaded_objects);
++ tpnt1 = _dl_load_shared_library(
++ _dl_secure ? DL_RESOLVE_SECURE : 0,
++ &rpnt, NULL, str, trace_loaded_objects);
+ if (!tpnt1) {
+ #ifdef __LDSO_LDD_SUPPORT__
+ if (trace_loaded_objects)
+diff --git a/ldso/libdl/libdl.c b/ldso/libdl/libdl.c
+index 68cd579..edf38d2 100644
+--- a/ldso/libdl/libdl.c
++++ b/ldso/libdl/libdl.c
+@@ -288,7 +288,7 @@ void *dlopen(const char *libname, int flag)
+ #endif
+
+ /* A bit of sanity checking... */
+- if (!(flag & (RTLD_LAZY|RTLD_NOW))) {
++ if (!(flag & (RTLD_LAZY|RTLD_NOW|RTLD_NOLOAD))) {
+ _dl_error_number = LD_BAD_HANDLE;
+ return NULL;
+ }
+@@ -358,8 +358,9 @@ void *dlopen(const char *libname, int flag)
+ /* Try to load the specified library */
+ _dl_if_debug_print("Trying to dlopen '%s', RTLD_GLOBAL:%d RTLD_NOW:%d\n",
+ (char*)libname, (flag & RTLD_GLOBAL ? 1:0), (now_flag & RTLD_NOW ? 1:0));
+- tpnt = _dl_load_shared_library(0, &rpnt, tfrom, (char*)libname, 0);
+
++ tpnt = _dl_load_shared_library((flag & RTLD_NOLOAD) ? DL_RESOLVE_NOLOAD : 0,
++ &rpnt, tfrom, (char*)libname, 0);
+ if (tpnt == NULL) {
+ _dl_unmap_cache();
+ return NULL;
+diff --git a/libc/sysdeps/linux/common/bits/dlfcn.h b/libc/sysdeps/linux/common/bits/dlfcn.h
+index 4bfbbff..47b42ad 100644
+--- a/libc/sysdeps/linux/common/bits/dlfcn.h
++++ b/libc/sysdeps/linux/common/bits/dlfcn.h
+@@ -24,9 +24,9 @@
+ /* The MODE argument to `dlopen' contains one of the following: */
+ #define RTLD_LAZY 0x00001 /* Lazy function call binding. */
+ #define RTLD_NOW 0x00002 /* Immediate function call binding. */
+-#if 0 /* uClibc doesnt support these */
+-#define RTLD_BINDING_MASK 0x3 /* Mask of binding time value. */
++#define RTLD_BINDING_MASK 0x3 /* Mask of binding time value. */
+ #define RTLD_NOLOAD 0x00004 /* Do not load the object. */
++#if 0 /* uClibc doesnt support these */
+ #define RTLD_DEEPBIND 0x00008 /* Use deep binding. */
+ #endif
+
+--
+1.7.1
+
diff --git a/main/libc0.9.32/APKBUILD b/main/libc0.9.32/APKBUILD
index 2593caa31b..c63ff2c931 100644
--- a/main/libc0.9.32/APKBUILD
+++ b/main/libc0.9.32/APKBUILD
@@ -2,9 +2,9 @@
_abiver=0.9.32
pkgname=libc$_abiver
_gitver=
-pkgver=0.9.32_rc2
+pkgver=0.9.32_rc3
_ver=${pkgver/_/-}
-pkgrel=3
+pkgrel=0
pkgdesc="C library for developing embedded Linux systems"
url=http://uclibc.org
license="LGPL-2"
@@ -20,10 +20,10 @@ _snapurl="http://git.uclibc.org/uClibc/snapshot/master.tar.bz2"
_snapfile="$pkgname-$pkgver.tar.bz2"
source="http://uclibc.org/downloads/uClibc-${_ver}.tar.bz2
compat-stack-guard.patch
- config-has-fortify.patch
- pthread.patch
0001-libm-x86_64-implement-fesetround.patch
- arm-nptl-tls.patch
+ 0001-ldso-limited-support-for-ORIGIN-in-rpath.patch
+ 0002-stdlib-fix-arc4random-return-type-to-u_int32_t.patch
+ 0003-ldso-support-RTLD_NOLOAD.patch
uclibcconfig.x86
uclibcconfig.x86_64
uclibcconfig.i486
@@ -118,15 +118,15 @@ libthread_db() {
mv "$pkgdir"/lib/libthread_db* "$subpkgdir"/lib/
}
-md5sums="c8d2cd2c4dbcf5218b6db843cf66ac0f uClibc-0.9.32-rc2.tar.bz2
-4d408f72142ce55a0754948cc9cfe447 compat-stack-guard.patch
-fb349592e75c25aa03461740a7929ee5 config-has-fortify.patch
-c92ab246b4f92487c98938a297208829 pthread.patch
+md5sums="e7f420aa2fb28e7021d02c043acba71b uClibc-0.9.32-rc3.tar.bz2
+a9bfb77ea7dc5fb9abf4d4b19201c614 compat-stack-guard.patch
e0c901502602f7e9e002d910d0f32ab9 0001-libm-x86_64-implement-fesetround.patch
-2b4e27207b15e2d4b3e9b853513634f6 arm-nptl-tls.patch
-145aaeb1833159397cfac9902e3877ab uclibcconfig.x86
-cb1bcf2ff83029b6943d4799d926932b uclibcconfig.x86_64
-145aaeb1833159397cfac9902e3877ab uclibcconfig.i486
-e46de2eb20803d93ff08e205b8ed228a uclibcconfig.arm
-2c32eadd57ac4b39a93683f6a07bf901 uclibcconfig.powerpc
+bc164e262c5feab55c800780704fa71c 0001-ldso-limited-support-for-ORIGIN-in-rpath.patch
+b4fb68ad3d0e8331b1b40c30eb21dfdc 0002-stdlib-fix-arc4random-return-type-to-u_int32_t.patch
+6147efd2eee5af5e734896823c2d1a3d 0003-ldso-support-RTLD_NOLOAD.patch
+a06b654d73b8a8726af6b276c4e36fbf uclibcconfig.x86
+fcd976cd03baceb3c3795d92aa186868 uclibcconfig.x86_64
+a06b654d73b8a8726af6b276c4e36fbf uclibcconfig.i486
+2c1e143152b941b5a32319cb318ae2b8 uclibcconfig.arm
+19686636eee494ac609b04b7aae42391 uclibcconfig.powerpc
7bf1af84106de9e05160ed6d4853c54f sha512-crypt.patch"
diff --git a/main/libc0.9.32/arm-nptl-tls.patch b/main/libc0.9.32/arm-nptl-tls.patch
deleted file mode 100644
index 44a038624f..0000000000
--- a/main/libc0.9.32/arm-nptl-tls.patch
+++ /dev/null
@@ -1,69 +0,0 @@
-From 565b8d14a1dc2ce1a9c4110232e1abf88f0572ed Mon Sep 17 00:00:00 2001
-From: William Pitcock <nenolod@dereferenced.org>
-Date: Fri, 14 Jan 2011 18:17:24 -0600
-Subject: [PATCH] nptl: fix TLS support on arm
-
-Signed-off-by: William Pitcock <nenolod@dereferenced.org>
----
- libpthread/nptl/sysdeps/arm/Makefile.arch | 2 +
- libpthread/nptl/sysdeps/arm/libc-tls.c | 38 +++++++++++++++++++++++++++++
- 2 files changed, 40 insertions(+), 0 deletions(-)
- create mode 100644 libpthread/nptl/sysdeps/arm/libc-tls.c
-
-diff --git a/libpthread/nptl/sysdeps/arm/Makefile.arch b/libpthread/nptl/sysdeps/arm/Makefile.arch
-index a8bc1aa..d463253 100644
---- a/libpthread/nptl/sysdeps/arm/Makefile.arch
-+++ b/libpthread/nptl/sysdeps/arm/Makefile.arch
-@@ -15,3 +15,5 @@ ASFLAGS-pthread_spin_lock.S = -DNOT_IN_libc -DIS_IN_libpthread
- ASFLAGS-pthread_spin_trylock.S = -DNOT_IN_libc -DIS_IN_libpthread
- ASFLAGS-aeabi_read_tp.S = -DNOT_IN_libc=1
-
-+libc_arch_a_CSRC = libc-tls.c
-+
-diff --git a/libpthread/nptl/sysdeps/arm/libc-tls.c b/libpthread/nptl/sysdeps/arm/libc-tls.c
-new file mode 100644
-index 0000000..a9e6d4f
---- /dev/null
-+++ b/libpthread/nptl/sysdeps/arm/libc-tls.c
-@@ -0,0 +1,38 @@
-+/* Thread-local storage handling in the ELF dynamic linker. MIPS version.
-+ Copyright (C) 2005 Free Software Foundation, Inc.
-+ This file is part of the GNU C Library.
-+
-+ The GNU C Library is free software; you can redistribute it and/or
-+ modify it under the terms of the GNU Lesser General Public
-+ License as published by the Free Software Foundation; either
-+ version 2.1 of the License, or (at your option) any later version.
-+
-+ The GNU C Library is distributed in the hope that it will be useful,
-+ but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-+ Lesser General Public License for more details.
-+
-+ You should have received a copy of the GNU Lesser General Public
-+ License along with the GNU C Library; if not, write to the Free
-+ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
-+ 02111-1307 USA. */
-+
-+#include <sysdeps/generic/libc-tls.c>
-+#include <dl-tls.h>
-+
-+#if USE_TLS
-+
-+/* On ARM, linker optimizations are not required, so __tls_get_addr
-+ can be called even in statically linked binaries. In this case module
-+ must be always 1 and PT_TLS segment exist in the binary, otherwise it
-+ would not link. */
-+
-+void *
-+__tls_get_addr (tls_index *ti)
-+{
-+ dtv_t *dtv = THREAD_DTV ();
-+ return (char *) dtv[1].pointer.val + ti->ti_offset;
-+}
-+
-+#endif
-+
---
-1.7.3.5
-
diff --git a/main/libc0.9.32/compat-stack-guard.patch b/main/libc0.9.32/compat-stack-guard.patch
index 71d78bac5a..c69a9c5350 100644
--- a/main/libc0.9.32/compat-stack-guard.patch
+++ b/main/libc0.9.32/compat-stack-guard.patch
@@ -1,51 +1,55 @@
diff --git a/ldso/ldso/ldso.c b/ldso/ldso/ldso.c
-index 125cf96..bb47952 100644
+index 2857f7e..dce6fd8 100644
--- a/ldso/ldso/ldso.c
+++ b/ldso/ldso/ldso.c
-@@ -101,10 +101,10 @@ extern void _start(void);
+@@ -103,11 +103,7 @@ extern void _start(void);
#ifdef __UCLIBC_HAS_SSP__
# include <dl-osinfo.h>
- uintptr_t stack_chk_guard;
-+uintptr_t __stack_chk_guard attribute_relro;
- # ifndef THREAD_SET_STACK_GUARD
- /* Only exported for architectures that don't store the stack guard canary
- * in local thread area. */
--uintptr_t __stack_chk_guard attribute_relro;
- # ifdef __UCLIBC_HAS_SSP_COMPAT__
- strong_alias(__stack_chk_guard,__guard)
- # endif
-@@ -935,13 +935,12 @@ void _dl_get_ready_to_run(struct elf_resolve *tpnt, DL_LOADADDR_TYPE load_addr,
- #ifdef __UCLIBC_HAS_SSP__
- /* Set up the stack checker's canary. */
+ static uintptr_t stack_chk_guard;
+-# ifndef THREAD_SET_STACK_GUARD
+-/* Only exported for architectures that don't store the stack guard canary
+- * in local thread area. */
+ uintptr_t __stack_chk_guard attribute_relro;
+-# endif
+ # ifdef __UCLIBC_HAS_SSP_COMPAT__
+ uintptr_t __guard attribute_relro;
+ # endif
+@@ -953,9 +949,8 @@ void _dl_get_ready_to_run(struct elf_resolve *tpnt, DL_LOADADDR_TYPE load_addr,
stack_chk_guard = _dl_setup_stack_chk_guard ();
-+ __stack_chk_guard = stack_chk_guard;
# ifdef THREAD_SET_STACK_GUARD
THREAD_SET_STACK_GUARD (stack_chk_guard);
- # ifdef __UCLIBC_HAS_SSP_COMPAT__
- __guard = stack_chk_guard;
- # endif
-# else
- __stack_chk_guard = stack_chk_guard;
# endif
- #endif
-
++ __stack_chk_guard = stack_chk_guard;
+ # ifdef __UCLIBC_HAS_SSP_COMPAT__
+ __guard = stack_chk_guard;
+ # endif
diff --git a/libc/misc/internals/__uClibc_main.c b/libc/misc/internals/__uClibc_main.c
-index f7e45c6..b527068 100644
+index 315365a..78cd058 100644
--- a/libc/misc/internals/__uClibc_main.c
+++ b/libc/misc/internals/__uClibc_main.c
-@@ -43,13 +43,13 @@ void *__libc_stack_end = NULL;
-
+@@ -46,12 +46,7 @@ void *__libc_stack_end = NULL;
# ifdef __UCLIBC_HAS_SSP__
# include <dl-osinfo.h>
-+/* for gcc-4.1 non-TLS */
-+uintptr_t __stack_chk_guard attribute_relro;
- # ifndef THREAD_SET_STACK_GUARD
- /* Only exported for architectures that don't store the stack guard canary
- * in thread local area. */
- # include <stdint.h>
- uintptr_t stack_chk_guard;
+ static uintptr_t stack_chk_guard;
+-# ifndef THREAD_SET_STACK_GUARD
+-/* Only exported for architectures that don't store the stack guard canary
+- * in thread local area. */
-/* for gcc-4.1 non-TLS */
--uintptr_t __stack_chk_guard attribute_relro;
+ uintptr_t __stack_chk_guard attribute_relro;
+-# endif
/* for gcc-3.x + Etoh ssp */
- # ifdef __UCLIBC_HAS_SSP_COMPAT__
- # ifdef __HAVE_SHARED__
+ # ifdef __UCLIBC_HAS_SSP_COMPAT__
+ uintptr_t __guard attribute_relro;
+@@ -247,9 +242,8 @@ void __uClibc_init(void)
+ stack_chk_guard = _dl_setup_stack_chk_guard();
+ # ifdef THREAD_SET_STACK_GUARD
+ THREAD_SET_STACK_GUARD (stack_chk_guard);
+-# else
+- __stack_chk_guard = stack_chk_guard;
+ # endif
++ __stack_chk_guard = stack_chk_guard;
+ # ifdef __UCLIBC_HAS_SSP_COMPAT__
+ __guard = stack_chk_guard;
+ # endif
diff --git a/main/libc0.9.32/config-has-fortify.patch b/main/libc0.9.32/config-has-fortify.patch
deleted file mode 100644
index 01e26e7e12..0000000000
--- a/main/libc0.9.32/config-has-fortify.patch
+++ /dev/null
@@ -1,125 +0,0 @@
-From 82098ab9b853c33ee8ade61c9510b295cc696de1 Mon Sep 17 00:00:00 2001
-From: Peter S. Mazinger <ps.m@gmx.net>
-Date: Wed, 09 Mar 2011 08:23:48 +0000
-Subject: guard *_chk() related stuff with UCLIBC_HAS_FORTIFY
-
-Guard x86_64 memset_chk/memcpy_chk be guarded by UCLIBC_HAS_FORTIFY.
-Compile ssp.c if one of SSP/FORTIFY is defined.
-Guard __chk_fail() with UCLIBC_HAS_FORTIFY and move its prototype to libc-internal.h.
-Disable _FORTIFY_SOURCE if UCLIBC_HAS_FORTIFY is not set.
-
-The config option itself is omitted on purpose,
-headers need to be reviewed and generic *_chk() functions need to be first provided.
-
-Signed-off-by: Peter S. Mazinger <ps.m@gmx.net>
----
-diff --git a/include/features.h b/include/features.h
-index f4d70d7..41e83a9 100644
---- a/include/features.h
-+++ b/include/features.h
-@@ -198,9 +198,12 @@
- # define __OPTIMIZE_SIZE__ 1
-
- /* disable unsupported features */
--# undef _FORTIFY_SOURCE
- # undef __LDBL_COMPAT
-
-+# ifndef __UCLIBC_HAS_FORTIFY__
-+# undef _FORTIFY_SOURCE
-+# endif
-+
- # ifndef __UCLIBC_HAS_THREADS__
- # if defined _REENTRANT || defined _THREAD_SAFE
- # warning requested reentrant code, but thread support was disabled
-diff --git a/include/libc-internal.h b/include/libc-internal.h
-index 443b1fc..3ac0b05 100644
---- a/include/libc-internal.h
-+++ b/include/libc-internal.h
-@@ -65,6 +65,11 @@ libc_hidden_proto(__glibc_strerror_r)
- /* internal access to program name */
- extern const char *__uclibc_progname attribute_hidden;
-
-+# ifdef __UCLIBC_HAS_FORTIFY__
-+extern void __chk_fail(void) attribute_noreturn;
-+libc_hidden_proto(__chk_fail)
-+# endif
-+
- # endif /* IS_IN_libc */
-
- #endif /* __ASSEMBLER__ */
-diff --git a/libc/string/x86_64/memcpy.S b/libc/string/x86_64/memcpy.S
-index 6d941e0..9c8169b 100644
---- a/libc/string/x86_64/memcpy.S
-+++ b/libc/string/x86_64/memcpy.S
-@@ -26,12 +26,10 @@
- #define MEMPCPY_P (defined memcpy)
-
- .text
--#if defined __PIC__ && !defined NOT_IN_libc
-+#if defined __PIC__ && !defined NOT_IN_libc && defined __UCLIBC_HAS_FORTIFY__
- ENTRY (__memcpy_chk)
- cmpq %rdx, %rcx
--#if defined __UCLIBC_HAS_SSP__
- jb HIDDEN_JUMPTARGET (__chk_fail)
--#endif
- END (__memcpy_chk)
- #endif
- ENTRY (BP_SYM (memcpy))
-diff --git a/libc/string/x86_64/memset.S b/libc/string/x86_64/memset.S
-index df265f3..6b758ce 100644
---- a/libc/string/x86_64/memset.S
-+++ b/libc/string/x86_64/memset.S
-@@ -29,12 +29,10 @@
- #define LARGE $120000
-
- .text
--#if defined __PIC__ && !defined NOT_IN_libc
-+#if defined __PIC__ && !defined NOT_IN_libc && defined __UCLIBC_HAS_FORTIFY__
- ENTRY (__memset_chk)
- cmpq %rdx, %rcx
--#if defined __UCLIBC_HAS_SSP__
- jb HIDDEN_JUMPTARGET (__chk_fail)
--#endif
- END (__memset_chk)
- #endif
- ENTRY (memset)
-@@ -144,6 +142,6 @@ END (memset)
- libc_hidden_def(memset)
- #endif
-
--#if !BZERO_P && defined __PIC__ && !defined NOT_IN_libc
-+#if !BZERO_P && defined __PIC__ && !defined NOT_IN_libc && defined __UCLIBC_HAS_FORTIFY__
- strong_alias (__memset_chk, __memset_zero_constant_len_parameter)
- #endif
-diff --git a/libc/sysdeps/linux/common/ssp.c b/libc/sysdeps/linux/common/ssp.c
-index d81c706..df242cc 100644
---- a/libc/sysdeps/linux/common/ssp.c
-+++ b/libc/sysdeps/linux/common/ssp.c
-@@ -87,6 +87,7 @@ void __stack_smash_handler(char func[], int damaged)
- }
- #endif
-
-+#ifdef __UCLIBC_HAS_SSP__
- void __stack_chk_fail(void) attribute_noreturn __cold;
- void __stack_chk_fail(void)
- {
-@@ -101,8 +102,9 @@ void __stack_chk_fail(void)
- while(1)
- terminate();
- }
-+#endif
-
--void __chk_fail(void) attribute_noreturn;
-+#ifdef __UCLIBC_HAS_FORTIFY__
- void __chk_fail(void)
- {
- static const char msg1[] = "buffer overflow detected: ";
-@@ -116,4 +119,6 @@ void __chk_fail(void)
- while(1)
- terminate();
- }
-+libc_hidden_def(__chk_fail)
-+#endif
-
---
-cgit v0.8.2.1
diff --git a/main/libc0.9.32/pthread.patch b/main/libc0.9.32/pthread.patch
deleted file mode 100644
index 47f99b217d..0000000000
--- a/main/libc0.9.32/pthread.patch
+++ /dev/null
@@ -1,81 +0,0 @@
---- uClibc-0.9.32-rc2.orig/libpthread/nptl/sysdeps/unix/sysv/linux/x86_64/lowlevellock.S
-+++ uClibc-0.9.32-rc2/libpthread/nptl/sysdeps/unix/sysv/linux/x86_64/lowlevellock.S
-@@ -163,7 +163,7 @@
- cfi_startproc
- # ifndef __ASSUME_FUTEX_CLOCK_REALTIME
- # ifdef __PIC__
-- cmpl $0, __have_futex_clock_realtime(%rip)
-+ cmpl $0, __have_futex_clock_realtime@GOTOFF(%rip)
- # else
- cmpl $0, __have_futex_clock_realtime
- # endif
---- uClibc-0.9.32-rc2.orig/libpthread/nptl/sysdeps/unix/sysv/linux/x86_64/lowlevelrobustlock.S
-+++ uClibc-0.9.32-rc2/libpthread/nptl/sysdeps/unix/sysv/linux/x86_64/lowlevelrobustlock.S
-@@ -118,7 +118,7 @@
- cfi_startproc
- # ifndef __ASSUME_FUTEX_CLOCK_REALTIME
- # ifdef __PIC__
-- cmpl $0, __have_futex_clock_realtime(%rip)
-+ cmpl $0, __have_futex_clock_realtime@GOTOFF(%rip)
- # else
- cmpl $0, __have_futex_clock_realtime
- # endif
---- uClibc-0.9.32-rc2.orig/libpthread/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_timedwait.S
-+++ uClibc-0.9.32-rc2/libpthread/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_timedwait.S
-@@ -98,7 +98,7 @@
- 22:
- #ifndef __ASSUME_FUTEX_CLOCK_REALTIME
- # ifdef __PIC__
-- cmpl $0, __have_futex_clock_realtime(%rip)
-+ cmpl $0, __have_futex_clock_realtime@GOTOFF(%rip)
- # else
- cmpl $0, __have_futex_clock_realtime
- # endif
-@@ -437,14 +437,6 @@
- /* Only clocks 0 and 1 are allowed so far. Both are handled in the
- kernel. */
- leaq 32(%rsp), %rsi
--# ifdef SHARED
-- movq __vdso_clock_gettime@GOTPCREL(%rip), %rax
-- movq (%rax), %rax
-- PTR_DEMANGLE (%rax)
-- jz 26f
-- call *%rax
-- jmp 27f
--# endif
- 26: movl $__NR_clock_gettime, %eax
- syscall
- 27:
---- uClibc-0.9.32-rc2.orig/libpthread/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_timedrdlock.S
-+++ uClibc-0.9.32-rc2/libpthread/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_timedrdlock.S
-@@ -96,7 +96,7 @@
- 11:
- #ifndef __ASSUME_FUTEX_CLOCK_REALTIME
- # ifdef __PIC__
-- cmpl $0, __have_futex_clock_realtime(%rip)
-+ cmpl $0, __have_futex_clock_realtime@GOTOFF(%rip)
- # else
- cmpl $0, __have_futex_clock_realtime
- # endif
---- uClibc-0.9.32-rc2.orig/libpthread/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_timedwrlock.S
-+++ uClibc-0.9.32-rc2/libpthread/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_timedwrlock.S
-@@ -93,7 +93,7 @@
- 11:
- #ifndef __ASSUME_FUTEX_CLOCK_REALTIME
- # ifdef __PIC__
-- cmpl $0, __have_futex_clock_realtime(%rip)
-+ cmpl $0, __have_futex_clock_realtime@GOTOFF(%rip)
- # else
- cmpl $0, __have_futex_clock_realtime
- # endif
---- uClibc-0.9.32-rc2.orig/libpthread/nptl/sysdeps/unix/sysv/linux/x86_64/sem_timedwait.S
-+++ uClibc-0.9.32-rc2/libpthread/nptl/sysdeps/unix/sysv/linux/x86_64/sem_timedwait.S
-@@ -61,7 +61,7 @@
-
- #ifndef __ASSUME_FUTEX_CLOCK_REALTIME
- # ifdef __PIC__
-- cmpl $0, __have_futex_clock_realtime(%rip)
-+ cmpl $0, __have_futex_clock_realtime@GOTOFF(%rip)
- # else
- cmpl $0, __have_futex_clock_realtime
- # endif
diff --git a/main/libc0.9.32/uclibcconfig.arm b/main/libc0.9.32/uclibcconfig.arm
index 6dda6e9dee..fa8a214194 100644
--- a/main/libc0.9.32/uclibcconfig.arm
+++ b/main/libc0.9.32/uclibcconfig.arm
@@ -1,7 +1,7 @@
#
# Automatically generated make config: don't edit
-# Version: 0.9.32-rc1
-# Fri Jan 14 18:23:09 2011
+# Version: 0.9.32-rc3
+# Fri Mar 18 13:13:20 2011
#
# TARGET_alpha is not set
TARGET_arm=y
@@ -28,6 +28,7 @@ TARGET_arm=y
# TARGET_vax is not set
# TARGET_x86_64 is not set
# TARGET_xtensa is not set
+# TARGET_c6x is not set
#
# Target Architecture Features and Options
@@ -110,6 +111,7 @@ COMPAT_ATEXIT=y
UCLIBC_SUSV3_LEGACY=y
UCLIBC_SUSV3_LEGACY_MACROS=y
UCLIBC_SUSV4_LEGACY=y
+# UCLIBC_STRICT_HEADERS is not set
# UCLIBC_HAS_STUBS is not set
UCLIBC_HAS_SHADOW=y
UCLIBC_HAS_PROGRAM_INVOCATION_NAME=y
diff --git a/main/libc0.9.32/uclibcconfig.powerpc b/main/libc0.9.32/uclibcconfig.powerpc
index 370078a446..70b5089e43 100644
--- a/main/libc0.9.32/uclibcconfig.powerpc
+++ b/main/libc0.9.32/uclibcconfig.powerpc
@@ -1,7 +1,7 @@
#
# Automatically generated make config: don't edit
-# Version: 0.9.32-rc2
-# Wed Feb 9 01:27:16 2011
+# Version: 0.9.32-rc3
+# Fri Mar 18 13:12:53 2011
#
# TARGET_alpha is not set
# TARGET_arm is not set
@@ -28,32 +28,13 @@ TARGET_powerpc=y
# TARGET_vax is not set
# TARGET_x86_64 is not set
# TARGET_xtensa is not set
+# TARGET_c6x is not set
#
# Target Architecture Features and Options
#
TARGET_ARCH="powerpc"
FORCE_OPTIONS_FOR_ARCH=y
-# CONFIG_ARM_OABI is not set
-# CONFIG_ARM_EABI is not set
-# CONFIG_GENERIC_ARM is not set
-# CONFIG_ARM610 is not set
-# CONFIG_ARM710 is not set
-# CONFIG_ARM7TDMI is not set
-# CONFIG_ARM720T is not set
-# CONFIG_ARM920T is not set
-# CONFIG_ARM922T is not set
-# CONFIG_ARM926T is not set
-# CONFIG_ARM10T is not set
-# CONFIG_ARM1136JF_S is not set
-# CONFIG_ARM1176JZ_S is not set
-# CONFIG_ARM1176JZF_S is not set
-# CONFIG_ARM_CORTEX_M3 is not set
-# CONFIG_ARM_CORTEX_M1 is not set
-# CONFIG_ARM_SA110 is not set
-# CONFIG_ARM_SA1100 is not set
-# CONFIG_ARM_XSCALE is not set
-# CONFIG_ARM_IWMMXT is not set
CONFIG_CLASSIC=y
# CONFIG_E500 is not set
TARGET_SUBARCH="classic"
@@ -62,8 +43,6 @@ TARGET_SUBARCH="classic"
# Using ELF file format
#
ARCH_BIG_ENDIAN=y
-# ARCH_WANTS_BIG_ENDIAN is not set
-# ARCH_WANTS_LITTLE_ENDIAN is not set
#
# Using Big Endian
@@ -116,6 +95,7 @@ COMPAT_ATEXIT=y
UCLIBC_SUSV3_LEGACY=y
UCLIBC_SUSV3_LEGACY_MACROS=y
UCLIBC_SUSV4_LEGACY=y
+# UCLIBC_STRICT_HEADERS is not set
# UCLIBC_HAS_STUBS is not set
UCLIBC_HAS_SHADOW=y
UCLIBC_HAS_PROGRAM_INVOCATION_NAME=y
diff --git a/main/libc0.9.32/uclibcconfig.x86 b/main/libc0.9.32/uclibcconfig.x86
index b1d11065c6..2b01b203d9 100644
--- a/main/libc0.9.32/uclibcconfig.x86
+++ b/main/libc0.9.32/uclibcconfig.x86
@@ -1,7 +1,7 @@
#
# Automatically generated make config: don't edit
-# Version: 0.9.32-git
-# Sat Oct 23 09:34:52 2010
+# Version: 0.9.32-rc3
+# Fri Mar 18 10:57:30 2011
#
# TARGET_alpha is not set
# TARGET_arm is not set
@@ -28,6 +28,7 @@ TARGET_i386=y
# TARGET_vax is not set
# TARGET_x86_64 is not set
# TARGET_xtensa is not set
+# TARGET_c6x is not set
#
# Target Architecture Features and Options
@@ -109,6 +110,7 @@ COMPAT_ATEXIT=y
UCLIBC_SUSV3_LEGACY=y
UCLIBC_SUSV3_LEGACY_MACROS=y
UCLIBC_SUSV4_LEGACY=y
+# UCLIBC_STRICT_HEADERS is not set
# UCLIBC_HAS_STUBS is not set
UCLIBC_HAS_SHADOW=y
UCLIBC_HAS_PROGRAM_INVOCATION_NAME=y
diff --git a/main/libc0.9.32/uclibcconfig.x86_64 b/main/libc0.9.32/uclibcconfig.x86_64
index a07766c808..817718f380 100644
--- a/main/libc0.9.32/uclibcconfig.x86_64
+++ b/main/libc0.9.32/uclibcconfig.x86_64
@@ -1,7 +1,7 @@
#
# Automatically generated make config: don't edit
-# Version: 0.9.32-git
-# Mon Nov 29 12:34:17 2010
+# Version: 0.9.32-rc3
+# Fri Mar 18 13:10:43 2011
#
# TARGET_alpha is not set
# TARGET_arm is not set
@@ -28,6 +28,7 @@
# TARGET_vax is not set
TARGET_x86_64=y
# TARGET_xtensa is not set
+# TARGET_c6x is not set
#
# Target Architecture Features and Options
@@ -92,6 +93,7 @@ COMPAT_ATEXIT=y
UCLIBC_SUSV3_LEGACY=y
UCLIBC_SUSV3_LEGACY_MACROS=y
UCLIBC_SUSV4_LEGACY=y
+# UCLIBC_STRICT_HEADERS is not set
# UCLIBC_HAS_STUBS is not set
UCLIBC_HAS_SHADOW=y
UCLIBC_HAS_PROGRAM_INVOCATION_NAME=y