Browse Source

merge uClibc changes

Waldemar Brodkorb 9 years ago
parent
commit
928ab832ca

+ 2 - 0
Rules.mak

@@ -293,6 +293,8 @@ CPU_CFLAGS-y := -funsigned-char -fno-builtin
 
 $(eval $(call check-gcc-var,-fno-asm))
 CPU_CFLAGS-y += $(CFLAG_-fno-asm)
+$(eval $(call check-gcc-var,-fmerge-all-constants))
+CPU_CFLAGS-y += $(CFLAG_-fmerge-all-constants)
 
 ifeq ($(UCLIBC_HAS_SOFT_FLOAT),y)
 ifneq ($(TARGET_ARCH),bfin)

+ 6 - 0
extra/Configs/defconfigs/arc/arcv2_defconfig

@@ -10,16 +10,22 @@ LDSO_RUNPATH=y
 UCLIBC_HAS_THREADS_NATIVE=y
 PTHREADS_DEBUG_SUPPORT=y
 UCLIBC_HAS_OBSTACK=y
+UCLIBC_HAS_UTMPX=y
+UCLIBC_HAS_UTMP=y
 UCLIBC_SUSV2_LEGACY=y
 UCLIBC_SUSV3_LEGACY=y
 UCLIBC_SUSV4_LEGACY=y
 UCLIBC_HAS_PROGRAM_INVOCATION_NAME=y
+UCLIBC_HAS_LIBUTIL=y
 UCLIBC_HAS_OBSOLETE_BSD_SIGNAL=y
 UCLIBC_SV4_DEPRECATED=y
 UCLIBC_HAS_RPC=y
 UCLIBC_HAS_FULL_RPC=y
+UCLIBC_USE_NETLINK=y
+UCLIBC_SUPPORT_AI_ADDRCONFIG=y
 UCLIBC_HAS_RESOLVER_SUPPORT=y
 UCLIBC_HAS_LIBRESOLV_STUB=y
+UCLIBC_HAS_LIBNSL_STUB=y
 UCLIBC_HAS_LOCALE=y
 UCLIBC_HAS_GLIBC_CUSTOM_STREAMS=y
 UCLIBC_HAS_NFTW=y

+ 6 - 0
extra/Configs/defconfigs/arc/defconfig

@@ -9,16 +9,22 @@ LDSO_RUNPATH=y
 UCLIBC_HAS_THREADS_NATIVE=y
 PTHREADS_DEBUG_SUPPORT=y
 UCLIBC_HAS_OBSTACK=y
+UCLIBC_HAS_UTMPX=y
+UCLIBC_HAS_UTMP=y
 UCLIBC_SUSV2_LEGACY=y
 UCLIBC_SUSV3_LEGACY=y
 UCLIBC_SUSV4_LEGACY=y
 UCLIBC_HAS_PROGRAM_INVOCATION_NAME=y
+UCLIBC_HAS_LIBUTIL=y
 UCLIBC_HAS_OBSOLETE_BSD_SIGNAL=y
 UCLIBC_SV4_DEPRECATED=y
 UCLIBC_HAS_RPC=y
 UCLIBC_HAS_FULL_RPC=y
+UCLIBC_USE_NETLINK=y
+UCLIBC_SUPPORT_AI_ADDRCONFIG=y
 UCLIBC_HAS_RESOLVER_SUPPORT=y
 UCLIBC_HAS_LIBRESOLV_STUB=y
+UCLIBC_HAS_LIBNSL_STUB=y
 UCLIBC_HAS_LOCALE=y
 UCLIBC_HAS_GLIBC_CUSTOM_STREAMS=y
 UCLIBC_HAS_NFTW=y

+ 2 - 2
extra/locale/Makefile.in

@@ -46,7 +46,7 @@ locale_OBJ := $(locale_OUT)/locale_data.o
 
 CFLAGS-locale_data.c := -D__WCHAR_ENABLED -I$(locale_OUT) -I$(locale_DIR)
 
-#headers-$(UCLIBC_HAS_LOCALE) += $(locale_headers-y)
+headers_dep += $(locale_headers-y)
 headers: $(locale_headers-y)
 
 libc-$(UCLIBC_HAS_LOCALE) += $(locale_OBJ)
@@ -68,7 +68,7 @@ $(locale_OUT)%.s:  $(locale_OUT)%.S FORCE ; $(compile.s)
 $(locale_OUT)%.dep:
 
 
-locale_headers: headers $(top_builddir)include/bits/uClibc_locale_data.h
+locale_headers: $(top_builddir)include/bits/uClibc_locale_data.h
 
 # make sure that the host system has locales (this check is ok for uClibc/glibc)
 # we do not know though which locales were really enabled for libc at build time

