Tweak gdb.trace/tfile.c for thumb mode
authorYao Qi <yao@codesourcery.com>
Mon, 30 Jun 2014 03:47:51 +0000 (11:47 +0800)
committerYao Qi <yao@codesourcery.com>
Thu, 10 Jul 2014 01:02:01 +0000 (09:02 +0800)
commit2d6f0de676f46ebd8bb7d98a0093aa081e17e94b
tree1fcacf248a8dbd04af8cbf9fa361c7587c291966
parent67ad4d71d6e7f2a58fa9034d3b4ffbf418da29f4
Tweak gdb.trace/tfile.c for thumb mode

We see the fail below happens on thumb related multi-libs
(-mthumb -march={armv4t,armv7-a}),

target tfile tfile-basic.tf ^M
warning: Uploaded tracepoint 1 has no source location, using raw address^M
warning: Breakpoint address adjusted from 0x00008959 to 0x00008958.^M
Tracepoint 3 at 0x8958: file /scratch/yqi/arm-none-linux-gnueabi/src/gdb-trunk/gdb/testsuite/gdb.trace/tfile.c, line 91.^M
Created tracepoint 3 for target's tracepoint 1 at 0x8959.^M
warning: Breakpoint address adjusted from 0x00008959 to 0x00008958.^M
warning: Breakpoint address adjusted from 0x00008959 to 0x00008958.^M
warning: Breakpoint address adjusted from 0x00008959 to 0x00008958.^M
(gdb) FAIL: gdb.trace/tfile.exp: complete-command 'target tfile'

The address of write_basic_trace_file is two-bytes aligned,

(gdb) p write_basic_trace_file
$1 = {void (void)} 0x8958 <write_basic_trace_file>

but the ld sets the LSB of every reference to the function address
(indicating the address is in thumb mode), so "&write_basic_trace_file"
in the program becomes 0x8959, which is saved in the trace file.  That
is why the warnnings are emitted.

This patch is to clear the LSB of the function address written to trace
file in thumb and thumb2 mode.  This patch fixes the fail above.

gdb/testsuite:

2014-07-10  Yao Qi  <yao@codesourcery.com>

* gdb.trace/tfile.c (write_basic_trace_file)
[__thumb__||__thumb2__]: Clear the Thumb bit of the function
address written to trace file.
gdb/testsuite/ChangeLog
gdb/testsuite/gdb.trace/tfile.c