about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog4
-rw-r--r--elf/dl-profile.c23
-rw-r--r--elf/dl-reloc.c21
3 files changed, 24 insertions, 24 deletions
diff --git a/ChangeLog b/ChangeLog
index 3ac34e3075..1b6558f5ab 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,8 +1,12 @@
 2001-11-06  Ulrich Drepper  <drepper@redhat.com>
 
+	* elf/dl-profile.c: Replace state variable with simple flag named
+	running.  Remove commented-out code.
+
 	* elf/dl-load.c (decompose_rpath): Optimize error handling for size.
 	(_dl_init_paths): Likewise.
 	(_dl_map_object_from_fd): Likewise.
+	* elf/dl-reloc.c (_dl_relocate_object): Likewise.
 
 2001-11-06  Roland McGrath  <roland@frob.com>
 
diff --git a/elf/dl-profile.c b/elf/dl-profile.c
index 3165517914..9f16a9359e 100644
--- a/elf/dl-profile.c
+++ b/elf/dl-profile.c
@@ -134,6 +134,9 @@ struct here_cg_arc_record
 
 static struct here_cg_arc_record *data;
 
+/* Nonzero if profiling is under way.  */
+static int running;
+
 /* This is the number of entry which have been incorporated in the toset.  */
 static uint32_t narcs;
 /* This is a pointer to the object representing the number of entries
@@ -142,9 +145,6 @@ static uint32_t narcs;
    lists.  */
 static volatile uint32_t *narcsp;
 
-/* Description of the currently profiled object.  */
-static long int state = GMON_PROF_OFF;
-
 static volatile uint16_t *kcount;
 static size_t kcountsize;
 
@@ -208,7 +208,7 @@ _dl_start_profile (struct link_map *map, const char *output_dir)
 
   /* Now we can compute the size of the profiling data.  This is done
      with the same formulars as in `monstartup' (see gmon.c).  */
-  state = GMON_PROF_OFF;
+  running = 0;
   lowpc = ROUNDDOWN (mapstart + map->l_addr,
 		     HISTFRACTION * sizeof (HISTCOUNTER));
   highpc = ROUNDUP (mapend + map->l_addr,
@@ -424,7 +424,7 @@ _dl_start_profile (struct link_map *map, const char *output_dir)
   __profil ((void *) kcount, kcountsize, lowpc, s_scale);
 
   /* Turn on profiling.  */
-  state = GMON_PROF_ON;
+  running = 1;
 }
 
 
@@ -435,14 +435,8 @@ _dl_mcount (ElfW(Addr) frompc, ElfW(Addr) selfpc)
   size_t i, fromindex;
   struct here_fromstruct *fromp;
 
-#if 0
-  /* XXX I think this is now not necessary anymore.  */
-  if (! compare_and_swap (&state, GMON_PROF_ON, GMON_PROF_BUSY))
-    return;
-#else
-  if (state != GMON_PROF_ON)
+  if (! running)
     return;
-#endif
 
   /* Compute relative addresses.  The shared object can be loaded at
      any address.  The value of frompc could be anything.  We cannot
@@ -538,10 +532,5 @@ _dl_mcount (ElfW(Addr) frompc, ElfW(Addr) selfpc)
   atomic_add (&fromp->here->count, 1);
 
  done:
-#if 0
-  /* XXX See above,  Shouldn't be necessary anymore.  */
-  state = GMON_PROF_ON;
-#else
   ;
-#endif
 }
diff --git a/elf/dl-reloc.c b/elf/dl-reloc.c
index 4ee0da0e9e..efdccea151 100644
--- a/elf/dl-reloc.c
+++ b/elf/dl-reloc.c
@@ -122,23 +122,30 @@ cannot make segment writable for relocation"));
 
     if (__builtin_expect (consider_profiling, 0))
       {
+	const char *errstring = NULL;
+
 	/* Allocate the array which will contain the already found
 	   relocations.  If the shared object lacks a PLT (for example
 	   if it only contains lead function) the l_info[DT_PLTRELSZ]
 	   will be NULL.  */
 	if (l->l_info[DT_PLTRELSZ] == NULL)
-	  _dl_fatal_printf ("%s: profiler found no PLTREL in object %s\n",
-			    _dl_argv[0] ?: "<program name unknown>",
-			    l->l_name);
+	  {
+	    errstring = N_("%s: profiler found no PLTREL in object %s\n");
+	  fatal:
+	    _dl_fatal_printf (errstring,
+			      _dl_argv[0] ?: "<program name unknown>",
+			      l->l_name);
+	  }
 
 	l->l_reloc_result =
 	  (ElfW(Addr) *) calloc (sizeof (ElfW(Addr)),
 				 l->l_info[DT_PLTRELSZ]->d_un.d_val);
 	if (l->l_reloc_result == NULL)
-	  _dl_fatal_printf ("\
-%s: profiler out of memory shadowing PLTREL of %s\n",
-			    _dl_argv[0] ?: "<program name unknown>",
-			    l->l_name);
+	  {
+	    errstring = N_("\
+%s: profiler out of memory shadowing PLTREL of %s\n");
+	    goto fatal;
+	  }
       }
   }