projects
/
deliverable
/
binutils-gdb.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
gdb: add target_ops::supports_displaced_step
[deliverable/binutils-gdb.git]
/
binutils
/
addr2line.c
diff --git
a/binutils/addr2line.c
b/binutils/addr2line.c
index 9d2abe6e2f575cbb9b6dcbe39b6f94ad2348a38b..846720fc81886dae7896c7aed38baeb49293c560 100644
(file)
--- a/
binutils/addr2line.c
+++ b/
binutils/addr2line.c
@@
-1,5
+1,5
@@
/* addr2line.c -- convert addresses to line number and function name
/* addr2line.c -- convert addresses to line number and function name
- Copyright (C) 1997-20
15
Free Software Foundation, Inc.
+ Copyright (C) 1997-20
20
Free Software Foundation, Inc.
Contributed by Ulrich Lauther <Ulrich.Lauther@mchp.siemens.de>
This file is part of GNU Binutils.
Contributed by Ulrich Lauther <Ulrich.Lauther@mchp.siemens.de>
This file is part of GNU Binutils.
@@
-45,6
+45,9
@@
static bfd_boolean do_demangle; /* -C, demangle names. */
static bfd_boolean pretty_print; /* -p, print on one line. */
static bfd_boolean base_names; /* -s, strip directory names. */
static bfd_boolean pretty_print; /* -p, print on one line. */
static bfd_boolean base_names; /* -s, strip directory names. */
+/* Flags passed to the name demangler. */
+static int demangle_flags = DMGL_PARAMS | DMGL_ANSI;
+
static int naddr; /* Number of addresses to process. */
static char **addr; /* Hex addresses to process. */
static int naddr; /* Number of addresses to process. */
static char **addr; /* Hex addresses to process. */
@@
-59,6
+62,10
@@
static struct option long_options[] =
{"functions", no_argument, NULL, 'f'},
{"inlines", no_argument, NULL, 'i'},
{"pretty-print", no_argument, NULL, 'p'},
{"functions", no_argument, NULL, 'f'},
{"inlines", no_argument, NULL, 'i'},
{"pretty-print", no_argument, NULL, 'p'},
+ {"recurse-limit", no_argument, NULL, 'R'},
+ {"recursion-limit", no_argument, NULL, 'R'},
+ {"no-recurse-limit", no_argument, NULL, 'r'},
+ {"no-recursion-limit", no_argument, NULL, 'r'},
{"section", required_argument, NULL, 'j'},
{"target", required_argument, NULL, 'b'},
{"help", no_argument, NULL, 'H'},
{"section", required_argument, NULL, 'j'},
{"target", required_argument, NULL, 'b'},
{"help", no_argument, NULL, 'H'},
@@
-91,6
+98,8
@@
usage (FILE *stream, int status)
-s --basenames Strip directory names\n\
-f --functions Show function names\n\
-C --demangle[=style] Demangle function names\n\
-s --basenames Strip directory names\n\
-f --functions Show function names\n\
-C --demangle[=style] Demangle function names\n\
+ -R --recurse-limit Enable a limit on recursion whilst demangling. [Default]\n\
+ -r --no-recurse-limit Disable a limit on recursion whilst demangling\n\
-h --help Display this information\n\
-v --version Display the program's version\n\
\n"));
-h --help Display this information\n\
-v --version Display the program's version\n\
\n"));
@@
-140,6
+149,14
@@
slurp_symtab (bfd *abfd)
syms = xmalloc (storage);
symcount = bfd_canonicalize_dynamic_symtab (abfd, syms);
}
syms = xmalloc (storage);
symcount = bfd_canonicalize_dynamic_symtab (abfd, syms);
}
+
+ /* PR 17512: file: 2a1d3b5b.
+ Do not pretend that we have some symbols when we don't. */
+ if (symcount <= 0)
+ {
+ free (syms);
+ syms = NULL;
+ }
}
\f
/* These global variables are used to pass information between
}
\f
/* These global variables are used to pass information between
@@
-165,14
+182,14
@@
find_address_in_section (bfd *abfd, asection *section,
if (found)
return;
if (found)
return;
- if ((bfd_
get_section_flags (abfd,
section) & SEC_ALLOC) == 0)
+ if ((bfd_
section_flags (
section) & SEC_ALLOC) == 0)
return;
return;
- vma = bfd_
get_section_vma (abfd,
section);
+ vma = bfd_
section_vma (
section);
if (pc < vma)
return;
if (pc < vma)
return;
- size = bfd_
get_
section_size (section);
+ size = bfd_section_size (section);
if (pc >= vma + size)
return;
if (pc >= vma + size)
return;
@@
-191,10
+208,10
@@
find_offset_in_section (bfd *abfd, asection *section)
if (found)
return;
if (found)
return;
- if ((bfd_
get_section_flags (abfd,
section) & SEC_ALLOC) == 0)
+ if ((bfd_
section_flags (
section) & SEC_ALLOC) == 0)
return;
return;
- size = bfd_
get_
section_size (section);
+ size = bfd_section_size (section);
if (pc >= size)
return;
if (pc >= size)
return;
@@
-281,7
+298,7
@@
translate_addresses (bfd *abfd, asection *section)
name = "??";
else if (do_demangle)
{
name = "??";
else if (do_demangle)
{
- alloc = bfd_demangle (abfd, name,
DMGL_ANSI | DMGL_PARAMS
);
+ alloc = bfd_demangle (abfd, name,
demangle_flags
);
if (alloc != NULL)
name = alloc;
}
if (alloc != NULL)
name = alloc;
}
@@
-297,8
+314,7
@@
translate_addresses (bfd *abfd, asection *section)
else
printf ("\n");
else
printf ("\n");
- if (alloc != NULL)
- free (alloc);
+ free (alloc);
}
if (base_names && filename != NULL)
}
if (base_names && filename != NULL)
@@
-393,11
+409,8
@@
process_file (const char *file_name, const char *section_name,
translate_addresses (abfd, section);
translate_addresses (abfd, section);
- if (syms != NULL)
- {
- free (syms);
- syms = NULL;
- }
+ free (syms);
+ syms = NULL;
bfd_close (abfd);
bfd_close (abfd);
@@
-423,16
+436,18
@@
main (int argc, char **argv)
program_name = *argv;
xmalloc_set_program_name (program_name);
program_name = *argv;
xmalloc_set_program_name (program_name);
+ bfd_set_error_program_name (program_name);
expandargv (&argc, &argv);
expandargv (&argc, &argv);
- bfd_init ();
+ if (bfd_init () != BFD_INIT_MAGIC)
+ fatal (_("fatal error: libbfd ABI mismatch"));
set_default_bfd_target ();
file_name = NULL;
section_name = NULL;
target = NULL;
set_default_bfd_target ();
file_name = NULL;
section_name = NULL;
target = NULL;
- while ((c = getopt_long (argc, argv, "ab:Ce:sfHhij:pVv", long_options, (int *) 0))
+ while ((c = getopt_long (argc, argv, "ab:Ce:
rR
sfHhij:pVv", long_options, (int *) 0))
!= EOF)
{
switch (c)
!= EOF)
{
switch (c)
@@
-459,6
+474,12
@@
main (int argc, char **argv)
cplus_demangle_set_style (style);
}
break;
cplus_demangle_set_style (style);
}
break;
+ case 'r':
+ demangle_flags |= DMGL_NO_RECURSE_LIMIT;
+ break;
+ case 'R':
+ demangle_flags &= ~ DMGL_NO_RECURSE_LIMIT;
+ break;
case 'e':
file_name = optarg;
break;
case 'e':
file_name = optarg;
break;
This page took
0.025139 seconds
and
4
git commands to generate.