This is the mail archive of the glibc-cvs@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

GNU C Library master sources branch master updated. glibc-2.17-733-g86bd05f


This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "GNU C Library master sources".

The branch, master has been updated
       via  86bd05fbc8b3a635148f6a7d8b4fb89c9a524e58 (commit)
      from  e8bdba36c5fdfdb7e85af2b7ed80ea9013794180 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
http://sourceware.org/git/gitweb.cgi?p=glibc.git;a=commitdiff;h=86bd05fbc8b3a635148f6a7d8b4fb89c9a524e58

commit 86bd05fbc8b3a635148f6a7d8b4fb89c9a524e58
Author: Chris Metcalf <cmetcalf@tilera.com>
Date:   Fri May 24 14:02:31 2013 -0400

    tile: improve detection for missing -mcmodel=large support
    
    The existing test avoided passing -mcmodel=large if the compiler didn't
    support it.  However, we need to test not just the compiler support, but
    also the toolchain (as and ld) support, so make the test more complete.
    In addition, we have to avoid using the hwN_plt() assembly operators if
    that support is missing, so guard the uses with #ifdef NO_PLT_PCREL.
    
    This allows us to properly build glibc with the current community
    binutils, which doesn't yet have the PC-relative PLT operator support.
    The -mcmodel=large support is in gcc 4.8, but the toolchain support
    won't be present in the community until binutils 2.24.

diff --git a/ports/ChangeLog.tile b/ports/ChangeLog.tile
index 7204ae5..33ffa71 100644
--- a/ports/ChangeLog.tile
+++ b/ports/ChangeLog.tile
@@ -1,3 +1,12 @@
+2013-05-23  Chris Metcalf  <cmetcalf@tilera.com>
+
+	* sysdeps/tile/tilegx/Makefile ($(cflags-mcmodel-large)):
+	Test for assembler and linker support for "-mcmodel=large -fpic"
+	in addition to compiler support; provide -DNO_PLT_PCREL if not.
+	* sysdeps/tile/start.S [NO_PLT_PCREL]: Guard for no PC-relative
+	PLT operators in assembly.
+	* sysdeps/tile/crti.S [NO_PLT_PCREL]: Likewise.
+
 2013-05-22  Edjunior Barbosa Machado  <emachado@linux.vnet.ibm.com>
 
 	* sysdeps/unix/sysv/linux/tile/bits/siginfo.h (siginfo_t): Fix comment
diff --git a/ports/sysdeps/tile/crti.S b/ports/sysdeps/tile/crti.S
index 9046010..7e8e559 100644
--- a/ports/sysdeps/tile/crti.S
+++ b/ports/sysdeps/tile/crti.S
@@ -95,7 +95,7 @@ _init:
 	LD_PTR r0, r0
 	BEQZ r0, .Lno_weak_fn
 	jalr r0
-#elif defined(__tilegx__)
+#elif defined(__tilegx__) && !defined(NO_PLT_PCREL)
 	/* Since we are calling from the start of the object to the PLT,
 	   call by loading the full address into a register.  */
 	lnk r2
diff --git a/ports/sysdeps/tile/start.S b/ports/sysdeps/tile/start.S
index 9941564..3e7ec5c 100644
--- a/ports/sysdeps/tile/start.S
+++ b/ports/sysdeps/tile/start.S
@@ -62,6 +62,13 @@
 #include <sysdep.h>
 #include <arch/abi.h>
 
+/* Just create no-ops if we don't support PC-relative PLT relocations. */
+#ifdef NO_PLT_PCREL
+# define hw2_last_plt(x)	0
+# define hw1_plt(x)		0
+# define hw0_plt(x)		0
+#endif
+
 	.text
 	.global _start
 	.type   _start,@function
@@ -155,7 +162,11 @@ _start:
 	}
 	{
 	 ADD_PTR r4, r4, r13
-	 jalr r12
+# ifdef NO_PLT_PCREL
+	 j plt(__libc_start_main)
+# else
+	 jr r12
+# endif
 	}
 #else
 	 addli r0, r13, lo16(main - .Lmy_pc)
diff --git a/ports/sysdeps/tile/tilegx/Makefile b/ports/sysdeps/tile/tilegx/Makefile
index d3a0e97..4281dd9 100644
--- a/ports/sysdeps/tile/tilegx/Makefile
+++ b/ports/sysdeps/tile/tilegx/Makefile
@@ -1,12 +1,16 @@
 include $(common-objpfx)cflags-mcmodel-large.mk
 
+# Check for gcc to support the command-line switch, and for
+# binutils to support the hwN_plt() assembly operators and relocations.
 $(common-objpfx)cflags-mcmodel-large.mk: $(common-objpfx)config.make
 	mcmodel=no; \
-	$(CC) -S -o /dev/null -xc /dev/null -mcmodel=large && mcmodel=yes; \
+	(echo 'int main() { return getuid(); }' | \
+	 $(CC) -o /dev/null -xc - -mcmodel=large -fpic) && mcmodel=yes; \
 	echo "cflags-mcmodel-large = $$mcmodel" > $@
 
-ifeq ($(subdir),csu)
 ifeq (yes,$(cflags-mcmodel-large))
+
+ifeq ($(subdir),csu)
 # elf-init.c is in libc_nonshared.o (the end of the shared object) but
 # must reach the _init symbol at the very start of the shared object.
 CFLAGS-elf-init.c += -mcmodel=large
@@ -15,4 +19,17 @@ CFLAGS-elf-init.c += -mcmodel=large
 # with profiling, but calls to libc.so via the PLT at the very end.
 CFLAGS-gmon-start.c += -mcmodel=large
 endif
+
+else
+
+# Don't try to compile assembly code with hwN_plt() directives if the
+# toolchain doesn't support -mcmodel=large.
+ifeq ($(subdir),csu)
+CPPFLAGS-start.S += -DNO_PLT_PCREL
+CPPFLAGS-crti.S += -DNO_PLT_PCREL
+endif
+ifeq ($(subdir),nptl)
+CPPFLAGS-pt-crti.S += -DNO_PLT_PCREL
+endif
+
 endif

-----------------------------------------------------------------------

Summary of changes:
 ports/ChangeLog.tile               |    9 +++++++++
 ports/sysdeps/tile/crti.S          |    2 +-
 ports/sysdeps/tile/start.S         |   13 ++++++++++++-
 ports/sysdeps/tile/tilegx/Makefile |   21 +++++++++++++++++++--
 4 files changed, 41 insertions(+), 4 deletions(-)


hooks/post-receive
-- 
GNU C Library master sources


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]