소스 검색

Merge branch 'master' of git+ssh://openadk.org/git/openadk

Waldemar Brodkorb 14 년 전
부모
커밋
3953de124e

+ 253 - 0
package/gcc/patches/cflags.patch

@@ -0,0 +1,253 @@
+
+	This patch brings over a few features from MirBSD:
+	* -fhonour-copts
+	  If this option is not given, it's warned (depending
+	  on environment variables). This is to catch errors
+	  of misbuilt packages which override CFLAGS themselves.
+	* -Werror-maybe-reset
+	  Has the effect of -Wno-error if GCC_NO_WERROR is
+	  set and not '0', a no-operation otherwise. This is
+	  to be able to use -Werror in "make" but prevent
+	  GNU autoconf generated configure scripts from
+	  freaking out.
+	* Make -fno-strict-aliasing and -fno-delete-null-pointer-checks
+	  the default for -O2/-Os, because they trigger gcc bugs
+	  and can delete code with security implications.
+
+	This patch was authored by Thorsten Glaser <tg at mirbsd.de>
+	with copyright assignment to the FSF in effect.
+
+--- a/gcc/c-opts.c
++++ b/gcc/c-opts.c
+@@ -105,6 +105,9 @@
+ /* Number of deferred options scanned for -include.  */
+ static size_t include_cursor;
+ 
++/* Check if a port honours COPTS.  */
++static int honour_copts = 0;
++
+ static void set_Wimplicit (int);
+ static void handle_OPT_d (const char *);
+ static void set_std_cxx98 (int);
+@@ -454,6 +457,9 @@
+       enable_warning_as_error ("implicit-function-declaration", value, CL_C | CL_ObjC); 
+       break;
+ 
++    case OPT_Werror_maybe_reset:
++      break;
++
+     case OPT_Wformat:
+       set_Wformat (value);
+       break;
+@@ -690,6 +701,12 @@
+       flag_exceptions = value;
+       break;
+ 
++    case OPT_fhonour_copts:
++      if (c_language == clk_c) {
++	honour_copts++;
++      }
++      break;
++
+     case OPT_fimplement_inlines:
+       flag_implement_inlines = value;
+       break;
+@@ -1209,6 +1226,47 @@
+       return false;
+     }
+ 
++  if (c_language == clk_c) {
++    char *ev = getenv ("GCC_HONOUR_COPTS");
++    int evv;
++    if (ev == NULL)
++      evv = -1;
++    else if ((*ev == '0') || (*ev == '\0'))
++      evv = 0;
++    else if (*ev == '1')
++      evv = 1;
++    else if (*ev == '2')
++      evv = 2;
++    else if (*ev == 's')
++      evv = -1;
++    else {
++      warning (0, "unknown GCC_HONOUR_COPTS value, assuming 1");
++      evv = 1; /* maybe depend this on something like MIRBSD_NATIVE?  */
++    }
++    if (evv == 1) {
++      if (honour_copts == 0) {
++	error ("someone does not honour COPTS at all in lenient mode");
++	return false;
++      } else if (honour_copts != 1) {
++	warning (0, "someone does not honour COPTS correctly, passed %d times",
++	 honour_copts);
++      }
++    } else if (evv == 2) {
++      if (honour_copts == 0) {
++	error ("someone does not honour COPTS at all in strict mode");
++	return false;
++      } else if (honour_copts != 1) {
++	error ("someone does not honour COPTS correctly, passed %d times",
++	 honour_copts);
++	return false;
++      }
++    } else if (evv == 0) {
++      if (honour_copts != 1)
++	inform (0, "someone does not honour COPTS correctly, passed %d times",
++	 honour_copts);
++    }
++  }
++
+   return true;
+ }
+ 
+--- a/gcc/c.opt
++++ b/gcc/c.opt
+@@ -215,6 +215,10 @@
+ C ObjC RejectNegative Warning
+ This switch is deprecated; use -Werror=implicit-function-declaration instead
+ 
++Werror-maybe-reset
++C ObjC C++ ObjC++
++; Documented in common.opt
++
+ Wfloat-equal
+ C ObjC C++ ObjC++ Var(warn_float_equal) Warning
+ Warn if testing floating point numbers for equality
+@@ -609,6 +613,9 @@
+ fhonor-std
+ C++ ObjC++
+ 
++fhonour-copts
++C ObjC C++ ObjC++ RejectNegative
++
+ fhosted
+ C ObjC
+ Assume normal C execution environment
+--- a/gcc/common.opt
++++ b/gcc/common.opt
+@@ -102,6 +102,10 @@
+ Common Joined
+ Treat specified warning as error
+ 
++Werror-maybe-reset
++Common
++If environment variable GCC_NO_WERROR is set, act as -Wno-error
++
+ Wextra
+ Common Warning
+ Print extra (possibly unwanted) warnings
+@@ -573,6 +577,9 @@
+ Common Report Var(flag_guess_branch_prob) Optimization
+ Enable guessing of branch probabilities
+ 
++fhonour-copts
++Common RejectNegative
++
+ ; Nonzero means ignore `#ident' directives.  0 means handle them.
+ ; Generate position-independent code for executables if possible
+ ; On SVR4 targets, it also controls whether or not to emit a
+--- a/gcc/opts.c
++++ b/gcc/opts.c
+@@ -896,8 +896,6 @@
+   flag_schedule_insns_after_reload = opt2;
+ #endif
+   flag_regmove = opt2;
+-  flag_strict_aliasing = opt2;
+-  flag_strict_overflow = opt2;
+   flag_reorder_blocks = opt2;
+   flag_reorder_functions = opt2;
+   flag_tree_vrp = opt2;
+@@ -922,6 +919,8 @@
+ 
+   /* -O3 optimizations.  */
+   opt3 = (optimize >= 3);
++  flag_strict_aliasing = opt3;
++  flag_strict_overflow = opt3;
+   flag_predictive_commoning = opt3;
+   flag_inline_functions = opt3;
+   flag_unswitch_loops = opt3;
+@@ -1601,6 +1601,17 @@
+       enable_warning_as_error (arg, value, lang_mask);
+       break;
+ 
++    case OPT_Werror_maybe_reset:
++      {
++	char *ev = getenv ("GCC_NO_WERROR");
++	if ((ev != NULL) && (*ev != '0'))
++	  warnings_are_errors = 0;
++      }
++      break;
++
++    case OPT_fhonour_copts:
++      break;
++
+     case OPT_Wlarger_than_:
+       /* This form corresponds to -Wlarger-than-. 
+          Kept for backward compatibility.
+--- a/gcc/doc/cppopts.texi
++++ b/gcc/doc/cppopts.texi
+@@ -164,6 +164,11 @@
+ Make all warnings into hard errors.  Source code which triggers warnings
+ will be rejected.
+ 
++ at item -Werror-maybe-reset
++ at opindex Werror-maybe-reset
++Act like @samp{-Wno-error} if the @env{GCC_NO_WERROR} environment
++variable is set to anything other than 0 or empty.
++
+ @item -Wsystem-headers
+ @opindex Wsystem-headers
+ Issue warnings for code in system headers.  These are normally unhelpful
+--- a/gcc/doc/invoke.texi
++++ b/gcc/doc/invoke.texi
+@@ -234,7 +234,7 @@
+ -Wconversion  -Wcoverage-mismatch  -Wno-deprecated  @gol
+ -Wno-deprecated-declarations -Wdisabled-optimization  @gol
+ -Wno-div-by-zero -Wempty-body  -Wenum-compare -Wno-endif-labels @gol
+--Werror  -Werror=* @gol
++-Werror  -Werror=* -Werror-maybe-reset @gol
+ -Wfatal-errors  -Wfloat-equal  -Wformat  -Wformat=2 @gol
+ -Wno-format-contains-nul -Wno-format-extra-args -Wformat-nonliteral @gol
+ -Wformat-security  -Wformat-y2k @gol
+@@ -4161,6 +4161,22 @@
+ @option{-Wall} and by @option{-pedantic}, which can be disabled with
+ @option{-Wno-pointer-sign}.
+ 
++ at item -Werror-maybe-reset
++ at opindex Werror-maybe-reset
++Act like @samp{-Wno-error} if the @env{GCC_NO_WERROR} environment
++variable is set to anything other than 0 or empty.
++
++ at item -fhonour-copts
++ at opindex fhonour-copts
++If @env{GCC_HONOUR_COPTS} is set to 1, abort if this option is not
++given at least once, and warn if it is given more than once.
++If @env{GCC_HONOUR_COPTS} is set to 2, abort if this option is not
++given exactly once.
++If @env{GCC_HONOUR_COPTS} is set to 0 or unset, warn if this option
++is not given exactly once.
++The warning is quelled if @env{GCC_HONOUR_COPTS} is set to @samp{s}.
++This flag and environment variable only affect the C language.
++
+ @item -Wstack-protector
+ @opindex Wstack-protector
+ @opindex Wno-stack-protector
+@@ -5699,7 +5715,7 @@
+ second branch or a point immediately following it, depending on whether
+ the condition is known to be true or false.
+ 
+-Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
++Enabled at levels @option{-O3}.
+ 
+ @item -fsplit-wide-types
+ @opindex fsplit-wide-types
+--- a/gcc/java/jvspec.c
++++ b/gcc/java/jvspec.c
+@@ -670,6 +670,7 @@
+      class name.  Append dummy `.c' that can be stripped by set_input so %b
+      is correct.  */ 
+   set_input (concat (main_class_name, "main.c", NULL));
++  putenv ("GCC_HONOUR_COPTS=s"); /* XXX hack!  */
+   err = do_spec (jvgenmain_spec);
+   if (err == 0)
+     {

+ 1 - 0
toolchain/libelf/Makefile

@@ -15,6 +15,7 @@ $(WRKBUILD)/.configured:
 	(cd $(WRKBUILD); \
 		$(WRKBUILD)/configure \
 		--prefix=$(STAGING_HOST_DIR) \
+		--disable-nls \
 		--disable-shared \
 		--enable-static \
 	);

+ 2 - 2
toolchain/uClibc/Makefile.inc

@@ -2,8 +2,8 @@
 # material, please see the LICENCE file in the top-level directory.
 
 PKG_NAME:=		uClibc
-PKG_VERSION:=		0.9.32-rc1
+PKG_VERSION:=		0.9.32-rc2
 PKG_RELEASE:=		1
-PKG_MD5SUM:=		ec2ec3e187bd68327ee94c31846d275a
+PKG_MD5SUM:=		c8d2cd2c4dbcf5218b6db843cf66ac0f
 PKG_SITES:=		http://uclibc.org/downloads/
 DISTFILES:=		$(PKG_NAME)-$(PKG_VERSION).tar.bz2

+ 0 - 97
toolchain/uClibc/patches/cris.patch

@@ -1,97 +0,0 @@
-diff -Nur uClibc-0.9.32-rc1.orig/libc/sysdeps/linux/cris/sys/user.h uClibc-0.9.32-rc1/libc/sysdeps/linux/cris/sys/user.h
---- uClibc-0.9.32-rc1.orig/libc/sysdeps/linux/cris/sys/user.h	1970-01-01 01:00:00.000000000 +0100
-+++ uClibc-0.9.32-rc1/libc/sysdeps/linux/cris/sys/user.h	2010-12-28 16:41:14.000000000 +0100
-@@ -0,0 +1,81 @@
-+#ifndef __ASM_CRIS_USER_H
-+#define __ASM_CRIS_USER_H
-+
-+/* User-mode register used for core dumps. */
-+
-+struct user_fpregs {
-+};
-+
-+struct user_regs_struct {
-+	unsigned long r0;	/* General registers. */
-+	unsigned long r1;
-+	unsigned long r2;
-+	unsigned long r3;
-+	unsigned long r4;
-+	unsigned long r5;
-+	unsigned long r6;
-+	unsigned long r7;
-+	unsigned long r8;
-+	unsigned long r9;
-+	unsigned long r10;
-+	unsigned long r11;
-+	unsigned long r12;
-+	unsigned long r13;
-+	unsigned long sp;	/* R14, Stack pointer. */
-+	unsigned long acr;	/* R15, Address calculation register. */
-+	unsigned long bz;	/* P0, Constant zero (8-bits). */
-+	unsigned long vr;	/* P1, Version register (8-bits). */
-+	unsigned long pid;	/* P2, Process ID (8-bits). */
-+	unsigned long srs;	/* P3, Support register select (8-bits). */
-+	unsigned long wz;	/* P4, Constant zero (16-bits). */
-+	unsigned long exs;	/* P5, Exception status. */
-+	unsigned long eda;	/* P6, Exception data address. */
-+	unsigned long mof;	/* P7, Multiply overflow regiter. */
-+	unsigned long dz;	/* P8, Constant zero (32-bits). */
-+	unsigned long ebp;	/* P9, Exception base pointer. */
-+	unsigned long erp;	/* P10, Exception return pointer. */
-+	unsigned long srp;	/* P11, Subroutine return pointer. */
-+	unsigned long nrp;	/* P12, NMI return pointer. */
-+	unsigned long ccs;	/* P13, Condition code stack. */
-+	unsigned long usp;	/* P14, User mode stack pointer. */
-+	unsigned long spc;	/* P15, Single step PC. */
-+};
-+
-+/*
-+ * Core file format: The core file is written in such a way that gdb
-+ * can understand it and provide useful information to the user (under
-+ * linux we use the `trad-core' bfd).  The file contents are as follows:
-+ *
-+ *  upage: 1 page consisting of a user struct that tells gdb
-+ *	what is present in the file.  Directly after this is a
-+ *	copy of the task_struct, which is currently not used by gdb,
-+ *	but it may come in handy at some point.  All of the registers
-+ *	are stored as part of the upage.  The upage should always be
-+ *	only one page long.
-+ *  data: The data segment follows next.  We use current->end_text to
-+ *	current->brk to pick up all of the user variables, plus any memory
-+ *	that may have been sbrk'ed.  No attempt is made to determine if a
-+ *	page is demand-zero or if a page is totally unused, we just cover
-+ *	the entire range.  All of the addresses are rounded in such a way
-+ *	that an integral number of pages is written.
-+ *  stack: We need the stack information in order to get a meaningful
-+ *	backtrace.  We need to write the data from usp to
-+ *	current->start_stack, so we round each of these in order to be able
-+ *	to write an integer number of pages.
-+ */
-+
-+struct user {
-+	struct user_regs_struct	regs;		/* entire machine state */
-+	size_t		u_tsize;		/* text size (pages) */
-+	size_t		u_dsize;		/* data size (pages) */
-+	size_t		u_ssize;		/* stack size (pages) */
-+	unsigned long	start_code;		/* text starting address */
-+	unsigned long	start_data;		/* data starting address */
-+	unsigned long	start_stack;		/* stack starting address */
-+	long int	signal;			/* signal causing core dump */
-+	unsigned long	u_ar0;			/* help gdb find registers */
-+	unsigned long	magic;			/* identifies a core file */
-+	char		u_comm[32];		/* user command name */
-+};
-+
-+#endif /* __ASM_CRIS_USER_H */
-diff -Nur uClibc-0.9.32-rc1.orig/libc/sysdeps/linux/cris/sysdep.h uClibc-0.9.32-rc1/libc/sysdeps/linux/cris/sysdep.h
---- uClibc-0.9.32-rc1.orig/libc/sysdeps/linux/cris/sysdep.h	2010-12-17 20:05:17.000000000 +0100
-+++ uClibc-0.9.32-rc1/libc/sysdeps/linux/cris/sysdep.h	2010-12-28 16:41:08.000000000 +0100
-@@ -20,6 +20,8 @@
- #ifndef _SYSDEP_H_
- #define _SYSDEP_H_
- 
-+#include <sys/syscall.h>
-+
- #ifndef C_LABEL
- 
- /* Define a macro we can use to construct the asm name for a C symbol.  */

+ 0 - 20
toolchain/uClibc/patches/netlinkaccess.patch

@@ -1,20 +0,0 @@
-diff -Nur uClibc-0.9.32-rc1.orig/libc/inet/netlinkaccess.h uClibc-0.9.32-rc1/libc/inet/netlinkaccess.h
---- uClibc-0.9.32-rc1.orig/libc/inet/netlinkaccess.h	2010-12-17 20:05:17.000000000 +0100
-+++ uClibc-0.9.32-rc1/libc/inet/netlinkaccess.h	2011-01-01 15:49:58.906931975 +0100
-@@ -22,15 +22,8 @@
- #include <features.h>
- #include <stdint.h>
- #include <unistd.h>
--#include <sys/types.h>
--
- #if defined __ASSUME_NETLINK_SUPPORT || defined __UCLIBC_USE_NETLINK__
--#define _LINUX_TYPES_H
--typedef uint8_t __u8;
--typedef uint16_t __u16;
--typedef uint32_t __u32;
--typedef uint64_t __u64;
--typedef int32_t __s32;
-+#include <asm/types.h>
- #include <linux/rtnetlink.h>
- #include <linux/netlink.h>
- 

+ 0 - 196
toolchain/uClibc/patches/trunk.patch

@@ -1,196 +0,0 @@
-diff --git a/Makefile.in b/Makefile.in
-index b4dcf6b..d7a5fca 100644
---- a/Makefile.in
-+++ b/Makefile.in
-@@ -23,7 +23,7 @@ export KCONFIG_CONFIG
- 
- ifeq ($(HAVE_DOT_CONFIG),y)
- 
--all: pregen libs
-+all: headers pregen libs
- libs: pregen
- 
- # In this section, we need .config
-@@ -260,6 +260,7 @@ HEADERS_RM-$(UCLIBC_HAS_WCHAR)               += wchar.h wctype.h
- HEADERS_RM-$(UCLIBC_HAS_WORDEXP)             += wordexp.h
- HEADERS_RM-$(UCLIBC_HAS_XATTR)               += sys/xattr.h
- HEADERS_RM-$(UCLIBC_HAS_XLOCALE)             += xlocale.h
-+HEADERS_RM-$(UCLIBC_HAS_LOCALE)              += bits/uClibc_ctype.h
- HEADERS_RM-$(UCLIBC_LINUX_SPECIFIC)          += sys/fsuid.h sys/inotify.h sys/perm.h \
- 	sys/personality.h \
- 	sys/prctl.h \
-diff --git a/extra/locale/Makefile b/extra/locale/Makefile
-index 11f362a..ff229e2 100644
---- a/extra/locale/Makefile
-+++ b/extra/locale/Makefile
-@@ -4,10 +4,10 @@
- #
- # Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
- #
--
- top_srcdir=../../
--top_builddir=../../
-+top_builddir=$(if $(O),$(O),../../)/
-+
- all: objs
--include $(top_builddir)Rules.mak
-+include $(top_srcdir)Rules.mak
- include Makefile.in
- include $(top_srcdir)Makerules
-diff --git a/libc/sysdeps/linux/sparc/Makefile.arch b/libc/sysdeps/linux/sparc/Makefile.arch
-index 91c6e85..d0cae9f 100644
---- a/libc/sysdeps/linux/sparc/Makefile.arch
-+++ b/libc/sysdeps/linux/sparc/Makefile.arch
-@@ -16,9 +16,15 @@ CSRC += sigaction.c
- SSRC += fork.S vfork.S
- endif
- 
-+# check weather __LONG_DOUBLE_128__ is defined (long double support)
-+UCLIBC_SPARC_HAS_LONG_DOUBLE=$(shell if [ "x`$(CC) -E -dM -xc /dev/null 2>&1 | grep __LONG_DOUBLE_128__`" != "x" ]; then echo "y"; fi)
-+ifeq ($(UCLIBC_SPARC_HAS_LONG_DOUBLE),y)
- CSRC += $(foreach f, \
- 	q_div.c   q_fle.c    q_mul.c   q_qtoll.c   q_stoq.c    \
- 	mp_clz_tab.c  q_dtoq.c  q_flt.c    q_neg.c   q_qtos.c    q_sub.c    \
- 	q_add.c      q_feq.c   q_fne.c    q_qtod.c  q_qtou.c    q_ulltoq.c  \
- 	q_cmp.c      q_fge.c   q_itoq.c   q_qtoull.c  q_util.c    \
- 	q_cmpe.c     q_fgt.c   q_lltoq.c  q_qtoi.c  q_sqrt.c    q_utoq.c, soft-fp/$(f))
-+else
-+CSRC += qp_ops.c
-+endif
-diff --git a/libpthread/linuxthreads/pthread.c b/libpthread/linuxthreads/pthread.c
-index 614cad1..db43634 100644
---- a/libpthread/linuxthreads/pthread.c
-+++ b/libpthread/linuxthreads/pthread.c
-@@ -49,7 +49,7 @@ extern int _h_errno;
- /* We need the global/static resolver state here.  */
- # include <resolv.h>
- # undef _res
--extern struct __res_state _res;
-+extern struct __res_state *__resp;
- # endif
- #endif
- 
-@@ -73,9 +73,6 @@ struct _pthread_descr_struct __pthread_initial_thread = {
- #if !(USE_TLS && HAVE___THREAD)
-   .p_errnop = &_errno,
-   .p_h_errnop = &_h_errno,
--# if defined __UCLIBC_HAS_IPv4__ || defined __UCLIBC_HAS_IPV6__
--  .p_resp = &_res,
--# endif
- #endif
-   .p_userstack = 1,
-   .p_resume_count = __ATOMIC_INITIALIZER,
-@@ -544,14 +541,14 @@ static void pthread_initialize(void)
-   THREAD_SETMEM (((pthread_descr) NULL), p_pid, __getpid());
- # if !defined HAVE___THREAD && (defined __UCLIBC_HAS_IPv4__ || defined __UCLIBC_HAS_IPV6__)
-   /* Likewise for the resolver state _res.  */
--  THREAD_SETMEM (((pthread_descr) NULL), p_resp, &_res);
-+  THREAD_SETMEM (((pthread_descr) NULL), p_resp, __resp);
- # endif
- #else
-   /* Update the descriptor for the initial thread. */
-   __pthread_initial_thread.p_pid = __getpid();
- # if defined __UCLIBC_HAS_IPv4__ || defined __UCLIBC_HAS_IPV6__
-   /* Likewise for the resolver state _res.  */
--  __pthread_initial_thread.p_resp = &_res;
-+  __pthread_initial_thread.p_resp = __resp;
- # endif
- #endif
- #if !__ASSUME_REALTIME_SIGNALS
-@@ -1129,7 +1126,7 @@ void __pthread_reset_main_thread(void)
-   THREAD_SETMEM(self, p_errnop, &_errno);
-   THREAD_SETMEM(self, p_h_errnop, &_h_errno);
- # if defined __UCLIBC_HAS_IPv4__ || defined __UCLIBC_HAS_IPV6__
--  THREAD_SETMEM(self, p_resp, &_res);
-+  THREAD_SETMEM(self, p_resp, __resp);
- # endif
- #endif
- 
-diff --git a/libpthread/nptl/sem_open.c b/libpthread/nptl/sem_open.c
-index 28dd3aa..71bebb0 100644
---- a/libpthread/nptl/sem_open.c
-+++ b/libpthread/nptl/sem_open.c
-@@ -248,7 +248,7 @@ sem_open (const char *name, int oflag, ...)
-   int fd;
- 
-   /* Determine where the shmfs is mounted.  */
--  __pthread_once (&__namedsem_once, __where_is_shmfs);
-+  INTUSE(__pthread_once) (&__namedsem_once, __where_is_shmfs);
- 
-   /* If we don't know the mount points there is nothing we can do.  Ever.  */
-   if (mountpoint.dir == NULL)
-diff --git a/libpthread/nptl/sem_unlink.c b/libpthread/nptl/sem_unlink.c
-index beed02e..f3e7f1a 100644
---- a/libpthread/nptl/sem_unlink.c
-+++ b/libpthread/nptl/sem_unlink.c
-@@ -33,7 +33,7 @@ sem_unlink (
-   size_t namelen;
- 
-   /* Determine where the shmfs is mounted.  */
--  __pthread_once (&__namedsem_once, __where_is_shmfs);
-+  INTUSE(__pthread_once) (&__namedsem_once, __where_is_shmfs);
- 
-   /* If we don't know the mount points there is nothing we can do.  Ever.  */
-   if (mountpoint.dir == NULL)
-diff --git a/libpthread/nptl/sysdeps/pthread/Makefile.in b/libpthread/nptl/sysdeps/pthread/Makefile.in
-index 8ccf96d..fc0c6ac 100644
---- a/libpthread/nptl/sysdeps/pthread/Makefile.in
-+++ b/libpthread/nptl/sysdeps/pthread/Makefile.in
-@@ -95,6 +95,10 @@ $(patsubst %,$(libpthread_pthread_OUT)/pt-%.oS,$(pthread-lc-fwd)): $(libpthread_
- 	$(compile.c)
- $(patsubst %,$(libpthread_pthread_OUT)/pt-%.o,$(pthread-lc-fwd)): $(libpthread_pthread_OUT)/pt-%.o: $(libpthread_pthread_OUT)/pt-%.c
- 	$(compile.c)
-+ifeq ($(DOPIC),y)
-+$(patsubst %,$(libpthread_pthread_OUT)/pt-%.os,$(pthread-lc-fwd)): $(libpthread_pthread_OUT)/pt-%.os: $(libpthread_pthread_OUT)/pt-%.c
-+	$(compile.c)
-+endif
- 
- objclean-y += CLEAN_libpthread/nptl/sysdeps/pthread
- 
-diff --git a/libpthread/nptl/sysdeps/unix/sysv/linux/sparc/Makefile.arch b/libpthread/nptl/sysdeps/unix/sysv/linux/sparc/Makefile.arch
-index 88ca01a..102c0da 100644
---- a/libpthread/nptl/sysdeps/unix/sysv/linux/sparc/Makefile.arch
-+++ b/libpthread/nptl/sysdeps/unix/sysv/linux/sparc/Makefile.arch
-@@ -7,16 +7,20 @@
- 
- libpthread_linux_arch_SSRC = pt-vfork.S clone.S
- libpthread_linux_arch_CSRC = pthread_once.c lowlevellock.c \
--	pthread_barrier_init.c pthread_barrier_wait.c pthread_barrier_destroy.c
-+	pthread_barrier_init.c pthread_barrier_wait.c pthread_barrier_destroy.c \
-+	pt-__syscall_error.c
- 
- libc_linux_arch_CSRC = fork.c libc-lowlevellock.c
- libc_linux_arch_SSRC = clone.S vfork.S
- 
-+librt_linux_arch_CSRC = pt-__syscall_error.c
-+
- ASFLAGS += -DUSE___THREAD
- 
- ASFLAGS-pt-vfork.S = -DNOT_IN_libc -DIS_IN_libpthread -D_LIBC_REENTRANT
- CFLAGS-pthread_once.c = -DNOT_IN_libc -DIS_IN_libpthread
- CFLAGS-lowlevellock.c = -DNOT_IN_libc -DIS_IN_libpthread
-+CFLAGS-pt-__syscall_error.c =  -DNOT_IN_libc -DIS_IN_libpthread
- 
- ASFLAGS-clone.S = -D_LIBC_REENTRANT
- ASFLAGS-vfork.S = -D_LIBC_REENTRANT
-diff --git a/libpthread/nptl/sysdeps/unix/sysv/linux/sparc/pt-__syscall_error.c b/libpthread/nptl/sysdeps/unix/sysv/linux/sparc/pt-__syscall_error.c
-new file mode 100644
-index 0000000..872e4ef
---- /dev/null
-+++ b/libpthread/nptl/sysdeps/unix/sysv/linux/sparc/pt-__syscall_error.c
-@@ -0,0 +1 @@
-+#include <../../../../../../../libc/sysdeps/linux/sparc/__syscall_error.c>
-diff --git a/libpthread/nptl_db/Makefile.in b/libpthread/nptl_db/Makefile.in
-index 644ec55..a3fc1cd 100644
---- a/libpthread/nptl_db/Makefile.in
-+++ b/libpthread/nptl_db/Makefile.in
-@@ -12,8 +12,7 @@ CFLAGS-nptl_db := -DLIBPTHREAD_SO="\"libpthread.so.$(ABI_VERSION)\""
- CFLAGS-nptl_db += -I$(top_srcdir)libpthread/nptl -D_GNU_SOURCE
- CFLAGS-nptl_db += -DIS_IN_libthread_db=1 -DNOT_IN_libc -std=gnu99 -I$(top_srcdir)ldso/include
- 
--LDFLAGS-libthread_db.so := $(LDFLAGS_NOSTRIP) -s --warn-unresolved-symbols
--
-+LDFLAGS-libthread_db.so := $(LDFLAGS_NOSTRIP) $(if $(call check_ld,--warn-unresolved-symbols),-Wl$(comma)--warn-unresolved-symbols)
- LIBS-libthread_db.so := $(LIBS)
- 
- libthread_db_FULL_NAME := libthread_db-$(VERSION).so