diff options
author | Adhemerval Zanella <adhemerval.zanella@linaro.org> | 2017-12-13 11:43:39 -0200 |
---|---|---|
committer | Adhemerval Zanella <adhemerval.zanella@linaro.org> | 2017-12-20 16:55:26 -0200 |
commit | 24d1d8ec9e529ed66c49e17366fe5a889d483670 (patch) | |
tree | a80a960c7f0b071cff127c37d76814413e3a956d /sysdeps/tile | |
parent | ed95f6114928f00f5f8fe76ccf2ec9e77872cbad (diff) | |
download | glibc-24d1d8ec9e529ed66c49e17366fe5a889d483670.zip glibc-24d1d8ec9e529ed66c49e17366fe5a889d483670.tar.gz glibc-24d1d8ec9e529ed66c49e17366fe5a889d483670.tar.bz2 |
Simplify tilegx sysdeps folder
With tilepro support removal we can now simplify internal tile support by
moving the directory structure to avoid the unnecessary directory levels
in tile/tilegx both on generic and linux folders.
Checked with a build for tilegx-linux-gnu and tilegx-linux-gnu-32 with
and without the patch, there is no difference in generated binary with
a dissassemble.
* stdlib/bug-getcontext.c (do_test): Remove tilepro mention in
comment.
* sysdeps/tile/preconfigure: Remove tilegx folder.
* sysdeps/tile/tilegx/Implies: Move definitions to ...
* sysdeps/tile/Implies: ... here.
* sysdeps/tile/tilegx/Makefile: Move rules to ...
* sysdeps/tile/Makefile: ... here.
* sysdeps/tile/tilegx/atomic-machine.h: Move definitions to ...
* sysdeps/tile/atomic-machine.h: ... here. Add include guards.
* sysdeps/tile/tilegx/bits/wordsize.h: Move to ...
* sysdeps/tile/bits/wordsize.h: ... here.
* sysdeps/tile/tilegx/*: Move to ...
* sysdeps/tile/*: ... here.
* sysdeps/tile/tilegx/tilegx32/Implies: Move to ...
* sysdeps/tile/tilegx32/Implies: ... here.
* sysdeps/tile/tilegx/tilegx64/Implies: Move to ...
* sysdeps/tile/tilegx64/Implies: ... here.
* sysdeps/unix/sysv/linux/tile/tilegx/Makefile: Move definitions
to ...
* sysdeps/unix/sysv/linux/tile/Makefile: ... here.
* sysdeps/unix/sysv/linux/tile/tilegx/*: Move to ...
* sysdeps/unix/sysv/linux/tile/*: ... here.
* sysdeps/unix/sysv/linux/tile/tilegx/tilegx32/*: Move to ...
* sysdeps/unix/sysv/linux/tile/tilegx32/*: ... here.
* sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/*: Move to ...
* sysdeps/unix/sysv/linux/tile/tilegx64/*: ... here.
Diffstat (limited to 'sysdeps/tile')
-rw-r--r-- | sysdeps/tile/Implies | 1 | ||||
-rw-r--r-- | sysdeps/tile/Makefile | 36 | ||||
-rw-r--r-- | sysdeps/tile/atomic-machine.h | 51 | ||||
-rw-r--r-- | sysdeps/tile/bits/wordsize.h (renamed from sysdeps/tile/tilegx/bits/wordsize.h) | 0 | ||||
-rw-r--r-- | sysdeps/tile/memchr.c (renamed from sysdeps/tile/tilegx/memchr.c) | 0 | ||||
-rw-r--r-- | sysdeps/tile/memcpy.c (renamed from sysdeps/tile/tilegx/memcpy.c) | 0 | ||||
-rw-r--r-- | sysdeps/tile/memset.c (renamed from sysdeps/tile/tilegx/memset.c) | 0 | ||||
-rw-r--r-- | sysdeps/tile/memusage.h (renamed from sysdeps/tile/tilegx/memusage.h) | 0 | ||||
-rw-r--r-- | sysdeps/tile/preconfigure | 4 | ||||
-rw-r--r-- | sysdeps/tile/rawmemchr.c (renamed from sysdeps/tile/tilegx/rawmemchr.c) | 0 | ||||
-rw-r--r-- | sysdeps/tile/strcasestr.c (renamed from sysdeps/tile/tilegx/strcasestr.c) | 0 | ||||
-rw-r--r-- | sysdeps/tile/strchr.c (renamed from sysdeps/tile/tilegx/strchr.c) | 0 | ||||
-rw-r--r-- | sysdeps/tile/strchrnul.c (renamed from sysdeps/tile/tilegx/strchrnul.c) | 0 | ||||
-rw-r--r-- | sysdeps/tile/string-endian.h (renamed from sysdeps/tile/tilegx/string-endian.h) | 0 | ||||
-rw-r--r-- | sysdeps/tile/strlen.c (renamed from sysdeps/tile/tilegx/strlen.c) | 0 | ||||
-rw-r--r-- | sysdeps/tile/strnlen.c (renamed from sysdeps/tile/tilegx/strnlen.c) | 0 | ||||
-rw-r--r-- | sysdeps/tile/strrchr.c (renamed from sysdeps/tile/tilegx/strrchr.c) | 0 | ||||
-rw-r--r-- | sysdeps/tile/strstr.c (renamed from sysdeps/tile/tilegx/strstr.c) | 0 | ||||
-rw-r--r-- | sysdeps/tile/tilegx/Implies | 1 | ||||
-rw-r--r-- | sysdeps/tile/tilegx/Makefile | 35 | ||||
-rw-r--r-- | sysdeps/tile/tilegx/atomic-machine.h | 61 | ||||
-rw-r--r-- | sysdeps/tile/tilegx32/Implies (renamed from sysdeps/tile/tilegx/tilegx32/Implies) | 1 | ||||
-rw-r--r-- | sysdeps/tile/tilegx64/Implies (renamed from sysdeps/tile/tilegx/tilegx64/Implies) | 1 |
23 files changed, 79 insertions, 112 deletions
diff --git a/sysdeps/tile/Implies b/sysdeps/tile/Implies index 1cbc053..cb17441 100644 --- a/sysdeps/tile/Implies +++ b/sysdeps/tile/Implies @@ -1,3 +1,4 @@ ieee754/soft-fp +ieee754/dbl-64/wordsize-64 ieee754/dbl-64 ieee754/flt-32 diff --git a/sysdeps/tile/Makefile b/sysdeps/tile/Makefile index 3cd4d1e..dcb8777 100644 --- a/sysdeps/tile/Makefile +++ b/sysdeps/tile/Makefile @@ -1,3 +1,39 @@ +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; \ + (echo 'int main() { return getuid(); }' | \ + $(CC) -o /dev/null -xc - -mcmodel=large -fpic) && mcmodel=yes; \ + echo "cflags-mcmodel-large = $$mcmodel" > $@ + +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 + +# __gmon_start__ is at the very start of the shared object when linked +# 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 + # We don't support long doubles as a distinct type. We don't need to set # this variable; it's here mostly for documentational purposes. diff --git a/sysdeps/tile/atomic-machine.h b/sysdeps/tile/atomic-machine.h index 32277c9..58ce76c 100644 --- a/sysdeps/tile/atomic-machine.h +++ b/sysdeps/tile/atomic-machine.h @@ -16,20 +16,12 @@ License along with the GNU C Library. If not, see <http://www.gnu.org/licenses/>. */ -/* The sub-architecture headers provide definitions for these macros - that work for "int" and "long" size values only: - - atomic_compare_and_exchange_val_acq() - atomic_exchange_acq() - atomic_exchange_and_add() - atomic_and_val() - atomic_or_val() - atomic_decrement_if_positive() [tilegx only] - - Here we provide generic definitions true for all Tilera chips. */ +#ifndef _ATOMIC_MACHINE_H +#define _ATOMIC_MACHINE_H 1 #include <stdint.h> #include <features.h> +#include <arch/spr_def.h> typedef int32_t atomic32_t; typedef uint32_t uatomic32_t; @@ -46,6 +38,41 @@ typedef uintptr_t uatomicptr_t; typedef intmax_t atomic_max_t; typedef uintmax_t uatomic_max_t; +#ifdef _LP64 +# define __HAVE_64B_ATOMICS 1 +#else +/* tilegx32 does have 64-bit atomics, but assumptions in the semaphore + code mean that unaligned 64-bit atomics will be used if this symbol + is true, and unaligned atomics are not supported on tile. */ +# define __HAVE_64B_ATOMICS 0 +#endif + +#define USE_ATOMIC_COMPILER_BUILTINS 0 +#define ATOMIC_EXCHANGE_USES_CAS 0 + +/* Pick appropriate 8- or 4-byte instruction. */ +#define __atomic_update(mem, v, op) \ + ((__typeof (*(mem))) (__typeof (*(mem) - *(mem))) \ + ((sizeof (*(mem)) == 8) ? \ + __insn_##op ((void *) (mem), (int64_t) (__typeof((v) - (v))) (v)) : \ + (sizeof (*(mem)) == 4) ? \ + __insn_##op##4 ((void *) (mem), (int32_t) (__typeof ((v) - (v))) (v)) : \ + __atomic_error_bad_argument_size())) + +#define atomic_compare_and_exchange_val_acq(mem, n, o) \ + ({ __insn_mtspr (SPR_CMPEXCH_VALUE, (int64_t) (__typeof ((o) - (o))) (o)); \ + __atomic_update (mem, n, cmpexch); }) +#define atomic_exchange_acq(mem, newvalue) \ + __atomic_update (mem, newvalue, exch) +#define atomic_exchange_and_add(mem, value) \ + __atomic_update (mem, value, fetchadd) +#define atomic_and_val(mem, mask) \ + __atomic_update (mem, mask, fetchand) +#define atomic_or_val(mem, mask) \ + __atomic_update (mem, mask, fetchor) +#define atomic_decrement_if_positive(mem) \ + __atomic_update (mem, -1, fetchaddgez) + /* Barrier macro. */ #define atomic_full_barrier() __sync_synchronize() @@ -79,3 +106,5 @@ typedef uintmax_t uatomic_max_t; */ extern int __atomic_error_bad_argument_size(void) __attribute__ ((warning ("bad sizeof atomic argument"))); + +#endif /* _ATOMIC_MACHINE_H */ diff --git a/sysdeps/tile/tilegx/bits/wordsize.h b/sysdeps/tile/bits/wordsize.h index 9dc4da5..9dc4da5 100644 --- a/sysdeps/tile/tilegx/bits/wordsize.h +++ b/sysdeps/tile/bits/wordsize.h diff --git a/sysdeps/tile/tilegx/memchr.c b/sysdeps/tile/memchr.c index 38c0da6..38c0da6 100644 --- a/sysdeps/tile/tilegx/memchr.c +++ b/sysdeps/tile/memchr.c diff --git a/sysdeps/tile/tilegx/memcpy.c b/sysdeps/tile/memcpy.c index c1a2a29..c1a2a29 100644 --- a/sysdeps/tile/tilegx/memcpy.c +++ b/sysdeps/tile/memcpy.c diff --git a/sysdeps/tile/tilegx/memset.c b/sysdeps/tile/memset.c index c6804a9..c6804a9 100644 --- a/sysdeps/tile/tilegx/memset.c +++ b/sysdeps/tile/memset.c diff --git a/sysdeps/tile/tilegx/memusage.h b/sysdeps/tile/memusage.h index c91371a..c91371a 100644 --- a/sysdeps/tile/tilegx/memusage.h +++ b/sysdeps/tile/memusage.h diff --git a/sysdeps/tile/preconfigure b/sysdeps/tile/preconfigure index d2165c3..21382df 100644 --- a/sysdeps/tile/preconfigure +++ b/sysdeps/tile/preconfigure @@ -3,8 +3,8 @@ case "$machine" in tilegx*) base_machine=tile if $CC $CFLAGS $CPPFLAGS -E -dM -xc /dev/null | grep -q __LP64__; then - machine=tile/tilegx/tilegx64 + machine=tile/tilegx64 else - machine=tile/tilegx/tilegx32 + machine=tile/tilegx32 fi ;; esac diff --git a/sysdeps/tile/tilegx/rawmemchr.c b/sysdeps/tile/rawmemchr.c index 3f5044c..3f5044c 100644 --- a/sysdeps/tile/tilegx/rawmemchr.c +++ b/sysdeps/tile/rawmemchr.c diff --git a/sysdeps/tile/tilegx/strcasestr.c b/sysdeps/tile/strcasestr.c index ecb3e62..ecb3e62 100644 --- a/sysdeps/tile/tilegx/strcasestr.c +++ b/sysdeps/tile/strcasestr.c diff --git a/sysdeps/tile/tilegx/strchr.c b/sysdeps/tile/strchr.c index 1a5eb5c..1a5eb5c 100644 --- a/sysdeps/tile/tilegx/strchr.c +++ b/sysdeps/tile/strchr.c diff --git a/sysdeps/tile/tilegx/strchrnul.c b/sysdeps/tile/strchrnul.c index e3024dd..e3024dd 100644 --- a/sysdeps/tile/tilegx/strchrnul.c +++ b/sysdeps/tile/strchrnul.c diff --git a/sysdeps/tile/tilegx/string-endian.h b/sysdeps/tile/string-endian.h index 09b5781..09b5781 100644 --- a/sysdeps/tile/tilegx/string-endian.h +++ b/sysdeps/tile/string-endian.h diff --git a/sysdeps/tile/tilegx/strlen.c b/sysdeps/tile/strlen.c index cebdf22..cebdf22 100644 --- a/sysdeps/tile/tilegx/strlen.c +++ b/sysdeps/tile/strlen.c diff --git a/sysdeps/tile/tilegx/strnlen.c b/sysdeps/tile/strnlen.c index c3560d2..c3560d2 100644 --- a/sysdeps/tile/tilegx/strnlen.c +++ b/sysdeps/tile/strnlen.c diff --git a/sysdeps/tile/tilegx/strrchr.c b/sysdeps/tile/strrchr.c index 51a08b7..51a08b7 100644 --- a/sysdeps/tile/tilegx/strrchr.c +++ b/sysdeps/tile/strrchr.c diff --git a/sysdeps/tile/tilegx/strstr.c b/sysdeps/tile/strstr.c index f82936a..f82936a 100644 --- a/sysdeps/tile/tilegx/strstr.c +++ b/sysdeps/tile/strstr.c diff --git a/sysdeps/tile/tilegx/Implies b/sysdeps/tile/tilegx/Implies deleted file mode 100644 index ade71c1..0000000 --- a/sysdeps/tile/tilegx/Implies +++ /dev/null @@ -1 +0,0 @@ -ieee754/dbl-64/wordsize-64 diff --git a/sysdeps/tile/tilegx/Makefile b/sysdeps/tile/tilegx/Makefile deleted file mode 100644 index 4281dd9..0000000 --- a/sysdeps/tile/tilegx/Makefile +++ /dev/null @@ -1,35 +0,0 @@ -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; \ - (echo 'int main() { return getuid(); }' | \ - $(CC) -o /dev/null -xc - -mcmodel=large -fpic) && mcmodel=yes; \ - echo "cflags-mcmodel-large = $$mcmodel" > $@ - -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 - -# __gmon_start__ is at the very start of the shared object when linked -# 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 diff --git a/sysdeps/tile/tilegx/atomic-machine.h b/sysdeps/tile/tilegx/atomic-machine.h deleted file mode 100644 index e77f670..0000000 --- a/sysdeps/tile/tilegx/atomic-machine.h +++ /dev/null @@ -1,61 +0,0 @@ -/* Copyright (C) 2011-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Chris Metcalf <cmetcalf@tilera.com>, 2011. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - <http://www.gnu.org/licenses/>. */ - -#ifndef _ATOMIC_MACHINE_H -#define _ATOMIC_MACHINE_H 1 - -#include <arch/spr_def.h> - -#ifdef _LP64 -# define __HAVE_64B_ATOMICS 1 -#else -/* tilegx32 does have 64-bit atomics, but assumptions in the semaphore - code mean that unaligned 64-bit atomics will be used if this symbol - is true, and unaligned atomics are not supported on tile. */ -# define __HAVE_64B_ATOMICS 0 -#endif - -#define USE_ATOMIC_COMPILER_BUILTINS 0 -#define ATOMIC_EXCHANGE_USES_CAS 0 - -/* Pick appropriate 8- or 4-byte instruction. */ -#define __atomic_update(mem, v, op) \ - ((__typeof (*(mem))) (__typeof (*(mem) - *(mem))) \ - ((sizeof (*(mem)) == 8) ? \ - __insn_##op ((void *) (mem), (int64_t) (__typeof((v) - (v))) (v)) : \ - (sizeof (*(mem)) == 4) ? \ - __insn_##op##4 ((void *) (mem), (int32_t) (__typeof ((v) - (v))) (v)) : \ - __atomic_error_bad_argument_size())) - -#define atomic_compare_and_exchange_val_acq(mem, n, o) \ - ({ __insn_mtspr (SPR_CMPEXCH_VALUE, (int64_t) (__typeof ((o) - (o))) (o)); \ - __atomic_update (mem, n, cmpexch); }) -#define atomic_exchange_acq(mem, newvalue) \ - __atomic_update (mem, newvalue, exch) -#define atomic_exchange_and_add(mem, value) \ - __atomic_update (mem, value, fetchadd) -#define atomic_and_val(mem, mask) \ - __atomic_update (mem, mask, fetchand) -#define atomic_or_val(mem, mask) \ - __atomic_update (mem, mask, fetchor) -#define atomic_decrement_if_positive(mem) \ - __atomic_update (mem, -1, fetchaddgez) - -#include <sysdeps/tile/atomic-machine.h> - -#endif /* atomic-machine.h */ diff --git a/sysdeps/tile/tilegx/tilegx32/Implies b/sysdeps/tile/tilegx32/Implies index 993b7f4..709e1dc 100644 --- a/sysdeps/tile/tilegx/tilegx32/Implies +++ b/sysdeps/tile/tilegx32/Implies @@ -1,3 +1,2 @@ -tile/tilegx tile wordsize-32 diff --git a/sysdeps/tile/tilegx/tilegx64/Implies b/sysdeps/tile/tilegx64/Implies index eb0686e..1e9db8e 100644 --- a/sysdeps/tile/tilegx/tilegx64/Implies +++ b/sysdeps/tile/tilegx64/Implies @@ -1,3 +1,2 @@ -tile/tilegx tile wordsize-64 |