diff options
author | Tom Tromey <tromey@redhat.com> | 2014-05-14 14:25:01 -0600 |
---|---|---|
committer | Jan Kratochvil <jan.kratochvil@redhat.com> | 2014-12-12 22:26:57 +0100 |
commit | a8fd55897077beda3717e0672807c1b2940e330a (patch) | |
tree | 5d9eaf4c263980c04f456ca021c7a66f645ed59d /gdb/dwarf2-frame.h | |
parent | ed12ef62ccad3b86e25ec3b042d8bf7f15c75909 (diff) | |
download | gdb-a8fd55897077beda3717e0672807c1b2940e330a.zip gdb-a8fd55897077beda3717e0672807c1b2940e330a.tar.gz gdb-a8fd55897077beda3717e0672807c1b2940e330a.tar.bz2 |
split dwarf2_fetch_cfa_info from dwarf2_compile_expr_to_ax
This removes dwarf2_compile_expr_to_ax, replacing it with a utility
function that fetches the CFA data and adding the code to actually
compile to an agent expression directly into
dwarf2_compile_expr_to_ax. This refactoring lets a later patch reuse
the new dwarf2_fetch_cfa_info.
gdb/ChangeLog
2014-12-12 Tom Tromey <tromey@redhat.com>
* dwarf2loc.c (dwarf2_compile_expr_to_ax) <DW_OP_call_frame_cfa>:
Update.
* dwarf2-frame.c (dwarf2_fetch_cfa_info): New function, based on
dwarf2_compile_cfa_to_ax.
(dwarf2_compile_cfa_to_ax): Remove.
* dwarf2-frame.h (dwarf2_fetch_cfa_info): Declare.
(dwarf2_compile_cfa_to_ax): Remove.
Diffstat (limited to 'gdb/dwarf2-frame.h')
-rw-r--r-- | gdb/dwarf2-frame.h | 31 |
1 files changed, 21 insertions, 10 deletions
diff --git a/gdb/dwarf2-frame.h b/gdb/dwarf2-frame.h index 0470cac..5ccf0c8 100644 --- a/gdb/dwarf2-frame.h +++ b/gdb/dwarf2-frame.h @@ -120,15 +120,26 @@ extern const struct frame_base * CORE_ADDR dwarf2_frame_cfa (struct frame_info *this_frame); -/* Update the agent expression EXPR with code to compute the CFA for a - frame at PC. GDBARCH is the architecture of the function at PC. - This function may call dwarf2_compile_expr_to_ax; DATA is passed - through to that function if needed. */ - -extern void dwarf2_compile_cfa_to_ax (struct agent_expr *expr, - struct axs_value *loc, - struct gdbarch *gdbarch, - CORE_ADDR pc, - struct dwarf2_per_cu_data *data); +/* Find the CFA information for PC. + + Return 1 if a register is used for the CFA, or 0 if another + expression is used. Throw an exception on error. + + GDBARCH is the architecture to use. + DATA is the per-CU data. + + REGNUM_OUT is an out parameter that is set to the register number. + OFFSET_OUT is the offset to use from this register. + These are only filled in when 1 is returned. + + TEXT_OFFSET_OUT, CFA_START_OUT, and CFA_END_OUT describe the CFA + in other cases. These are only used when 0 is returned. */ + +extern int dwarf2_fetch_cfa_info (struct gdbarch *gdbarch, CORE_ADDR pc, + struct dwarf2_per_cu_data *data, + int *regnum_out, LONGEST *offset_out, + CORE_ADDR *text_offset_out, + const gdb_byte **cfa_start_out, + const gdb_byte **cfa_end_out); #endif /* dwarf2-frame.h */ |