Update.
authorUlrich Drepper <drepper@redhat.com>
Sat, 23 Feb 2002 09:20:59 +0000 (09:20 +0000)
committerUlrich Drepper <drepper@redhat.com>
Sat, 23 Feb 2002 09:20:59 +0000 (09:20 +0000)
* elf/sprof.c (load_profdata): If do_test provide information as
to why loading failed.
* elf/dl-profile.c (_dl_start_profile): Initialize all of
hist_hdr.dimen.

ChangeLog
elf/dl-profile.c
elf/sprof.c

index dbe013e..822a50c 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,10 @@
 2002-02-23  Ulrich Drepper  <drepper@redhat.com>
 
+       * elf/sprof.c (load_profdata): If do_test provide information as
+       to why loading failed.
+       * elf/dl-profile.c (_dl_start_profile): Initialize all of
+       hist_hdr.dimen.
+
        * csu/set-init.c: Moved to...
        * sysdeps/mach/hurd/set-init.c: ...here.  New file.
        * csu/Makefile: Don't compile set-init.
index 19d1865..05b5c28 100644 (file)
@@ -260,7 +260,11 @@ _dl_start_profile (struct link_map *map, const char *output_dir)
   *(int32_t *) hist_hdr.hist_size = kcountsize / sizeof (HISTCOUNTER);
   *(int32_t *) hist_hdr.prof_rate = __profile_frequency ();
   if (sizeof (hist_hdr.dimen) >= sizeof ("seconds"))
-    memcpy (hist_hdr.dimen, "seconds", sizeof ("seconds"));
+    {
+      memcpy (hist_hdr.dimen, "seconds", sizeof ("seconds"));
+      memset (hist_hdr.dimen + sizeof ("seconds"), '\0',
+             sizeof (hist_hdr.dimen) - sizeof ("seconds"));
+    }
   else
     strncpy (hist_hdr.dimen, "seconds", sizeof (hist_hdr.dimen));
   hist_hdr.dimen_abbrev = 's';
index 7d7fd9f..3424282 100644 (file)
@@ -752,9 +752,21 @@ load_profdata (const char *name, struct shobj *shobj)
                 sizeof (struct gmon_hist_hdr)) != 0
       || narcsp[-1] != GMON_TAG_CG_ARC)
     {
-      free (result);
       error (0, 0, _("`%s' is no correct profile data file for `%s'"),
             name, shobj->name);
+      if (do_test)
+       {
+         if (memcmp (addr, &gmon_hdr, sizeof (struct gmon_hdr)) != 0)
+           puts ("gmon_hdr differs");
+         if (*(uint32_t *) result->hist != GMON_TAG_TIME_HIST)
+           puts ("result->hist differs");
+         if (memcmp (result->hist_hdr, &hist_hdr,
+                     sizeof (struct gmon_hist_hdr)) != 0)
+           puts ("hist_hdr differs");
+         if (narcsp[-1] != GMON_TAG_CG_ARC)
+           puts ("narcsp[-1] differs");
+       }
+      free (result);
       munmap (addr, st.st_size);
       return NULL;
     }