#define DWARF2EXPR_H
#include "leb128.h"
+#include "gdbtypes.h"
struct dwarf_expr_context;
-/* Offset relative to the start of its containing CU (compilation unit). */
-typedef struct
-{
- unsigned int cu_off;
-} cu_offset;
-
-/* Offset relative to the start of its .debug_info or .debug_types section. */
-typedef struct
-{
- unsigned int sect_off;
-} sect_offset;
-
/* Virtual method table for struct dwarf_expr_context below. */
struct dwarf_expr_context_funcs
struct type *(*get_base_type) (struct dwarf_expr_context *ctx, cu_offset die);
/* Push on DWARF stack an entry evaluated for DW_TAG_GNU_call_site's
- DWARF_REG/FB_OFFSET at the caller of specified BATON. If DWARF register
- number DWARF_REG specifying the push_dwarf_reg_entry_value parameter is
- not -1 FB_OFFSET is ignored. Otherwise FB_OFFSET specifies stack
- parameter offset against caller's stack pointer (which equals the callee's
- frame base). If DEREF_SIZE is not -1 then use
- DW_AT_GNU_call_site_data_value instead of DW_AT_GNU_call_site_value. */
+ parameter matching KIND and KIND_U at the caller of specified BATON.
+ If DEREF_SIZE is not -1 then use DW_AT_GNU_call_site_data_value instead of
+ DW_AT_GNU_call_site_value. */
void (*push_dwarf_reg_entry_value) (struct dwarf_expr_context *ctx,
- int dwarf_reg, CORE_ADDR fb_offset,
+ enum call_site_parameter_kind kind,
+ union call_site_parameter_u kind_u,
int deref_size);
/* Return the address indexed by DW_OP_GNU_addr_index.
context and operations depending on DW_FORM_ref_addr are not allowed. */
int ref_addr_size;
- /* Offset used to relocate DW_OP_addr argument. */
+ /* Offset used to relocate DW_OP_addr and DW_OP_GNU_addr_index arguments. */
CORE_ADDR offset;
/* An opaque argument provided by the caller, which will be passed
struct type *ctx_no_get_base_type (struct dwarf_expr_context *ctx,
cu_offset die);
void ctx_no_push_dwarf_reg_entry_value (struct dwarf_expr_context *ctx,
- int dwarf_reg, CORE_ADDR fb_offset,
+ enum call_site_parameter_kind kind,
+ union call_site_parameter_u kind_u,
int deref_size);
CORE_ADDR ctx_no_get_addr_index (void *baton, unsigned int index);
static inline const gdb_byte *
gdb_read_uleb128 (const gdb_byte *buf, const gdb_byte *buf_end,
- unsigned long long *r)
+ uint64_t *r)
{
- size_t bytes_read = read_uleb128_to_ull (buf, buf_end, r);
+ size_t bytes_read = read_uleb128_to_uint64 (buf, buf_end, r);
if (bytes_read == 0)
return NULL;
static inline const gdb_byte *
gdb_read_sleb128 (const gdb_byte *buf, const gdb_byte *buf_end,
- long long *r)
+ int64_t *r)
{
- size_t bytes_read = read_sleb128_to_ll (buf, buf_end, r);
+ size_t bytes_read = read_sleb128_to_int64 (buf, buf_end, r);
if (bytes_read == 0)
return NULL;
extern const gdb_byte *safe_read_uleb128 (const gdb_byte *buf,
const gdb_byte *buf_end,
- unsigned long long *r);
+ uint64_t *r);
extern const gdb_byte *safe_read_sleb128 (const gdb_byte *buf,
const gdb_byte *buf_end,
- long long *r);
+ int64_t *r);
extern const gdb_byte *safe_skip_leb128 (const gdb_byte *buf,
const gdb_byte *buf_end);