summaryrefslogtreecommitdiff
path: root/gprof
diff options
context:
space:
mode:
authorTristan Gingold <gingold@adacore.com>2012-03-06 13:54:59 +0000
committerTristan Gingold <gingold@adacore.com>2012-03-06 13:54:59 +0000
commit4a969cfa40f2f9bbb7bd08975751c9a6be872a2c (patch)
treea3efb0c23574fa11824822d9173e58c5cfcdb90f /gprof
parente22db098c3588658c2b5850647a9ec176f118aee (diff)
downloadbinutils-redhat-4a969cfa40f2f9bbb7bd08975751c9a6be872a2c.tar.gz
2012-03-06 Tristan Gingold <gingold@adacore.com>
* corefile.c (core_create_function_syms): Do not call bsearch if symbol_map_count is 0.
Diffstat (limited to 'gprof')
-rw-r--r--gprof/ChangeLog5
-rw-r--r--gprof/corefile.c25
2 files changed, 22 insertions, 8 deletions
diff --git a/gprof/ChangeLog b/gprof/ChangeLog
index 2eba327233..ac9c35c6be 100644
--- a/gprof/ChangeLog
+++ b/gprof/ChangeLog
@@ -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.
diff --git a/gprof/corefile.c b/gprof/corefile.c
index e25d19bb06..9f93ceeab3 100644
--- a/gprof/corefile.c
+++ b/gprof/corefile.c
@@ -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;