record-btrace: extend unwinder
authorMarkus Metzger <markus.t.metzger@intel.com>
Wed, 27 Mar 2013 08:49:47 +0000 (09:49 +0100)
committerMarkus Metzger <markus.t.metzger@intel.com>
Thu, 16 Jan 2014 12:09:42 +0000 (13:09 +0100)
commit0b722aec57e2e54083c1d56657762945ad4604fc
tree79d6da6e2638297a8c806d25c25ef1573347ce79
parent066ce621f46cabb382b31a682501f0de8120c9fc
record-btrace: extend unwinder

Extend the always failing unwinder to provide the PC based on the call
structure detected in the branch trace.

The unwinder supports normal frames and tailcall frames.
Inline frames are not supported.

2014-01-16  Markus Metzger  <markus.t.metzger@intel.com>

* record.h (record_btrace_frame_unwind)
(record_btrace_tailcall_frame_unwind): New declarations.
* dwarf2-frame: Include record.h
(dwarf2_frame_cfa): Throw an error for btrace frames.
* record-btrace.c: Include hashtab.h.
(btrace_get_bfun_name): New.
(btrace_call_history): Call btrace_get_bfun_name.
(struct btrace_frame_cache): New.
(bfcache): New.
(bfcache_hash, bfcache_eq, bfcache_new): New.
(btrace_get_frame_function): New.
(record_btrace_frame_unwind_stop_reason): Allow unwinding.
(record_btrace_frame_this_id): Compute own id.
(record_btrace_frame_prev_register): Provide PC, throw_error
for all other registers.
(record_btrace_frame_sniffer): Detect btrace frames.
(record_btrace_tailcall_frame_sniffer): New.
(record_btrace_frame_dealloc_cache): New.
(record_btrace_frame_unwind): Add new functions.
(record_btrace_tailcall_frame_unwind): New.
(_initialize_record_btrace): Allocate cache.
* btrace.c (btrace_clear): Call reinit_frame_cache.
* NEWS: Announce it.

testsuite/
* gdb.btrace/record_goto.exp: Add backtrace test.
* gdb.btrace/tailcall.exp: Add backtrace test.
gdb/ChangeLog
gdb/NEWS
gdb/btrace.c
gdb/dwarf2-frame.c
gdb/record-btrace.c
gdb/record.h
gdb/testsuite/ChangeLog
gdb/testsuite/gdb.btrace/record_goto.exp
gdb/testsuite/gdb.btrace/tailcall.exp