projects
/
deliverable
/
binutils-gdb.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
ld/
[deliverable/binutils-gdb.git]
/
gprof
/
corefile.c
diff --git
a/gprof/corefile.c
b/gprof/corefile.c
index e91ab1e2fb355e715b47a5f17f38ca6e791c091e..fa0db2c4535fe49d39d6e634227bcf5533da4963 100644
(file)
--- a/
gprof/corefile.c
+++ b/
gprof/corefile.c
@@
-1,13
+1,13
@@
/* corefile.c
/* corefile.c
- Copyright 1999, 2000, 2001, 2002, 2003, 2004, 2005
+ Copyright 1999, 2000, 2001, 2002, 2003, 2004, 2005
, 2007
Free Software Foundation, Inc.
This file is part of GNU Binutils.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
Free Software Foundation, Inc.
This file is part of GNU Binutils.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version
2
of the License, or
+ the Free Software Foundation; either version
3
of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
(at your option) any later version.
This program is distributed in the hope that it will be useful,
@@
-17,15
+17,17
@@
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
- Foundation, Inc., 5
9 Temple Place - Suite 330
, Boston, MA
- 0211
1-1307
, USA. */
+ Foundation, Inc., 5
1 Franklin Street - Fifth Floor
, Boston, MA
+ 0211
0-1301
, USA. */
\f
#include "libiberty.h"
#include "gprof.h"
#include "search_list.h"
#include "source.h"
#include "symtab.h"
\f
#include "libiberty.h"
#include "gprof.h"
#include "search_list.h"
#include "source.h"
#include "symtab.h"
+#include "hist.h"
#include "corefile.h"
#include "corefile.h"
+#include "safe-ctype.h"
bfd *core_bfd;
static int core_num_syms;
bfd *core_bfd;
static int core_num_syms;
@@
-52,6
+54,13
@@
extern void tahoe_find_call (Sym *, bfd_vma, bfd_vma);
extern void sparc_find_call (Sym *, bfd_vma, bfd_vma);
extern void mips_find_call (Sym *, bfd_vma, bfd_vma);
extern void sparc_find_call (Sym *, bfd_vma, bfd_vma);
extern void mips_find_call (Sym *, bfd_vma, bfd_vma);
+static void
+parse_error (const char *filename)
+{
+ fprintf (stderr, _("%s: unable to parse mapping file %s.\n"), whoami, filename);
+ done (1);
+}
+
static void
read_function_mappings (const char *filename)
{
static void
read_function_mappings (const char *filename)
{
@@
-74,21
+83,21
@@
read_function_mappings (const char *filename)
matches = fscanf (file, "%[^\n:]", dummy);
if (!matches)
matches = fscanf (file, "%[^\n:]", dummy);
if (!matches)
- {
- fprintf (stderr, _("%s: unable to parse mapping file %s.\n"),
- whoami, filename);
- done (1);
- }
+ parse_error (filename);
/* Just skip messages about files with no symbols. */
if (!strncmp (dummy, "No symbols in ", 14))
{
/* Just skip messages about files with no symbols. */
if (!strncmp (dummy, "No symbols in ", 14))
{
- fscanf (file, "\n");
+ matches = fscanf (file, "\n");
+ if (matches == EOF)
+ parse_error (filename);
continue;
}
/* Don't care what else is on this line at this point. */
continue;
}
/* Don't care what else is on this line at this point. */
- fscanf (file, "%[^\n]\n", dummy);
+ matches = fscanf (file, "%[^\n]\n", dummy);
+ if (!matches)
+ parse_error (filename);
count++;
}
count++;
}
@@
-108,16
+117,14
@@
read_function_mappings (const char *filename)
matches = fscanf (file, "%[^\n:]", dummy);
if (!matches)
matches = fscanf (file, "%[^\n:]", dummy);
if (!matches)
- {
- fprintf (stderr, _("%s: unable to parse mapping file %s.\n"),
- whoami, filename);
- done (1);
- }
+ parse_error (filename);
/* Just skip messages about files with no symbols. */
if (!strncmp (dummy, "No symbols in ", 14))
{
/* Just skip messages about files with no symbols. */
if (!strncmp (dummy, "No symbols in ", 14))
{
- fscanf (file, "\n");
+ matches = fscanf (file, "\n");
+ if (matches == EOF)
+ parse_error (filename);
continue;
}
continue;
}
@@
-126,7
+133,9
@@
read_function_mappings (const char *filename)
strcpy (symbol_map[count].file_name, dummy);
/* Now we need the function name. */
strcpy (symbol_map[count].file_name, dummy);
/* Now we need the function name. */
- fscanf (file, "%[^\n]\n", dummy);
+ matches = fscanf (file, "%[^\n]\n", dummy);
+ if (!matches)
+ parse_error (filename);
tmp = strrchr (dummy, ' ') + 1;
symbol_map[count].function_name = xmalloc (strlen (tmp) + 1);
strcpy (symbol_map[count].function_name, tmp);
tmp = strrchr (dummy, ' ') + 1;
symbol_map[count].function_name = xmalloc (strlen (tmp) + 1);
strcpy (symbol_map[count].function_name, tmp);
@@
-155,7
+164,7
@@
core_init (const char *aout_name)
if (!bfd_check_format (core_bfd, bfd_object))
{
if (!bfd_check_format (core_bfd, bfd_object))
{
- fprintf (stderr, _("%s: %s: not in
a.out
format\n"), whoami, aout_name);
+ fprintf (stderr, _("%s: %s: not in
executable
format\n"), whoami, aout_name);
done (1);
}
done (1);
}
@@
-262,6
+271,11
@@
core_get_text_space (bfd *cbfd)
void
find_call (Sym *parent, bfd_vma p_lowpc, bfd_vma p_highpc)
{
void
find_call (Sym *parent, bfd_vma p_lowpc, bfd_vma p_highpc)
{
+ if (core_text_space == 0)
+ return;
+
+ hist_clip_symbol_address (&p_lowpc, &p_highpc);
+
switch (bfd_get_arch (core_bfd))
{
case bfd_arch_i386:
switch (bfd_get_arch (core_bfd))
{
case bfd_arch_i386:
@@
-352,8
+366,15
@@
core_sym_class (asymbol *sym)
for (name = sym->name; *name; ++name)
{
for (name = sym->name; *name; ++name)
{
- if (*name == '.' || *name == '$')
- return 0;
+ if (*name == '$')
+ return 0;
+
+ /* Do not discard nested subprograms (those
+ which end with .NNN, where N are digits). */
+ if (*name == '.')
+ for (name++; *name; name++)
+ if (! ISDIGIT (*name))
+ return 0;
}
/* On systems where the C compiler adds an underscore to all
}
/* On systems where the C compiler adds an underscore to all
@@
-568,12
+589,6
@@
core_create_function_syms ()
else
max_vma = MAX (symtab.limit->addr, max_vma);
else
max_vma = MAX (symtab.limit->addr, max_vma);
- /* If we see "main" without an initial '_', we assume names
- are *not* prefixed by '_'. */
- if (symtab.limit->name[0] == 'm' && discard_underscores
- && strcmp (symtab.limit->name, "main") == 0)
- discard_underscores = 0;
-
DBG (AOUTDEBUG, printf ("[core_create_function_syms] %ld %s 0x%lx\n",
(long) (symtab.limit - symtab.base),
symtab.limit->name,
DBG (AOUTDEBUG, printf ("[core_create_function_syms] %ld %s 0x%lx\n",
(long) (symtab.limit - symtab.base),
symtab.limit->name,
@@
-733,12
+748,6
@@
core_create_line_syms ()
prev = ltab.limit;
prev = ltab.limit;
- /* If we see "main" without an initial '_', we assume names
- are *not* prefixed by '_'. */
- if (ltab.limit->name[0] == 'm' && discard_underscores
- && strcmp (ltab.limit->name, "main") == 0)
- discard_underscores = 0;
-
DBG (AOUTDEBUG, printf ("[core_create_line_syms] %lu %s 0x%lx\n",
(unsigned long) (ltab.limit - ltab.base),
ltab.limit->name,
DBG (AOUTDEBUG, printf ("[core_create_line_syms] %lu %s 0x%lx\n",
(unsigned long) (ltab.limit - ltab.base),
ltab.limit->name,
This page took
0.025128 seconds
and
4
git commands to generate.