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.
This commit is contained in:
Adhemerval Zanella 2017-12-13 11:43:39 -02:00
parent ed95f61149
commit 24d1d8ec9e
68 changed files with 114 additions and 121 deletions

View File

@ -1,5 +1,32 @@
2017-12-20 Adhemerval Zanella <adhemerval.zanella@linaro.org> 2017-12-20 Adhemerval Zanella <adhemerval.zanella@linaro.org>
* 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.
* README: Remove tilepro-*-linux-gnu from supported architecture. * README: Remove tilepro-*-linux-gnu from supported architecture.
* scripts/build-many-glibcs.py: Likewise. * scripts/build-many-glibcs.py: Likewise.
* sysdeps/tile/__tls_get_addr.S (__tls_get_addr): Likewise. * sysdeps/tile/__tls_get_addr.S (__tls_get_addr): Likewise.

View File

@ -50,7 +50,7 @@ do_test (void)
printf ("\nDone with getcontext()!\n"); printf ("\nDone with getcontext()!\n");
fflush (NULL); fflush (NULL);
/* On nios2 and tilepro, GCC 5 warns that except_mask may be used /* On nios2 GCC 5 warns that except_mask may be used
uninitialized. Because it is always initialized and nothing in uninitialized. Because it is always initialized and nothing in
this test ever calls setcontext (a setcontext call could result this test ever calls setcontext (a setcontext call could result
in local variables being clobbered on the second return from in local variables being clobbered on the second return from

View File

@ -1,3 +1,4 @@
ieee754/soft-fp ieee754/soft-fp
ieee754/dbl-64/wordsize-64
ieee754/dbl-64 ieee754/dbl-64
ieee754/flt-32 ieee754/flt-32

View File

@ -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 # 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. # this variable; it's here mostly for documentational purposes.

View File

@ -16,20 +16,12 @@
License along with the GNU C Library. If not, see License along with the GNU C Library. If not, see
<http://www.gnu.org/licenses/>. */ <http://www.gnu.org/licenses/>. */
/* The sub-architecture headers provide definitions for these macros #ifndef _ATOMIC_MACHINE_H
that work for "int" and "long" size values only: #define _ATOMIC_MACHINE_H 1
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. */
#include <stdint.h> #include <stdint.h>
#include <features.h> #include <features.h>
#include <arch/spr_def.h>
typedef int32_t atomic32_t; typedef int32_t atomic32_t;
typedef uint32_t uatomic32_t; typedef uint32_t uatomic32_t;
@ -46,6 +38,41 @@ typedef uintptr_t uatomicptr_t;
typedef intmax_t atomic_max_t; typedef intmax_t atomic_max_t;
typedef uintmax_t uatomic_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. */ /* Barrier macro. */
#define atomic_full_barrier() __sync_synchronize() #define atomic_full_barrier() __sync_synchronize()
@ -79,3 +106,5 @@ typedef uintmax_t uatomic_max_t;
*/ */
extern int __atomic_error_bad_argument_size(void) extern int __atomic_error_bad_argument_size(void)
__attribute__ ((warning ("bad sizeof atomic argument"))); __attribute__ ((warning ("bad sizeof atomic argument")));
#endif /* _ATOMIC_MACHINE_H */

View File

@ -3,8 +3,8 @@ case "$machine" in
tilegx*) tilegx*)
base_machine=tile base_machine=tile
if $CC $CFLAGS $CPPFLAGS -E -dM -xc /dev/null | grep -q __LP64__; then if $CC $CFLAGS $CPPFLAGS -E -dM -xc /dev/null | grep -q __LP64__; then
machine=tile/tilegx/tilegx64 machine=tile/tilegx64
else else
machine=tile/tilegx/tilegx32 machine=tile/tilegx32
fi ;; fi ;;
esac esac

View File

@ -1 +0,0 @@
ieee754/dbl-64/wordsize-64

View File

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

View File

@ -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 */

View File

@ -1,3 +1,2 @@
tile/tilegx
tile tile
wordsize-32 wordsize-32

View File

@ -1,3 +1,2 @@
tile/tilegx
tile tile
wordsize-64 wordsize-64

View File

@ -1,3 +1,8 @@
# Provide biarch definitions.
abi-variants := 64 32
abi-64-condition := __WORDSIZE == 64
abi-32-condition := __WORDSIZE == 32
ifeq ($(subdir),misc) ifeq ($(subdir),misc)
# <sys/reg.h> provides something like x86 compatibility. # <sys/reg.h> provides something like x86 compatibility.

View File

@ -4,7 +4,7 @@
ldd_rewrite_script=$dir/ldd-rewrite.sed ldd_rewrite_script=$dir/ldd-rewrite.sed
case $machine in case $machine in
tile/tilegx/tilegx32) tile/tilegx32)
test -n "$libc_cv_slibdir" || test -n "$libc_cv_slibdir" ||
case "$prefix" in case "$prefix" in
/usr | /usr/) /usr | /usr/)

View File

@ -4,7 +4,7 @@ GLIBC_PROVIDES dnl See aclocal.m4 in the top level source directory.
ldd_rewrite_script=$dir/ldd-rewrite.sed ldd_rewrite_script=$dir/ldd-rewrite.sed
case $machine in case $machine in
tile/tilegx/tilegx32) tile/tilegx32)
LIBC_SLIBDIR_RTLDDIR([lib32], [lib32]) LIBC_SLIBDIR_RTLDDIR([lib32], [lib32])
;; ;;
esac esac

View File

@ -1,4 +0,0 @@
# Provide biarch definitions.
abi-variants := 64 32
abi-64-condition := __WORDSIZE == 64
abi-32-condition := __WORDSIZE == 32

View File

@ -1,4 +1,3 @@
unix/sysv/linux/tile/tilegx
unix/sysv/linux/tile unix/sysv/linux/tile
unix/sysv/linux/generic/wordsize-32 unix/sysv/linux/generic/wordsize-32
unix/sysv/linux/generic unix/sysv/linux/generic

View File

@ -1,4 +1,3 @@
unix/sysv/linux/tile/tilegx
unix/sysv/linux/tile unix/sysv/linux/tile
unix/sysv/linux/generic unix/sysv/linux/generic
unix/sysv/linux/wordsize-64 unix/sysv/linux/wordsize-64