Patchwork S/390: Don't include 32 bit fp to int routines for 64 bit libgcc

login
register
mail settings
Submitter Andreas Krebbel
Date March 27, 2014, 1:59 p.m.
Message ID <20140327135904.GA2883@bart>
Download mbox | patch
Permalink /patch/334339/
State New
Headers show

Comments

Andreas Krebbel - March 27, 2014, 1:59 p.m.
Hi,

with r207507 I've made our fp to int conversion routines available
also for the 32 bit biarch libgcc.  The patch included these also for
the 64 bit libgcc which is wrong since it prevent routines like
fixsfti from being generated by libgcc2.c.

The attached patch fixes the following testsuite regressions:
< FAIL: gcc.c-torture/execute/pr49218.c compilation,  -O0
< FAIL: gcc.dg/torture/fp-int-convert-timode.c  -O0  (test for excess errors)

Bye,

-Andreas-

2014-03-27  Andreas Krebbel  <Andreas.Krebbel@de.ibm.com>

	* configure.ac: Set host_address for S/390.
	* configure: Regenerate.
	* config.host: Append t-floattodi to tmake_file depending on
	host_address.
Jakub Jelinek - March 27, 2014, 2:15 p.m.
On Thu, Mar 27, 2014 at 02:59:05PM +0100, Andreas Krebbel wrote:
> Hi,
> 
> with r207507 I've made our fp to int conversion routines available
> also for the 32 bit biarch libgcc.  The patch included these also for
> the 64 bit libgcc which is wrong since it prevent routines like
> fixsfti from being generated by libgcc2.c.
> 
> The attached patch fixes the following testsuite regressions:
> < FAIL: gcc.c-torture/execute/pr49218.c compilation,  -O0
> < FAIL: gcc.dg/torture/fp-int-convert-timode.c  -O0  (test for excess errors)

Does this fix the:
-__fixdfti@@GCC_3.0 FUNC GLOBAL DEFAULT
-__fixsfti@@GCC_3.0 FUNC GLOBAL DEFAULT
-__fixtfti@@GCC_4.1.0 FUNC GLOBAL DEFAULT
-__fixunsdfti@@GCC_3.0 FUNC GLOBAL DEFAULT
-__fixunssfti@@GCC_3.0 FUNC GLOBAL DEFAULT
-__fixunstfti@@GCC_4.1.0 FUNC GLOBAL DEFAULT
regression when comparing
readelf -Ws libgcc_s.so.1 | sed -n '/\.symtab/,$d;/ UND /d;/@GLIBC_PRIVATE/d;/\(GLOBAL\|WEAK\|UNIQUE\)/p' | awk '{ if ($4 == "OBJECT") { printf "%s %s %s %s %s\n", $8, $4, $5, $6, $3 } else { printf "%s %s %s %s\n", $8, $4, $5, $6 }}' | LC_ALL=C sort -u
output between 4.8 and 4.9?

