2012-03-06 Tristan Gingold <gingold@adacore.com>
authorTristan Gingold <gingold@adacore.com>
Tue, 6 Mar 2012 13:54:59 +0000 (13:54 +0000)
committerTristan Gingold <gingold@adacore.com>
Tue, 6 Mar 2012 13:54:59 +0000 (13:54 +0000)
* corefile.c (core_create_function_syms): Do not call bsearch if
symbol_map_count is 0.

gprof/ChangeLog
gprof/corefile.c

index 2eba327..ac9c35c 100644 (file)
@@ -1,3 +1,8 @@
+2012-03-06  Tristan Gingold  <gingold@adacore.com>
+
+       * corefile.c (core_create_function_syms): Do not call bsearch if
+       symbol_map_count is 0.
+
 2012-02-06  Nick Clifton  <nickc@redhat.com>
 
        * po/sr.po: New Serbian translation.
index e25d19b..9f93cee 100644 (file)
@@ -582,7 +582,7 @@ core_create_function_syms (void)
   bfd_vma max_vma = 0;
   int cxxclass;
   long i;
-  struct function_map * found;
+  struct function_map * found = NULL;
   int core_has_func_syms = 0;
 
   switch (core_bfd->xvec->flavour)
@@ -609,10 +609,14 @@ core_create_function_syms (void)
       /* Don't create a symtab entry for a function that has
         a mapping to a file, unless it's the first function
         in the file.  */
-      found = (struct function_map *) bsearch (core_syms[i]->name, symbol_map,
-                                               symbol_map_count,
-                                               sizeof (struct function_map),
-                                               search_mapped_symbol);
+      if (symbol_map_count != 0)
+       {
+         /* Note: some systems (SunOS 5.8) crash if bsearch base argument
+            is NULL.  */
+         found = (struct function_map *) bsearch
+           (core_syms[i]->name, symbol_map, symbol_map_count,
+            sizeof (struct function_map), search_mapped_symbol);
+       }
       if (found == NULL || found->is_first)
        ++symtab.len;
     }
@@ -643,9 +647,14 @@ core_create_function_syms (void)
          continue;
        }
 
-      found = (struct function_map *) bsearch (core_syms[i]->name, symbol_map,
-                                               symbol_map_count,
-                      sizeof (struct function_map), search_mapped_symbol);
+      if (symbol_map_count != 0)
+       {
+         /* Note: some systems (SunOS 5.8) crash if bsearch base argument
+            is NULL.  */
+         found = (struct function_map *) bsearch
+           (core_syms[i]->name, symbol_map, symbol_map_count,
+            sizeof (struct function_map), search_mapped_symbol);
+       }
       if (found && ! found->is_first)
        continue;