public inbox for libc-ports@sourceware.org
 help / color / mirror / Atom feed
* [PATCH] tile: improve detection for missing -mcmodel=large support
@ 2013-05-23 19:25 Chris Metcalf
  2013-05-23 22:17 ` Carlos O'Donell
  0 siblings, 1 reply; 7+ messages in thread
From: Chris Metcalf @ 2013-05-23 19:25 UTC (permalink / raw)
  To: libc-ports

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.
---
This change should also be applied on the 2.17 release branch for
when we release a 2.17.1.

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.

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..b0abc2d 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
-- 
1.7.10.3

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH] tile: improve detection for missing -mcmodel=large support
  2013-05-23 19:25 [PATCH] tile: improve detection for missing -mcmodel=large support Chris Metcalf
@ 2013-05-23 22:17 ` Carlos O'Donell
  2013-05-24  2:05   ` Chris Metcalf
  0 siblings, 1 reply; 7+ messages in thread
From: Carlos O'Donell @ 2013-05-23 22:17 UTC (permalink / raw)
  To: Chris Metcalf; +Cc: libc-ports

On 05/23/2013 03:20 PM, Chris Metcalf wrote:
> 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.
> ---
> This change should also be applied on the 2.17 release branch for
> when we release a 2.17.1.

No, just backport it immediately after checkin to master. The 2.17
branch *is* 2.17.1 in development and when we get enough changes in
that branch we cut it and make a 2.17.1 release.

You need release manager ACK though, which is David Miller. We normally
handle backports via bugzilla bugs with keyword glibc_2.17, but it
can be less formal if you just CC David and ask for ACK.

> 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.

I didn't look at the rest of the patch but I assume it works
for you.

Cheers,
Carlos.

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH] tile: improve detection for missing -mcmodel=large support
  2013-05-23 22:17 ` Carlos O'Donell
@ 2013-05-24  2:05   ` Chris Metcalf
  2013-05-28 18:37     ` Chris Metcalf
  0 siblings, 1 reply; 7+ messages in thread
From: Chris Metcalf @ 2013-05-24  2:05 UTC (permalink / raw)
  To: Carlos O'Donell; +Cc: libc-ports, David S. Miller

(Adding David explicitly to Cc.)

On 5/23/2013 6:17 PM, Carlos O'Donell wrote:
> On 05/23/2013 03:20 PM, Chris Metcalf wrote:
>> 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.
>> ---
>> This change should also be applied on the 2.17 release branch for
>> when we release a 2.17.1.
> No, just backport it immediately after checkin to master. The 2.17
> branch *is* 2.17.1 in development and when we get enough changes in
> that branch we cut it and make a 2.17.1 release.
>
> You need release manager ACK though, which is David Miller. We normally
> handle backports via bugzilla bugs with keyword glibc_2.17, but it
> can be less formal if you just CC David and ask for ACK.

David, is it OK if I backport this to the 2.17 branch after I commit?  Do you want a BZ# to track it?

-- 
Chris Metcalf, Tilera Corp.
http://www.tilera.com

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH] tile: improve detection for missing -mcmodel=large support
  2013-05-24  2:05   ` Chris Metcalf
@ 2013-05-28 18:37     ` Chris Metcalf
  2013-06-06 20:10       ` Chris Metcalf
  0 siblings, 1 reply; 7+ messages in thread
From: Chris Metcalf @ 2013-05-28 18:37 UTC (permalink / raw)
  To: David S. Miller; +Cc: libc-ports

I pushed this to master.  "Ping" for David Miller to comment on 2.17 acceptability.  Thanks!

On 5/23/2013 10:05 PM, Chris Metcalf wrote:
> (Adding David explicitly to Cc.)
>
> On 5/23/2013 6:17 PM, Carlos O'Donell wrote:
>> On 05/23/2013 03:20 PM, Chris Metcalf wrote:
>>> 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.
>>> ---
>>> This change should also be applied on the 2.17 release branch for
>>> when we release a 2.17.1.
>> No, just backport it immediately after checkin to master. The 2.17
>> branch *is* 2.17.1 in development and when we get enough changes in
>> that branch we cut it and make a 2.17.1 release.
>>
>> You need release manager ACK though, which is David Miller. We normally
>> handle backports via bugzilla bugs with keyword glibc_2.17, but it
>> can be less formal if you just CC David and ask for ACK.
> David, is it OK if I backport this to the 2.17 branch after I commit?  Do you want a BZ# to track it?
>

-- 
Chris Metcalf, Tilera Corp.
http://www.tilera.com

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH] tile: improve detection for missing -mcmodel=large support
  2013-05-28 18:37     ` Chris Metcalf
@ 2013-06-06 20:10       ` Chris Metcalf
  2013-06-06 21:36         ` David Miller
  0 siblings, 1 reply; 7+ messages in thread
From: Chris Metcalf @ 2013-06-06 20:10 UTC (permalink / raw)
  To: David S. Miller; +Cc: libc-ports

Ping! for David Miller.

