diff options
Diffstat (limited to 'toolchain/uClibc/patches/0.9.32.1')
8 files changed, 726 insertions, 0 deletions
diff --git a/toolchain/uClibc/patches/0.9.32.1/avr32_atomic_fix.patch b/toolchain/uClibc/patches/0.9.32.1/avr32_atomic_fix.patch new file mode 100644 index 000000000..5e5460a3d --- /dev/null +++ b/toolchain/uClibc/patches/0.9.32.1/avr32_atomic_fix.patch @@ -0,0 +1,10 @@ +--- a/libc/sysdeps/linux/avr32/bits/atomic.h ++++ b/libc/sysdeps/linux/avr32/bits/atomic.h +@@ -28,6 +28,7 @@ typedef uintmax_t uatomic_max_t; + + #define __arch_compare_and_exchange_val_32_acq(mem, newval, oldval) \ + ({ \ ++ __uint32_t __result; \ + __typeof__(*(mem)) __prev; \ + __asm__ __volatile__( \ + "/* __arch_compare_and_exchange_val_32_acq */\n" \ diff --git a/toolchain/uClibc/patches/0.9.32.1/epoll.patch b/toolchain/uClibc/patches/0.9.32.1/epoll.patch new file mode 100644 index 000000000..4d9cc38cd --- /dev/null +++ b/toolchain/uClibc/patches/0.9.32.1/epoll.patch @@ -0,0 +1,19 @@ +diff -Nur uClibc-0.9.32.orig/libc/sysdeps/linux/common/epoll.c uClibc-0.9.32/libc/sysdeps/linux/common/epoll.c +--- uClibc-0.9.32.orig/libc/sysdeps/linux/common/epoll.c 2011-06-08 21:35:20.000000000 +0200 ++++ uClibc-0.9.32/libc/sysdeps/linux/common/epoll.c 2011-06-15 14:18:06.798202250 +0200 +@@ -67,12 +67,13 @@ + int __libc_epoll_pwait(int epfd, struct epoll_event *events, int maxevents, + int timeout, const sigset_t *set) + { ++ int nsig = _NSIG / 8; + if (SINGLE_THREAD_P) +- return INLINE_SYSCALL(epoll_pwait, 6, epfd, events, maxevents, timeout, set, _NSIG / 8); ++ return INLINE_SYSCALL(epoll_pwait, 6, epfd, events, maxevents, timeout, set, nsig); + # ifdef __UCLIBC_HAS_THREADS_NATIVE__ + else { + int oldtype = LIBC_CANCEL_ASYNC (); +- int result = INLINE_SYSCALL(epoll_pwait, 6, epfd, events, maxevents, timeout, set, _NSIG / 8); ++ int result = INLINE_SYSCALL(epoll_pwait, 6, epfd, events, maxevents, timeout, set, nsig); + LIBC_CANCEL_RESET (oldtype); + return result; + } diff --git a/toolchain/uClibc/patches/0.9.32.1/gnutar-problem.patch b/toolchain/uClibc/patches/0.9.32.1/gnutar-problem.patch new file mode 100644 index 000000000..a3d71131a --- /dev/null +++ b/toolchain/uClibc/patches/0.9.32.1/gnutar-problem.patch @@ -0,0 +1,18 @@ +diff -Nur uClibc-0.9.32-rc3.orig/Makefile.in uClibc-0.9.32-rc3/Makefile.in +--- uClibc-0.9.32-rc3.orig/Makefile.in 2011-03-16 20:11:13.000000000 +0100 ++++ uClibc-0.9.32-rc3/Makefile.in 2011-05-20 11:16:00.000000000 +0200 +@@ -385,13 +385,13 @@ + ifeq ($(HAVE_SHARED),y) + $(INSTALL) -m 755 $(top_builddir)lib/lib*-$(VERSION).so \ + $(PREFIX)$(RUNTIME_PREFIX)$(MULTILIB_DIR) +- (cd $(top_builddir)lib && $(TAR) -cf - *.so.*) | $(TAR) -xf - -C $(PREFIX)$(RUNTIME_PREFIX)$(MULTILIB_DIR) + @if [ -x $(top_builddir)lib/$(UCLIBC_LDSO_NAME)-$(VERSION).so ] ; then \ + set -e; \ + $(SHELL_SET_X); \ + $(INSTALL) -m 755 $(top_builddir)lib/$(UCLIBC_LDSO_NAME)-$(VERSION).so \ + $(PREFIX)$(RUNTIME_PREFIX)$(MULTILIB_DIR); \ + fi ++ (cd $(top_builddir)lib && $(TAR) -cf - *.so.*) | $(TAR) -xf - -C $(PREFIX)$(RUNTIME_PREFIX)$(MULTILIB_DIR) + endif + + utils: | pregen diff --git a/toolchain/uClibc/patches/0.9.32.1/rpath-origin.patch b/toolchain/uClibc/patches/0.9.32.1/rpath-origin.patch new file mode 100644 index 000000000..c2bd2e8ab --- /dev/null +++ b/toolchain/uClibc/patches/0.9.32.1/rpath-origin.patch @@ -0,0 +1,174 @@ +diff -Nur uClibc-0.9.32.orig//ldso/ldso/dl-elf.c uClibc-0.9.32/ldso/ldso/dl-elf.c +--- uClibc-0.9.32.orig//ldso/ldso/dl-elf.c 2011-06-08 21:35:20.000000000 +0200 ++++ uClibc-0.9.32/ldso/ldso/dl-elf.c 2011-08-09 11:19:18.325314589 +0200 +@@ -133,53 +133,59 @@ + * 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; ++ 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, "."); + } +- 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; +- } +- 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 +237,7 @@ + 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 +245,7 @@ + /* 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 +259,7 @@ + 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 +293,7 @@ + /* 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 +306,7 @@ + #ifndef __LDSO_CACHE_SUPPORT__ + ":" UCLIBC_RUNTIME_PREFIX "usr/X11R6/lib" + #endif +- , rpnt); ++ , rpnt, NULL); + if (tpnt1 != NULL) + return tpnt1; + +diff -Nur uClibc-0.9.32.orig//ldso/ldso/ldso.c uClibc-0.9.32/ldso/ldso/ldso.c +--- uClibc-0.9.32.orig//ldso/ldso/ldso.c 2011-06-08 21:35:20.000000000 +0200 ++++ uClibc-0.9.32/ldso/ldso/ldso.c 2011-08-09 11:15:04.135386129 +0200 +@@ -272,6 +272,20 @@ + } + } + ++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 @@ + * 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"); diff --git a/toolchain/uClibc/patches/0.9.32.1/uClibc-0.9.32.1-unshare.patch b/toolchain/uClibc/patches/0.9.32.1/uClibc-0.9.32.1-unshare.patch new file mode 100644 index 000000000..5820e15bb --- /dev/null +++ b/toolchain/uClibc/patches/0.9.32.1/uClibc-0.9.32.1-unshare.patch @@ -0,0 +1,82 @@ +Backport of unshare() syscall. +From uClibc git 19dd090a0f68765db87990ef8eda9bf77bb29581 + +Signed-off-by: Gustavo Zacarias <gustavo@zacarias.com.ar> + +--- +diff -Nura uClibc-0.9.32.orig/libc/sysdeps/linux/common/bits/sched.h uClibc-0.9.32/libc/sysdeps/linux/common/bits/sched.h +--- uClibc-0.9.32.orig/libc/sysdeps/linux/common/bits/sched.h 2011-12-02 23:54:30.571841170 -0300 ++++ uClibc-0.9.32/libc/sysdeps/linux/common/bits/sched.h 2011-12-02 23:57:45.874205079 -0300 +@@ -58,7 +58,13 @@ + force CLONE_PTRACE on this clone. */ + # define CLONE_CHILD_SETTID 0x01000000 /* Store TID in userlevel buffer in + the child. */ +-# define CLONE_STOPPED 0x02000000 /* Start in stopped state. */ ++# define CLONE_STOPPED 0x02000000 /* Start in stopped state. */ ++# define CLONE_NEWUTS 0x04000000 /* New utsname group. */ ++# define CLONE_NEWIPC 0x08000000 /* New ipcs. */ ++# define CLONE_NEWUSER 0x10000000 /* New user namespace. */ ++# define CLONE_NEWPID 0x20000000 /* New pid namespace. */ ++# define CLONE_NEWNET 0x40000000 /* New network namespace. */ ++# define CLONE_IO 0x80000000 /* Clone I/O context. */ + #endif + + /* The official definition. */ +@@ -74,11 +80,9 @@ + extern int clone (int (*__fn) (void *__arg), void *__child_stack, + int __flags, void *__arg, ...) __THROW; + +-#if 0 + /* Unshare the specified resources. */ + extern int unshare (int __flags) __THROW; + #endif +-#endif + + __END_DECLS + +diff -Nura uClibc-0.9.32.orig/libc/sysdeps/linux/common/Makefile.in uClibc-0.9.32/libc/sysdeps/linux/common/Makefile.in +--- uClibc-0.9.32.orig/libc/sysdeps/linux/common/Makefile.in 2011-12-02 23:54:30.577841215 -0300 ++++ uClibc-0.9.32/libc/sysdeps/linux/common/Makefile.in 2011-12-02 23:56:08.801527166 -0300 +@@ -24,7 +24,8 @@ + remap_file_pages.c sched_getaffinity.c sched_setaffinity.c \ + sendfile64.c sendfile.c setfsgid.c setfsuid.c setresuid.c \ + splice.c vmsplice.c tee.c signalfd.c swapoff.c swapon.c \ +- sync_file_range.c sysctl.c sysinfo.c timerfd.c uselib.c vhangup.c ++ sync_file_range.c sysctl.c sysinfo.c timerfd.c unshare.c uselib.c \ ++ vhangup.c + # NPTL needs these internally: madvise.c + CSRC-$(findstring y,$(UCLIBC_LINUX_SPECIFIC)$(UCLIBC_HAS_THREADS_NATIVE)) += madvise.c + ifeq ($(UCLIBC_HAS_THREADS_NATIVE),y) +diff -Nura uClibc-0.9.32.orig/libc/sysdeps/linux/common/stubs.c uClibc-0.9.32/libc/sysdeps/linux/common/stubs.c +--- uClibc-0.9.32.orig/libc/sysdeps/linux/common/stubs.c 2011-12-02 23:54:30.577841215 -0300 ++++ uClibc-0.9.32/libc/sysdeps/linux/common/stubs.c 2011-12-02 23:58:18.803435042 -0300 +@@ -278,6 +278,10 @@ + make_stub(umount2) + #endif + ++#if !defined __NR_unshare && defined __UCLIBC_LINUX_SPECIFIC__ ++make_stub(unshare) ++#endif ++ + #ifndef __NR_utimensat + make_stub(futimens) + make_stub(utimensat) +diff -Nura uClibc-0.9.32.orig/libc/sysdeps/linux/common/unshare.c uClibc-0.9.32/libc/sysdeps/linux/common/unshare.c +--- uClibc-0.9.32.orig/libc/sysdeps/linux/common/unshare.c 1969-12-31 21:00:00.000000000 -0300 ++++ uClibc-0.9.32/libc/sysdeps/linux/common/unshare.c 2011-12-02 23:58:42.693601880 -0300 +@@ -0,0 +1,15 @@ ++/* vi: set sw=4 ts=4: */ ++/* ++ * unshare() for uClibc ++ * ++ * Copyright (C) 2011 Henning Heinold <heinold@inf.fu-berlin.de> ++ * ++ * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball. ++ */ ++ ++#include <sys/syscall.h> ++#include <sched.h> ++ ++#if defined __NR_unshare ++_syscall1(int, unshare, int, flags) ++#endif diff --git a/toolchain/uClibc/patches/0.9.32.1/uClibc-sigaction.patch b/toolchain/uClibc/patches/0.9.32.1/uClibc-sigaction.patch new file mode 100644 index 000000000..0077191e5 --- /dev/null +++ b/toolchain/uClibc/patches/0.9.32.1/uClibc-sigaction.patch @@ -0,0 +1,155 @@ +diff -Nur uClibc-0.9.32.1/libc/signal/sigaction.c uClibc.new/libc/signal/sigaction.c +--- uClibc-0.9.32.1/libc/signal/sigaction.c 2011-12-30 12:11:07.000000000 +0100 ++++ uClibc.new/libc/signal/sigaction.c 2012-02-17 14:49:51.000000000 +0100 +@@ -82,6 +82,11 @@ + + + #ifndef LIBC_SIGACTION ++# ifndef __UCLIBC_HAS_THREADS__ ++strong_alias(__libc_sigaction,sigaction) ++libc_hidden_def(sigaction) ++# else + weak_alias(__libc_sigaction,sigaction) + libc_hidden_weak(sigaction) ++# endif + #endif +diff -Nur uClibc-0.9.32.1/libc/sysdeps/linux/arm/sigaction.c uClibc.new/libc/sysdeps/linux/arm/sigaction.c +--- uClibc-0.9.32.1/libc/sysdeps/linux/arm/sigaction.c 2011-12-30 12:11:07.000000000 +0100 ++++ uClibc.new/libc/sysdeps/linux/arm/sigaction.c 2012-02-17 14:49:51.000000000 +0100 +@@ -96,6 +96,11 @@ + + + #ifndef LIBC_SIGACTION ++# ifndef __UCLIBC_HAS_THREADS__ ++strong_alias(__libc_sigaction,sigaction) ++libc_hidden_def(sigaction) ++# else + weak_alias(__libc_sigaction,sigaction) + libc_hidden_weak(sigaction) ++# endif + #endif +diff -Nur uClibc-0.9.32.1/libc/sysdeps/linux/avr32/sigaction.c uClibc.new/libc/sysdeps/linux/avr32/sigaction.c +--- uClibc-0.9.32.1/libc/sysdeps/linux/avr32/sigaction.c 2011-12-30 12:11:07.000000000 +0100 ++++ uClibc.new/libc/sysdeps/linux/avr32/sigaction.c 2012-02-17 14:49:51.000000000 +0100 +@@ -38,6 +38,11 @@ + } + + #ifndef LIBC_SIGACTION +-weak_alias(__libc_sigaction, sigaction) ++# ifndef __UCLIBC_HAS_THREADS__ ++strong_alias(__libc_sigaction,sigaction) ++libc_hidden_def(sigaction) ++# else ++weak_alias(__libc_sigaction,sigaction) + libc_hidden_weak(sigaction) ++# endif + #endif +diff -Nur uClibc-0.9.32.1/libc/sysdeps/linux/c6x/sigaction.c uClibc.new/libc/sysdeps/linux/c6x/sigaction.c +--- uClibc-0.9.32.1/libc/sysdeps/linux/c6x/sigaction.c 2011-12-30 12:11:07.000000000 +0100 ++++ uClibc.new/libc/sysdeps/linux/c6x/sigaction.c 2012-02-17 14:49:51.000000000 +0100 +@@ -75,10 +75,16 @@ + } + + #ifndef LIBC_SIGACTION ++# ifndef __UCLIBC_HAS_THREADS__ ++strong_alias(__libc_sigaction,sigaction) ++libc_hidden_def(sigaction) ++# else + weak_alias(__libc_sigaction,sigaction) + libc_hidden_weak(sigaction) ++# endif + #endif + ++ + /* NOTE: Please think twice before making any changes to the bits of + code below. GDB needs some intimate knowledge about it to + recognize them as signal trampolines, and make backtraces through +diff -Nur uClibc-0.9.32.1/libc/sysdeps/linux/i386/sigaction.c uClibc.new/libc/sysdeps/linux/i386/sigaction.c +--- uClibc-0.9.32.1/libc/sysdeps/linux/i386/sigaction.c 2011-12-30 12:11:07.000000000 +0100 ++++ uClibc.new/libc/sysdeps/linux/i386/sigaction.c 2012-02-17 14:49:51.000000000 +0100 +@@ -95,8 +95,13 @@ + + + #ifndef LIBC_SIGACTION ++# ifndef __UCLIBC_HAS_THREADS__ ++strong_alias(__libc_sigaction,sigaction) ++libc_hidden_def(sigaction) ++# else + weak_alias(__libc_sigaction,sigaction) + libc_hidden_weak(sigaction) ++# endif + #endif + + +diff -Nur uClibc-0.9.32.1/libc/sysdeps/linux/mips/sigaction.c uClibc.new/libc/sysdeps/linux/mips/sigaction.c +--- uClibc-0.9.32.1/libc/sysdeps/linux/mips/sigaction.c 2011-12-30 12:11:07.000000000 +0100 ++++ uClibc.new/libc/sysdeps/linux/mips/sigaction.c 2012-02-17 14:49:51.000000000 +0100 +@@ -100,8 +100,13 @@ + + + #ifndef LIBC_SIGACTION ++# ifndef __UCLIBC_HAS_THREADS__ ++strong_alias(__libc_sigaction,sigaction) ++libc_hidden_def(sigaction) ++# else + weak_alias(__libc_sigaction,sigaction) + libc_hidden_weak(sigaction) ++# endif + #endif + + +diff -Nur uClibc-0.9.32.1/libc/sysdeps/linux/sparc/sigaction.c uClibc.new/libc/sysdeps/linux/sparc/sigaction.c +--- uClibc-0.9.32.1/libc/sysdeps/linux/sparc/sigaction.c 2011-12-30 12:11:07.000000000 +0100 ++++ uClibc.new/libc/sysdeps/linux/sparc/sigaction.c 2012-02-17 14:49:51.000000000 +0100 +@@ -65,11 +65,18 @@ + return ret; + } + ++ + #ifndef LIBC_SIGACTION ++# ifndef __UCLIBC_HAS_THREADS__ ++strong_alias(__libc_sigaction,sigaction) ++libc_hidden_def(sigaction) ++# else + weak_alias(__libc_sigaction,sigaction) + libc_hidden_weak(sigaction) ++# endif + #endif + ++ + static void + __rt_sigreturn_stub(void) + { +diff -Nur uClibc-0.9.32.1/libc/sysdeps/linux/x86_64/sigaction.c uClibc.new/libc/sysdeps/linux/x86_64/sigaction.c +--- uClibc-0.9.32.1/libc/sysdeps/linux/x86_64/sigaction.c 2011-12-30 12:11:07.000000000 +0100 ++++ uClibc.new/libc/sysdeps/linux/x86_64/sigaction.c 2012-02-17 14:49:51.000000000 +0100 +@@ -99,8 +99,13 @@ + + + #ifndef LIBC_SIGACTION ++# ifndef __UCLIBC_HAS_THREADS__ ++strong_alias(__libc_sigaction,sigaction) ++libc_hidden_def(sigaction) ++# else + weak_alias(__libc_sigaction,sigaction) + libc_hidden_weak(sigaction) ++# endif + #endif + + +diff -Nur uClibc-0.9.32.1/libc/sysdeps/linux/xtensa/sigaction.c uClibc.new/libc/sysdeps/linux/xtensa/sigaction.c +--- uClibc-0.9.32.1/libc/sysdeps/linux/xtensa/sigaction.c 2011-12-30 12:11:07.000000000 +0100 ++++ uClibc.new/libc/sysdeps/linux/xtensa/sigaction.c 2012-02-17 14:49:51.000000000 +0100 +@@ -34,6 +34,11 @@ + } + + #ifndef LIBC_SIGACTION +-weak_alias(__libc_sigaction, sigaction) ++# ifndef __UCLIBC_HAS_THREADS__ ++strong_alias(__libc_sigaction,sigaction) ++libc_hidden_def(sigaction) ++# else ++weak_alias(__libc_sigaction,sigaction) + libc_hidden_weak(sigaction) ++# endif + #endif diff --git a/toolchain/uClibc/patches/0.9.32.1/uClibc-sigaction2.patch b/toolchain/uClibc/patches/0.9.32.1/uClibc-sigaction2.patch new file mode 100644 index 000000000..f33e14dde --- /dev/null +++ b/toolchain/uClibc/patches/0.9.32.1/uClibc-sigaction2.patch @@ -0,0 +1,247 @@ +diff -Nur uClibc-0.9.32.1/libc/signal/Makefile.in uClibc.new/libc/signal/Makefile.in +--- uClibc-0.9.32.1/libc/signal/Makefile.in 2011-12-30 12:11:07.000000000 +0100 ++++ uClibc.new/libc/signal/Makefile.in 2012-02-17 15:13:33.000000000 +0100 +@@ -17,7 +17,7 @@ + CSRC-$(UCLIBC_SUSV4_LEGACY) += sigintr.c + + ifeq ($(UCLIBC_HAS_THREADS_NATIVE),y) +-CSRC-y:=$(filter-out raise.c sigaction.c,$(CSRC-y)) ++CSRC-y:=$(filter-out raise.c,$(CSRC-y)) + endif + + ifneq ($(strip $(ARCH_OBJS)),) +diff -Nur uClibc-0.9.32.1/libc/sysdeps/linux/arm/Makefile.arch uClibc.new/libc/sysdeps/linux/arm/Makefile.arch +--- uClibc-0.9.32.1/libc/sysdeps/linux/arm/Makefile.arch 2011-12-30 12:11:07.000000000 +0100 ++++ uClibc.new/libc/sysdeps/linux/arm/Makefile.arch 2012-02-17 15:13:33.000000000 +0100 +@@ -5,11 +5,7 @@ + # Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball. + # + +-CSRC := brk.c ioperm.c iopl.c mmap.c __syscall_error.c +- +-ifneq ($(UCLIBC_HAS_THREADS_NATIVE),y) +-CSRC += sigaction.c +-endif ++CSRC := brk.c ioperm.c iopl.c mmap.c __syscall_error.c sigaction.c + + SSRC := \ + __longjmp.S setjmp.S bsd-setjmp.S \ +diff -Nur uClibc-0.9.32.1/libc/sysdeps/linux/i386/Makefile.arch uClibc.new/libc/sysdeps/linux/i386/Makefile.arch +--- uClibc-0.9.32.1/libc/sysdeps/linux/i386/Makefile.arch 2011-12-30 12:11:07.000000000 +0100 ++++ uClibc.new/libc/sysdeps/linux/i386/Makefile.arch 2012-02-17 15:13:33.000000000 +0100 +@@ -5,11 +5,7 @@ + # Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball. + # + +-CSRC := brk.c __syscall_error.c +- +-ifneq ($(UCLIBC_HAS_THREADS_NATIVE),y) +-CSRC += sigaction.c +-endif ++CSRC := brk.c __syscall_error.c sigaction.c + + SSRC := \ + __longjmp.S setjmp.S bsd-setjmp.S bsd-_setjmp.S \ +diff -Nur uClibc-0.9.32.1/libc/sysdeps/linux/mips/Makefile.arch uClibc.new/libc/sysdeps/linux/mips/Makefile.arch +--- uClibc-0.9.32.1/libc/sysdeps/linux/mips/Makefile.arch 2011-12-30 12:11:07.000000000 +0100 ++++ uClibc.new/libc/sysdeps/linux/mips/Makefile.arch 2012-02-17 15:13:33.000000000 +0100 +@@ -7,7 +7,7 @@ + + CSRC := \ + __longjmp.c brk.c setjmp_aux.c mmap.c \ +- cacheflush.c pread_write.c sysmips.c _test_and_set.c \ ++ cacheflush.c pread_write.c sigaction.c sysmips.c _test_and_set.c \ + readahead.c + + SSRC := bsd-_setjmp.S bsd-setjmp.S setjmp.S syscall.S pipe.S syscall_error.S +@@ -17,7 +17,6 @@ + endif + + ifneq ($(UCLIBC_HAS_THREADS_NATIVE),y) +-CSRC += sigaction.c + SSRC += vfork.S clone.S + endif + +diff -Nur uClibc-0.9.32.1/libc/sysdeps/linux/sparc/Makefile.arch uClibc.new/libc/sysdeps/linux/sparc/Makefile.arch +--- uClibc-0.9.32.1/libc/sysdeps/linux/sparc/Makefile.arch 2011-12-30 12:11:07.000000000 +0100 ++++ uClibc.new/libc/sysdeps/linux/sparc/Makefile.arch 2012-02-17 15:14:20.000000000 +0100 +@@ -5,15 +5,14 @@ + # Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball. + # + +-CSRC := brk.c __syscall_error.c ++CSRC := brk.c __syscall_error.c sigaction.c + + SSRC := \ + __longjmp.S setjmp.S bsd-setjmp.S bsd-_setjmp.S \ + syscall.S urem.S udiv.S umul.S sdiv.S rem.S pipe.S + + ifneq ($(UCLIBC_HAS_THREADS_NATIVE),y) +-CSRC += sigaction.c +-SSRC += fork.S vfork.S ++SSRC += fork.S vfork.S clone.S + endif + + # check weather __LONG_DOUBLE_128__ is defined (long double support) +diff -Nur uClibc-0.9.32.1/libc/sysdeps/linux/x86_64/Makefile.arch uClibc.new/libc/sysdeps/linux/x86_64/Makefile.arch +--- uClibc-0.9.32.1/libc/sysdeps/linux/x86_64/Makefile.arch 2011-12-30 12:11:07.000000000 +0100 ++++ uClibc.new/libc/sysdeps/linux/x86_64/Makefile.arch 2012-02-17 15:13:33.000000000 +0100 +@@ -5,11 +5,7 @@ + # Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball. + # + +-CSRC := brk.c __syscall_error.c mmap.c +- +-ifneq ($(UCLIBC_HAS_THREADS_NATIVE),y) +-CSRC += sigaction.c +-endif ++CSRC := brk.c __syscall_error.c sigaction.c mmap.c + + SSRC := \ + __longjmp.S setjmp.S syscall.S bsd-setjmp.S bsd-_setjmp.S +diff -Nur uClibc-0.9.32.1/libpthread/nptl/.gitignore uClibc.new/libpthread/nptl/.gitignore +--- uClibc-0.9.32.1/libpthread/nptl/.gitignore 2011-12-30 12:11:07.000000000 +0100 ++++ uClibc.new/libpthread/nptl/.gitignore 2012-02-17 15:13:33.000000000 +0100 +@@ -24,6 +24,5 @@ + # + # symlinks + # +-sysdeps/pthread/pt-sigaction.c + sysdeps/pthread/pt-sigfillset.c + sysdeps/pthread/pt-sigprocmask.c +diff -Nur uClibc-0.9.32.1/libpthread/nptl/sysdeps/pthread/Makefile.in uClibc.new/libpthread/nptl/sysdeps/pthread/Makefile.in +--- uClibc-0.9.32.1/libpthread/nptl/sysdeps/pthread/Makefile.in 2011-12-30 12:11:07.000000000 +0100 ++++ uClibc.new/libpthread/nptl/sysdeps/pthread/Makefile.in 2012-02-17 15:13:33.000000000 +0100 +@@ -42,8 +42,6 @@ + CFLAGS-pthread_spin_destroy.c = -D_GNU_SOURCE + CFLAGS-pthread_spin_init.c = -D_GNU_SOURCE + CFLAGS-pthread_spin_unlock.c = -D_GNU_SOURCE +-CFLAGS-pt-sigaction.c = -I$(top_srcdir)libc/sysdeps/linux/$(TARGET_ARCH) \ +- -I$(top_srcdir)libc/signal + CFLAGS-pt-sigfillset.c = -I$(top_srcdir)libc/signal + CFLAGS-pt-sigprocmask.c = -I$(top_srcdir)libc/sysdeps/linux/common + CFLAGS-unwind-forcedunwind.c = -fexceptions -fasynchronous-unwind-tables +@@ -58,10 +56,6 @@ + libpthread-so-y += $(patsubst %,$(libpthread_pthread_OUT)/%.oS, \ + pt-sigaction pt-sigprocmask unwind-forcedunwind) + +-CFLAGS-OMIT-sigaction.c = $(CFLAGS-pthread) +-CFLAGS-sigaction.c = -I$(top_srcdir)libc/signal +-libc-y += $(libpthread_pthread_OUT)/sigaction.o +- + librt-pt-routines-y = librt-cancellation.c + librt-pt-shared-only-routines-y = rt-unwind-resume.c + +@@ -114,7 +108,7 @@ + # impl, but ok. + # Special rules needed since we do objdir->objdir compilation for these 3. + # First symlink them, then build them. Rob would freak out on these. Sheesh! ;) +-pthread-lc-fwd = sigaction sigfillset sigprocmask ++pthread-lc-fwd = sigfillset sigprocmask + $(patsubst %,$(libpthread_pthread_OUT)/pt-%.c,$(pthread-lc-fwd)): | $(libpthread_pthread_OUT) + $(do_ln) $(call rel_srcdir)$(patsubst pt-%,$(libpthread_pthread_DIR)/%,$(@F)) $@ + $(patsubst %,$(libpthread_pthread_OUT)/pt-%.oS,$(pthread-lc-fwd)): $(libpthread_pthread_OUT)/pt-%.oS: $(libpthread_pthread_OUT)/pt-%.c +@@ -131,5 +125,5 @@ + CLEAN_libpthread/nptl/sysdeps/pthread: + $(do_rm) $(addprefix $(libpthread_pthread_OUT)/*., o os oS s S) \ + $(libpthread_pthread_OUT)/defs.h \ +- $(addprefix $(libpthread_pthread_DIR)/,pt-sigaction.c \ ++ $(addprefix $(libpthread_pthread_DIR)/, \ + pt-sigfillset.c pt-sigprocmask.c) +diff -Nur uClibc-0.9.32.1/libpthread/nptl/sysdeps/pthread/pt-sigaction.c uClibc.new/libpthread/nptl/sysdeps/pthread/pt-sigaction.c +--- uClibc-0.9.32.1/libpthread/nptl/sysdeps/pthread/pt-sigaction.c 1970-01-01 01:00:00.000000000 +0100 ++++ uClibc.new/libpthread/nptl/sysdeps/pthread/pt-sigaction.c 2012-02-17 15:13:33.000000000 +0100 +@@ -0,0 +1,40 @@ ++/* Copyright (C) 2002, 2003, 2005 Free Software Foundation, Inc. ++ This file is part of the GNU C Library. ++ Contributed by Ulrich Drepper <drepper@redhat.com>, 2002. ++ ++ 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 <pthreadP.h> ++#include <signal.h> ++ ++/* We use the libc implementation but we tell it to not allow ++ SIGCANCEL or SIGTIMER to be handled. */ ++ ++extern __typeof(sigaction) __libc_sigaction; ++int ++__sigaction (int sig, const struct sigaction *act, struct sigaction *oact) ++{ ++ if (unlikely (sig == SIGCANCEL || sig == SIGSETXID)) ++ { ++ __set_errno (EINVAL); ++ return -1; ++ } ++ ++ return __libc_sigaction (sig, act, oact); ++} ++libc_hidden_proto(sigaction) ++weak_alias (__sigaction, sigaction) ++libc_hidden_weak(sigaction) +diff -Nur uClibc-0.9.32.1/libpthread/nptl/sysdeps/pthread/sigaction.c uClibc.new/libpthread/nptl/sysdeps/pthread/sigaction.c +--- uClibc-0.9.32.1/libpthread/nptl/sysdeps/pthread/sigaction.c 2011-12-30 12:11:07.000000000 +0100 ++++ uClibc.new/libpthread/nptl/sysdeps/pthread/sigaction.c 1970-01-01 01:00:00.000000000 +0100 +@@ -1,49 +0,0 @@ +-/* Copyright (C) 2002, 2003, 2005 Free Software Foundation, Inc. +- This file is part of the GNU C Library. +- Contributed by Ulrich Drepper <drepper@redhat.com>, 2002. +- +- 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. */ +- +-#ifndef LIBC_SIGACTION +- +-#include <pthreadP.h> +- +-/* We use the libc implementation but we tell it to not allow +- SIGCANCEL or SIGTIMER to be handled. */ +-#define LIBC_SIGACTION 1 +-#include <sigaction.c> +- +-extern __typeof(sigaction) __sigaction; +-int +-__sigaction (int sig, const struct sigaction *act, struct sigaction *oact) +-{ +- if (__builtin_expect (sig == SIGCANCEL || sig == SIGSETXID, 0)) +- { +- __set_errno (EINVAL); +- return -1; +- } +- +- return __libc_sigaction (sig, act, oact); +-} +-libc_hidden_proto(sigaction) +-weak_alias (__sigaction, sigaction) +-libc_hidden_weak(sigaction) +- +-#else +- +-# include_next <sigaction.c> +- +-#endif /* LIBC_SIGACTION */ diff --git a/toolchain/uClibc/patches/0.9.32.1/uClibc-weak-sigprocmask.patch b/toolchain/uClibc/patches/0.9.32.1/uClibc-weak-sigprocmask.patch new file mode 100644 index 000000000..a98f5b94d --- /dev/null +++ b/toolchain/uClibc/patches/0.9.32.1/uClibc-weak-sigprocmask.patch @@ -0,0 +1,21 @@ +diff -Nur uClibc-0.9.32.1.orig/libc/sysdeps/linux/common/sigprocmask.c uClibc-0.9.32.1/libc/sysdeps/linux/common/sigprocmask.c +--- uClibc-0.9.32.1.orig/libc/sysdeps/linux/common/sigprocmask.c 2011-12-30 12:11:07.000000000 +0100 ++++ uClibc-0.9.32.1/libc/sysdeps/linux/common/sigprocmask.c 2012-02-18 11:40:09.000000000 +0100 +@@ -23,7 +23,7 @@ + _syscall4(int, __rt_sigprocmask, int, how, const sigset_t *, set, + sigset_t *, oldset, size_t, size) + +-int sigprocmask(int how, const sigset_t * set, sigset_t * oldset) ++int weak_function sigprocmask(int how, const sigset_t * set, sigset_t * oldset) + { + #ifdef SIGCANCEL + sigset_t local_newmask; +@@ -58,7 +58,7 @@ + _syscall3(int, __syscall_sigprocmask, int, how, const sigset_t *, set, + sigset_t *, oldset) + +-int sigprocmask(int how, const sigset_t * set, sigset_t * oldset) ++int weak_function sigprocmask(int how, const sigset_t * set, sigset_t * oldset) + { + #ifdef SIGCANCEL + sigset_t local_newmask; |