mirror of
https://sourceware.org/git/glibc.git
synced 2025-07-29 11:41:21 +03:00
Update.
2004-03-07 Ulrich Drepper <drepper@redhat.com> * sysdeps/generic/ldsodefs.h: Move _dl_initial_searclist, _dl_hp_timing_overhead, _dl_init_all_dirs, and the content of dl-procinfo.c from _rtld_global to _rtld_global_ro. * elf/rtld.c: Adjust initializer for _rtld_global_ro. * elf/dl-close.c: Use GLRO instead of GL where appropriate. * elf/dl-libc.c: Likewise. * elf/dl-load.c: Likewise. * sysdeps/i386/dl-procinfo.h: Likewise. * sysdeps/i386/i686/hp-timing.h: Likewise. * sysdeps/ia64/hp-timing.h: Likewise. * sysdeps/sparc/sparc32/sparcv9/hp-timing.h: Likewise. * sysdeps/sparc/sparc64/hp-timing.h: Likewise. * sysdeps/unix/sysv/linux/arm/dl-procinfo.h: Likewise. * sysdeps/unix/sysv/linux/i386/dl-procinfo.h: Likewise. * sysdeps/unix/sysv/linux/sparc/sparc32/dl-procinfo.h: Likewise. * sysdeps/unix/sysv/linux/sparc/sparc64/dl-procinfo.h: Likewise.
This commit is contained in:
19
ChangeLog
19
ChangeLog
@ -1,3 +1,22 @@
|
|||||||
|
2004-03-07 Ulrich Drepper <drepper@redhat.com>
|
||||||
|
|
||||||
|
* sysdeps/generic/ldsodefs.h: Move _dl_initial_searclist,
|
||||||
|
_dl_hp_timing_overhead, _dl_init_all_dirs, and the content of
|
||||||
|
dl-procinfo.c from _rtld_global to _rtld_global_ro.
|
||||||
|
* elf/rtld.c: Adjust initializer for _rtld_global_ro.
|
||||||
|
* elf/dl-close.c: Use GLRO instead of GL where appropriate.
|
||||||
|
* elf/dl-libc.c: Likewise.
|
||||||
|
* elf/dl-load.c: Likewise.
|
||||||
|
* sysdeps/i386/dl-procinfo.h: Likewise.
|
||||||
|
* sysdeps/i386/i686/hp-timing.h: Likewise.
|
||||||
|
* sysdeps/ia64/hp-timing.h: Likewise.
|
||||||
|
* sysdeps/sparc/sparc32/sparcv9/hp-timing.h: Likewise.
|
||||||
|
* sysdeps/sparc/sparc64/hp-timing.h: Likewise.
|
||||||
|
* sysdeps/unix/sysv/linux/arm/dl-procinfo.h: Likewise.
|
||||||
|
* sysdeps/unix/sysv/linux/i386/dl-procinfo.h: Likewise.
|
||||||
|
* sysdeps/unix/sysv/linux/sparc/sparc32/dl-procinfo.h: Likewise.
|
||||||
|
* sysdeps/unix/sysv/linux/sparc/sparc64/dl-procinfo.h: Likewise.
|
||||||
|
|
||||||
2004-03-06 Ulrich Drepper <drepper@redhat.com>
|
2004-03-06 Ulrich Drepper <drepper@redhat.com>
|
||||||
|
|
||||||
* elf/dl-lookup.c: We don't need for specialized lookup functions.
|
* elf/dl-lookup.c: We don't need for specialized lookup functions.
|
||||||
|
@ -597,14 +597,15 @@ free_slotinfo (struct dtv_slotinfo_list **elemp)
|
|||||||
libc_freeres_fn (free_mem)
|
libc_freeres_fn (free_mem)
|
||||||
{
|
{
|
||||||
if (__builtin_expect (GL(dl_global_scope_alloc), 0) != 0
|
if (__builtin_expect (GL(dl_global_scope_alloc), 0) != 0
|
||||||
&& GL(dl_main_searchlist)->r_nlist == GL(dl_initial_searchlist).r_nlist)
|
&& (GL(dl_main_searchlist)->r_nlist
|
||||||
|
== GLRO(dl_initial_searchlist).r_nlist))
|
||||||
{
|
{
|
||||||
/* All object dynamically loaded by the program are unloaded. Free
|
/* All object dynamically loaded by the program are unloaded. Free
|
||||||
the memory allocated for the global scope variable. */
|
the memory allocated for the global scope variable. */
|
||||||
struct link_map **old = GL(dl_main_searchlist)->r_list;
|
struct link_map **old = GL(dl_main_searchlist)->r_list;
|
||||||
|
|
||||||
/* Put the old map in. */
|
/* Put the old map in. */
|
||||||
GL(dl_main_searchlist)->r_list = GL(dl_initial_searchlist).r_list;
|
GL(dl_main_searchlist)->r_list = GLRO(dl_initial_searchlist).r_list;
|
||||||
/* Signal that the original map is used. */
|
/* Signal that the original map is used. */
|
||||||
GL(dl_global_scope_alloc) = 0;
|
GL(dl_global_scope_alloc) = 0;
|
||||||
|
|
||||||
|
@ -209,7 +209,7 @@ libc_freeres_fn (free_mem)
|
|||||||
|
|
||||||
/* Remove all search directories. */
|
/* Remove all search directories. */
|
||||||
d = GL(dl_all_dirs);
|
d = GL(dl_all_dirs);
|
||||||
while (d != GL(dl_init_all_dirs))
|
while (d != GLRO(dl_init_all_dirs))
|
||||||
{
|
{
|
||||||
struct r_search_path_elem *old = d;
|
struct r_search_path_elem *old = d;
|
||||||
d = d->next;
|
d = d->next;
|
||||||
|
@ -757,7 +757,7 @@ _dl_init_paths (const char *llp)
|
|||||||
env_path_list.dirs = (void *) -1;
|
env_path_list.dirs = (void *) -1;
|
||||||
|
|
||||||
/* Remember the last search directory added at startup. */
|
/* Remember the last search directory added at startup. */
|
||||||
GL(dl_init_all_dirs) = GL(dl_all_dirs);
|
GLRO(dl_init_all_dirs) = GL(dl_all_dirs);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
20
elf/rtld.c
20
elf/rtld.c
@ -93,8 +93,6 @@ INTVARDEF(_dl_starting_up)
|
|||||||
(except those which cannot be added for some reason). */
|
(except those which cannot be added for some reason). */
|
||||||
struct rtld_global _rtld_global =
|
struct rtld_global _rtld_global =
|
||||||
{
|
{
|
||||||
/* Get architecture specific initializer. */
|
|
||||||
#include <dl-procinfo.c>
|
|
||||||
/* Default presumption without further information is executable stack. */
|
/* Default presumption without further information is executable stack. */
|
||||||
._dl_stack_flags = PF_R|PF_W|PF_X,
|
._dl_stack_flags = PF_R|PF_W|PF_X,
|
||||||
#ifdef _LIBC_REENTRANT
|
#ifdef _LIBC_REENTRANT
|
||||||
@ -113,6 +111,8 @@ extern struct rtld_global _rtld_local
|
|||||||
read-only after relocation. */
|
read-only after relocation. */
|
||||||
struct rtld_global_ro _rtld_global_ro attribute_relro =
|
struct rtld_global_ro _rtld_global_ro attribute_relro =
|
||||||
{
|
{
|
||||||
|
/* Get architecture specific initializer. */
|
||||||
|
#include <dl-procinfo.c>
|
||||||
#ifdef NEED_DL_SYSINFO
|
#ifdef NEED_DL_SYSINFO
|
||||||
._dl_sysinfo = DL_SYSINFO_DEFAULT,
|
._dl_sysinfo = DL_SYSINFO_DEFAULT,
|
||||||
#endif
|
#endif
|
||||||
@ -1720,6 +1720,14 @@ cannot allocate TLS data structures for initial thread");
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Now set up the variable which helps the assembler startup code. */
|
||||||
|
GL(dl_main_searchlist) = &GL(dl_loaded)->l_searchlist;
|
||||||
|
GL(dl_global_scope)[0] = &GL(dl_loaded)->l_searchlist;
|
||||||
|
|
||||||
|
/* Save the information about the original global scope list since
|
||||||
|
we need it in the memory handling later. */
|
||||||
|
GLRO(dl_initial_searchlist) = *GL(dl_main_searchlist);
|
||||||
|
|
||||||
if (prelinked)
|
if (prelinked)
|
||||||
{
|
{
|
||||||
struct link_map *l;
|
struct link_map *l;
|
||||||
@ -1833,14 +1841,6 @@ cannot allocate TLS data structures for initial thread");
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Now set up the variable which helps the assembler startup code. */
|
|
||||||
GL(dl_main_searchlist) = &GL(dl_loaded)->l_searchlist;
|
|
||||||
GL(dl_global_scope)[0] = &GL(dl_loaded)->l_searchlist;
|
|
||||||
|
|
||||||
/* Save the information about the original global scope list since
|
|
||||||
we need it in the memory handling later. */
|
|
||||||
GL(dl_initial_searchlist) = *GL(dl_main_searchlist);
|
|
||||||
|
|
||||||
#ifndef NONTLS_INIT_TP
|
#ifndef NONTLS_INIT_TP
|
||||||
# define NONTLS_INIT_TP do { } while (0)
|
# define NONTLS_INIT_TP do { } while (0)
|
||||||
#endif
|
#endif
|
||||||
|
@ -213,8 +213,6 @@ struct rtld_global
|
|||||||
EXTERN struct r_scope_elem *_dl_global_scope[2];
|
EXTERN struct r_scope_elem *_dl_global_scope[2];
|
||||||
/* Direct pointer to the searchlist of the main object. */
|
/* Direct pointer to the searchlist of the main object. */
|
||||||
EXTERN struct r_scope_elem *_dl_main_searchlist;
|
EXTERN struct r_scope_elem *_dl_main_searchlist;
|
||||||
/* Copy of the content of `_dl_main_searchlist'. */
|
|
||||||
EXTERN struct r_scope_elem _dl_initial_searchlist;
|
|
||||||
/* This is zero at program start to signal that the global scope map is
|
/* This is zero at program start to signal that the global scope map is
|
||||||
allocated by rtld. Later it keeps the size of the map. It might be
|
allocated by rtld. Later it keeps the size of the map. It might be
|
||||||
reset if in _dl_close if the last global object is removed. */
|
reset if in _dl_close if the last global object is removed. */
|
||||||
@ -243,9 +241,6 @@ struct rtld_global
|
|||||||
#if HP_TIMING_AVAIL || HP_SMALL_TIMING_AVAIL
|
#if HP_TIMING_AVAIL || HP_SMALL_TIMING_AVAIL
|
||||||
/* Start time on CPU clock. */
|
/* Start time on CPU clock. */
|
||||||
EXTERN hp_timing_t _dl_cpuclock_offset;
|
EXTERN hp_timing_t _dl_cpuclock_offset;
|
||||||
|
|
||||||
/* Overhead of a high-precision timing measurement. */
|
|
||||||
EXTERN hp_timing_t _dl_hp_timing_overhead;
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Map of shared object to be profiled. */
|
/* Map of shared object to be profiled. */
|
||||||
@ -257,17 +252,11 @@ struct rtld_global
|
|||||||
|
|
||||||
/* List of search directories. */
|
/* List of search directories. */
|
||||||
EXTERN struct r_search_path_elem *_dl_all_dirs;
|
EXTERN struct r_search_path_elem *_dl_all_dirs;
|
||||||
EXTERN struct r_search_path_elem *_dl_init_all_dirs;
|
|
||||||
|
|
||||||
#ifdef _LIBC_REENTRANT
|
#ifdef _LIBC_REENTRANT
|
||||||
EXTERN void **(*_dl_error_catch_tsd) (void) __attribute__ ((const));
|
EXTERN void **(*_dl_error_catch_tsd) (void) __attribute__ ((const));
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Get architecture specific definitions. */
|
|
||||||
#define PROCINFO_DECL
|
|
||||||
#define PROCINFO_CLASS EXTERN
|
|
||||||
#include <dl-procinfo.c>
|
|
||||||
|
|
||||||
/* Structure describing the dynamic linker itself. */
|
/* Structure describing the dynamic linker itself. */
|
||||||
EXTERN struct link_map _dl_rtld_map;
|
EXTERN struct link_map _dl_rtld_map;
|
||||||
|
|
||||||
@ -388,6 +377,9 @@ struct rtld_global_ro
|
|||||||
EXTERN const char *_dl_platform;
|
EXTERN const char *_dl_platform;
|
||||||
EXTERN size_t _dl_platformlen;
|
EXTERN size_t _dl_platformlen;
|
||||||
|
|
||||||
|
/* Copy of the content of `_dl_main_searchlist' at startup time. */
|
||||||
|
EXTERN struct r_scope_elem _dl_initial_searchlist;
|
||||||
|
|
||||||
/* CLK_TCK as reported by the kernel. */
|
/* CLK_TCK as reported by the kernel. */
|
||||||
EXTERN int _dl_clktck;
|
EXTERN int _dl_clktck;
|
||||||
|
|
||||||
@ -419,6 +411,11 @@ struct rtld_global_ro
|
|||||||
/* Mask for important hardware capabilities we honour. */
|
/* Mask for important hardware capabilities we honour. */
|
||||||
EXTERN unsigned long int _dl_hwcap_mask;
|
EXTERN unsigned long int _dl_hwcap_mask;
|
||||||
|
|
||||||
|
/* Get architecture specific definitions. */
|
||||||
|
#define PROCINFO_DECL
|
||||||
|
#define PROCINFO_CLASS EXTERN
|
||||||
|
#include <dl-procinfo.c>
|
||||||
|
|
||||||
/* Names of shared object for which the RPATH should be ignored. */
|
/* Names of shared object for which the RPATH should be ignored. */
|
||||||
EXTERN const char *_dl_inhibit_rpath;
|
EXTERN const char *_dl_inhibit_rpath;
|
||||||
|
|
||||||
@ -439,6 +436,14 @@ struct rtld_global_ro
|
|||||||
/* Map of shared object to be prelink traced. */
|
/* Map of shared object to be prelink traced. */
|
||||||
EXTERN struct link_map *_dl_trace_prelink_map;
|
EXTERN struct link_map *_dl_trace_prelink_map;
|
||||||
|
|
||||||
|
/* All search directories defined at startup. */
|
||||||
|
EXTERN struct r_search_path_elem *_dl_init_all_dirs;
|
||||||
|
|
||||||
|
#if HP_TIMING_AVAIL || HP_SMALL_TIMING_AVAIL
|
||||||
|
/* Overhead of a high-precision timing measurement. */
|
||||||
|
EXTERN hp_timing_t _dl_hp_timing_overhead;
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef NEED_DL_SYSINFO
|
#ifdef NEED_DL_SYSINFO
|
||||||
/* Syscall handling improvements. This is very specific to x86. */
|
/* Syscall handling improvements. This is very specific to x86. */
|
||||||
EXTERN uintptr_t _dl_sysinfo;
|
EXTERN uintptr_t _dl_sysinfo;
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/* i386 version of processor capability information handling macros.
|
/* i386 version of processor capability information handling macros.
|
||||||
Copyright (C) 1998, 2000, 2003 Free Software Foundation, Inc.
|
Copyright (C) 1998, 2000, 2003, 2004 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>, 1998.
|
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1998.
|
||||||
|
|
||||||
@ -68,14 +68,14 @@ static inline const char *
|
|||||||
__attribute__ ((unused))
|
__attribute__ ((unused))
|
||||||
_dl_hwcap_string (int idx)
|
_dl_hwcap_string (int idx)
|
||||||
{
|
{
|
||||||
return GL(dl_x86_cap_flags)[idx];
|
return GLRO(dl_x86_cap_flags)[idx];
|
||||||
};
|
};
|
||||||
|
|
||||||
static inline const char *
|
static inline const char *
|
||||||
__attribute__ ((unused))
|
__attribute__ ((unused))
|
||||||
_dl_platform_string (int idx)
|
_dl_platform_string (int idx)
|
||||||
{
|
{
|
||||||
return GL(dl_x86_platforms)[idx - _DL_FIRST_PLATFORM];
|
return GLRO(dl_x86_platforms)[idx - _DL_FIRST_PLATFORM];
|
||||||
};
|
};
|
||||||
|
|
||||||
static inline int
|
static inline int
|
||||||
@ -86,7 +86,7 @@ _dl_string_hwcap (const char *str)
|
|||||||
|
|
||||||
for (i = 0; i < _DL_HWCAP_COUNT; i++)
|
for (i = 0; i < _DL_HWCAP_COUNT; i++)
|
||||||
{
|
{
|
||||||
if (strcmp (str, GL(dl_x86_cap_flags)[i]) == 0)
|
if (strcmp (str, GLRO(dl_x86_cap_flags)[i]) == 0)
|
||||||
return i;
|
return i;
|
||||||
}
|
}
|
||||||
return -1;
|
return -1;
|
||||||
@ -101,7 +101,7 @@ _dl_string_platform (const char *str)
|
|||||||
if (str != NULL)
|
if (str != NULL)
|
||||||
for (i = 0; i < _DL_PLATFORMS_COUNT; ++i)
|
for (i = 0; i < _DL_PLATFORMS_COUNT; ++i)
|
||||||
{
|
{
|
||||||
if (strcmp (str, GL(dl_x86_platforms)[i]) == 0)
|
if (strcmp (str, GLRO(dl_x86_platforms)[i]) == 0)
|
||||||
return _DL_FIRST_PLATFORM + i;
|
return _DL_FIRST_PLATFORM + i;
|
||||||
}
|
}
|
||||||
return -1;
|
return -1;
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/* High precision, low overhead timing functions. i686 version.
|
/* High precision, low overhead timing functions. i686 version.
|
||||||
Copyright (C) 1998, 2002, 2003 Free Software Foundation, Inc.
|
Copyright (C) 1998, 2002, 2003, 2004 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>, 1998.
|
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1998.
|
||||||
|
|
||||||
@ -97,17 +97,17 @@ typedef unsigned long long int hp_timing_t;
|
|||||||
/* Use two 'rdtsc' instructions in a row to find out how long it takes. */
|
/* Use two 'rdtsc' instructions in a row to find out how long it takes. */
|
||||||
#define HP_TIMING_DIFF_INIT() \
|
#define HP_TIMING_DIFF_INIT() \
|
||||||
do { \
|
do { \
|
||||||
if (GL(dl_hp_timing_overhead) == 0) \
|
if (GLRO(dl_hp_timing_overhead) == 0) \
|
||||||
{ \
|
{ \
|
||||||
int __cnt = 5; \
|
int __cnt = 5; \
|
||||||
GL(dl_hp_timing_overhead) = ~0ull; \
|
GLRO(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 < GL(dl_hp_timing_overhead)) \
|
if (__t2 - __t1 < GLRO(dl_hp_timing_overhead)) \
|
||||||
GL(dl_hp_timing_overhead) = __t2 - __t1; \
|
GLRO(dl_hp_timing_overhead) = __t2 - __t1; \
|
||||||
} \
|
} \
|
||||||
while (--__cnt > 0); \
|
while (--__cnt > 0); \
|
||||||
} \
|
} \
|
||||||
@ -121,7 +121,7 @@ typedef unsigned long long int hp_timing_t;
|
|||||||
do { \
|
do { \
|
||||||
char __not_done; \
|
char __not_done; \
|
||||||
hp_timing_t __oldval = (Sum); \
|
hp_timing_t __oldval = (Sum); \
|
||||||
hp_timing_t __diff = (Diff) - GL(dl_hp_timing_overhead); \
|
hp_timing_t __diff = (Diff) - GLRO(dl_hp_timing_overhead); \
|
||||||
do \
|
do \
|
||||||
{ \
|
{ \
|
||||||
hp_timing_t __newval = __oldval + __diff; \
|
hp_timing_t __newval = __oldval + __diff; \
|
||||||
|
@ -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, 2002, 2003 Free Software Foundation, Inc.
|
Copyright (C) 2001, 2002, 2003, 2004 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.
|
||||||
|
|
||||||
@ -100,14 +100,14 @@ typedef unsigned long int hp_timing_t;
|
|||||||
#define HP_TIMING_DIFF_INIT() \
|
#define HP_TIMING_DIFF_INIT() \
|
||||||
do { \
|
do { \
|
||||||
int __cnt = 5; \
|
int __cnt = 5; \
|
||||||
GL(dl_hp_timing_overhead) = ~0ul; \
|
GLRO(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 < GL(dl_hp_timing_overhead)) \
|
if (__t2 - __t1 < GLRO(dl_hp_timing_overhead)) \
|
||||||
GL(dl_hp_timing_overhead) = __t2 - __t1; \
|
GLRO(dl_hp_timing_overhead) = __t2 - __t1; \
|
||||||
} \
|
} \
|
||||||
while (--__cnt > 0); \
|
while (--__cnt > 0); \
|
||||||
} while (0)
|
} while (0)
|
||||||
@ -119,7 +119,7 @@ typedef unsigned long int hp_timing_t;
|
|||||||
#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) - GL(dl_hp_timing_overhead); \
|
hp_timing_t __diff = (Diff) - GLRO(dl_hp_timing_overhead); \
|
||||||
hp_timing_t __newval; \
|
hp_timing_t __newval; \
|
||||||
do \
|
do \
|
||||||
{ \
|
{ \
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/* High precision, low overhead timing functions. sparcv9 version.
|
/* High precision, low overhead timing functions. sparcv9 version.
|
||||||
Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc.
|
Copyright (C) 2001, 2002, 2003, 2004 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.
|
||||||
|
|
||||||
@ -40,14 +40,14 @@ typedef unsigned long long int hp_timing_t;
|
|||||||
#define HP_TIMING_DIFF_INIT() \
|
#define HP_TIMING_DIFF_INIT() \
|
||||||
do { \
|
do { \
|
||||||
int __cnt = 5; \
|
int __cnt = 5; \
|
||||||
GL(dl_hp_timing_overhead) = ~0ull; \
|
GLRO(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 < GL(dl_hp_timing_overhead)) \
|
if (__t2 - __t1 < GLRO(dl_hp_timing_overhead)) \
|
||||||
GL(dl_hp_timing_overhead) = __t2 - __t1; \
|
GLRO(dl_hp_timing_overhead) = __t2 - __t1; \
|
||||||
} \
|
} \
|
||||||
while (--__cnt > 0); \
|
while (--__cnt > 0); \
|
||||||
} while (0)
|
} while (0)
|
||||||
@ -56,7 +56,7 @@ typedef unsigned long long int hp_timing_t;
|
|||||||
|
|
||||||
#define HP_TIMING_ACCUM(Sum, Diff) \
|
#define HP_TIMING_ACCUM(Sum, Diff) \
|
||||||
do { \
|
do { \
|
||||||
hp_timing_t __diff = (Diff) - GL(dl_hp_timing_overhead); \
|
hp_timing_t __diff = (Diff) - GLRO(dl_hp_timing_overhead); \
|
||||||
__asm__ __volatile__("srl %L0, 0, %%g1\n\t" \
|
__asm__ __volatile__("srl %L0, 0, %%g1\n\t" \
|
||||||
"sllx %H0, 32, %%g6\n\t" \
|
"sllx %H0, 32, %%g6\n\t" \
|
||||||
"or %%g1, %%g6, %%g1\n\t" \
|
"or %%g1, %%g6, %%g1\n\t" \
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/* High precision, low overhead timing functions. sparc64 version.
|
/* High precision, low overhead timing functions. sparc64 version.
|
||||||
Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc.
|
Copyright (C) 2001, 2002, 2003, 2004 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.
|
||||||
|
|
||||||
@ -37,14 +37,14 @@ typedef unsigned long int hp_timing_t;
|
|||||||
#define HP_TIMING_DIFF_INIT() \
|
#define HP_TIMING_DIFF_INIT() \
|
||||||
do { \
|
do { \
|
||||||
int __cnt = 5; \
|
int __cnt = 5; \
|
||||||
GL(dl_hp_timing_overhead) = ~0ull; \
|
GLRO(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 < GL(dl_hp_timing_overhead)) \
|
if (__t2 - __t1 < GLRO(dl_hp_timing_overhead)) \
|
||||||
GL(dl_hp_timing_overhead) = __t2 - __t1; \
|
GLRO(dl_hp_timing_overhead) = __t2 - __t1; \
|
||||||
} \
|
} \
|
||||||
while (--__cnt > 0); \
|
while (--__cnt > 0); \
|
||||||
} while (0)
|
} while (0)
|
||||||
@ -53,7 +53,7 @@ typedef unsigned long int hp_timing_t;
|
|||||||
|
|
||||||
#define HP_TIMING_ACCUM(Sum, Diff) \
|
#define HP_TIMING_ACCUM(Sum, Diff) \
|
||||||
do { \
|
do { \
|
||||||
hp_timing_t __diff = (Diff) - GL(dl_hp_timing_overhead); \
|
hp_timing_t __diff = (Diff) - GLRO(dl_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" \
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/* Linux/ARM version of processor capability information handling macros.
|
/* Linux/ARM version of processor capability information handling macros.
|
||||||
Copyright (C) 2001, 2002 Free Software Foundation, Inc.
|
Copyright (C) 2001, 2002, 2004 Free Software Foundation, Inc.
|
||||||
This file is part of the GNU C Library.
|
This file is part of the GNU C Library.
|
||||||
Contributed by Philip Blundell <philb@gnu.org>, 2001.
|
Contributed by Philip Blundell <philb@gnu.org>, 2001.
|
||||||
|
|
||||||
@ -39,7 +39,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", GL(dl_arm_cap_flags)[i]);
|
_dl_printf (" %s", GLRO(dl_arm_cap_flags)[i]);
|
||||||
|
|
||||||
_dl_printf ("\n");
|
_dl_printf ("\n");
|
||||||
|
|
||||||
@ -50,7 +50,7 @@ static inline const char *
|
|||||||
__attribute__ ((unused))
|
__attribute__ ((unused))
|
||||||
_dl_hwcap_string (int idx)
|
_dl_hwcap_string (int idx)
|
||||||
{
|
{
|
||||||
return GL(dl_arm_cap_flags)[idx];
|
return GLRO(dl_arm_cap_flags)[idx];
|
||||||
};
|
};
|
||||||
|
|
||||||
enum
|
enum
|
||||||
@ -75,7 +75,7 @@ _dl_string_hwcap (const char *str)
|
|||||||
|
|
||||||
for (i = 0; i < _DL_HWCAP_COUNT; i++)
|
for (i = 0; i < _DL_HWCAP_COUNT; i++)
|
||||||
{
|
{
|
||||||
if (strcmp (str, GL(dl_arm_cap_flags)[i]) == 0)
|
if (strcmp (str, GLRO(dl_arm_cap_flags)[i]) == 0)
|
||||||
return i;
|
return i;
|
||||||
}
|
}
|
||||||
return -1;
|
return -1;
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/* Linux/i386 version of processor capability information handling macros.
|
/* Linux/i386 version of processor capability information handling macros.
|
||||||
Copyright (C) 1998-2002, 2003 Free Software Foundation, Inc.
|
Copyright (C) 1998-2002, 2003, 2004 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>, 1998.
|
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1998.
|
||||||
|
|
||||||
@ -35,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", GL(dl_x86_cap_flags)[i]);
|
_dl_printf (" %s", GLRO(dl_x86_cap_flags)[i]);
|
||||||
|
|
||||||
_dl_printf ("\n");
|
_dl_printf ("\n");
|
||||||
|
|
||||||
|
@ -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, 2002, 2003 Free Software Foundation, Inc.
|
Copyright (C) 1999,2000,2001,2002,2003,2004 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.
|
||||||
|
|
||||||
@ -35,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", GL(dl_sparc32_cap_flags)[i]);
|
_dl_printf (" %s", GLRO(dl_sparc32_cap_flags)[i]);
|
||||||
|
|
||||||
_dl_printf ("\n");
|
_dl_printf ("\n");
|
||||||
|
|
||||||
@ -46,7 +46,7 @@ static inline const char *
|
|||||||
__attribute__ ((unused))
|
__attribute__ ((unused))
|
||||||
_dl_hwcap_string (int idx)
|
_dl_hwcap_string (int idx)
|
||||||
{
|
{
|
||||||
return GL(dl_sparc32_cap_flags)[idx];
|
return GLRO(dl_sparc32_cap_flags)[idx];
|
||||||
};
|
};
|
||||||
|
|
||||||
static inline int
|
static inline int
|
||||||
@ -56,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, GL(dl_sparc32_cap_flags) [i]) == 0)
|
if (strcmp (str, GLRO(dl_sparc32_cap_flags) [i]) == 0)
|
||||||
return i;
|
return i;
|
||||||
}
|
}
|
||||||
return -1;
|
return -1;
|
||||||
|
@ -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, 2002 Free Software Foundation, Inc.
|
Copyright (C) 1999, 2000, 2001, 2002, 2004 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.
|
||||||
|
|
||||||
@ -35,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", GL(dl_sparc64_cap_flags)[i]);
|
_dl_printf (" %s", GLRO(dl_sparc64_cap_flags)[i]);
|
||||||
|
|
||||||
_dl_printf ("\n");
|
_dl_printf ("\n");
|
||||||
|
|
||||||
@ -46,7 +46,7 @@ static inline const char *
|
|||||||
__attribute__ ((unused))
|
__attribute__ ((unused))
|
||||||
_dl_hwcap_string (int idx)
|
_dl_hwcap_string (int idx)
|
||||||
{
|
{
|
||||||
return GL(dl_sparc64_cap_flags)[idx];
|
return GLRO(dl_sparc64_cap_flags)[idx];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@ -57,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, GL(dl_sparc64_cap_flags) [i]) == 0)
|
if (strcmp (str, GLRO(dl_sparc64_cap_flags) [i]) == 0)
|
||||||
return i;
|
return i;
|
||||||
}
|
}
|
||||||
return -1;
|
return -1;
|
||||||
|
Reference in New Issue
Block a user