diff options
-rw-r--r-- | gdb/ChangeLog | 5 | ||||
-rw-r--r-- | gdb/printcmd.c | 11 |
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; |