> 2014-03-27  Andreas Krebbel  <Andreas.Krebbel@de.ibm.com>
> 
> 	* configure.ac: Set host_address for S/390.
> 	* configure: Regenerate.
> 	* config.host: Append t-floattodi to tmake_file depending on
> 	host_address.
> 
> diff --git a/libgcc/config.host b/libgcc/config.host
> index f8f74cc..f4a7428 100644
> --- a/libgcc/config.host
> +++ b/libgcc/config.host
> @@ -1027,7 +1027,10 @@ s390-*-linux*)
>  	md_unwind_header=s390/linux-unwind.h
>  	;;
>  s390x-*-linux*)
> -	tmake_file="${tmake_file} s390/t-crtstuff s390/t-linux s390/32/t-floattodi"
> +	tmake_file="${tmake_file} s390/t-crtstuff s390/t-linux"
> +	if test "${host_address}" = 32; then
> +	   tmake_file="${tmake_file} s390/32/t-floattodi"
> +	fi
>  	md_unwind_header=s390/linux-unwind.h
>  	;;
>  s390x-ibm-tpf*)
> --- a/libgcc/configure.ac
> +++ b/libgcc/configure.ac
> @@ -283,7 +283,7 @@ AC_CACHE_CHECK([whether assembler supports CFI directives], [libgcc_cv_cfi],
>  # word size rather than the address size.
>  cat > conftest.c <<EOF
>  #if defined(__x86_64__) || (!defined(__i386__) && defined(__LP64__)) \
> -    || defined(__mips64)
> +    || defined(__mips64) || defined(__s390x__)
>  host_address=64
>  #else
>  host_address=32

Why is this needed?  Don't s390x define __LP64__ ?

	Jakub
Andreas Krebbel - March 27, 2014, 3:32 p.m.
On 27/03/14 15:15, Jakub Jelinek wrote:
> Does this fix the:
> -__fixdfti@@GCC_3.0 FUNC GLOBAL DEFAULT
> -__fixsfti@@GCC_3.0 FUNC GLOBAL DEFAULT
> -__fixtfti@@GCC_4.1.0 FUNC GLOBAL DEFAULT
> -__fixunsdfti@@GCC_3.0 FUNC GLOBAL DEFAULT
> -__fixunssfti@@GCC_3.0 FUNC GLOBAL DEFAULT
> -__fixunstfti@@GCC_4.1.0 FUNC GLOBAL DEFAULT
> regression when comparing
> readelf -Ws libgcc_s.so.1 | sed -n '/\.symtab/,$d;/ UND /d;/@GLIBC_PRIVATE/d;/\(GLOBAL\|WEAK\|UNIQUE\)/p' | awk '{ if ($4 == "OBJECT") { printf "%s %s %s %s %s\n", $8, $4, $5, $6, $3 } else { printf "%s %s %s %s\n", $8, $4, $5, $6 }}' | LC_ALL=C sort -u
> output between 4.8 and 4.9?
Yes. It does fix it.

>>  #if defined(__x86_64__) || (!defined(__i386__) && defined(__LP64__)) \
>> -    || defined(__mips64)
>> +    || defined(__mips64) || defined(__s390x__)
>>  host_address=64
>>  #else
>>  host_address=32
> 
> Why is this needed?  Don't s390x define __LP64__ ?

We do. I'll remove it.

Bye,

-Andreas-
Jakub Jelinek - March 27, 2014, 3:59 p.m.
On Thu, Mar 27, 2014 at 04:32:19PM +0100, Andreas Krebbel wrote:
> On 27/03/14 15:15, Jakub Jelinek wrote:
> > Does this fix the:
> > -__fixdfti@@GCC_3.0 FUNC GLOBAL DEFAULT
> > -__fixsfti@@GCC_3.0 FUNC GLOBAL DEFAULT
> > -__fixtfti@@GCC_4.1.0 FUNC GLOBAL DEFAULT
> > -__fixunsdfti@@GCC_3.0 FUNC GLOBAL DEFAULT
> > -__fixunssfti@@GCC_3.0 FUNC GLOBAL DEFAULT
> > -__fixunstfti@@GCC_4.1.0 FUNC GLOBAL DEFAULT
> > regression when comparing
> > readelf -Ws libgcc_s.so.1 | sed -n '/\.symtab/,$d;/ UND /d;/@GLIBC_PRIVATE/d;/\(GLOBAL\|WEAK\|UNIQUE\)/p' | awk '{ if ($4 == "OBJECT") { printf "%s %s %s %s %s\n", $8, $4, $5, $6, $3 } else { printf "%s %s %s %s\n", $8, $4, $5, $6 }}' | LC_ALL=C sort -u
> > output between 4.8 and 4.9?
> Yes. It does fix it.

Looks ok to me.

> >>  #if defined(__x86_64__) || (!defined(__i386__) && defined(__LP64__)) \
> >> -    || defined(__mips64)
> >> +    || defined(__mips64) || defined(__s390x__)
> >>  host_address=64
> >>  #else
> >>  host_address=32
> > 
> > Why is this needed?  Don't s390x define __LP64__ ?
> 
> We do. I'll remove it.

BTW, your patch forced me to look at abilists of versioned shared libraries
between 4.8.x and trunk and these 6 symbols are the only ones that are
removed from {i?86,x86_64,ppc,ppc64,s390,s390x} arches.

	Jakub

Patch

diff --git a/libgcc/config.host b/libgcc/config.host
index f8f74cc..f4a7428 100644
--- a/libgcc/config.host
+++ b/libgcc/config.host
@@ -1027,7 +1027,10 @@  s390-*-linux*)
 	md_unwind_header=s390/linux-unwind.h
 	;;
 s390x-*-linux*)
-	tmake_file="${tmake_file} s390/t-crtstuff s390/t-linux s390/32/t-floattodi"
+	tmake_file="${tmake_file} s390/t-crtstuff s390/t-linux"
+	if test "${host_address}" = 32; then
+	   tmake_file="${tmake_file} s390/32/t-floattodi"
+	fi
 	md_unwind_header=s390/linux-unwind.h
 	;;
 s390x-ibm-tpf*)
diff --git a/libgcc/configure b/libgcc/configure
index 35896de..9e30d5e 100644
--- a/libgcc/configure
+++ b/libgcc/configure
@@ -4321,7 +4321,7 @@  $as_echo "$libgcc_cv_cfi" >&6; }
 # word size rather than the address size.
 cat > conftest.c <<EOF
 #if defined(__x86_64__) || (!defined(__i386__) && defined(__LP64__)) \
-    || defined(__mips64)
+    || defined(__mips64) || defined(__s390x__)
 host_address=64
 #else
 host_address=32
diff --git a/libgcc/configure.ac b/libgcc/configure.ac
index d877d21..3a1a11c 100644
--- a/libgcc/configure.ac
+++ b/libgcc/configure.ac
@@ -283,7 +283,7 @@  AC_CACHE_CHECK([whether assembler supports CFI directives], [libgcc_cv_cfi],
 # word size rather than the address size.
 cat > conftest.c <<EOF
 #if defined(__x86_64__) || (!defined(__i386__) && defined(__LP64__)) \
-    || defined(__mips64)
+    || defined(__mips64) || defined(__s390x__)
 host_address=64
 #else
 host_address=32