aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gdb/ChangeLog5
-rw-r--r--gdb/printcmd.c11
2 files changed, 16 insertions, 0 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 81abaab..6661193 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,5 +1,10 @@
2013-06-07 Will Newton <will.newton@linaro.org>
+ * printcmd.c (build_address_symbolic): Call
+ gdbarch_addr_bits_remove for text minimal symbols.
+
+2013-06-07 Will Newton <will.newton@linaro.org>
+
* MAINTAINERS: Add myself to Write After Approval.
2013-06-07 Yao Qi <yao@codesourcery.com>
diff --git a/gdb/printcmd.c b/gdb/printcmd.c
index 7beb334..99d4dba 100644
--- a/gdb/printcmd.c
+++ b/gdb/printcmd.c
@@ -689,6 +689,17 @@ build_address_symbolic (struct gdbarch *gdbarch,
{
if (SYMBOL_VALUE_ADDRESS (msymbol) > name_location || symbol == NULL)
{
+ /* If this is a function (i.e. a code address), strip out any
+ non-address bits. For instance, display a pointer to the
+ first instruction of a Thumb function as <function>; the
+ second instruction will be <function+2>, even though the
+ pointer is <function+3>. This matches the ISA behavior. */
+ if (MSYMBOL_TYPE (msymbol) == mst_text
+ || MSYMBOL_TYPE (msymbol) == mst_text_gnu_ifunc
+ || MSYMBOL_TYPE (msymbol) == mst_file_text
+ || MSYMBOL_TYPE (msymbol) == mst_solib_trampoline)
+ addr = gdbarch_addr_bits_remove (gdbarch, addr);
+
/* The msymbol is closer to the address than the symbol;
use the msymbol instead. */
symbol = 0;