diff options
author | Tom Tromey <tom@tromey.com> | 2016-10-19 21:38:38 -0600 |
---|---|---|
committer | Tom Tromey <tom@tromey.com> | 2016-10-21 14:17:40 -0600 |
commit | befbff861e07212f4073e4ce72e4b45cca3e0f8d (patch) | |
tree | cd6b3316cee33940b42953135f5c75da04657acd /gdb | |
parent | ce6c454e5acbaec4e0c22e9c8af0fe7686a53baa (diff) | |
download | gdb-befbff861e07212f4073e4ce72e4b45cca3e0f8d.zip gdb-befbff861e07212f4073e4ce72e4b45cca3e0f8d.tar.gz gdb-befbff861e07212f4073e4ce72e4b45cca3e0f8d.tar.bz2 |
Make some dwarf_expr_context methods pure virtual
This patch changes some dwarf_expr_context to be pure virtual, as
mentioned during the discussion of an earlier patch in this series.
2016-10-21 Tom Tromey <tom@tromey.com>
* dwarf2expr.h (class dwarf_expr_context)
<get_frame_base, get_frame_cfa, get_tls_address, dwarf_call,
push_dwarf_block_entry_value, get_addr_index, get_object_address>:
Now pure virtual.
* dwarf2-frame.c (class dwarf_expr_executor)
<get_frame_base, get_frame_cfa, get_tls_address, dwarf_call,
push_dwarf_block_entry_value, get_addr_index, get_object_address>:
New methods.
<invalid>: New method.
Diffstat (limited to 'gdb')
-rw-r--r-- | gdb/ChangeLog | 12 | ||||
-rw-r--r-- | gdb/dwarf2-frame.c | 44 | ||||
-rw-r--r-- | gdb/dwarf2expr.h | 38 |
3 files changed, 63 insertions, 31 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index bd49cf4..be72369 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,5 +1,17 @@ 2016-10-21 Tom Tromey <tom@tromey.com> + * dwarf2expr.h (class dwarf_expr_context) + <get_frame_base, get_frame_cfa, get_tls_address, dwarf_call, + push_dwarf_block_entry_value, get_addr_index, get_object_address>: + Now pure virtual. + * dwarf2-frame.c (class dwarf_expr_executor) + <get_frame_base, get_frame_cfa, get_tls_address, dwarf_call, + push_dwarf_block_entry_value, get_addr_index, get_object_address>: + New methods. + <invalid>: New method. + +2016-10-21 Tom Tromey <tom@tromey.com> + * minsyms.h (minimal_symbol_reader::record_full): "copy_name" now a bool. (record, record_with_info): Update. diff --git a/gdb/dwarf2-frame.c b/gdb/dwarf2-frame.c index c9962e1..beab304 100644 --- a/gdb/dwarf2-frame.c +++ b/gdb/dwarf2-frame.c @@ -351,6 +351,50 @@ class dwarf_expr_executor : public dwarf_expr_context { read_memory (addr, buf, len); } + + void get_frame_base (const gdb_byte **start, size_t *length) OVERRIDE + { + invalid ("DW_OP_fbreg"); + } + + void push_dwarf_reg_entry_value (enum call_site_parameter_kind kind, + union call_site_parameter_u kind_u, + int deref_size) OVERRIDE + { + invalid ("DW_OP_GNU_entry_value"); + } + + CORE_ADDR get_object_address () OVERRIDE + { + invalid ("DW_OP_push_object_address"); + } + + CORE_ADDR get_frame_cfa () OVERRIDE + { + invalid ("DW_OP_call_frame_cfa"); + } + + CORE_ADDR get_tls_address (CORE_ADDR offset) OVERRIDE + { + invalid ("DW_OP_form_tls_address"); + } + + void dwarf_call (cu_offset die_offset) OVERRIDE + { + invalid ("DW_OP_call*"); + } + + CORE_ADDR get_addr_index (unsigned int index) + { + invalid ("DW_OP_GNU_addr_index"); + } + + private: + + void invalid (const char *op) ATTRIBUTE_NORETURN + { + error (_("%s is invalid in this context"), op); + } }; static CORE_ADDR diff --git a/gdb/dwarf2expr.h b/gdb/dwarf2expr.h index 63bdc6e..7bf194a 100644 --- a/gdb/dwarf2expr.h +++ b/gdb/dwarf2expr.h @@ -156,16 +156,10 @@ struct dwarf_expr_context /* Return the location expression for the frame base attribute, in START and LENGTH. The result must be live until the current expression evaluation is complete. */ - virtual void get_frame_base (const gdb_byte **start, size_t *length) - { - error (_("%s is invalid in this context"), "DW_OP_fbreg"); - } + virtual void get_frame_base (const gdb_byte **start, size_t *length) = 0; /* Return the CFA for the frame. */ - virtual CORE_ADDR get_frame_cfa () - { - error (_("%s is invalid in this context"), "DW_OP_call_frame_cfa"); - } + virtual CORE_ADDR get_frame_cfa () = 0; /* Return the PC for the frame. */ virtual CORE_ADDR get_frame_pc () @@ -175,19 +169,13 @@ struct dwarf_expr_context /* Return the thread-local storage address for DW_OP_GNU_push_tls_address or DW_OP_form_tls_address. */ - virtual CORE_ADDR get_tls_address (CORE_ADDR offset) - { - error (_("%s is invalid in this context"), "DW_OP_form_tls_address"); - } + virtual CORE_ADDR get_tls_address (CORE_ADDR offset) = 0; /* Execute DW_AT_location expression for the DWARF expression subroutine in the DIE at DIE_OFFSET in the CU. Do not touch STACK while it being passed to and returned from the called DWARF subroutine. */ - virtual void dwarf_call (cu_offset die_offset) - { - error (_("%s is invalid in this context"), "DW_OP_call*"); - } + virtual void dwarf_call (cu_offset die_offset) = 0; /* Return the base type given by the indicated DIE. This can throw an exception if the DIE is invalid or does not represent a base @@ -206,26 +194,14 @@ struct dwarf_expr_context DW_AT_GNU_call_site_value. */ virtual void push_dwarf_reg_entry_value (enum call_site_parameter_kind kind, union call_site_parameter_u kind_u, - int deref_size) - { - internal_error (__FILE__, __LINE__, - _("Support for DW_OP_GNU_entry_value is unimplemented")); - } + int deref_size) = 0; /* Return the address indexed by DW_OP_GNU_addr_index. This can throw an exception if the index is out of range. */ - virtual CORE_ADDR get_addr_index (unsigned int index) - { - error (_("%s is invalid in this context"), "DW_OP_GNU_addr_index"); - } + virtual CORE_ADDR get_addr_index (unsigned int index) = 0; /* Return the `object address' for DW_OP_push_object_address. */ - virtual CORE_ADDR get_object_address () - { - internal_error (__FILE__, __LINE__, - _("Support for DW_OP_push_object_address " - "is unimplemented")); - } + virtual CORE_ADDR get_object_address () = 0; private: |