2002-02-01  Jakub Jelinek  <jakub@redhat.com>

	* sysdeps/generic/ldsodefs.h (_dl_load_lock): Remove duplicate
	definition.
	* sysdeps/ia64/hp-timing.h: Move _dl_hp_timing_overhead in
	_rtld_global struct.
	* sysdeps/sparc/sparc32/sparcv9/hp-timing.h: Likewise.
	* sysdeps/sparc/sparc64/hp-timing.c: Likewise.
	* sysdeps/sparc/sparc64/hp-timing.h: Likewise.
	* sysdeps/sparc/sparc64/Makefile: Make hp-timing static only.
	* sysdeps/unix/sysv/aix/init-first.c (_dl_fpu_control,
	_dl_fpu_control_set): Remove unused externs.
	* sysdeps/unix/sysv/linux/sparc/sparc32/dl-procinfo.c: New file.
	* sysdeps/unix/sysv/linux/sparc/sparc64/dl-procinfo.c: New file.
	* sysdeps/unix/sysv/linux/sparc/sparc32/dl-procinfo.h: Move procinfo
	related variables in _rtld_global struct.
	* sysdeps/unix/sysv/linux/sparc/sparc64/dl-procinfo.h: Likewise.
	* sysdeps/unix/sysv/linux/init-first.c (_dl_fpu_control_set): Remove
	unused extern.
This commit is contained in:
Ulrich Drepper 2002-02-01 19:06:42 +00:00
parent a3a4f24951
commit 27ef89fbdc
13 changed files with 171 additions and 61 deletions

View File

@ -1,3 +1,23 @@
2002-02-01 Jakub Jelinek <jakub@redhat.com>
* sysdeps/generic/ldsodefs.h (_dl_load_lock): Remove duplicate
definition.
* sysdeps/ia64/hp-timing.h: Move _dl_hp_timing_overhead in
_rtld_global struct.
* sysdeps/sparc/sparc32/sparcv9/hp-timing.h: Likewise.
* sysdeps/sparc/sparc64/hp-timing.c: Likewise.
* sysdeps/sparc/sparc64/hp-timing.h: Likewise.
* sysdeps/sparc/sparc64/Makefile: Make hp-timing static only.
* sysdeps/unix/sysv/aix/init-first.c (_dl_fpu_control,
_dl_fpu_control_set): Remove unused externs.
* sysdeps/unix/sysv/linux/sparc/sparc32/dl-procinfo.c: New file.
* sysdeps/unix/sysv/linux/sparc/sparc64/dl-procinfo.c: New file.
* sysdeps/unix/sysv/linux/sparc/sparc32/dl-procinfo.h: Move procinfo
related variables in _rtld_global struct.
* sysdeps/unix/sysv/linux/sparc/sparc64/dl-procinfo.h: Likewise.
* sysdeps/unix/sysv/linux/init-first.c (_dl_fpu_control_set): Remove
unused extern.
2002-02-01 Ulrich Drepper <drepper@redhat.com> 2002-02-01 Ulrich Drepper <drepper@redhat.com>
* sysdeps/generic/dl-procinfo.c: New file. * sysdeps/generic/dl-procinfo.c: New file.

View File

@ -347,16 +347,6 @@ extern const char _dl_out_of_memory[];
extern int _dl_sysdep_open_zero_fill (void); /* dl-sysdep.c */ extern int _dl_sysdep_open_zero_fill (void); /* dl-sysdep.c */
/* During the program run we must not modify the global data of
loaded shared object simultanously in two threads. Therefore we
protect `_dl_open' and `_dl_close' in dl-close.c.
This must be a recursive lock since the initializer function of
the loaded object might as well require a call to this function.
At this time it is not anymore a problem to modify the tables. */
__libc_lock_define_recursive (extern, _dl_load_lock)
/* Write message on the debug file descriptor. The parameters are /* Write message on the debug file descriptor. The parameters are
interpreted as for a `printf' call. All the lines start with a interpreted as for a `printf' call. All the lines start with a
tag showing the PID. */ tag showing the PID. */

View File

