summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarmelo Amoroso <carmelo.amoroso@st.com>2011-01-03 14:37:49 +0100
committerCarmelo Amoroso <carmelo.amoroso@st.com>2011-01-03 14:44:33 +0100
commit8100a075b7dd7471562decb1860571a335d68b0d (patch)
tree331eebca0cbafd27aa691da4bc5fa281abb61d3d
parente018b8ba1a0110120429de34366459af0771abe2 (diff)
parent4ac7ad3543dd6d7780e71af80fa5c45414451719 (diff)
Merge commit 'origin/master' into prelink
Signed-off-by: Carmelo Amoroso <carmelo.amoroso@st.com>
-rw-r--r--Makefile.in12
-rw-r--r--Rules.mak2
-rw-r--r--extra/locale/Makefile6
-rw-r--r--libc/inet/netlinkaccess.h9
-rw-r--r--libc/sysdeps/linux/sh/fpu_control.h4
-rw-r--r--libc/sysdeps/linux/sh/sysdep.h1
-rw-r--r--libc/sysdeps/linux/sparc/Makefile.arch6
-rw-r--r--libm/Makefile.in16
-rw-r--r--libm/powerpc/classic/Makefile.arch4
-rw-r--r--libm/powerpc/e500/Makefile.arch1
-rw-r--r--libm/sh/Makefile.arch21
-rw-r--r--libm/sh/sh4/Makefile.arch24
-rw-r--r--libm/sh/sh4/feholdexcpt.c (renamed from libm/sh/feholdexcpt.c)0
-rw-r--r--libm/sh/sh4/fesetenv.c (renamed from libm/sh/fesetenv.c)0
-rw-r--r--libm/sh/sh4/s_lrintf.S52
-rw-r--r--libm/sh/sh4/s_lroundf.S39
-rw-r--r--libpthread/linuxthreads/pthread.c11
-rw-r--r--libpthread/nptl/sem_open.c2
-rw-r--r--libpthread/nptl/sem_unlink.c2
-rw-r--r--libpthread/nptl/sysdeps/pthread/Makefile.in4
-rw-r--r--libpthread/nptl/sysdeps/unix/sysv/linux/sparc/Makefile.arch6
-rw-r--r--libpthread/nptl/sysdeps/unix/sysv/linux/sparc/pt-__syscall_error.c1
-rw-r--r--libpthread/nptl_db/Makefile.in3
23 files changed, 166 insertions, 60 deletions
diff --git a/Makefile.in b/Makefile.in
index 3399f8842..d7a5fca60 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 \
@@ -291,7 +292,14 @@ endif
install_headers: headers $(top_builddir)extra/scripts/unifdef | $(PREFIX)$(DEVEL_PREFIX)include
@$(call disp_install,"include -> $(PREFIX)$(DEVEL_PREFIX)include")
$(Q)top_builddir=$(top_builddir) \
- $(top_srcdir)extra/scripts/install_headers.sh include $(PREFIX)$(DEVEL_PREFIX)include
+ $(top_srcdir)extra/scripts/install_headers.sh \
+ include $(PREFIX)$(DEVEL_PREFIX)include
+ifneq ($(O),) # only run this step in O is set i.e. make O=/my/builddir/ ..
+ @$(call disp_install,"$(top_builddir)/include -> $(PREFIX)$(DEVEL_PREFIX)include")
+ $(Q)top_builddir=$(top_builddir) \
+ $(top_srcdir)extra/scripts/install_headers.sh \
+ $(top_builddir)/include $(PREFIX)$(DEVEL_PREFIX)include
+endif
$(Q)cd $(PREFIX)$(DEVEL_PREFIX)include && $(RM) -r $(HEADERS_RM-)
ifeq ($(UCLIBC_HAS_WCHAR),)
$(Q)cd $(PREFIX)$(DEVEL_PREFIX)include && mv -f wchar-stub.h wchar.h
diff --git a/Rules.mak b/Rules.mak
index ac8276757..eecdc6426 100644
--- a/Rules.mak
+++ b/Rules.mak
@@ -106,7 +106,7 @@ export RUNTIME_PREFIX DEVEL_PREFIX KERNEL_HEADERS MULTILIB_DIR
MAJOR_VERSION := 0
MINOR_VERSION := 9
SUBLEVEL := 32
-EXTRAVERSION :=-git
+EXTRAVERSION :=-rc1-git
VERSION := $(MAJOR_VERSION).$(MINOR_VERSION).$(SUBLEVEL)
ABI_VERSION := $(MAJOR_VERSION)
ifneq ($(EXTRAVERSION),)
diff --git a/extra/locale/Makefile b/extra/locale/Makefile
index 11f362a5e..ff229e20c 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/inet/netlinkaccess.h b/libc/inet/netlinkaccess.h
index 5111d3802..96ece392c 100644
--- a/libc/inet/netlinkaccess.h
+++ b/libc/inet/netlinkaccess.h
@@ -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>
diff --git a/libc/sysdeps/linux/sh/fpu_control.h b/libc/sysdeps/linux/sh/fpu_control.h
index cbd889ece..da01725cb 100644
--- a/libc/sysdeps/linux/sh/fpu_control.h
+++ b/libc/sysdeps/linux/sh/fpu_control.h
@@ -20,7 +20,9 @@
#ifndef _FPU_CONTROL_H
#define _FPU_CONTROL_H
-#warning This file is only correct for sh4
+#ifndef __SH4__
+#error This file is only correct for sh4
+#endif
/* masking of interrupts */
#define _FPU_MASK_VM 0x0800 /* Invalid operation */
diff --git a/libc/sysdeps/linux/sh/sysdep.h b/libc/sysdeps/linux/sh/sysdep.h
index 2ef0a3305..8b3c68220 100644
--- a/libc/sysdeps/linux/sh/sysdep.h
+++ b/libc/sysdeps/linux/sh/sysdep.h
@@ -26,6 +26,7 @@
/* Syntactic details of assembler. */
+#define LOCAL(X) .L_##X
#define ALIGNARG(log2) log2
/* For ELF we need the `.type' directive to make shared libs work right. */
#define ASM_TYPE_DIRECTIVE(name,typearg) .type name,@##typearg;
diff --git a/libc/sysdeps/linux/sparc/Makefile.arch b/libc/sysdeps/linux/sparc/Makefile.arch
index 91c6e85e4..d0cae9ff8 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/libm/Makefile.in b/libm/Makefile.in
index 6f66c5644..384365cac 100644
--- a/libm/Makefile.in
+++ b/libm/Makefile.in
@@ -34,19 +34,18 @@ libm_FULL_NAME := libm-$(VERSION).so
libm_DIR:=$(top_srcdir)libm
libm_OUT:=$(top_builddir)libm
-# Fix builds for powerpc as there are different cores in this
-# section now.`
-ifeq ($(TARGET_ARCH)-$(CONFIG_E500),powerpc-y)
-libm_ARCH_DIR:=$(libm_DIR)/$(TARGET_ARCH)/e500
-libm_ARCH_OUT:=$(libm_OUT)/$(TARGET_ARCH)/e500
-else
libm_ARCH_DIR:=$(libm_DIR)/$(TARGET_ARCH)
libm_ARCH_OUT:=$(libm_OUT)/$(TARGET_ARCH)
+
+ifneq ($(TARGET_SUBARCH),)
+libm_SUBARCH_DIR:=$(libm_DIR)/$(TARGET_ARCH)/$(TARGET_SUBARCH)
+libm_SUBARCH_OUT:=$(libm_OUT)/$(TARGET_ARCH)/$(TARGET_SUBARCH)
endif
ifeq ($(UCLIBC_HAS_FPU),y)
ifeq ($(DO_C99_MATH),y)
-include $(libm_ARCH_DIR)/Makefile.arch
+-include $(libm_SUBARCH_DIR)/Makefile.arch
endif
endif
@@ -219,11 +218,8 @@ endif
ifeq ($(UCLIBC_HAS_FPU),y)
ifeq ($(DO_C99_MATH),y)
ifneq ($(strip $(libm_ARCH_OBJS)),)
-ifeq ($(TARGET_ARCH)-$(CONFIG_E500),powerpc-y)
-CFLAGS-libm/$(TARGET_ARCH)/e500/ := $(CFLAGS-libm)
-else
CFLAGS-libm/$(TARGET_ARCH)/ := $(CFLAGS-libm)
-endif
+CFLAGS-libm/$(TARGET_ARCH)/$(TARGET_SUBARCH)/ := $(CFLAGS-libm)
# remove generic sources, if arch specific version is present
ifneq ($(strip $(libm_ARCH_SRC)),)
diff --git a/libm/powerpc/classic/Makefile.arch b/libm/powerpc/classic/Makefile.arch
index 7c7600f80..53c6d2cac 100644
--- a/libm/powerpc/classic/Makefile.arch
+++ b/libm/powerpc/classic/Makefile.arch
@@ -5,8 +5,8 @@
# Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
#
-libm_ARCH_SRC:=$(wildcard $(libm_ARCH_DIR)/*.c)
-libm_ARCH_OBJ:=$(patsubst $(libm_ARCH_DIR)/%.c,$(libm_ARCH_OUT)/%.o,$(libm_ARCH_SRC))
+libm_ARCH_SRC:=$(wildcard $(libm_SUBARCH_DIR)/*.c)
+libm_ARCH_OBJ:=$(patsubst $(libm_SUBARCH_DIR)/%.c,$(libm_SUBARCH_OUT)/%.o,$(libm_ARCH_SRC))
libm_ARCH_OBJS:=$(libm_ARCH_OBJ)
diff --git a/libm/powerpc/e500/Makefile.arch b/libm/powerpc/e500/Makefile.arch
index bec21caef..912ce7f10 100644
--- a/libm/powerpc/e500/Makefile.arch
+++ b/libm/powerpc/e500/Makefile.arch
@@ -5,5 +5,6 @@
# Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
#
+libm_ARCH_fpu_DIR := $(libm_SUBARCH_DIR)/fpu
-include $(libm_ARCH_fpu_DIR)/Makefile.arch
diff --git a/libm/sh/Makefile.arch b/libm/sh/Makefile.arch
deleted file mode 100644
index 6425b3ede..000000000
--- a/libm/sh/Makefile.arch
+++ /dev/null
@@ -1,21 +0,0 @@
-# Makefile for uClibc
-#
-# Copyright (c) 2007 STMicroelectronics Ltd
-#
-# Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
-#
-
-ifeq ($(UCLIBC_HAS_FENV),y)
-libm_ARCH_SRC:=$(wildcard $(libm_ARCH_DIR)/*.c)
-libm_ARCH_OBJ:=$(patsubst $(libm_ARCH_DIR)/%.c,$(libm_ARCH_OUT)/%.o,$(libm_ARCH_SRC))
-endif
-
-libm_ARCH_OBJS:=$(libm_ARCH_OBJ)
-
-ifeq ($(DOPIC),y)
-libm-a-y+=$(libm_ARCH_OBJS:.o=.os)
-else
-libm-a-y+=$(libm_ARCH_OBJS)
-endif
-libm-so-y+=$(libm_ARCH_OBJS:.o=.os)
-
diff --git a/libm/sh/sh4/Makefile.arch b/libm/sh/sh4/Makefile.arch
new file mode 100644
index 000000000..e38e99c15
--- /dev/null
+++ b/libm/sh/sh4/Makefile.arch
@@ -0,0 +1,24 @@
+# Makefile for uClibc
+#
+# Copyright (c) 2007, 2010 STMicroelectronics Ltd
+#
+# Author(s): Carmelo Amoroso <carmelo.amoroso@st.com>
+# Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
+#
+
+ifeq ($(UCLIBC_HAS_FENV),y)
+libm_ARCH_CSRC:=$(wildcard $(libm_SUBARCH_DIR)/*.c)
+libm_ARCH_COBJ:=$(patsubst $(libm_SUBARCH_DIR)/%.c,$(libm_SUBARCH_OUT)/%.o,$(libm_ARCH_SRC))
+libm_ARCH_SSRC:=$(wildcard $(libm_SUBARCH_DIR)/*.S)
+libm_ARCH_SOBJ:=$(patsubst $(libm_SUBARCH_DIR)/%.S,$(libm_SUBARCH_OUT)/%.o,$(libm_ARCH_SSRC))
+endif
+
+libm_ARCH_OBJS:=$(libm_ARCH_COBJ) $(libm_ARCH_SOBJ)
+
+ifeq ($(DOPIC),y)
+libm-a-y+=$(libm_ARCH_OBJS:.o=.os)
+else
+libm-a-y+=$(libm_ARCH_OBJS)
+endif
+libm-so-y+=$(libm_ARCH_OBJS:.o=.os)
+
diff --git a/libm/sh/feholdexcpt.c b/libm/sh/sh4/feholdexcpt.c
index 70b51e8dd..70b51e8dd 100644
--- a/libm/sh/feholdexcpt.c
+++ b/libm/sh/sh4/feholdexcpt.c
diff --git a/libm/sh/fesetenv.c b/libm/sh/sh4/fesetenv.c
index c5cfc1d51..c5cfc1d51 100644
--- a/libm/sh/fesetenv.c
+++ b/libm/sh/sh4/fesetenv.c
diff --git a/libm/sh/sh4/s_lrintf.S b/libm/sh/sh4/s_lrintf.S
new file mode 100644
index 000000000..d8cec329c
--- /dev/null
+++ b/libm/sh/sh4/s_lrintf.S
@@ -0,0 +1,52 @@
+/* Round argument to nearest integer value. SH4 version.
+ * According to ISO/IEC 9899:1999. This version doesn't handle range error.
+ * If arg is not finite or if the result cannot be represented into a long,
+ * return an unspecified value. No exception raised.
+ *
+ * Copyright (C) 2010 STMicroelectronics Ltd.
+ *
+ * Author: Christian Bruel <christian.bruel@st.com>
+ *
+ * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
+ */
+
+#include <sysdep.h>
+
+ENTRY(lrintf)
+ mov #0,r0
+ sts fpscr,r3
+ lds r0,fpscr
+ flds fr5,fpul
+ mov.l LOCAL(mask),r1
+ sts fpul,r2
+ and r2,r1
+ mov.l LOCAL(midway),r2
+ or r1,r2
+ lds r2,fpul
+ fsts fpul,fr2
+ fadd fr2,fr5
+ ftrc fr5,fpul
+ sts fpul,r0
+ float fpul,fr2
+ fcmp/eq fr5,fr2
+ bf/s 0f
+ mov #1,r2
+ tst r1,r1
+ and r0,r2
+ movt r1
+ shal r1
+ tst r2,r2
+ add #-1,r1
+ bt 0f
+ sub r1,r0
+0:
+ rts
+ lds r3,fpscr
+
+ .align 2
+LOCAL(mask):
+ .long 0x80000000
+LOCAL(midway):
+ .long 1056964608
+
+END(lrintf)
diff --git a/libm/sh/sh4/s_lroundf.S b/libm/sh/sh4/s_lroundf.S
new file mode 100644
index 000000000..fda3a4b91
--- /dev/null
+++ b/libm/sh/sh4/s_lroundf.S
@@ -0,0 +1,39 @@
+/* Round argument toward 0. SH4 version.
+ * According to ISO/IEC 9899:1999. This version doesn't handle range error.
+ * If arg is not finite or if the result cannot be represented into a long,
+ * return an unspecified value. No exception raised.
+ *
+ * Copyright (C) 2010 STMicroelectronics Ltd.
+ *
+ * Author: Christian Bruel <christian.bruel@st.com>
+ *
+ * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
+ */
+
+#include <sysdep.h>
+
+ENTRY(lroundf)
+ mov #0,r0
+ sts fpscr,r3
+ lds r0,fpscr
+ flds fr5,fpul
+ mov.l LOCAL(mask),r1
+ sts fpul,r2
+ and r2,r1
+ mov.l LOCAL(midway),r2
+ or r1,r2
+ lds r2,fpul
+ fsts fpul,fr2
+ fadd fr2,fr5
+ ftrc fr5,fpul
+ sts fpul,r0
+ rts
+ lds r3,fpscr
+
+ .align 2
+LOCAL(mask):
+ .long 0x80000000
+LOCAL(midway):
+ .long 1056964608
+
+END(lroundf)
diff --git a/libpthread/linuxthreads/pthread.c b/libpthread/linuxthreads/pthread.c
index 614cad1f4..db436342f 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 28dd3aa90..71bebb00a 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 beed02ee5..f3e7f1a70 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 8ccf96d76..fc0c6ac3e 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 88ca01a51..102c0dad1 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 000000000..872e4eff6
--- /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 644ec5552..a3fc1cd74 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