On 5/28/2013 2:37 PM, Chris Metcalf wrote:
> I pushed this to master.  "Ping" for David Miller to comment on 2.17 acceptability.  Thanks!
>
> On 5/23/2013 10:05 PM, Chris Metcalf wrote:
>> (Adding David explicitly to Cc.)
>>
>> On 5/23/2013 6:17 PM, Carlos O'Donell wrote:
>>> On 05/23/2013 03:20 PM, Chris Metcalf wrote:
>>>> 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.
>>>> ---
>>>> This change should also be applied on the 2.17 release branch for
>>>> when we release a 2.17.1.
>>> No, just backport it immediately after checkin to master. The 2.17
>>> branch *is* 2.17.1 in development and when we get enough changes in
>>> that branch we cut it and make a 2.17.1 release.
>>>
>>> You need release manager ACK though, which is David Miller. We normally
>>> handle backports via bugzilla bugs with keyword glibc_2.17, but it
>>> can be less formal if you just CC David and ask for ACK.
>> David, is it OK if I backport this to the 2.17 branch after I commit?  Do you want a BZ# to track it?
>>

-- 
Chris Metcalf, Tilera Corp.
http://www.tilera.com

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH] tile: improve detection for missing -mcmodel=large support
  2013-06-06 20:10       ` Chris Metcalf
@ 2013-06-06 21:36         ` David Miller
  2013-06-09 15:22           ` Chris Metcalf
  0 siblings, 1 reply; 7+ messages in thread
From: David Miller @ 2013-06-06 21:36 UTC (permalink / raw)
  To: cmetcalf; +Cc: libc-ports

From: Chris Metcalf <cmetcalf@tilera.com>
Date: Thu, 6 Jun 2013 16:10:49 -0400

> Ping! for David Miller.

This is fine to backport to 2.17, thanks.

> On 5/28/2013 2:37 PM, Chris Metcalf wrote:
>> I pushed this to master.  "Ping" for David Miller to comment on 2.17 acceptability.  Thanks!
>>
>> On 5/23/2013 10:05 PM, Chris Metcalf wrote:
>>> (Adding David explicitly to Cc.)
>>>
>>> On 5/23/2013 6:17 PM, Carlos O'Donell wrote:
>>>> On 05/23/2013 03:20 PM, Chris Metcalf wrote:
>>>>> 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.
>>>>> ---
>>>>> This change should also be applied on the 2.17 release branch for
>>>>> when we release a 2.17.1.
>>>> No, just backport it immediately after checkin to master. The 2.17
>>>> branch *is* 2.17.1 in development and when we get enough changes in
>>>> that branch we cut it and make a 2.17.1 release.
>>>>
>>>> You need release manager ACK though, which is David Miller. We normally
>>>> handle backports via bugzilla bugs with keyword glibc_2.17, but it
>>>> can be less formal if you just CC David and ask for ACK.
>>> David, is it OK if I backport this to the 2.17 branch after I commit?  Do you want a BZ# to track it?

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH] tile: improve detection for missing -mcmodel=large support
  2013-06-06 21:36         ` David Miller
@ 2013-06-09 15:22           ` Chris Metcalf
  0 siblings, 0 replies; 7+ messages in thread
From: Chris Metcalf @ 2013-06-09 15:22 UTC (permalink / raw)
  To: David Miller; +Cc: libc-ports

On 6/6/2013 5:36 PM, David Miller wrote:
> From: Chris Metcalf <cmetcalf@tilera.com>
> Date: Thu, 6 Jun 2013 16:10:49 -0400
>
>> Ping! for David Miller.
> This is fine to backport to 2.17, thanks.

Pushed to release/2.17/master as  201b499c978b, thanks.

>> On 5/28/2013 2:37 PM, Chris Metcalf wrote:
>>> I pushed this to master.  "Ping" for David Miller to comment on 2.17 acceptability.  Thanks!
>>>
>>> On 5/23/2013 10:05 PM, Chris Metcalf wrote:
>>>> (Adding David explicitly to Cc.)
>>>>
>>>> On 5/23/2013 6:17 PM, Carlos O'Donell wrote:
>>>>> On 05/23/2013 03:20 PM, Chris Metcalf wrote:
>>>>>> 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.
>>>>>> ---
>>>>>> This change should also be applied on the 2.17 release branch for
>>>>>> when we release a 2.17.1.
>>>>> No, just backport it immediately after checkin to master. The 2.17
>>>>> branch *is* 2.17.1 in development and when we get enough changes in
>>>>> that branch we cut it and make a 2.17.1 release.
>>>>>
>>>>> You need release manager ACK though, which is David Miller. We normally
>>>>> handle backports via bugzilla bugs with keyword glibc_2.17, but it
>>>>> can be less formal if you just CC David and ask for ACK.
>>>> David, is it OK if I backport this to the 2.17 branch after I commit?  Do you want a BZ# to track it?

-- 
Chris Metcalf, Tilera Corp.
http://www.tilera.com

^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2013-06-09 15:22 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2013-05-23 19:25 [PATCH] tile: improve detection for missing -mcmodel=large support Chris Metcalf
2013-05-23 22:17 ` Carlos O'Donell
2013-05-24  2:05   ` Chris Metcalf
2013-05-28 18:37     ` Chris Metcalf
2013-06-06 20:10       ` Chris Metcalf
2013-06-06 21:36         ` David Miller
2013-06-09 15:22           ` Chris Metcalf

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).