@ -1,5 +1,5 @@
/* High precision, low overhead timing functions. IA-64 version. /* High precision, low overhead timing functions. IA-64 version.
Copyright (C) 2001 Free Software Foundation, Inc. Copyright (C) 2001, 2002 Free Software Foundation, Inc.
This file is part of the GNU C Library. This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@cygnus.com>, 2001. Contributed by Ulrich Drepper <drepper@cygnus.com>, 2001.
@ -78,10 +78,6 @@
/* We use 64bit values for the times. */ /* We use 64bit values for the times. */
typedef unsigned long int hp_timing_t; typedef unsigned long int hp_timing_t;
/* Internal variable used to store the overhead of the measurement
opcodes. */
extern hp_timing_t __libc_hp_timing_overhead;
/* Set timestamp value to zero. */ /* Set timestamp value to zero. */
#define HP_TIMING_ZERO(Var) (Var) = (0) #define HP_TIMING_ZERO(Var) (Var) = (0)
@ -104,14 +100,14 @@ extern hp_timing_t __libc_hp_timing_overhead;
#define HP_TIMING_DIFF_INIT() \ #define HP_TIMING_DIFF_INIT() \
do { \ do { \
int __cnt = 5; \ int __cnt = 5; \
__libc_hp_timing_overhead = ~0ul; \ GL(dl_hp_timing_overhead) = ~0ul; \
do \ do \
{ \ { \
hp_timing_t __t1, __t2; \ hp_timing_t __t1, __t2; \
HP_TIMING_NOW (__t1); \ HP_TIMING_NOW (__t1); \
HP_TIMING_NOW (__t2); \ HP_TIMING_NOW (__t2); \
if (__t2 - __t1 < __libc_hp_timing_overhead) \ if (__t2 - __t1 < GL(dl_hp_timing_overhead)) \
__libc_hp_timing_overhead = __t2 - __t1; \ GL(dl_hp_timing_overhead) = __t2 - __t1; \
} \ } \
while (--__cnt > 0); \ while (--__cnt > 0); \
} while (0) } while (0)
@ -123,7 +119,7 @@ extern hp_timing_t __libc_hp_timing_overhead;
#define HP_TIMING_ACCUM(Sum, Diff) \ #define HP_TIMING_ACCUM(Sum, Diff) \
do { \ do { \
hp_timing_t __oldval; \ hp_timing_t __oldval; \
hp_timing_t __diff = (Diff) - __libc_hp_timing_overhead; \ hp_timing_t __diff = (Diff) - GL(dl_hp_timing_overhead); \
hp_timing_t __newval; \ hp_timing_t __newval; \
do \ do \
{ \ { \

View File

@ -1,5 +1,5 @@
/* High precision, low overhead timing functions. sparcv9 version. /* High precision, low overhead timing functions. sparcv9 version.
Copyright (C) 2001 Free Software Foundation, Inc. Copyright (C) 2001, 2002 Free Software Foundation, Inc.
This file is part of the GNU C Library. This file is part of the GNU C Library.
Contributed by David S. Miller <davem@redhat.com>, 2001. Contributed by David S. Miller <davem@redhat.com>, 2001.
@ -30,8 +30,6 @@
typedef unsigned long long int hp_timing_t; typedef unsigned long long int hp_timing_t;
extern hp_timing_t __libc_hp_timing_overhead;
#define HP_TIMING_ZERO(Var) (Var) = (0) #define HP_TIMING_ZERO(Var) (Var) = (0)
#define HP_TIMING_NOW(Var) \ #define HP_TIMING_NOW(Var) \
@ -42,14 +40,14 @@ extern hp_timing_t __libc_hp_timing_overhead;
#define HP_TIMING_DIFF_INIT() \ #define HP_TIMING_DIFF_INIT() \
do { \ do { \
int __cnt = 5; \ int __cnt = 5; \
__libc_hp_timing_overhead = ~0ull; \ GL(dl_hp_timing_overhead) = ~0ull; \
do \ do \
{ \ { \
hp_timing_t __t1, __t2; \ hp_timing_t __t1, __t2; \
HP_TIMING_NOW (__t1); \ HP_TIMING_NOW (__t1); \
HP_TIMING_NOW (__t2); \ HP_TIMING_NOW (__t2); \
if (__t2 - __t1 < __libc_hp_timing_overhead) \ if (__t2 - __t1 < GL(dl_hp_timing_overhead)) \
__libc_hp_timing_overhead = __t2 - __t1; \ GL(dl_hp_timing_overhead) = __t2 - __t1; \
} \ } \
while (--__cnt > 0); \ while (--__cnt > 0); \
} while (0) } while (0)
@ -58,7 +56,7 @@ extern hp_timing_t __libc_hp_timing_overhead;
#define HP_TIMING_ACCUM(Sum, Diff) \ #define HP_TIMING_ACCUM(Sum, Diff) \
do { \ do { \
hp_timing_t __diff = (Diff) - __libc_hp_timing_overhead; \ hp_timing_t __diff = (Diff) - GL(dl_hp_timing_overhead); \
__asm__ __volatile__("srl %L0, 0, %%g1\n\t" \ __asm__ __volatile__("srl %L0, 0, %%g1\n\t" \
"sllx %H0, 32, %%g7\n\t" \ "sllx %H0, 32, %%g7\n\t" \
"or %%g1, %%g7, %%g1\n\t" \ "or %%g1, %%g7, %%g1\n\t" \

View File

@ -3,4 +3,5 @@ long-double-fcts = yes
ifeq ($(subdir),csu) ifeq ($(subdir),csu)
sysdep_routines += hp-timing sysdep_routines += hp-timing
static-only-routines += hp-timing
endif endif

View File

@ -1,5 +1,5 @@
/* Support for high precision, low overhead timing functions. sparc64 version. /* Support for high precision, low overhead timing functions. sparc64 version.
Copyright (C) 2001 Free Software Foundation, Inc. Copyright (C) 2001, 2002 Free Software Foundation, Inc.
This file is part of the GNU C Library. This file is part of the GNU C Library.
Contributed by David S. Miller <davem@redhat.com>, 2001. Contributed by David S. Miller <davem@redhat.com>, 2001.
@ -21,4 +21,4 @@
#include <hp-timing.h> #include <hp-timing.h>
/* We have to define the variable for the overhead. */ /* We have to define the variable for the overhead. */
hp_timing_t __libc_hp_timing_overhead; hp_timing_t _dl_hp_timing_overhead;

View File

@ -1,5 +1,5 @@
/* High precision, low overhead timing functions. sparc64 version. /* High precision, low overhead timing functions. sparc64 version.
Copyright (C) 2001 Free Software Foundation, Inc. Copyright (C) 2001, 2002 Free Software Foundation, Inc.
This file is part of the GNU C Library. This file is part of the GNU C Library.
Contributed by David S. Miller <davem@redhat.com>, 2001. Contributed by David S. Miller <davem@redhat.com>, 2001.
@ -30,8 +30,6 @@
typedef unsigned long int hp_timing_t; typedef unsigned long int hp_timing_t;
extern hp_timing_t __libc_hp_timing_overhead;
#define HP_TIMING_ZERO(Var) (Var) = (0) #define HP_TIMING_ZERO(Var) (Var) = (0)
#define HP_TIMING_NOW(Var) __asm__ __volatile__ ("rd %%tick, %0" : "=r" (Var)) #define HP_TIMING_NOW(Var) __asm__ __volatile__ ("rd %%tick, %0" : "=r" (Var))
@ -39,14 +37,14 @@ extern hp_timing_t __libc_hp_timing_overhead;
#define HP_TIMING_DIFF_INIT() \ #define HP_TIMING_DIFF_INIT() \
do { \ do { \
int __cnt = 5; \ int __cnt = 5; \
__libc_hp_timing_overhead = ~0ull; \ GL(hp_timing_overhead) = ~0ull; \
do \ do \
{ \ { \
hp_timing_t __t1, __t2; \ hp_timing_t __t1, __t2; \
HP_TIMING_NOW (__t1); \ HP_TIMING_NOW (__t1); \
HP_TIMING_NOW (__t2); \ HP_TIMING_NOW (__t2); \
if (__t2 - __t1 < __libc_hp_timing_overhead) \ if (__t2 - __t1 < GL(hp_timing_overhead)) \
__libc_hp_timing_overhead = __t2 - __t1; \ GL(hp_timing_overhead) = __t2 - __t1; \
} \ } \
while (--__cnt > 0); \ while (--__cnt > 0); \
} while (0) } while (0)
@ -55,7 +53,7 @@ extern hp_timing_t __libc_hp_timing_overhead;
#define HP_TIMING_ACCUM(Sum, Diff) \ #define HP_TIMING_ACCUM(Sum, Diff) \
do { \ do { \
hp_timing_t __diff = (Diff) - __libc_hp_timing_overhead; \ hp_timing_t __diff = (Diff) - GL(hp_timing_overhead); \
hp_timing_t tmp1, tmp2; \ hp_timing_t tmp1, tmp2; \
__asm__ __volatile__("1: ldx [%3], %0\n\t" \ __asm__ __volatile__("1: ldx [%3], %0\n\t" \
"add %0, %2, %1\n\t" \ "add %0, %2, %1\n\t" \

View File

@ -1,5 +1,5 @@
/* Initialization code run first thing by the XCOFF startup code. AIX version. /* Initialization code run first thing by the XCOFF startup code. AIX version.
Copyright (C) 2001 Free Software Foundation, Inc. Copyright (C) 2001, 2002 Free Software Foundation, Inc.
This file is part of the GNU C Library. This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or The GNU C Library is free software; you can redistribute it and/or
@ -40,9 +40,6 @@ static void init (int, char **, char **) __attribute__ ((unused));
extern int _dl_starting_up; extern int _dl_starting_up;
weak_extern (_dl_starting_up) weak_extern (_dl_starting_up)
extern fpu_control_t _dl_fpu_control;
extern int _dl_fpu_control_set;
/* Set nonzero if we have to be prepared for more then one libc being /* Set nonzero if we have to be prepared for more then one libc being
used in the process. Safe assumption if initializer never runs. */ used in the process. Safe assumption if initializer never runs. */
int __libc_multiple_libcs = 1; int __libc_multiple_libcs = 1;

View File

@ -41,8 +41,6 @@ static void init (int, char **, char **) __attribute__ ((unused));
extern int _dl_starting_up; extern int _dl_starting_up;
weak_extern (_dl_starting_up) weak_extern (_dl_starting_up)
extern int _dl_fpu_control_set;
/* Set nonzero if we have to be prepared for more then one libc being /* Set nonzero if we have to be prepared for more then one libc being
used in the process. Safe assumption if initializer never runs. */ used in the process. Safe assumption if initializer never runs. */
int __libc_multiple_libcs = 1; int __libc_multiple_libcs = 1;

View File

@ -0,0 +1,62 @@
/* Data for Linux/sparc32 version of processor capability information.
Copyright (C) 2002 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Jakub Jelinek <jakub@redhat.com>, 2002.
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. */
/* This information must be kept in sync with the _DL_HWCAP_COUNT
definition in procinfo.h.
If anything should be added here check whether the size of each string
is still ok with the given array size.
All the #ifdefs in the definitions ar equite irritating but
necessary if we want to avoid duplicating the information. There
are three different modes:
- PROCINFO_DECL is defined. This means we are only interested in
declarations.
- PROCINFO_DECL is not defined:
+ if SHARED is defined the file is included in an array
initializer. The .element = { ... } syntax is needed.
+ if SHARED is not defined a normal array initialization is
needed.
*/
#ifdef PROCINFO_DECL
EXTERN
#endif
#if !defined PROCINFO_DECL && defined SHARED
._dl_sparc32_cap_flags
#else
const char _dl_sparc32_cap_flags[6][7]
#endif
#ifndef PROCINFO_DECL
= {
"flush", "stbar", "swap", "muldiv", "v9", "ultra3"
}
#endif
#if !defined SHARED || defined PROCINFO_DECL
;
#else
,
#endif
#undef PROCINFO_DECL

View File

@ -1,5 +1,5 @@
/* Linux/sparc32 version of processor capability information handling macros. /* Linux/sparc32 version of processor capability information handling macros.
Copyright (C) 1999, 2000, 2001 Free Software Foundation, Inc. Copyright (C) 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
This file is part of the GNU C Library. This file is part of the GNU C Library.
Contributed by Jakub Jelinek <jj@ultra.linux.cz>, 1999. Contributed by Jakub Jelinek <jj@ultra.linux.cz>, 1999.
@ -23,12 +23,6 @@
#include <ldsodefs.h> #include <ldsodefs.h>
/* If anything should be added here check whether the size of each string
is still ok with the given array size. */
static const char sparc32_cap_flags[][7] =
{
"flush", "stbar", "swap", "muldiv", "v9", "ultra3"
};
#define _DL_HWCAP_COUNT 6 #define _DL_HWCAP_COUNT 6
static inline int static inline int
@ -41,7 +35,7 @@ _dl_procinfo (int word)
for (i = 0; i < _DL_HWCAP_COUNT; ++i) for (i = 0; i < _DL_HWCAP_COUNT; ++i)
if (word & (1 << i)) if (word & (1 << i))
_dl_printf (" %s", sparc32_cap_flags[i]); _dl_printf (" %s", GL(dl_sparc32_cap_flags)[i]);
_dl_printf ("\n"); _dl_printf ("\n");
@ -52,7 +46,7 @@ static inline const char *
__attribute__ ((unused)) __attribute__ ((unused))
_dl_hwcap_string (int idx) _dl_hwcap_string (int idx)
{ {
return sparc32_cap_flags[idx]; return GL(dl_sparc32_cap_flags)[idx];
}; };
static inline int static inline int
@ -62,7 +56,7 @@ _dl_string_hwcap (const char *str)
int i; int i;
for (i = 0; i < _DL_HWCAP_COUNT; i++) for (i = 0; i < _DL_HWCAP_COUNT; i++)
{ {
if (strcmp (str, sparc32_cap_flags [i]) == 0) if (strcmp (str, GL(dl_sparc32_cap_flags) [i]) == 0)
return i; return i;
} }
return -1; return -1;

View File

@ -0,0 +1,62 @@
/* Data for Linux/sparc64 version of processor capability information.
Copyright (C) 2002 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Jakub Jelinek <jakub@redhat.com>, 2002.
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. */
/* This information must be kept in sync with the _DL_HWCAP_COUNT
definition in procinfo.h.
If anything should be added here check whether the size of each string
is still ok with the given array size.
All the #ifdefs in the definitions ar equite irritating but
necessary if we want to avoid duplicating the information. There
are three different modes:
- PROCINFO_DECL is defined. This means we are only interested in
declarations.
- PROCINFO_DECL is not defined:
+ if SHARED is defined the file is included in an array
initializer. The .element = { ... } syntax is needed.
+ if SHARED is not defined a normal array initialization is
needed.
*/
#ifdef PROCINFO_DECL
EXTERN
#endif
#if !defined PROCINFO_DECL && defined SHARED
._dl_sparc64_cap_flags
#else
const char _dl_sparc64_cap_flags[6][7]
#endif
#ifndef PROCINFO_DECL
= {
"flush", "stbar", "swap", "muldiv", "v9", "ultra3"
}
#endif
#if !defined SHARED || defined PROCINFO_DECL
;
#else
,
#endif
#undef PROCINFO_DECL

View File

@ -1,5 +1,5 @@
/* Linux/sparc64 version of processor capability information handling macros. /* Linux/sparc64 version of processor capability information handling macros.
Copyright (C) 1999, 2000, 2001 Free Software Foundation, Inc. Copyright (C) 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
This file is part of the GNU C Library. This file is part of the GNU C Library.
Contributed by Jakub Jelinek <jj@ultra.linux.cz>, 1999. Contributed by Jakub Jelinek <jj@ultra.linux.cz>, 1999.
@ -23,12 +23,6 @@
#include <ldsodefs.h> #include <ldsodefs.h>
/* If anything should be added here check whether the size of each string
is still ok with the given array size. */
static const char sparc64_cap_flags[][7] =
{
"flush", "stbar", "swap", "muldiv", "v9", "ultra3"
};
#define _DL_HWCAP_COUNT 6 #define _DL_HWCAP_COUNT 6
static inline int static inline int
@ -41,7 +35,7 @@ _dl_procinfo (int word)
for (i = 0; i < _DL_HWCAP_COUNT; ++i) for (i = 0; i < _DL_HWCAP_COUNT; ++i)
if (word & (1 << i)) if (word & (1 << i))
_dl_printf (" %s", sparc64_cap_flags[i]); _dl_printf (" %s", GL(dl_sparc64_cap_flags)[i]);
_dl_printf ("\n"); _dl_printf ("\n");
@ -52,7 +46,7 @@ static inline const char *
__attribute__ ((unused)) __attribute__ ((unused))
_dl_hwcap_string (int idx) _dl_hwcap_string (int idx)
{ {
return sparc64_cap_flags[idx]; return GL(dl_sparc64_cap_flags)[idx];
}; };
@ -63,7 +57,7 @@ _dl_string_hwcap (const char *str)
int i; int i;
for (i = 0; i < _DL_HWCAP_COUNT; i++) for (i = 0; i < _DL_HWCAP_COUNT; i++)
{ {
if (strcmp (str, sparc64_cap_flags [i]) == 0) if (strcmp (str, GL(dl_sparc64_cap_flags) [i]) == 0)
return i; return i;
} }
return -1; return -1;