aboutsummaryrefslogtreecommitdiff
path: root/elf
diff options
context:
space:
mode:
Diffstat (limited to 'elf')
-rw-r--r--elf/dl-close.c4
-rw-r--r--elf/dl-conflict.c4
-rw-r--r--elf/dl-deps.c10
-rw-r--r--elf/dl-dst.h4
-rw-r--r--elf/dl-error.c4
-rw-r--r--elf/dl-fini.c4
-rw-r--r--elf/dl-init.c6
-rw-r--r--elf/dl-load.c49
-rw-r--r--elf/dl-lookup.c24
-rw-r--r--elf/dl-minimal.c8
-rw-r--r--elf/dl-open.c11
-rw-r--r--elf/dl-profile.c24
-rw-r--r--elf/dl-reloc.c15
-rw-r--r--elf/dl-runtime.c4
-rw-r--r--elf/dl-support.c6
-rw-r--r--elf/dl-version.c4
-rw-r--r--elf/do-lookup.h6
-rw-r--r--elf/rtld.c110
18 files changed, 158 insertions, 139 deletions
diff --git a/elf/dl-close.c b/elf/dl-close.c
index c7424c5ffb..c63dabbfe1 100644
--- a/elf/dl-close.c
+++ b/elf/dl-close.c
@@ -134,7 +134,7 @@ _dl_close (void *_map)
if (map->l_opencount > 1 || map->l_type != lt_loaded)
{
/* There are still references to this object. Do nothing more. */
- if (__builtin_expect (GL(dl_debug_mask) & DL_DEBUG_FILES, 0))
+ if (__builtin_expect (GLRO(dl_debug_mask) & DL_DEBUG_FILES, 0))
_dl_debug_printf ("\nclosing file=%s; opencount == %u\n",
map->l_name, map->l_opencount);
@@ -224,7 +224,7 @@ _dl_close (void *_map)
&& (imap->l_flags_1 & DF_1_NODELETE) == 0)
{
/* When debugging print a message first. */
- if (__builtin_expect (GL(dl_debug_mask) & DL_DEBUG_IMPCALLS, 0))
+ if (__builtin_expect (GLRO(dl_debug_mask) & DL_DEBUG_IMPCALLS, 0))
_dl_debug_printf ("\ncalling fini: %s\n\n", imap->l_name);
/* Call its termination function. Do not do it for
diff --git a/elf/dl-conflict.c b/elf/dl-conflict.c
index 0068cd885a..8546d365c9 100644
--- a/elf/dl-conflict.c
+++ b/elf/dl-conflict.c
@@ -1,5 +1,5 @@
/* Resolve conflicts against already prelinked libraries.
- 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.
Contributed by Jakub Jelinek <jakub@redhat.com>, 2001.
@@ -33,7 +33,7 @@ _dl_resolve_conflicts (struct link_map *l, ElfW(Rela) *conflict,
ElfW(Rela) *conflictend)
{
#if ! ELF_MACHINE_NO_RELA
- if (__builtin_expect (GL(dl_debug_mask) & DL_DEBUG_RELOC, 0))
+ if (__builtin_expect (GLRO(dl_debug_mask) & DL_DEBUG_RELOC, 0))
_dl_printf ("\nconflict processing: %s\n",
l->l_name[0] ? l->l_name : rtld_progname);
diff --git a/elf/dl-deps.c b/elf/dl-deps.c
index 0a9183faee..b2e6ec612b 100644
--- a/elf/dl-deps.c
+++ b/elf/dl-deps.c
@@ -1,5 +1,5 @@
/* Load the dependencies of a mapped object.
- Copyright (C) 1996-2001, 2002, 2003 Free Software Foundation, Inc.
+ Copyright (C) 1996-2003, 2004 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
@@ -126,7 +126,7 @@ empty dynamics string token substitution")); \
else \
{ \
/* This is for DT_AUXILIARY. */ \
- if (__builtin_expect (GL(dl_debug_mask) & DL_DEBUG_LIBS, 0)) \
+ if (__builtin_expect (GLRO(dl_debug_mask) & DL_DEBUG_LIBS, 0))\
INTUSE(_dl_debug_printf) (N_("\
cannot load auxiliary `%s' because of empty dynamic string token " \
"substitution\n"), __str); \
@@ -291,7 +291,7 @@ _dl_map_object_deps (struct link_map *map,
int err;
/* Say that we are about to load an auxiliary library. */
- if (__builtin_expect (GL(dl_debug_mask) & DL_DEBUG_LIBS,
+ if (__builtin_expect (GLRO(dl_debug_mask) & DL_DEBUG_LIBS,
0))
INTUSE(_dl_debug_printf) ("load auxiliary object=%s"
" requested by file=%s\n",
@@ -319,7 +319,7 @@ _dl_map_object_deps (struct link_map *map,
int err;
/* Say that we are about to load an auxiliary library. */
- if (__builtin_expect (GL(dl_debug_mask) & DL_DEBUG_LIBS,
+ if (__builtin_expect (GLRO(dl_debug_mask) & DL_DEBUG_LIBS,
0))
INTUSE(_dl_debug_printf) ("load filtered object=%s"
" requested by file=%s\n",
@@ -510,7 +510,7 @@ _dl_map_object_deps (struct link_map *map,
runp->map->l_reserved = 0;
}
- if (__builtin_expect(GL(dl_debug_mask) & DL_DEBUG_PRELINK, 0) != 0
+ if (__builtin_expect(GLRO(dl_debug_mask) & DL_DEBUG_PRELINK, 0) != 0
&& map == GL(dl_loaded))
{
/* If we are to compute conflicts, we have to build local scope
diff --git a/elf/dl-dst.h b/elf/dl-dst.h
index 4f0669d92b..b50d6735e3 100644
--- a/elf/dl-dst.h
+++ b/elf/dl-dst.h
@@ -1,5 +1,5 @@
/* Handling of dynamic sring tokens.
- Copyright (C) 1999, 2001, 2002, 2003 Free Software Foundation, Inc.
+ Copyright (C) 1999, 2001, 2002, 2003, 2004 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
@@ -62,7 +62,7 @@ extern size_t _dl_dst_count_internal (const char *name, int is_path);
origin_len = (l)->l_origin == (char *) -1 \
? 0 : strlen ((l)->l_origin); \
\
- __len += __cnt * (MAX (origin_len, GL(dl_platformlen)) - 7); \
+ __len += __cnt * (MAX (origin_len, GLRO(dl_platformlen)) - 7); \
} \
\
__len; })
diff --git a/elf/dl-error.c b/elf/dl-error.c
index df91088843..f234026701 100644
--- a/elf/dl-error.c
+++ b/elf/dl-error.c
@@ -1,5 +1,5 @@
/* Error handling for runtime dynamic linker.
- Copyright (C) 1995,96,97,98,99,2000,2001,2002 Free Software Foundation, Inc.
+ Copyright (C) 1995-2002,2004 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
@@ -121,7 +121,7 @@ internal_function
_dl_signal_cerror (int errcode, const char *objname, const char *occation,
const char *errstring)
{
- if (__builtin_expect (GL(dl_debug_mask)
+ if (__builtin_expect (GLRO(dl_debug_mask)
& ~(DL_DEBUG_STATISTICS|DL_DEBUG_PRELINK), 0))
INTUSE(_dl_debug_printf) ("%s: error: %s: %s (%s)\n", objname, occation,
errstring, receiver ? "continued" : "fatal");
diff --git a/elf/dl-fini.c b/elf/dl-fini.c
index 7115efb85a..3dc1db16c9 100644
--- a/elf/dl-fini.c
+++ b/elf/dl-fini.c
@@ -146,7 +146,7 @@ _dl_fini (void)
continue;
/* When debugging print a message first. */
- if (__builtin_expect (GL(dl_debug_mask) & DL_DEBUG_IMPCALLS, 0))
+ if (__builtin_expect (GLRO(dl_debug_mask) & DL_DEBUG_IMPCALLS, 0))
INTUSE(_dl_debug_printf) ("\ncalling fini: %s\n\n",
l->l_name[0]
? l->l_name : rtld_progname);
@@ -174,7 +174,7 @@ _dl_fini (void)
__rtld_lock_unlock_recursive (GL(dl_load_lock));
- if (__builtin_expect (GL(dl_debug_mask) & DL_DEBUG_STATISTICS, 0))
+ if (__builtin_expect (GLRO(dl_debug_mask) & DL_DEBUG_STATISTICS, 0))
{
INTUSE(_dl_debug_printf) ("\nruntime linker statistics:\n");
INTUSE(_dl_debug_printf) ("\
diff --git a/elf/dl-init.c b/elf/dl-init.c
index 0fb9328ef9..37d5045d03 100644
--- a/elf/dl-init.c
+++ b/elf/dl-init.c
@@ -1,5 +1,5 @@
/* Return the next shared object initializer function not yet run.
- Copyright (C) 1995, 1996, 1998-2001, 2002 Free Software Foundation, Inc.
+ Copyright (C) 1995, 1996, 1998-2002, 2004 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
@@ -51,7 +51,7 @@ call_init (struct link_map *l, int argc, char **argv, char **env)
return;
/* Print a debug message if wanted. */
- if (__builtin_expect (GL(dl_debug_mask) & DL_DEBUG_IMPCALLS, 0))
+ if (__builtin_expect (GLRO(dl_debug_mask) & DL_DEBUG_IMPCALLS, 0))
INTUSE(_dl_debug_printf) ("\ncalling init: %s\n\n",
l->l_name[0] ? l->l_name : rtld_progname);
@@ -108,7 +108,7 @@ _dl_init (struct link_map *main_map, int argc, char **argv, char **env)
ElfW(Addr) *addrs;
unsigned int cnt;
- if (__builtin_expect (GL(dl_debug_mask) & DL_DEBUG_IMPCALLS, 0))
+ if (__builtin_expect (GLRO(dl_debug_mask) & DL_DEBUG_IMPCALLS, 0))
INTUSE(_dl_debug_printf) ("\ncalling preinit: %s\n\n",
main_map->l_name[0]
? main_map->l_name : rtld_progname);
diff --git a/elf/dl-load.c b/elf/dl-load.c
index cba75f62fa..f7449bce9c 100644
--- a/elf/dl-load.c
+++ b/elf/dl-load.c
@@ -248,7 +248,7 @@ _dl_dst_substitute (struct link_map *l, const char *name, char *result,
INTUSE(__libc_enable_secure))) != 0)
repl = l->l_origin;
else if ((len = is_dst (start, name, "PLATFORM", is_path, 0)) != 0)
- repl = GL(dl_platform);
+ repl = GLRO(dl_platform);
else if ((len = is_dst (start, name, "LIB", is_path, 0)) != 0)
repl = DL_DST_LIB;
@@ -502,10 +502,10 @@ decompose_rpath (struct r_search_path_struct *sps,
/* First see whether we must forget the RUNPATH and RPATH from this
object. */
- if (__builtin_expect (GL(dl_inhibit_rpath) != NULL, 0)
+ if (__builtin_expect (GLRO(dl_inhibit_rpath) != NULL, 0)
&& !INTUSE(__libc_enable_secure))
{
- const char *inhp = GL(dl_inhibit_rpath);
+ const char *inhp = GLRO(dl_inhibit_rpath);
do
{
@@ -623,7 +623,7 @@ _dl_init_paths (const char *llp)
directories addressed by the LD_LIBRARY_PATH environment variable. */
/* Get the capabilities. */
- capstr = _dl_important_hwcaps (GL(dl_platform), GL(dl_platformlen),
+ capstr = _dl_important_hwcaps (GLRO(dl_platform), GLRO(dl_platformlen),
&ncapstr, &max_capstrlen);
/* First set up the rest of the default search directory entries. */
@@ -844,7 +844,7 @@ _dl_map_object_from_fd (const char *name, int fd, struct filebuf *fbp,
return NULL;
/* Print debugging message. */
- if (__builtin_expect (GL(dl_debug_mask) & DL_DEBUG_FILES, 0))
+ if (__builtin_expect (GLRO(dl_debug_mask) & DL_DEBUG_FILES, 0))
INTUSE(_dl_debug_printf) ("file=%s; generating link map\n", name);
/* This is the ELF header. We read it in `open_verify'. */
@@ -928,7 +928,7 @@ _dl_map_object_from_fd (const char *name, int fd, struct filebuf *fbp,
case PT_LOAD:
/* A load command tells us to map in part of the file.
We record the load commands and process them all later. */
- if (__builtin_expect ((ph->p_align & (GL(dl_pagesize) - 1)) != 0,
+ if (__builtin_expect ((ph->p_align & (GLRO(dl_pagesize) - 1)) != 0,
0))
{
errstring = N_("ELF load command alignment not page-aligned");
@@ -944,8 +944,8 @@ _dl_map_object_from_fd (const char *name, int fd, struct filebuf *fbp,
c = &loadcmds[nloadcmds++];
c->mapstart = ph->p_vaddr & ~(ph->p_align - 1);
- c->mapend = ((ph->p_vaddr + ph->p_filesz + GL(dl_pagesize) - 1)
- & ~(GL(dl_pagesize) - 1));
+ c->mapend = ((ph->p_vaddr + ph->p_filesz + GLRO(dl_pagesize) - 1)
+ & ~(GLRO(dl_pagesize) - 1));
c->dataend = ph->p_vaddr + ph->p_filesz;
c->allocend = ph->p_vaddr + ph->p_memsz;
c->mapoff = ph->p_offset & ~(ph->p_align - 1);
@@ -1090,7 +1090,7 @@ cannot allocate TLS data structures for initial thread");
the OS can do whatever it likes. */
ElfW(Addr) mappref;
mappref = (ELF_PREFERRED_ADDRESS (loader, maplength,
- c->mapstart & GL(dl_use_load_bias))
+ c->mapstart & GLRO(dl_use_load_bias))
- MAP_BASE_ADDR (l));
/* Remember which part of the address space this object uses. */
@@ -1164,8 +1164,8 @@ cannot allocate TLS data structures for initial thread");
zero = l->l_addr + c->dataend;
zeroend = l->l_addr + c->allocend;
- zeropage = ((zero + GL(dl_pagesize) - 1)
- & ~(GL(dl_pagesize) - 1));
+ zeropage = ((zero + GLRO(dl_pagesize) - 1)
+ & ~(GLRO(dl_pagesize) - 1));
if (zeroend < zeropage)
/* All the extra data is in the last page of the segment.
@@ -1178,8 +1178,9 @@ cannot allocate TLS data structures for initial thread");
if (__builtin_expect ((c->prot & PROT_WRITE) == 0, 0))
{
/* Dag nab it. */
- if (__mprotect ((caddr_t) (zero & ~(GL(dl_pagesize) - 1)),
- GL(dl_pagesize), c->prot|PROT_WRITE) < 0)
+ if (__mprotect ((caddr_t) (zero
+ & ~(GLRO(dl_pagesize) - 1)),
+ GLRO(dl_pagesize), c->prot|PROT_WRITE) < 0)
{
errstring = N_("cannot change memory protections");
goto call_lose_errno;
@@ -1187,8 +1188,8 @@ cannot allocate TLS data structures for initial thread");
}
memset ((void *) zero, '\0', zeropage - zero);
if (__builtin_expect ((c->prot & PROT_WRITE) == 0, 0))
- __mprotect ((caddr_t) (zero & ~(GL(dl_pagesize) - 1)),
- GL(dl_pagesize), c->prot);
+ __mprotect ((caddr_t) (zero & ~(GLRO(dl_pagesize) - 1)),
+ GLRO(dl_pagesize), c->prot);
}
if (zeroend > zeropage)
@@ -1258,7 +1259,7 @@ cannot allocate TLS data structures for initial thread");
l->l_entry += l->l_addr;
- if (__builtin_expect (GL(dl_debug_mask) & DL_DEBUG_FILES, 0))
+ if (__builtin_expect (GLRO(dl_debug_mask) & DL_DEBUG_FILES, 0))
INTUSE(_dl_debug_printf) ("\
dynamic: 0x%0*lx base: 0x%0*lx size: 0x%0*Zx\n\
entry: 0x%0*lx phdr: 0x%0*lx phnum: %*u\n\n",
@@ -1350,7 +1351,7 @@ cannot enable executable stack as shared object requires");
/* When we profile the SONAME might be needed for something else but
loading. Add it right away. */
- if (__builtin_expect (GL(dl_profile) != NULL, 0)
+ if (__builtin_expect (GLRO(dl_profile) != NULL, 0)
&& l->l_info[DT_SONAME] != NULL)
add_name_to_object (l, ((const char *) D_PTR (l, l_info[DT_STRTAB])
+ l->l_info[DT_SONAME]->d_un.d_val));
@@ -1570,7 +1571,7 @@ open_verify (const char *name, struct filebuf *fbp)
+ (abi_note[6] & 0xff) * 256
+ (abi_note[7] & 0xff);
if (abi_note[4] != __ABI_TAG_OS
- || (GL(dl_osversion) && GL(dl_osversion) < osversion))
+ || (GLRO(dl_osversion) && GLRO(dl_osversion) < osversion))
{
close_and_out:
__close (fd);
@@ -1615,7 +1616,7 @@ open_path (const char *name, size_t namelen, int preloaded,
/* If we are debugging the search for libraries print the path
now if it hasn't happened now. */
- if (__builtin_expect (GL(dl_debug_mask) & DL_DEBUG_LIBS, 0)
+ if (__builtin_expect (GLRO(dl_debug_mask) & DL_DEBUG_LIBS, 0)
&& current_what != this_dir->what)
{
current_what = this_dir->what;
@@ -1636,7 +1637,7 @@ open_path (const char *name, size_t namelen, int preloaded,
- buf);
/* Print name we try if this is wanted. */
- if (__builtin_expect (GL(dl_debug_mask) & DL_DEBUG_LIBS, 0))
+ if (__builtin_expect (GLRO(dl_debug_mask) & DL_DEBUG_LIBS, 0))
INTUSE(_dl_debug_printf) (" trying file=%s\n", buf);
fd = open_verify (buf, fbp);
@@ -1769,7 +1770,7 @@ _dl_map_object (struct link_map *loader, const char *name, int preloaded,
}
/* Display information if we are debugging. */
- if (__builtin_expect (GL(dl_debug_mask) & DL_DEBUG_FILES, 0)
+ if (__builtin_expect (GLRO(dl_debug_mask) & DL_DEBUG_FILES, 0)
&& loader != NULL)
INTUSE(_dl_debug_printf) ("\nfile=%s; needed by %s\n", name,
loader->l_name[0]
@@ -1781,7 +1782,7 @@ _dl_map_object (struct link_map *loader, const char *name, int preloaded,
size_t namelen = strlen (name) + 1;
- if (__builtin_expect (GL(dl_debug_mask) & DL_DEBUG_LIBS, 0))
+ if (__builtin_expect (GLRO(dl_debug_mask) & DL_DEBUG_LIBS, 0))
INTUSE(_dl_debug_printf) ("find library=%s; searching\n", name);
fd = -1;
@@ -1886,7 +1887,7 @@ _dl_map_object (struct link_map *loader, const char *name, int preloaded,
&realname, &fb);
/* Add another newline when we are tracing the library loading. */
- if (__builtin_expect (GL(dl_debug_mask) & DL_DEBUG_LIBS, 0))
+ if (__builtin_expect (GLRO(dl_debug_mask) & DL_DEBUG_LIBS, 0))
INTUSE(_dl_debug_printf) ("\n");
}
else
@@ -1908,7 +1909,7 @@ _dl_map_object (struct link_map *loader, const char *name, int preloaded,
if (__builtin_expect (fd, 0) == -1)
{
if (trace_mode
- && __builtin_expect (GL(dl_debug_mask) & DL_DEBUG_PRELINK, 0) == 0)
+ && __builtin_expect (GLRO(dl_debug_mask) & DL_DEBUG_PRELINK, 0) == 0)
{
/* We haven't found an appropriate library. But since we
are only interested in the list of libraries this isn't
diff --git a/elf/dl-lookup.c b/elf/dl-lookup.c
index 9d9a12efbf..f4ebd93fc3 100644
--- a/elf/dl-lookup.c
+++ b/elf/dl-lookup.c
@@ -1,5 +1,5 @@
/* Look up a symbol in the loaded objects.
- Copyright (C) 1995-2002, 2003 Free Software Foundation, Inc.
+ Copyright (C) 1995-2002, 2003, 2004 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
@@ -190,7 +190,7 @@ add_dependency (struct link_map *undef_map, struct link_map *map)
++(*list)->l_opencount;
/* Display information if we are debugging. */
- if (__builtin_expect (GL(dl_debug_mask) & DL_DEBUG_FILES, 0))
+ if (__builtin_expect (GLRO(dl_debug_mask) & DL_DEBUG_FILES, 0))
INTUSE(_dl_debug_printf) ("\
\nfile=%s; needed by %s (relocation dependency)\n\n",
map->l_name[0] ? map->l_name : rtld_progname,
@@ -315,7 +315,7 @@ _dl_lookup_symbol (const char *undef_name, struct link_map *undef_map,
return INTUSE(_dl_lookup_symbol) (undef_name, undef_map, ref,
symbol_scope, type_class, flags);
- if (__builtin_expect (GL(dl_debug_mask)
+ if (__builtin_expect (GLRO(dl_debug_mask)
& (DL_DEBUG_BINDINGS|DL_DEBUG_PRELINK), 0))
_dl_debug_bindings (undef_name, undef_map, ref, symbol_scope,
&current_value, NULL, type_class, protected);
@@ -389,7 +389,7 @@ _dl_lookup_symbol_skip (const char *undef_name,
}
}
- if (__builtin_expect (GL(dl_debug_mask)
+ if (__builtin_expect (GLRO(dl_debug_mask)
& (DL_DEBUG_BINDINGS|DL_DEBUG_PRELINK), 0))
_dl_debug_bindings (undef_name, undef_map, ref, symbol_scope,
&current_value, NULL, 0, protected);
@@ -522,7 +522,7 @@ _dl_lookup_versioned_symbol (const char *undef_name,
ref, symbol_scope,
version, type_class, flags);
- if (__builtin_expect (GL(dl_debug_mask)
+ if (__builtin_expect (GLRO(dl_debug_mask)
& (DL_DEBUG_BINDINGS|DL_DEBUG_PRELINK), 0))
_dl_debug_bindings (undef_name, undef_map, ref, symbol_scope,
&current_value, version, type_class, protected);
@@ -609,7 +609,7 @@ _dl_lookup_versioned_symbol_skip (const char *undef_name,
}
}
- if (__builtin_expect (GL(dl_debug_mask)
+ if (__builtin_expect (GLRO(dl_debug_mask)
& (DL_DEBUG_BINDINGS|DL_DEBUG_PRELINK), 0))
_dl_debug_bindings (undef_name, undef_map, ref, symbol_scope,
&current_value, version, 0, protected);
@@ -650,7 +650,7 @@ _dl_debug_bindings (const char *undef_name, struct link_map *undef_map,
{
const char *reference_name = undef_map->l_name;
- if (GL(dl_debug_mask) & DL_DEBUG_BINDINGS)
+ if (GLRO(dl_debug_mask) & DL_DEBUG_BINDINGS)
{
INTUSE(_dl_debug_printf) ("binding file %s to %s: %s symbol `%s'",
(reference_name[0]
@@ -666,13 +666,13 @@ _dl_debug_bindings (const char *undef_name, struct link_map *undef_map,
_dl_debug_printf_c ("\n");
}
#ifdef SHARED
- if (GL(dl_debug_mask) & DL_DEBUG_PRELINK)
+ if (GLRO(dl_debug_mask) & DL_DEBUG_PRELINK)
{
int conflict = 0;
struct sym_val val = { NULL, NULL };
- if ((GL(dl_trace_prelink_map) == NULL
- || GL(dl_trace_prelink_map) == GL(dl_loaded))
+ if ((GLRO(dl_trace_prelink_map) == NULL
+ || GLRO(dl_trace_prelink_map) == GL(dl_loaded))
&& undef_map != GL(dl_loaded))
{
const unsigned long int hash = _dl_elf_hash (undef_name);
@@ -698,8 +698,8 @@ _dl_debug_bindings (const char *undef_name, struct link_map *undef_map,
#endif
if (conflict
- || GL(dl_trace_prelink_map) == undef_map
- || GL(dl_trace_prelink_map) == NULL
+ || GLRO(dl_trace_prelink_map) == undef_map
+ || GLRO(dl_trace_prelink_map) == NULL
|| type_class == 4)
{
_dl_printf ("%s 0x%0*Zx 0x%0*Zx -> 0x%0*Zx 0x%0*Zx ",
diff --git a/elf/dl-minimal.c b/elf/dl-minimal.c
index 3a51df30fb..4ec2ebcbb4 100644
--- a/elf/dl-minimal.c
+++ b/elf/dl-minimal.c
@@ -1,5 +1,5 @@
/* Minimal replacements for basic facilities used in the dynamic linker.
- Copyright (C) 1995,96,97,98,2000,2001,2002 Free Software Foundation, Inc.
+ Copyright (C) 1995-1998,2000-2002,2004 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
@@ -66,8 +66,8 @@ __libc_memalign (size_t align, size_t n)
extern int _end attribute_hidden;
alloc_ptr = &_end;
alloc_end = (void *) 0 + (((alloc_ptr - (void *) 0)
- + GL(dl_pagesize) - 1)
- & ~(GL(dl_pagesize) - 1));
+ + GLRO(dl_pagesize) - 1)
+ & ~(GLRO(dl_pagesize) - 1));
}
/* Make sure the allocation pointer is ideally aligned. */
@@ -78,7 +78,7 @@ __libc_memalign (size_t align, size_t n)
{
/* Insufficient space left; allocate another page. */
caddr_t page;
- size_t nup = (n + GL(dl_pagesize) - 1) & ~(GL(dl_pagesize) - 1);
+ size_t nup = (n + GLRO(dl_pagesize) - 1) & ~(GLRO(dl_pagesize) - 1);
page = __mmap (0, nup, PROT_READ|PROT_WRITE,
MAP_ANON|MAP_PRIVATE, _dl_zerofd, 0);
assert (page != MAP_FAILED);
diff --git a/elf/dl-open.c b/elf/dl-open.c
index 9befbc41cf..09687d8940 100644
--- a/elf/dl-open.c
+++ b/elf/dl-open.c
@@ -308,7 +308,7 @@ dl_open_worker (void *a)
if (new->l_searchlist.r_list != NULL)
{
/* Let the user know about the opencount. */
- if (__builtin_expect (GL(dl_debug_mask) & DL_DEBUG_FILES, 0))
+ if (__builtin_expect (GLRO(dl_debug_mask) & DL_DEBUG_FILES, 0))
_dl_debug_printf ("opening file=%s; opencount == %u\n\n",
new->l_name, new->l_opencount);
@@ -336,7 +336,7 @@ dl_open_worker (void *a)
#endif
/* Only do lazy relocation if `LD_BIND_NOW' is not set. */
- lazy = (mode & RTLD_BINDING_MASK) == RTLD_LAZY && GL(dl_lazy);
+ lazy = (mode & RTLD_BINDING_MASK) == RTLD_LAZY && GLRO(dl_lazy);
/* Relocate the objects loaded. We do this in reverse order so that copy
relocs of earlier objects overwrite the data written by later objects. */
@@ -349,7 +349,7 @@ dl_open_worker (void *a)
if (! l->l_relocated)
{
#ifdef SHARED
- if (GL(dl_profile) != NULL)
+ if (GLRO(dl_profile) != NULL)
{
/* If this here is the shared object which we want to profile
make sure the profile is started. We can find out whether
@@ -362,7 +362,8 @@ dl_open_worker (void *a)
if (old_profile_map == NULL && GL(dl_profile_map) != NULL)
/* We must prepare the profiling. */
- _dl_start_profile (GL(dl_profile_map), GL(dl_profile_output));
+ _dl_start_profile (GL(dl_profile_map),
+ GLRO(dl_profile_output));
}
else
#endif
@@ -548,7 +549,7 @@ dl_open_worker (void *a)
#endif
/* Let the user know about the opencount. */
- if (__builtin_expect (GL(dl_debug_mask) & DL_DEBUG_FILES, 0))
+ if (__builtin_expect (GLRO(dl_debug_mask) & DL_DEBUG_FILES, 0))
_dl_debug_printf ("opening file=%s; opencount == %u\n\n",
new->l_name, new->l_opencount);
}
diff --git a/elf/dl-profile.c b/elf/dl-profile.c
index be706cefbf..164ae98f99 100644
--- a/elf/dl-profile.c
+++ b/elf/dl-profile.c
@@ -1,5 +1,5 @@
/* Profiling of shared libraries.
- Copyright (C) 1997-2002, 2003 Free Software Foundation, Inc.
+ Copyright (C) 1997-2002, 2003, 2004 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
Based on the BSD mcount implementation.
@@ -198,9 +198,9 @@ _dl_start_profile (struct link_map *map, const char *output_dir)
for (ph = map->l_phdr; ph < &map->l_phdr[map->l_phnum]; ++ph)
if (ph->p_type == PT_LOAD && (ph->p_flags & PF_X))
{
- ElfW(Addr) start = (ph->p_vaddr & ~(GL(dl_pagesize) - 1));
- ElfW(Addr) end = ((ph->p_vaddr + ph->p_memsz + GL(dl_pagesize) - 1)
- & ~(GL(dl_pagesize) - 1));
+ ElfW(Addr) start = (ph->p_vaddr & ~(GLRO(dl_pagesize) - 1));
+ ElfW(Addr) end = ((ph->p_vaddr + ph->p_memsz + GLRO(dl_pagesize) - 1)
+ & ~(GLRO(dl_pagesize) - 1));
if (start < mapstart)
mapstart = start;
@@ -273,11 +273,11 @@ _dl_start_profile (struct link_map *map, const char *output_dir)
/* First determine the output name. We write in the directory
OUTPUT_DIR and the name is composed from the shared objects
soname (or the file name) and the ending ".profile". */
- filename = (char *) alloca (strlen (output_dir) + 1 + strlen (GL(dl_profile))
- + sizeof ".profile");
+ filename = (char *) alloca (strlen (output_dir) + 1
+ + strlen (GLRO(dl_profile)) + sizeof ".profile");
cp = __stpcpy (filename, output_dir);
*cp++ = '/';
- __stpcpy (__stpcpy (cp, GL(dl_profile)), ".profile");
+ __stpcpy (__stpcpy (cp, GLRO(dl_profile)), ".profile");
#ifdef O_NOFOLLOW
# define EXTRA_FLAGS | O_NOFOLLOW
@@ -310,11 +310,11 @@ _dl_start_profile (struct link_map *map, const char *output_dir)
if (st.st_size == 0)
{
/* We have to create the file. */
- char buf[GL(dl_pagesize)];
+ char buf[GLRO(dl_pagesize)];
- memset (buf, '\0', GL(dl_pagesize));
+ memset (buf, '\0', GLRO(dl_pagesize));
- if (__lseek (fd, expected_size & ~(GL(dl_pagesize) - 1), SEEK_SET) == -1)
+ if (__lseek (fd, expected_size & ~(GLRO(dl_pagesize) - 1), SEEK_SET) == -1)
{
char buf[400];
int errnum;
@@ -327,7 +327,7 @@ _dl_start_profile (struct link_map *map, const char *output_dir)
}
if (TEMP_FAILURE_RETRY (__libc_write (fd, buf, (expected_size
- & (GL(dl_pagesize)
+ & (GLRO(dl_pagesize)
- 1))))
< 0)
goto cannot_create;
@@ -341,7 +341,7 @@ _dl_start_profile (struct link_map *map, const char *output_dir)
__munmap ((void *) addr, expected_size);
_dl_error_printf ("%s: file is no correct profile data file for `%s'\n",
- filename, GL(dl_profile));
+ filename, GLRO(dl_profile));
return;
}
diff --git a/elf/dl-reloc.c b/elf/dl-reloc.c
index 0fda3de3a7..dab5dea13b 100644
--- a/elf/dl-reloc.c
+++ b/elf/dl-reloc.c
@@ -146,7 +146,7 @@ _dl_relocate_object (struct link_map *l, struct r_scope_elem *scope[],
&& __builtin_expect (l->l_info[DT_BIND_NOW] != NULL, 0))
lazy = 0;
- if (__builtin_expect (GL(dl_debug_mask) & DL_DEBUG_RELOC, 0))
+ if (__builtin_expect (GLRO(dl_debug_mask) & DL_DEBUG_RELOC, 0))
INTUSE(_dl_debug_printf) ("\nrelocation processing: %s%s\n",
l->l_name[0] ? l->l_name : rtld_progname,
lazy ? " (lazy)" : "");
@@ -165,10 +165,10 @@ _dl_relocate_object (struct link_map *l, struct r_scope_elem *scope[],
struct textrels *newp;
newp = (struct textrels *) alloca (sizeof (*newp));
- newp->len = (((ph->p_vaddr + ph->p_memsz + GL(dl_pagesize) - 1)
- & ~(GL(dl_pagesize) - 1))
- - (ph->p_vaddr & ~(GL(dl_pagesize) - 1)));
- newp->start = ((ph->p_vaddr & ~(GL(dl_pagesize) - 1))
+ newp->len = (((ph->p_vaddr + ph->p_memsz + GLRO(dl_pagesize) - 1)
+ & ~(GLRO(dl_pagesize) - 1))
+ - (ph->p_vaddr & ~(GLRO(dl_pagesize) - 1)));
+ newp->start = ((ph->p_vaddr & ~(GLRO(dl_pagesize) - 1))
+ (caddr_t) l->l_addr);
if (__mprotect (newp->start, newp->len, PROT_READ|PROT_WRITE) < 0)
@@ -318,9 +318,10 @@ INTDEF (_dl_relocate_object)
void internal_function
_dl_protect_relro (struct link_map *l)
{
- ElfW(Addr) start = ((l->l_addr + l->l_relro_addr) & ~(GL(dl_pagesize) - 1));
+ ElfW(Addr) start = ((l->l_addr + l->l_relro_addr)
+ & ~(GLRO(dl_pagesize) - 1));
ElfW(Addr) end = ((l->l_addr + l->l_relro_addr + l->l_relro_size)
- & ~(GL(dl_pagesize) - 1));
+ & ~(GLRO(dl_pagesize) - 1));
if (start != end
&& __mprotect ((void *) start, end - start, PROT_READ) < 0)
diff --git a/elf/dl-runtime.c b/elf/dl-runtime.c
index 2992f652c6..b71dee5e75 100644
--- a/elf/dl-runtime.c
+++ b/elf/dl-runtime.c
@@ -118,7 +118,7 @@ fixup (
value = elf_machine_plt_value (l, reloc, value);
/* Finally, fix up the plt itself. */
- if (__builtin_expect (GL(dl_bind_not), 0))
+ if (__builtin_expect (GLRO(dl_bind_not), 0))
return value;
return elf_machine_fixup_plt (l, result, reloc, rel_addr, value);
@@ -209,7 +209,7 @@ profile_fixup (
value = elf_machine_plt_value (l, reloc, value);
/* Store the result for later runs. */
- if (__builtin_expect (! GL(dl_bind_not), 1))
+ if (__builtin_expect (! GLRO(dl_bind_not), 1))
*resultp = value;
}
diff --git a/elf/dl-support.c b/elf/dl-support.c
index aeebf3c5e2..44335e8a8e 100644
--- a/elf/dl-support.c
+++ b/elf/dl-support.c
@@ -175,10 +175,10 @@ _dl_aux_init (ElfW(auxv_t) *av)
switch (av->a_type)
{
case AT_PAGESZ:
- GL(dl_pagesize) = av->a_un.a_val;
+ GLRO(dl_pagesize) = av->a_un.a_val;
break;
case AT_CLKTCK:
- GL(dl_clktck) = av->a_un.a_val;
+ GLRO(dl_clktck) = av->a_un.a_val;
break;
case AT_PHDR:
GL(dl_phdr) = av->a_un.a_ptr;
@@ -187,7 +187,7 @@ _dl_aux_init (ElfW(auxv_t) *av)
GL(dl_phnum) = av->a_un.a_val;
break;
case AT_HWCAP:
- GL(dl_hwcap) = av->a_un.a_val;
+ GLRO(dl_hwcap) = av->a_un.a_val;
break;
#ifdef NEED_DL_SYSINFO
case AT_SYSINFO:
diff --git a/elf/dl-version.c b/elf/dl-version.c
index 3daea87848..83d63f30de 100644
--- a/elf/dl-version.c
+++ b/elf/dl-version.c
@@ -1,5 +1,5 @@
/* Handle symbol and library versioning.
- Copyright (C) 1997-2002, 2003 Free Software Foundation, Inc.
+ Copyright (C) 1997-2002, 2003, 2004 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
@@ -87,7 +87,7 @@ match_symbol (const char *name, ElfW(Word) hash, const char *string,
int result = 0;
/* Display information about what we are doing while debugging. */
- if (__builtin_expect (GL(dl_debug_mask) & DL_DEBUG_VERSIONS, 0))
+ if (__builtin_expect (GLRO(dl_debug_mask) & DL_DEBUG_VERSIONS, 0))
INTUSE(_dl_debug_printf) ("\
checking for version `%s' in file %s required by file %s\n",
string, map->l_name[0]
diff --git a/elf/do-lookup.h b/elf/do-lookup.h
index 8ba07253e3..15900cdf99 100644
--- a/elf/do-lookup.h
+++ b/elf/do-lookup.h
@@ -1,5 +1,5 @@
/* Look up a symbol in the loaded objects.
- Copyright (C) 1995-2002, 2003 Free Software Foundation, Inc.
+ Copyright (C) 1995-2002, 2003, 2004 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
@@ -60,7 +60,7 @@ FCT (const char *undef_name, unsigned long int hash, const ElfW(Sym) *ref,
continue;
/* Print some debugging info if wanted. */
- if (__builtin_expect (GL(dl_debug_mask) & DL_DEBUG_SYMBOLS, 0))
+ if (__builtin_expect (GLRO(dl_debug_mask) & DL_DEBUG_SYMBOLS, 0))
INTUSE(_dl_debug_printf) ("symbol=%s; lookup in file=%s\n",
undef_name, (map->l_name[0]
? map->l_name : rtld_progname));
@@ -183,7 +183,7 @@ FCT (const char *undef_name, unsigned long int hash, const ElfW(Sym) *ref,
{
case STB_WEAK:
/* Weak definition. Use this value if we don't find another. */
- if (__builtin_expect (GL(dl_dynamic_weak), 0))
+ if (__builtin_expect (GLRO(dl_dynamic_weak), 0))
{
if (! result->s)
{
diff --git a/elf/rtld.c b/elf/rtld.c
index 87a86bed32..943901f56b 100644
--- a/elf/rtld.c
+++ b/elf/rtld.c
@@ -95,14 +95,6 @@ struct rtld_global _rtld_global =
/* Get architecture specific initializer. */
#include <dl-procinfo.c>
._dl_debug_fd = STDERR_FILENO,
-#ifdef NEED_DL_SYSINFO
- ._dl_sysinfo = DL_SYSINFO_DEFAULT,
-#endif
- ._dl_lazy = 1,
- ._dl_use_load_bias = -2,
- ._dl_fpu_control = _FPU_DEFAULT,
- ._dl_correct_cache_id = _DL_CACHE_DEFAULT_ID,
- ._dl_hwcap_mask = HWCAP_IMPORTANT,
/* Default presumption without further information is executable stack. */
._dl_stack_flags = PF_R|PF_W|PF_X,
#ifdef _LIBC_REENTRANT
@@ -116,6 +108,28 @@ struct rtld_global _rtld_global =
extern struct rtld_global _rtld_local
__attribute__ ((alias ("_rtld_global"), visibility ("hidden")));
+
+/* This variable is similar to _rtld_local, but all values are
+ read-only after relocation. */
+struct rtld_global_ro _rtld_global_ro attribute_relro =
+ {
+#ifdef NEED_DL_SYSINFO
+ ._dl_sysinfo = DL_SYSINFO_DEFAULT,
+#endif
+ ._dl_use_load_bias = -2,
+ ._dl_correct_cache_id = _DL_CACHE_DEFAULT_ID,
+ ._dl_hwcap_mask = HWCAP_IMPORTANT,
+ ._dl_lazy = 1,
+ ._dl_fpu_control = _FPU_DEFAULT,
+ };
+/* If we would use strong_alias here the compiler would see a
+ non-hidden definition. This would undo the effect of the previous
+ declaration. So spell out was strong_alias does plus add the
+ visibility attribute. */
+extern struct rtld_global_ro _rtld_local_ro
+ __attribute__ ((alias ("_rtld_global_ro"), visibility ("hidden")));
+
+
static void dl_main (const ElfW(Phdr) *phdr, ElfW(Word) phnum,
ElfW(Addr) *user_entry);
@@ -280,7 +294,7 @@ _dl_start_final (void *arg, struct dl_start_final_info *info)
}
#endif
- if (__builtin_expect (GL(dl_debug_mask) & DL_DEBUG_STATISTICS, 0))
+ if (__builtin_expect (GLRO(dl_debug_mask) & DL_DEBUG_STATISTICS, 0))
{
#ifndef HP_TIMING_NONAVAIL
print_statistics (&rtld_total_time);
@@ -712,7 +726,7 @@ dl_main (const ElfW(Phdr) *phdr,
if (! strcmp (INTUSE(_dl_argv)[1], "--list"))
{
mode = list;
- GL(dl_lazy) = -1; /* This means do no dependency analysis. */
+ GLRO(dl_lazy) = -1; /* This means do no dependency analysis. */
++_dl_skip_args;
--_dl_argc;
@@ -738,7 +752,7 @@ dl_main (const ElfW(Phdr) *phdr,
else if (! strcmp (INTUSE(_dl_argv)[1], "--inhibit-rpath")
&& _dl_argc > 2)
{
- GL(dl_inhibit_rpath) = INTUSE(_dl_argv)[2];
+ GLRO(dl_inhibit_rpath) = INTUSE(_dl_argv)[2];
_dl_skip_args += 2;
_dl_argc -= 2;
@@ -1035,8 +1049,8 @@ of this helper program; chances are you did not intend to run this program.\n\
/* If LD_USE_LOAD_BIAS env variable has not been seen, default
to not using bias for non-prelinked PIEs and libraries
and using it for executables or prelinked PIEs or libraries. */
- if (GL(dl_use_load_bias) == (ElfW(Addr)) -2)
- GL(dl_use_load_bias) = (GL(dl_loaded)->l_addr == 0) ? -1 : 0;
+ if (GLRO(dl_use_load_bias) == (ElfW(Addr)) -2)
+ GLRO(dl_use_load_bias) = (GL(dl_loaded)->l_addr == 0) ? -1 : 0;
/* Set up the program header information for the dynamic linker
itself. It is needed in the dl_iterate_phdr() callbacks. */
@@ -1212,7 +1226,7 @@ ERROR: ld.so: object '%s' from %s cannot be preloaded: ignored.\n",
#ifdef NEED_DL_SYSINFO
struct link_map *sysinfo_map = NULL;
- if (GL(dl_sysinfo_dso) != NULL)
+ if (GLRO(dl_sysinfo_dso) != NULL)
{
/* Do an abridged version of the work _dl_map_object_from_fd would do
to map in the object. It's already mapped and prelinked (and
@@ -1224,9 +1238,9 @@ ERROR: ld.so: object '%s' from %s cannot be preloaded: ignored.\n",
{
static ElfW(Dyn) dyn_temp[DL_RO_DYN_TEMP_CNT];
- l->l_phdr = ((const void *) GL(dl_sysinfo_dso)
- + GL(dl_sysinfo_dso)->e_phoff);
- l->l_phnum = GL(dl_sysinfo_dso)->e_phnum;
+ l->l_phdr = ((const void *) GLRO(dl_sysinfo_dso)
+ + GLRO(dl_sysinfo_dso)->e_phoff);
+ l->l_phnum = GLRO(dl_sysinfo_dso)->e_phnum;
for (uint_fast16_t i = 0; i < l->l_phnum; ++i)
{
const ElfW(Phdr) *const ph = &l->l_phdr[i];
@@ -1243,7 +1257,7 @@ ERROR: ld.so: object '%s' from %s cannot be preloaded: ignored.\n",
l->l_map_end = ph->p_vaddr + ph->p_memsz;
}
}
- l->l_map_start = (ElfW(Addr)) GL(dl_sysinfo_dso);
+ l->l_map_start = (ElfW(Addr)) GLRO(dl_sysinfo_dso);
l->l_addr = l->l_map_start - l->l_addr;
l->l_map_end += l->l_addr;
l->l_ld = (void *) ((ElfW(Addr)) l->l_ld + l->l_addr);
@@ -1269,8 +1283,8 @@ ERROR: ld.so: object '%s' from %s cannot be preloaded: ignored.\n",
}
/* We have a prelinked DSO preloaded by the system. */
- if (GL(dl_sysinfo) == DL_SYSINFO_DEFAULT)
- GL(dl_sysinfo) = GL(dl_sysinfo_dso)->e_entry + l->l_addr;
+ if (GLRO(dl_sysinfo) == DL_SYSINFO_DEFAULT)
+ GLRO(dl_sysinfo) = GLRO(dl_sysinfo_dso)->e_entry + l->l_addr;
sysinfo_map = l;
}
}
@@ -1437,7 +1451,7 @@ cannot allocate TLS data structures for initial thread");
after relocation. */
struct link_map *l;
- if (GL(dl_debug_mask) & DL_DEBUG_PRELINK)
+ if (GLRO(dl_debug_mask) & DL_DEBUG_PRELINK)
{
struct r_scope_elem *scope = &GL(dl_loaded)->l_searchlist;
@@ -1449,8 +1463,8 @@ cannot allocate TLS data structures for initial thread");
_dl_printf ("\t%s => not found\n", l->l_libname->name);
continue;
}
- if (_dl_name_match_p (GL(dl_trace_prelink), l))
- GL(dl_trace_prelink_map) = l;
+ if (_dl_name_match_p (GLRO(dl_trace_prelink), l))
+ GLRO(dl_trace_prelink_map) = l;
_dl_printf ("\t%s => %s (0x%0*Zx, 0x%0*Zx)",
l->l_libname->name[0] ? l->l_libname->name
: rtld_progname ?: "<main program>",
@@ -1507,13 +1521,13 @@ cannot allocate TLS data structures for initial thread");
else
{
/* If LD_WARN is set warn about undefined symbols. */
- if (GL(dl_lazy) >= 0 && GL(dl_verbose))
+ if (GLRO(dl_lazy) >= 0 && GLRO(dl_verbose))
{
/* We have to do symbol dependency testing. */
struct relocate_args args;
struct link_map *l;
- args.lazy = GL(dl_lazy);
+ args.lazy = GLRO(dl_lazy);
l = GL(dl_loaded);
while (l->l_next)
@@ -1529,7 +1543,7 @@ cannot allocate TLS data structures for initial thread");
l = l->l_prev;
} while (l);
- if ((GL(dl_debug_mask) & DL_DEBUG_PRELINK)
+ if ((GLRO(dl_debug_mask) & DL_DEBUG_PRELINK)
&& GL(dl_rtld_map).l_opencount > 1)
INTUSE(_dl_relocate_object) (&GL(dl_rtld_map),
GL(dl_loaded)->l_scope, 0, 0);
@@ -1612,7 +1626,7 @@ cannot allocate TLS data structures for initial thread");
}
if (GL(dl_loaded)->l_info [ADDRIDX (DT_GNU_LIBLIST)]
- && ! __builtin_expect (GL(dl_profile) != NULL, 0))
+ && ! __builtin_expect (GLRO(dl_profile) != NULL, 0))
{
ElfW(Lib) *liblist, *liblistend;
struct link_map **r_list, **r_listend, *l;
@@ -1660,7 +1674,7 @@ cannot allocate TLS data structures for initial thread");
if (r_list == r_listend && liblist == liblistend)
prelinked = true;
- if (__builtin_expect (GL(dl_debug_mask) & DL_DEBUG_LIBS, 0))
+ if (__builtin_expect (GLRO(dl_debug_mask) & DL_DEBUG_LIBS, 0))
_dl_printf ("\nprelink checking: %s\n", prelinked ? "ok" : "failed");
}
@@ -1740,7 +1754,7 @@ cannot allocate TLS data structures for initial thread");
know that because it is self-contained). */
struct link_map *l;
- int consider_profiling = GL(dl_profile) != NULL;
+ int consider_profiling = GLRO(dl_profile) != NULL;
#ifndef HP_TIMING_NONAVAIL
hp_timing_t start;
hp_timing_t stop;
@@ -1748,7 +1762,7 @@ cannot allocate TLS data structures for initial thread");
#endif
/* If we are profiling we also must do lazy reloaction. */
- GL(dl_lazy) |= consider_profiling;
+ GLRO(dl_lazy) |= consider_profiling;
l = GL(dl_loaded);
while (l->l_next)
@@ -1769,7 +1783,7 @@ cannot allocate TLS data structures for initial thread");
}
if (l != &GL(dl_rtld_map))
- INTUSE(_dl_relocate_object) (l, l->l_scope, GL(dl_lazy),
+ INTUSE(_dl_relocate_object) (l, l->l_scope, GLRO(dl_lazy),
consider_profiling);
l = l->l_prev;
@@ -1792,7 +1806,8 @@ cannot allocate TLS data structures for initial thread");
needs to have _dl_profile_map set up by the relocator. */
if (__builtin_expect (GL(dl_profile_map) != NULL, 0))
/* We must prepare the profiling. */
- INTUSE(_dl_start_profile) (GL(dl_profile_map), GL(dl_profile_output));
+ INTUSE(_dl_start_profile) (GL(dl_profile_map),
+ GLRO(dl_profile_output));
if (GL(dl_rtld_map).l_opencount > 1)
{
@@ -1928,7 +1943,7 @@ process_dl_debug (const char *dl_debug)
if (debopts[cnt].len == len
&& memcmp (dl_debug, debopts[cnt].name, len) == 0)
{
- GL(dl_debug_mask) |= debopts[cnt].mask;
+ GLRO(dl_debug_mask) |= debopts[cnt].mask;
any_debug = 1;
break;
}
@@ -1949,7 +1964,7 @@ warning: debug option `%s' unknown; try LD_DEBUG=help\n", copy);
++dl_debug;
}
- if (GL(dl_debug_mask) & DL_DEBUG_HELP)
+ if (GLRO(dl_debug_mask) & DL_DEBUG_HELP)
{
size_t cnt;
@@ -1983,7 +1998,7 @@ process_envvars (enum mode *modep)
char *debug_output = NULL;
/* This is the default place for profiling data file. */
- GL(dl_profile_output)
+ GLRO(dl_profile_output)
= &"/var/tmp\0/var/profile"[INTUSE(__libc_enable_secure) ? 9 : 0];
while ((envline = _dl_next_ld_env_entry (&runp)) != NULL)
@@ -2004,7 +2019,7 @@ process_envvars (enum mode *modep)
case 4:
/* Warning level, verbose or not. */
if (memcmp (envline, "WARN", 4) == 0)
- GL(dl_verbose) = envline[5] != '\0';
+ GLRO(dl_verbose) = envline[5] != '\0';
break;
case 5:
@@ -2030,18 +2045,18 @@ process_envvars (enum mode *modep)
/* Which shared object shall be profiled. */
if (memcmp (envline, "PROFILE", 7) == 0 && envline[8] != '\0')
- GL(dl_profile) = &envline[8];
+ GLRO(dl_profile) = &envline[8];
break;
case 8:
/* Do we bind early? */
if (memcmp (envline, "BIND_NOW", 8) == 0)
{
- GL(dl_lazy) = envline[9] == '\0';
+ GLRO(dl_lazy) = envline[9] == '\0';
break;
}
if (memcmp (envline, "BIND_NOT", 8) == 0)
- GL(dl_bind_not) = envline[9] != '\0';
+ GLRO(dl_bind_not) = envline[9] != '\0';
break;
case 9:
@@ -2054,14 +2069,15 @@ process_envvars (enum mode *modep)
case 10:
/* Mask for the important hardware capabilities. */
if (memcmp (envline, "HWCAP_MASK", 10) == 0)
- GL(dl_hwcap_mask) = __strtoul_internal (&envline[11], NULL, 0, 0);
+ GLRO(dl_hwcap_mask) = __strtoul_internal (&envline[11], NULL,
+ 0, 0);
break;
case 11:
/* Path where the binary is found. */
if (!INTUSE(__libc_enable_secure)
&& memcmp (envline, "ORIGIN_PATH", 11) == 0)
- GL(dl_origin_path) = &envline[12];
+ GLRO(dl_origin_path) = &envline[12];
break;
case 12:
@@ -2080,7 +2096,7 @@ process_envvars (enum mode *modep)
}
if (memcmp (envline, "DYNAMIC_WEAK", 12) == 0)
- GL(dl_dynamic_weak) = 1;
+ GLRO(dl_dynamic_weak) = 1;
break;
case 13:
@@ -2091,7 +2107,7 @@ process_envvars (enum mode *modep)
#endif
if (!INTUSE(__libc_enable_secure)
&& memcmp (envline, "USE_LOAD_BIAS", 13) == 0)
- GL(dl_use_load_bias) = envline[14] == '1' ? -1 : 0;
+ GLRO(dl_use_load_bias) = envline[14] == '1' ? -1 : 0;
break;
case 14:
@@ -2099,7 +2115,7 @@ process_envvars (enum mode *modep)
if (!INTUSE(__libc_enable_secure)
&& memcmp (envline, "PROFILE_OUTPUT", 14) == 0
&& envline[15] != '\0')
- GL(dl_profile_output) = &envline[15];
+ GLRO(dl_profile_output) = &envline[15];
break;
case 16:
@@ -2107,9 +2123,9 @@ process_envvars (enum mode *modep)
if (memcmp (envline, "TRACE_PRELINKING", 16) == 0)
{
mode = trace;
- GL(dl_verbose) = 1;
- GL(dl_debug_mask) |= DL_DEBUG_PRELINK;
- GL(dl_trace_prelink) = &envline[17];
+ GLRO(dl_verbose) = 1;
+ GLRO(dl_debug_mask) |= DL_DEBUG_PRELINK;
+ GLRO(dl_trace_prelink) = &envline[17];
}
break;