From d76d73f490b1e097e650bb77277ae9ed1efd5b1a Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Tue, 19 May 2015 23:08:00 +0200 Subject: [PATCH] addr2line: Always parse addresses as hex numbers. We would sometimes interpret input addresses as decimal or octal. That could be confusing and isn't what binutils addr2line does. Be consistent and always treat input addresses as hex. Signed-off-by: Mark Wielaard --- NEWS | 3 +++ src/ChangeLog | 5 +++++ src/addr2line.c | 4 ++-- tests/ChangeLog | 4 ++++ tests/run-addrname-test.sh | 2 +- 5 files changed, 15 insertions(+), 3 deletions(-) diff --git a/NEWS b/NEWS index 60aa995d4..8cc184a2c 100644 --- a/NEWS +++ b/NEWS @@ -2,6 +2,9 @@ Version 0.162 libdw: Install new header elfutils/known-dwarf.h. +addr2line: Input addresses are now always interpreted as hexadecimal + numbers, never as octal or decimal numbers. + Version 0.161 libdw: New function dwarf_peel_type. dwarf_aggregate_size now uses diff --git a/src/ChangeLog b/src/ChangeLog index f4ff1fb58..284b8860a 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,8 @@ +2015-05-20 Mark Wielaard + + * addr2line.c (handle_address): Call strtoumax with base 16. Make + sure all input has been processed. + 2015-05-20 Mark Wielaard * addr2line (argp_option): Group 'section' under "Input format diff --git a/src/addr2line.c b/src/addr2line.c index c7ff7f714..b1ff36804 100644 --- a/src/addr2line.c +++ b/src/addr2line.c @@ -532,8 +532,8 @@ static int handle_address (const char *string, Dwfl *dwfl) { char *endp; - uintmax_t addr = strtoumax (string, &endp, 0); - if (endp == string) + uintmax_t addr = strtoumax (string, &endp, 16); + if (endp == string || *endp != '\0') { bool parsed = false; int i, j; diff --git a/tests/ChangeLog b/tests/ChangeLog index a899947eb..0e310121a 100644 --- a/tests/ChangeLog +++ b/tests/ChangeLog @@ -1,3 +1,7 @@ +2015-05-20 Mark Wielaard + + * run-addrname-test.sh: Make sure all input addresses are hex. + 2015-05-04 Max Filippov * backtrace-child.c (stdarg, main): Replace assert_perror with assert. diff --git a/tests/run-addrname-test.sh b/tests/run-addrname-test.sh index f954ee45d..90e19df70 100755 --- a/tests/run-addrname-test.sh +++ b/tests/run-addrname-test.sh @@ -277,7 +277,7 @@ EOF # local l0local2, 0 # offset 12 testfiles testfile64 -testrun_compare ${abs_top_builddir}/src/addr2line -S -e testfile64 1 4 5 8 9 12 <<\EOF +testrun_compare ${abs_top_builddir}/src/addr2line -S -e testfile64 1 4 5 8 9 c <<\EOF gglobal2 ??:0 g0global2 -- 2.47.2