+ 1 - 1
include/libc-symbols.h

@@ -111,7 +111,7 @@
 /* Indirect stringification.  Doing two levels allows
  * the parameter to be a macro itself.
  */
-#define __stringify_1(x)    #x
+#define __stringify_1(x...)    #x
 #define __stringify(x)      __stringify_1(x)
 
 #ifdef __UCLIBC_HAVE_ASM_SET_DIRECTIVE__

+ 2 - 0
ldso/include/ldsodefs.h

@@ -111,7 +111,9 @@ EXTERN size_t _dl_tls_static_used;
 /* Alignment requirement of the static TLS block.  */
 EXTERN size_t _dl_tls_static_align;
 /* Function pointer for catching TLS errors.  */
+#if 1 /* def _LIBC_REENTRANT */
 EXTERN void **(*_dl_error_catch_tsd) (void) __attribute__ ((const));
+#endif
 
 /* Number of additional entries in the slotinfo array of each slotinfo
    list element.  A large number makes it almost certain take we never

+ 2 - 10
ldso/ldso/arm/dl-startup.h

@@ -47,11 +47,7 @@ __asm__(
 	"	ldr	r0, .L_FINI_PROC\n"
 	"	ldr	r0, [sl, r0]\n"
 	"	@ jump to the user_s entry point\n"
-#if defined(__USE_BX__)
-	"	bx	r6\n"
-#else
-	"	mov	pc, r6\n"
-#endif
+	"	" __stringify(BX(r6)) "\n"
 	".L_GET_GOT:\n"
 	"	.word	_GLOBAL_OFFSET_TABLE_ - .L_GOT_GOT - 4\n"
 	".L_SKIP_ARGS:\n"
@@ -113,11 +109,7 @@ __asm__(
 	"	ldr	r0, .L_FINI_PROC\n"
 	"	ldr	r0, [r7, r0]\n"
 	"	@ jump to the user_s entry point\n"
-#if defined(__USE_BX__)
-	"	bx	r6\n"
-#else
-	"	mov	pc, r6\n"
-#endif
+	"	" __stringify(BX(r6)) "\n"
 	"\n\n"
 	".L_GET_GOT:\n"
 	"	.word	_GLOBAL_OFFSET_TABLE_ - .L_GOT_GOT - 4\n"

+ 6 - 12
ldso/ldso/arm/resolve.S

@@ -90,12 +90,10 @@
  * dl-startup.c).
  */
 
-#include <sys/syscall.h>
+#include <features.h>
 #include <bits/arm_asm.h>
 #include <bits/arm_bx.h>
 
-#include <features.h>
-
 #define sl r10
 #define fp r11
 #define ip r12
@@ -114,8 +112,8 @@ _dl_linux_resolve:
          @ function must branch to the real function, and that expects
          @ r0-r3 and lr to be as they were before the whole PLT stuff -
          @ ip can be trashed.
-	 @ This routine is called after pushing lr, so we must push an odd
-	 @ number of words to keep the stack correctly aligned.
+         @ This routine is called after pushing lr, so we must push an odd
+         @ number of words to keep the stack correctly aligned.
 
          stmdb sp!, {r0, r1, r2, r3, r4}
          ldr r0, [lr, #-4]       @ r0 :        = [lr-4] (GOT_TABLE[1])
@@ -124,16 +122,12 @@ _dl_linux_resolve:
                                  @ ~x = -x-1, therefore ~(r1>>2) = (-((lr-ip)>>2)-1)
                                  @ = - ((lr-ip)/4) - 1 = (ip - lr - 4)/4, as required
 
-	bl _dl_linux_resolver
+        bl _dl_linux_resolver
 
-	mov ip, r0
+        mov ip, r0
         ldmia sp!, {r0, r1, r2, r3, r4, lr}
 
-#if defined(__USE_BX__)
-	bx ip
-#else
-	mov pc,ip
-#endif
+        BX(ip)
 #else
        @ In the thumb case _dl_linux_resolver is thumb.  If a bl is used
        @ from arm code the linker will insert a stub call which, with

+ 7 - 2
ldso/ldso/dl-tls.c

@@ -963,8 +963,13 @@ static bool tls_init_tp_called;
 void ** __attribute__ ((const))
 _dl_initial_error_catch_tsd (void)
 {
-	static void *data;
-	return &data;
+	static
+#if 0 /* def ARCH_NEEDS_BOOTSTRAP_RELOCS */
+		/* If we have to do bootstrap relocs anyway we might as well */
+		__thread
+# endif
+		void *__tsd_data;
+	return &__tsd_data;
 }
 
 #ifdef SHARED

+ 2 - 1
ldso/ldso/ldso.c

@@ -1208,6 +1208,7 @@ of this helper program; chances are you did not intend to run this program.\n\
 	}
 #endif
 #ifdef __UCLIBC_HAS_SSP__
