aboutsummaryrefslogtreecommitdiff
path: root/elf/rtld.c
diff options
context:
space:
mode:
Diffstat (limited to 'elf/rtld.c')
-rw-r--r--elf/rtld.c42
1 files changed, 21 insertions, 21 deletions
diff --git a/elf/rtld.c b/elf/rtld.c
index 91723ccb77..62e0dd5dec 100644
--- a/elf/rtld.c
+++ b/elf/rtld.c
@@ -57,7 +57,7 @@ static void print_missing_version (int errcode, const char *objname,
const char *errsting);
/* Print the various times we collected. */
-static void print_statistics (void);
+static void print_statistics (hp_timing_t *total_timep);
/* This is a list of all the modes the dynamic loader can be in. */
enum mode { normal, list, verify, trace };
@@ -67,12 +67,12 @@ enum mode { normal, list, verify, trace };
all the entries. */
static void process_envvars (enum mode *modep);
-int _dl_argc attribute_hidden;
-char **_dl_argv = NULL;
+int _dl_argc attribute_relro attribute_hidden;
+char **_dl_argv attribute_relro;
INTDEF(_dl_argv)
/* Nonzero if we were run directly. */
-unsigned int _dl_skip_args attribute_hidden;
+unsigned int _dl_skip_args attribute_relro attribute_hidden;
/* Set nonzero during loading and initialization of executable and
libraries, cleared before the executable's entry point runs. This
@@ -115,6 +115,7 @@ extern struct rtld_global _rtld_local
static void dl_main (const ElfW(Phdr) *phdr, ElfW(Word) phnum,
ElfW(Addr) *user_entry);
+/* These two variables cannot be moved into .data.rel.ro. */
static struct libname_list _dl_rtld_libname;
static struct libname_list _dl_rtld_libname2;
@@ -126,10 +127,9 @@ static struct libname_list _dl_rtld_libname2;
/* Variable for statistics. */
#ifndef HP_TIMING_NONAVAIL
-static hp_timing_t rtld_total_time;
static hp_timing_t relocate_time;
-static hp_timing_t load_time;
-static hp_timing_t start_time;
+static hp_timing_t load_time attribute_relro;
+static hp_timing_t start_time attribute_relro;
#endif
/* Additional definitions needed by TLS initialization. */
@@ -263,6 +263,7 @@ _dl_start_final (void *arg, struct dl_start_final_info *info)
start_addr = _dl_sysdep_start (arg, &dl_main);
#ifndef HP_TIMING_NONAVAIL
+ hp_timing_t rtld_total_time;
if (HP_TIMING_AVAIL)
{
hp_timing_t end_time;
@@ -276,7 +277,7 @@ _dl_start_final (void *arg, struct dl_start_final_info *info)
#endif
if (__builtin_expect (GL(dl_debug_mask) & DL_DEBUG_STATISTICS, 0))
- print_statistics ();
+ print_statistics (&rtld_total_time);
return start_addr;
}
@@ -619,10 +620,12 @@ static void rtld_lock_default_unlock_recursive (void *lock)
#endif
-static const char *library_path; /* The library search path. */
-static const char *preloadlist; /* The list preloaded objects. */
-static int version_info; /* Nonzero if information about
- versions has to be printed. */
+/* The library search path. */
+static const char *library_path attribute_relro;
+/* The list preloaded objects. */
+static const char *preloadlist attribute_relro;
+/* Nonzero if information about versions has to be printed. */
+static int version_info attribute_relro;
static void
dl_main (const ElfW(Phdr) *phdr,
@@ -1815,7 +1818,7 @@ print_missing_version (int errcode __attribute__ ((unused)),
}
/* Nonzero if any of the debugging options is enabled. */
-static int any_debug;
+static int any_debug attribute_relro;
/* Process the string given as the parameter which explains which debugging
options are enabled. */
@@ -2127,7 +2130,7 @@ process_envvars (enum mode *modep)
/* Print the various times we collected. */
static void
-print_statistics (void)
+print_statistics (hp_timing_t *rtld_total_timep)
{
#ifndef HP_TIMING_NONAVAIL
char buf[200];
@@ -2137,18 +2140,15 @@ print_statistics (void)
/* Total time rtld used. */
if (HP_TIMING_AVAIL)
{
- HP_TIMING_PRINT (buf, sizeof (buf), rtld_total_time);
+ HP_TIMING_PRINT (buf, sizeof (buf), *rtld_total_timep);
INTUSE(_dl_debug_printf) ("\nruntime linker statistics:\n"
" total startup time in dynamic loader: %s\n",
buf);
- }
- /* Print relocation statistics. */
- if (HP_TIMING_AVAIL)
- {
+ /* Print relocation statistics. */
char pbuf[30];
HP_TIMING_PRINT (buf, sizeof (buf), relocate_time);
- cp = _itoa ((1000ULL * relocate_time) / rtld_total_time,
+ cp = _itoa ((1000ULL * relocate_time) / *rtld_total_timep,
pbuf + sizeof (pbuf), 10, 0);
wp = pbuf;
switch (pbuf + sizeof (pbuf) - cp)
@@ -2198,7 +2198,7 @@ print_statistics (void)
{
char pbuf[30];
HP_TIMING_PRINT (buf, sizeof (buf), load_time);
- cp = _itoa ((1000ULL * load_time) / rtld_total_time,
+ cp = _itoa ((1000ULL * load_time) / *rtld_total_timep,
pbuf + sizeof (pbuf), 10, 0);
wp = pbuf;
switch (pbuf + sizeof (pbuf) - cp)