diff options
author | Ulrich Drepper <drepper@redhat.com> | 2001-11-07 06:32:27 +0000 |
---|---|---|
committer | Ulrich Drepper <drepper@redhat.com> | 2001-11-07 06:32:27 +0000 |
commit | 7982ecfe469a67ce5b249da9d6b24a8d6103fc6f (patch) | |
tree | 51d1f20c44a778f1b029c758fb8dd805f0865182 /elf | |
parent | 39b3385dde64babd316ffd97dd79f9236e487ccb (diff) | |
download | glibc-7982ecfe469a67ce5b249da9d6b24a8d6103fc6f.tar glibc-7982ecfe469a67ce5b249da9d6b24a8d6103fc6f.tar.gz glibc-7982ecfe469a67ce5b249da9d6b24a8d6103fc6f.tar.bz2 glibc-7982ecfe469a67ce5b249da9d6b24a8d6103fc6f.zip |
Update.
* elf/dl-profile.c: Replace state variable with simple flag named
running. Remove commented-out code.
* elf/dl-reloc.c (_dl_relocate_object): Likewise.
Diffstat (limited to 'elf')
-rw-r--r-- | elf/dl-profile.c | 23 | ||||
-rw-r--r-- | elf/dl-reloc.c | 21 |
2 files changed, 20 insertions, 24 deletions
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; + } } } |