+	_dl_debug_early("Setting up SSP guards\n");
 	/* Set up the stack checker's canary.  */
 	stack_chk_guard = _dl_setup_stack_chk_guard ();
 # ifdef THREAD_SET_STACK_GUARD
@@ -1280,7 +1281,7 @@ of this helper program; chances are you did not intend to run this program.\n\
 
 	}
 
-	_dl_debug_early ("\nprelink checking: %s\n", prelinked ? "ok" : "failed");
+	_dl_debug_early ("prelink checking: %s\n", prelinked ? "ok" : "failed");
 
 	if (prelinked) {
 		if (_dl_loaded_modules->dynamic_info[DT_GNU_CONFLICT_IDX]) {

+ 9 - 2
libc/misc/pthread/tsd.c

@@ -1,11 +1,18 @@
+/*
+ * Copyright (C) 2006 by Steven J. Hill <sjhill@realitydiluted.com>
+ *
+ * Licensed under the LGPL v2.1 or later, see the file COPYING.LIB in this tarball.
+ */
 /* libpthread sets _dl_error_catch_tsd to point to this function.
    We define it here instead of in libpthread so that it doesn't
    need to have a TLS segment of its own just for this one pointer.  */
 
+#include <features.h>
+
 void **__libc_dl_error_tsd(void) __attribute__ ((const));
 void ** __attribute__ ((const))
 __libc_dl_error_tsd (void)
 {
-  static __thread void *data __attribute__ ((tls_model ("initial-exec")));
-  return &data;
+  static __thread void *__tsd_data attribute_tls_model_ie;
+  return &__tsd_data;
 }

+ 3 - 15
libc/string/arm/_memcpy.S

@@ -111,11 +111,7 @@ _memcpy:
 	bcc	.Lmemcpy_backwards
 
 	IT(t, eq)			/* Quick abort for src=dst */
-#if defined(__USE_BX__)
-        bxeq    lr
-#else
-        moveq   pc, lr
-#endif
+	BXC(eq, lr)
 	stmdb	sp!, {r0, lr}		/* memcpy() returns dest addr */
 	subs	r2, r2, #4
 	blt	.Lmemcpy_fl4		/* less than 4 bytes */
@@ -455,11 +451,7 @@ _memcpy:
 	/* less than 4 bytes to go */
 	adds	r2, r2, #4
 	IT(t, eq)
-#if defined(__USE_BX__)
-        bxeq    lr
-#else
-	moveq	pc, lr			/* done */
-#endif
+	BXC(eq, lr)			/* done */
 	/* copy the crud byte at a time */
 	cmp	r2, #2
 	ldrb	r3, [r1, #-1]!
@@ -477,11 +469,7 @@ _memcpy:
 	ldrgtb	r3, [r1, #-1]!
 	strgtb	r3, [r0, #-1]!
 #endif
-#if defined(__USE_BX__)
-        bx      lr
-#else
-	mov	pc, lr
-#endif
+	BX(lr)
 	/* erg - unaligned destination */
 .Lmemcpy_bdestul:
 	cmp	r12, #2

+ 2 - 10
libc/string/arm/memcmp.S

@@ -67,11 +67,7 @@ memcmp:
 	subs	r2, r2, #1
 	IT(tt, mi)
 	movmi	r0, #0
-#if defined(__USE_BX__)
-        bxmi    lr
-#else
-	movmi	pc, lr
-#endif
+	BXC(mi, lr)
 	/* ip == last src address to compare */
 	add	ip, r0, r2
 1:
@@ -82,11 +78,7 @@ memcmp:
 	cmpcs	r2, r3
 	beq	1b
 	sub	r0, r2, r3
-#if defined(__USE_BX__)
-        bx      lr
-#else
- 	mov	pc, lr
-#endif
+	BX(lr)
 #endif
 
 .size memcmp,.-memcmp

+ 2 - 11
libc/string/arm/memset.S

@@ -17,7 +17,6 @@
    <http://www.gnu.org/licenses/>.  */
 
 #include <features.h>
-#include <sys/syscall.h>
 #include <bits/arm_asm.h>
 #include <bits/arm_bx.h>
 
@@ -109,11 +108,7 @@ memset:
 2:
 	movs	a3, a3		@ anything left?
 	IT(t, eq)
-#if defined(__USE_BX__)
-        bxeq    lr
-#else
-        moveq	pc, lr		@ nope
-#endif
+	BXC(eq, lr)			@ nope
 #if defined (__thumb2__)
 1:
 	strb	a2, [a4], #1
@@ -131,11 +126,7 @@ memset:
 	strb	a2, [a4], $1
 	strb	a2, [a4], $1
 	strb	a2, [a4], $1
-#if defined(__USE_BX__)
-        bx      lr
-#else
- 	mov	pc, lr
-#endif
+	BX(lr)
 #endif
 #endif
 

+ 1 - 5
libc/string/arm/strcmp.S

@@ -63,11 +63,7 @@ strcmp:
 	cmpcs	r2, r3
 	beq	1b
 	sub	r0, r2, r3
-#if defined(__USE_BX__)
-        bx      lr
-#else
-  	mov	pc, lr
-#endif
+	BX(lr)
 #endif
 
 .size strcmp,.-strcmp

+ 1 - 6
libc/string/arm/strlen.S

@@ -18,7 +18,6 @@
 
 #include <features.h>
 #include <endian.h>
-#include <sys/syscall.h>
 #include <bits/arm_asm.h>
 #include <bits/arm_bx.h>
 
@@ -99,11 +98,7 @@ Llastword:				@ drop through to here once we find a
 	IT(t, ne)
 	addne   r0, r0, $1              @  must be zero)
 #endif
-#if defined(__USE_BX__)
-        bx      lr
-#else
-  	mov	pc,lr
-#endif
+	BX(lr)
 #endif
 
 .size strlen,.-strlen

+ 1 - 6
libc/sysdeps/linux/arm/__longjmp.S

@@ -98,12 +98,7 @@ __longjmp:
 	ldcl	p1, cr14, [r12], #8
 	ldcl	p1, cr15, [r12], #8
 #endif
-
-#if defined(__USE_BX__)
-	bx	lr
-#else
-	mov pc, lr
-#endif
+	BX(lr)
 #endif
 
 .size __longjmp,.-__longjmp

+ 6 - 6
libc/sysdeps/linux/arm/bits/arm_asm.h

@@ -13,12 +13,12 @@
    unified assembly syntax.  */
 #define IT(t, cond)
 /* Code to return from a thumb function stub.  */
-#ifdef __ARM_ARCH_4T__
-#define POP_RET pop	{r2, pc}
-#else
-#define POP_RET pop	{r2, r3}; bx	r3
-#endif
-#endif
+# if defined __ARM_ARCH_4T__ && defined __THUMB_INTERWORK__
+#  define POP_RET pop   {r2, r3}; bx    r3
+# else
+#  define POP_RET pop   {r2, pc}
+# endif
+#endif /* __thumb2__ */
 
 #if defined(__ARM_ARCH_6M__)
 /* Force arm mode to flush out errors on M profile cores.  */

+ 9 - 3
libc/sysdeps/linux/arm/bits/arm_bx.h

@@ -24,11 +24,17 @@
 #endif /* features.h not yet included */
 
 #if defined(__USE_BX__)
-# if (   defined (__ARM_ARCH_2__)  || defined (__ARM_ARCH_3__) \
-      || defined (__ARM_ARCH_3M__) || defined (__ARM_ARCH_4__) \
-     )
+# if (__ARM_ARCH <= 4 && !defined __ARM_ARCH_4T__)
 #  error Use of BX was requested, but is not available on the target processor.
 # endif /* ARCH level */
 #endif /* __USE_BX__ */
 
+#if defined(__USE_BX__) && (__ARM_ARCH > 4 || (__ARM_ARCH == 4 && defined __ARM_ARCH_4T__))
+# define BX(reg)	bx reg
+# define BXC(cond, reg)	bx##cond reg
+#else
+# define BX(reg)	mov pc, reg
+# define BXC(cond, reg)	mov##cond pc, reg
+#endif
+
 #endif /* _ARM_BX_H */

+ 26 - 0
libc/sysdeps/linux/arm/bits/uClibc_arch_features.h

@@ -48,6 +48,32 @@
 /* only weird assemblers generally need this */
 #undef __UCLIBC_ASM_LINE_SEP__
 
+
+/* The __ARM_ARCH define is provided by gcc 4.8.  Construct it otherwise.  */
+#ifndef __ARM_ARCH
+# ifdef __ARM_ARCH_2__
+#  define __ARM_ARCH 2
+# elif defined (__ARM_ARCH_3__) || defined (__ARM_ARCH_3M__)
+#  define __ARM_ARCH 3
+# elif defined (__ARM_ARCH_4__) || defined (__ARM_ARCH_4T__)
+#  define __ARM_ARCH 4
+# elif defined (__ARM_ARCH_5__) || defined (__ARM_ARCH_5E__) \
+       || defined(__ARM_ARCH_5T__) || defined(__ARM_ARCH_5TE__) \
+       || defined(__ARM_ARCH_5TEJ__)
+#  define __ARM_ARCH 5
+# elif defined (__ARM_ARCH_6__) || defined(__ARM_ARCH_6J__) \
+       || defined (__ARM_ARCH_6Z__) || defined(__ARM_ARCH_6ZK__) \
+       || defined (__ARM_ARCH_6K__) || defined(__ARM_ARCH_6T2__)
+#  define __ARM_ARCH 6
+# elif defined (__ARM_ARCH_7__) || defined(__ARM_ARCH_7A__) \
+       || defined(__ARM_ARCH_7R__) || defined(__ARM_ARCH_7M__) \
+       || defined(__ARM_ARCH_7EM__)
+#  define __ARM_ARCH 7
+# else
+#  error unknown arm architecture
+# endif
+#endif
+
 #ifdef __GNUC__
 # define __need_uClibc_config_h
 # include <bits/uClibc_config.h>

+ 2 - 5
libc/sysdeps/linux/arm/clone.S

@@ -128,11 +128,8 @@ __clone:
 	beq	1f
 	pop	{r4, r7}
 	blt	__error
-#if defined(__USE_BX__)
-	bxne	lr
-#else
-	movne	pc, lr
-#endif
+	IT(t, ne)
+	BXC(ne, lr)
 
 	cfi_startproc
 .fnend

+ 1 - 5
libc/sysdeps/linux/arm/mmap64.S

@@ -92,11 +92,7 @@ mmap64:
 	cmn	r0, $4096
 	ldmfd	sp!, {r4, r5}
 	IT(t, cc)
-#if defined(__USE_BX__)
-	bxcc	lr
-#else
-	movcc	pc, lr
-#endif
+	BXC(cc, lr)
 	b	__syscall_error
 .Linval:
 	mov	r0, $-EINVAL

+ 2 - 6
libc/sysdeps/linux/arm/syscall-eabi.S

@@ -15,7 +15,7 @@
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
-#include <sys/syscall.h>
+#include <features.h>
 #include <bits/arm_asm.h>
 #include <bits/arm_bx.h>
 
@@ -62,11 +62,7 @@ syscall:
 	ldmfd	sp!, {r4, r5, r6, r7}
 	cmn	r0, #4096
 	IT(t, cc)
-#if defined(__USE_BX__)
-	bxcc	lr
-#else
-	movcc	pc, lr
-#endif
+	BXC(cc, lr)
 	b	__syscall_error
 #endif
 

+ 3 - 11
libc/sysdeps/linux/arm/sysdep.h

@@ -21,7 +21,6 @@
 
 #include <common/sysdep.h>
 #include <bits/arm_bx.h>
-
 #include <sys/syscall.h>
 /* For Linux we can use the system call table in the header file
 	/usr/include/asm/unistd.h
@@ -50,17 +49,10 @@
 #ifdef __APCS_32__
 #define LOADREGS(cond, base, reglist...)\
 	ldm##cond	base,reglist
-#ifdef __USE_BX__
-#define RETINSTR(cond, reg)	\
-	bx##cond	reg
-#define DO_RET(_reg)		\
-	bx _reg
-#else
-#define RETINSTR(cond, reg)	\
-	mov##cond	pc, reg
+#define RETINSTR(cond, reg) \
+	BXC(cond, reg)
 #define DO_RET(_reg)		\
-	mov pc, _reg
-#endif
+	BX(_reg)
 #else  /* APCS-26 */
 #define LOADREGS(cond, base, reglist...)	\
 	ldm##cond	base,reglist^

+ 2 - 10
libc/sysdeps/linux/arm/vfork.S

@@ -74,11 +74,7 @@ __vfork:
 	RESTORE_PID
 	cmn	r0, #4096
 	IT(t, cc)
-#if defined(__USE_BX__)
-	bxcc	lr
-#else
-	movcc	pc, lr
-#endif
+	BXC(cc, lr)
 
 	/* Check if vfork even exists.  */
 	ldr     r1, =-ENOSYS
@@ -92,11 +88,7 @@ __vfork:
 
 	/* Syscall worked.  Return to child/parent */
 	IT(t, cc)
-#if defined(__USE_BX__)
-	bxcc	lr
-#else
-	movcc   pc, lr
-#endif
+	BXC(cc, lr)
 
 __error:
 	b	__syscall_error