From 5f4318d102d604e2f80bc97927e2d80f76063639 Mon Sep 17 00:00:00 2001 From: "David S. Miller" Date: Thu, 1 Sep 2011 13:41:27 -0700 Subject: [PATCH] Sanitize HWCAP_SPARC_* defines/usage, and add new entries. --- ChangeLog | 16 ++++++++++++ elf/elf.h | 11 -------- sysdeps/sparc/dl-procinfo.c | 9 ++++--- sysdeps/sparc/dl-procinfo.h | 5 ++-- sysdeps/sparc/sparc32/bits/atomic.h | 8 +++--- sysdeps/sparc/sparc32/dl-machine.h | 3 ++- sysdeps/sparc/sparc64/multiarch/memcpy.S | 8 +++--- sysdeps/sparc/sparc64/multiarch/memset.S | 6 ++--- sysdeps/sparc/sysdep.h | 45 ++++++++++++++++++++++++++++++++ sysdeps/unix/sparc/sysdep.h | 4 ++- 10 files changed, 85 insertions(+), 30 deletions(-) create mode 100644 sysdeps/sparc/sysdep.h diff --git a/ChangeLog b/ChangeLog index cdf4bc0..927b24c 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,19 @@ +2011-09-01 David S. Miller + + * elf/elf.h (HWCAP_SPARC_*): Move to.. + * sysdeps/sparc/sysdep.h: this new file and add new values. + * sysdeps/unix/sparc/sysdep.h: Include sysdeps/sparc/sysdep.h + * sysdeps/sparc/dl-procinfo.h: Include sysdep.h and increase + _DL_HWCAP_COUNT to 24. + * sysdeps/sparc/dl-procinfo.c (_dl_sparc_cap_flags): Add new + entries. + * sysdeps/sparc/sparc32/bits/atomic.h: Don't use magic local + __ATOMIC_HWCAP_SPARC_V9 define, use sysdep.h one instead. + * sysdeps/sparc/sparc32/dl-machine.h: Include sysdep.h + * sysdeps/sparc/sparc64/multiarch/memcpy.S: Use HWCAP_SPARC_* + instead of magic constants. + * sysdeps/sparc/sparc64/multiarch/memset.S: Likewise. + 2011-08-31 David S. Miller * sysdeps/unix/sparc/sysdep.h (SETUP_PIC_REG): Define. diff --git a/elf/elf.h b/elf/elf.h index ca5abbf..47db25c 100644 --- a/elf/elf.h +++ b/elf/elf.h @@ -1339,17 +1339,6 @@ typedef struct #define DT_SPARC_REGISTER 0x70000001 #define DT_SPARC_NUM 2 -/* Bits present in AT_HWCAP on SPARC. */ - -#define HWCAP_SPARC_FLUSH 1 /* The CPU supports flush insn. */ -#define HWCAP_SPARC_STBAR 2 -#define HWCAP_SPARC_SWAP 4 -#define HWCAP_SPARC_MULDIV 8 -#define HWCAP_SPARC_V9 16 /* The CPU is v9, so v8plus is ok. */ -#define HWCAP_SPARC_ULTRA3 32 -#define HWCAP_SPARC_BLKINIT 64 /* Sun4v with block-init/load-twin. */ -#define HWCAP_SPARC_N2 128 - /* MIPS R3000 specific definitions. */ /* Legal values for e_flags field of Elf32_Ehdr. */ diff --git a/sysdeps/sparc/dl-procinfo.c b/sysdeps/sparc/dl-procinfo.c index db7e867..4a629ca 100644 --- a/sysdeps/sparc/dl-procinfo.c +++ b/sysdeps/sparc/dl-procinfo.c @@ -1,5 +1,5 @@ /* Data for Linux/sparc version of processor capability information. - Copyright (C) 2002,2003,2006 Free Software Foundation, Inc. + Copyright (C) 2002,2003,2006,2011 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Jakub Jelinek , 2002. @@ -47,10 +47,13 @@ #if !defined PROCINFO_DECL && defined SHARED ._dl_sparc_cap_flags #else -PROCINFO_CLASS const char _dl_sparc_cap_flags[8][7] +PROCINFO_CLASS const char _dl_sparc_cap_flags[24][11] #endif #ifndef PROCINFO_DECL - = { "flush", "stbar", "swap", "muldiv", "v9", "ultra3", "v9v", "v9v2" } + = { "flush", "stbar", "swap", "muldiv", "v9", "ultra3", "v9v", "v9v2", + "mul32", "div32", "fsmuld", "v8plus", "popc", "vis", "vis2", + "ASIBlkInit", "fmaf", "vis3", "hpc", "random", "trans", "fjfmau", + "ima", "cspare" } #endif #if !defined SHARED || defined PROCINFO_DECL ; diff --git a/sysdeps/sparc/dl-procinfo.h b/sysdeps/sparc/dl-procinfo.h index 04ebda7..1aea458 100644 --- a/sysdeps/sparc/dl-procinfo.h +++ b/sysdeps/sparc/dl-procinfo.h @@ -1,5 +1,5 @@ /* Linux/sparc version of processor capability information handling macros. - Copyright (C) 1999,2000,2001,2002,2003,2004,2006 + Copyright (C) 1999,2000,2001,2002,2003,2004,2006,2011 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Jakub Jelinek , 1999. @@ -23,8 +23,9 @@ #define _DL_PROCINFO_H 1 #include +#include -#define _DL_HWCAP_COUNT 8 +#define _DL_HWCAP_COUNT 24 static inline int __attribute__ ((unused)) diff --git a/sysdeps/sparc/sparc32/bits/atomic.h b/sysdeps/sparc/sparc32/bits/atomic.h index ef553f7..b9b5124 100644 --- a/sysdeps/sparc/sparc32/bits/atomic.h +++ b/sysdeps/sparc/sparc32/bits/atomic.h @@ -1,5 +1,5 @@ /* Atomic operations. sparc32 version. - Copyright (C) 2003, 2004, 2006 Free Software Foundation, Inc. + Copyright (C) 2003, 2004, 2006, 2011 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Jakub Jelinek , 2003. @@ -22,6 +22,7 @@ #define _BITS_ATOMIC_H 1 #include +#include typedef int8_t atomic8_t; typedef uint8_t uatomic8_t; @@ -238,13 +239,10 @@ volatile unsigned char __sparc32_atomic_locks[64] apps on v9 CPUs e.g. with process shared primitives, use cas insn on v9 CPUs and ldstub on pre-v9. */ -/* Avoid include here. */ extern uint64_t _dl_hwcap __attribute__((weak)); -# define __ATOMIC_HWCAP_SPARC_V9 16 # define __atomic_is_v9 \ (__builtin_expect (&_dl_hwcap != 0, 1) \ - && __builtin_expect (_dl_hwcap & __ATOMIC_HWCAP_SPARC_V9, \ - __ATOMIC_HWCAP_SPARC_V9)) + && __builtin_expect (_dl_hwcap & HWCAP_SPARC_V9, HWCAP_SPARC_V9)) # define atomic_compare_and_exchange_val_acq(mem, newval, oldval) \ ({ \ diff --git a/sysdeps/sparc/sparc32/dl-machine.h b/sysdeps/sparc/sparc32/dl-machine.h index f8e8fe4..f2bc94a 100644 --- a/sysdeps/sparc/sparc32/dl-machine.h +++ b/sysdeps/sparc/sparc32/dl-machine.h @@ -1,5 +1,5 @@ /* Machine-dependent ELF dynamic relocation inline functions. SPARC version. - Copyright (C) 1996-2003, 2004, 2005, 2006, 2007, 2010 + Copyright (C) 1996-2003, 2004, 2005, 2006, 2007, 2010, 2011 Free Software Foundation, Inc. This file is part of the GNU C Library. @@ -26,6 +26,7 @@ #include #include #include +#include #include #include diff --git a/sysdeps/sparc/sparc64/multiarch/memcpy.S b/sysdeps/sparc/sparc64/multiarch/memcpy.S index c12dc3b..c022a40 100644 --- a/sysdeps/sparc/sparc64/multiarch/memcpy.S +++ b/sysdeps/sparc/sparc64/multiarch/memcpy.S @@ -1,5 +1,5 @@ /* Multiple versions of memcpy - Copyright (C) 2010 Free Software Foundation, Inc. + Copyright (C) 2010, 2011 Free Software Foundation, Inc. Contributed by David S. Miller (davem@davemloft.net) This file is part of the GNU C Library. @@ -33,9 +33,9 @@ ENTRY(memcpy) 1: add %o7, %o3, %o3 mov %o5, %o7 # endif - andcc %o0, 0x80, %g0 ! HWCAP_SPARC_N2 + andcc %o0, HWCAP_SPARC_N2, %g0 be 1f - andcc %o0, 0x40, %g0 ! HWCAP_SPARC_BLKINIT + andcc %o0, HWCAP_SPARC_BLKINIT, %g0 # ifdef SHARED sethi %gdop_hix22(__memcpy_niagara2), %o1 xor %o1, %gdop_lox10(__memcpy_niagara2), %o1 @@ -45,7 +45,7 @@ ENTRY(memcpy) ba 10f nop 1: be 1f - andcc %o0, 0x20, %g0 ! HWCAP_SPARC_ULTRA3 + andcc %o0, HWCAP_SPARC_ULTRA3, %g0 # ifdef SHARED sethi %gdop_hix22(__memcpy_niagara1), %o1 xor %o1, %gdop_lox10(__memcpy_niagara1), %o1 diff --git a/sysdeps/sparc/sparc64/multiarch/memset.S b/sysdeps/sparc/sparc64/multiarch/memset.S index 2e27448..e2674d7 100644 --- a/sysdeps/sparc/sparc64/multiarch/memset.S +++ b/sysdeps/sparc/sparc64/multiarch/memset.S @@ -1,5 +1,5 @@ /* Multiple versions of memset and bzero - Copyright (C) 2010 Free Software Foundation, Inc. + Copyright (C) 2010, 2011 Free Software Foundation, Inc. Contributed by David S. Miller (davem@davemloft.net) This file is part of the GNU C Library. @@ -33,7 +33,7 @@ ENTRY(memset) 1: add %o7, %o3, %o3 mov %o5, %o7 # endif - andcc %o0, 0x40, %g0 ! HWCAP_SPARC_BLKINIT + andcc %o0, HWCAP_SPARC_BLKINIT, %g0 be 9f nop # ifdef SHARED @@ -69,7 +69,7 @@ ENTRY(__bzero) 1: add %o7, %o3, %o3 mov %o5, %o7 # endif - andcc %o0, 0x40, %g0 ! HWCAP_SPARC_BLKINIT + andcc %o0, HWCAP_SPARC_BLKINIT, %g0 be 9f nop # ifdef SHARED diff --git a/sysdeps/sparc/sysdep.h b/sysdeps/sparc/sysdep.h new file mode 100644 index 0000000..bba4141 --- /dev/null +++ b/sysdeps/sparc/sysdep.h @@ -0,0 +1,45 @@ +/* Copyright (C) 2011 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + 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, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA + 02111-1307 USA. */ + +/* Bits present in AT_HWCAP on SPARC. */ + +#define HWCAP_SPARC_FLUSH 0x00000001 +#define HWCAP_SPARC_STBAR 0x00000002 +#define HWCAP_SPARC_SWAP 0x00000004 +#define HWCAP_SPARC_MULDIV 0x00000008 +#define HWCAP_SPARC_V9 0x00000010 +#define HWCAP_SPARC_ULTRA3 0x00000020 +#define HWCAP_SPARC_BLKINIT 0x00000040 +#define HWCAP_SPARC_N2 0x00000080 +#define HWCAP_SPARC_MUL32 0x00000100 +#define HWCAP_SPARC_DIV32 0x00000200 +#define HWCAP_SPARC_FSMULD 0x00000400 +#define HWCAP_SPARC_V8PLUS 0x00000800 +#define HWCAP_SPARC_POPC 0x00001000 +#define HWCAP_SPARC_VIS 0x00002000 +#define HWCAP_SPARC_VIS2 0x00004000 +#define HWCAP_SPARC_ASI_BLK_INIT 0x00008000 +#define HWCAP_SPARC_FMAF 0x00010000 +#define HWCAP_SPARC_VIS3 0x00020000 +#define HWCAP_SPARC_HPC 0x00040000 +#define HWCAP_SPARC_RANDOM 0x00080000 +#define HWCAP_SPARC_TRANS 0x00100000 +#define HWCAP_SPARC_FJFMAU 0x00200000 +#define HWCAP_SPARC_IMA 0x00400000 +#define HWCAP_SPARC_ASI_CACHE_SPARING \ + 0x00800000 diff --git a/sysdeps/unix/sparc/sysdep.h b/sysdeps/unix/sparc/sysdep.h index c8f4cca..590b7ab 100644 --- a/sysdeps/unix/sparc/sysdep.h +++ b/sysdeps/unix/sparc/sysdep.h @@ -1,4 +1,5 @@ -/* Copyright (C) 1993, 1994, 1995, 1997, 2003 Free Software Foundation, Inc. +/* Copyright (C) 1993, 1994, 1995, 1997, 2003, 2011 + Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or @@ -17,6 +18,7 @@ 02111-1307 USA. */ #include +#include #ifdef __ASSEMBLER__ -- 2.7.4