This is the mail archive of the
libc-alpha@sourceware.org
mailing list for the glibc project.
Re: RFC: remove the "tile" architecture from glibc
- From: Adhemerval Zanella <adhemerval dot zanella at linaro dot org>
- To: Joseph Myers <joseph at codesourcery dot com>
- Cc: libc-alpha at sourceware dot org
- Date: Thu, 1 Feb 2018 14:50:28 -0200
- Subject: Re: RFC: remove the "tile" architecture from glibc
- Authentication-results: sourceware.org; auth=none
- References: <1a57be83-3349-5450-ee4f-d2a33569a728@mellanox.com> <d6c8e425-a6b6-6594-05e3-965536f06da3@physik.fu-berlin.de> <alpine.DEB.2.20.1712012159490.15078@digraph.polyomino.org.uk> <995aac59-2f9d-2a6a-2b5c-b827410ad295@physik.fu-berlin.de> <alpine.DEB.2.20.1801311732001.23883@digraph.polyomino.org.uk> <38170271-e17f-0a7e-7dd2-06fa6ddfae62@physik.fu-berlin.de> <752f1200-5b98-d624-6fc8-30983d171750@linaro.org> <alpine.DEB.2.20.1802011346290.7786@digraph.polyomino.org.uk>
On 01/02/2018 11:49, Joseph Myers wrote:
> On Thu, 1 Feb 2018, Adhemerval Zanella wrote:
>
>> Trying to build/run glibc testsuite against sh4 own toolchain I am facing
>> an build issue for some tests:
>>
>> ---
>> gcc -nostdlib -nostartfiles -o /home/azanella/glibc/glibc-git-build/assert/tst-assert-c++ -Wl,-z,combreloc -Wl,-z,relro -Wl,--hash-style=both /home/azanella/glibc/glibc-git-build/csu/crt1.o /home/azanella/glibc/glibc-git-build/csu/crti.o `gcc --print-file-name=crtbegin.o` /home/azanella/glibc/glibc-git-build/assert/tst-assert-c++.o /home/azanella/glibc/glibc-git-build/support/libsupport_nonshared.a -lstdc++ -Wl,-dynamic-linker=/lib/ld-linux.so.2 -Wl,-rpath-link=/home/azanella/glibc/glibc-git-build:/home/azanella/glibc/glibc-git-build/math:/home/azanella/glibc/glibc-git-build/elf:/home/azanella/glibc/glibc-git-build/dlfcn:/home/azanella/glibc/glibc-git-build/nss:/home/azanella/glibc/glibc-git-build/nis:/home/azanella/glibc/glibc-git-build/rt:/home/azanella/glibc/glibc-git-build/resolv:/home/azanella/glibc/glibc-git-build/crypt:/home/azanella/glibc/glibc-git-build/mathvec:/home/azanella/glibc/glibc-git-build/support:/home/azanella/glibc/glibc-git-build/nptl /home/azanella/glibc/glibc-git-build/libc.so.6 /home/azanella/glibc/glibc-git-build/libc_nonshared.a -Wl,--as-needed /home/azanella/glibc/glibc-git-build/elf/ld.so -Wl,--no-as-needed -lgcc -Wl,--as-needed -lgcc_s -Wl,--no-as-needed `gcc --print-file-name=crtend.o` /home/azanella/glibc/glibc-git-build/csu/crtn.o
>> /usr/lib/gcc/sh4-linux-gnu/7/libgcc_s.so.1: undefined reference to `__fpscr_values@GLIBC_2.2'
>> collect2: error: ld returned 1 exit status
>
> I think some distributions have a local glibc patch related to
> __fpscr_values, so a newly built glibc may be ABI-incompatible with
> binaries built against such a patched glibc. (The use of __fpscr_values
> is fundamentally flawed, but that was supposed to be fixed for GCC 5 - see
> <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=53513> and its duplicate
> <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=60138>.)
>
I do think it is the case, checking the debian package addendum from libc6-dev [1]
I noted it indeed adds this patch:
$ cat local-fpcscr_values.diff
--- a/sysdeps/unix/sysv/linux/sh/sysdep.S
+++ b/sysdeps/unix/sysv/linux/sh/sysdep.S
@@ -30,3 +30,14 @@
#define __syscall_error __syscall_error_1
#include <sysdeps/unix/sh/sysdep.S>
+
+ .data
+ .align 3
+ .globl ___fpscr_values
+ .type ___fpscr_values, @object
+ .size ___fpscr_values, 8
+___fpscr_values:
+ .long 0
+ .long 0x80000
+weak_alias (___fpscr_values, __fpscr_values)
+
--- a/sysdeps/unix/sysv/linux/sh/Versions
+++ b/sysdeps/unix/sysv/linux/sh/Versions
@@ -2,6 +2,7 @@
GLIBC_2.2 {
# functions used in other libraries
__xstat64; __fxstat64; __lxstat64;
+ __fpscr_values;
# a*
alphasort64;
--- a/sysdeps/unix/sysv/linux/sh/libc.abilist
+++ b/sysdeps/unix/sysv/linux/sh/libc.abilist
@@ -267,6 +267,7 @@
GLIBC_2.2 __flbf F
GLIBC_2.2 __fork F
GLIBC_2.2 __fpending F
+GLIBC_2.2 __fpscr_values D 0x8
GLIBC_2.2 __fpu_control D 0x4
GLIBC_2.2 __fpurge F
GLIBC_2.2 __freadable F
I will check glibc with patch applied and try to rebuild a canadian cross to check
against a baseline toolchain.
[1] https://packages.debian.org/it/sid/libc6-dev