mirror of git://gcc.gnu.org/git/gcc.git
libbacktrace: change PC variables from uint64_t to uintptr_t
Change variables holding PC values from uint64_t to uintptr_t. Patch by Björn Schäpers. * dwarf.c (struct function_addrs): Change low and high fields to uintptr_t. (struct unit_addrs): Likewise. (resolve_addr_index): Change address parameter to uintptr_t*. (add_unit_addr): Change lowpc and highpc parameters to uintptr_t. (add_function_range): Likewise. (struct pcrange): Change lowpc and highpc fields to uintptr_t. (add_low_high_range): Change add_range lowpc and highpc parameters to uintptr_t. (add_ranges_from_ranges): Likewise. (add_ranges_from_rnglists): Likewise. (add_low_high_range): Chnage lowpc and highpc variables to uintpr_t. (add_ranges_from_rnglists): Change some local variables to uintptr_t. (add_ranges_from_ranges): Change base parameter to uintptr_t. (add_ranges_from_rnglists): Likewise. (read_function_entry): Likewise. (resolve_addr_index): Add explicit casts to uintptr_t. (update_pcrange): Likewise. (add_ranges_from_ranges): Likewise. (add_ranges_from_rnglists): Likewise. (read_function_entry): Likewise.
This commit is contained in:
parent
f71354f7b9
commit
0c193cabe1
|
@ -136,7 +136,7 @@ enum attr_val_encoding
|
||||||
/* An address. */
|
/* An address. */
|
||||||
ATTR_VAL_ADDRESS,
|
ATTR_VAL_ADDRESS,
|
||||||
/* An index into the .debug_addr section, whose value is relative to
|
/* An index into the .debug_addr section, whose value is relative to
|
||||||
* the DW_AT_addr_base attribute of the compilation unit. */
|
the DW_AT_addr_base attribute of the compilation unit. */
|
||||||
ATTR_VAL_ADDRESS_INDEX,
|
ATTR_VAL_ADDRESS_INDEX,
|
||||||
/* A unsigned integer. */
|
/* A unsigned integer. */
|
||||||
ATTR_VAL_UINT,
|
ATTR_VAL_UINT,
|
||||||
|
@ -274,8 +274,8 @@ struct function
|
||||||
struct function_addrs
|
struct function_addrs
|
||||||
{
|
{
|
||||||
/* Range is LOW <= PC < HIGH. */
|
/* Range is LOW <= PC < HIGH. */
|
||||||
uint64_t low;
|
uintptr_t low;
|
||||||
uint64_t high;
|
uintptr_t high;
|
||||||
/* Function for this address range. */
|
/* Function for this address range. */
|
||||||
struct function *function;
|
struct function *function;
|
||||||
};
|
};
|
||||||
|
@ -356,8 +356,8 @@ struct unit
|
||||||
struct unit_addrs
|
struct unit_addrs
|
||||||
{
|
{
|
||||||
/* Range is LOW <= PC < HIGH. */
|
/* Range is LOW <= PC < HIGH. */
|
||||||
uint64_t low;
|
uintptr_t low;
|
||||||
uint64_t high;
|
uintptr_t high;
|
||||||
/* Compilation unit for this address range. */
|
/* Compilation unit for this address range. */
|
||||||
struct unit *u;
|
struct unit *u;
|
||||||
};
|
};
|
||||||
|
@ -1094,7 +1094,7 @@ resolve_addr_index (const struct dwarf_sections *dwarf_sections,
|
||||||
uint64_t addr_base, int addrsize, int is_bigendian,
|
uint64_t addr_base, int addrsize, int is_bigendian,
|
||||||
uint64_t addr_index,
|
uint64_t addr_index,
|
||||||
backtrace_error_callback error_callback, void *data,
|
backtrace_error_callback error_callback, void *data,
|
||||||
uint64_t *address)
|
uintptr_t *address)
|
||||||
{
|
{
|
||||||
uint64_t offset;
|
uint64_t offset;
|
||||||
struct dwarf_buf addr_buf;
|
struct dwarf_buf addr_buf;
|
||||||
|
@ -1115,7 +1115,7 @@ resolve_addr_index (const struct dwarf_sections *dwarf_sections,
|
||||||
addr_buf.data = data;
|
addr_buf.data = data;
|
||||||
addr_buf.reported_underflow = 0;
|
addr_buf.reported_underflow = 0;
|
||||||
|
|
||||||
*address = read_address (&addr_buf, addrsize);
|
*address = (uintptr_t) read_address (&addr_buf, addrsize);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1194,7 +1194,7 @@ function_addrs_search (const void *vkey, const void *ventry)
|
||||||
|
|
||||||
static int
|
static int
|
||||||
add_unit_addr (struct backtrace_state *state, void *rdata,
|
add_unit_addr (struct backtrace_state *state, void *rdata,
|
||||||
uint64_t lowpc, uint64_t highpc,
|
uintptr_t lowpc, uintptr_t highpc,
|
||||||
backtrace_error_callback error_callback, void *data,
|
backtrace_error_callback error_callback, void *data,
|
||||||
void *pvec)
|
void *pvec)
|
||||||
{
|
{
|
||||||
|
@ -1530,10 +1530,10 @@ lookup_abbrev (struct abbrevs *abbrevs, uint64_t code,
|
||||||
lowpc/highpc is set or ranges is set. */
|
lowpc/highpc is set or ranges is set. */
|
||||||
|
|
||||||
struct pcrange {
|
struct pcrange {
|
||||||
uint64_t lowpc; /* The low PC value. */
|
uintptr_t lowpc; /* The low PC value. */
|
||||||
int have_lowpc; /* Whether a low PC value was found. */
|
int have_lowpc; /* Whether a low PC value was found. */
|
||||||
int lowpc_is_addr_index; /* Whether lowpc is in .debug_addr. */
|
int lowpc_is_addr_index; /* Whether lowpc is in .debug_addr. */
|
||||||
uint64_t highpc; /* The high PC value. */
|
uintptr_t highpc; /* The high PC value. */
|
||||||
int have_highpc; /* Whether a high PC value was found. */
|
int have_highpc; /* Whether a high PC value was found. */
|
||||||
int highpc_is_relative; /* Whether highpc is relative to lowpc. */
|
int highpc_is_relative; /* Whether highpc is relative to lowpc. */
|
||||||
int highpc_is_addr_index; /* Whether highpc is in .debug_addr. */
|
int highpc_is_addr_index; /* Whether highpc is in .debug_addr. */
|
||||||
|
@ -1553,12 +1553,12 @@ update_pcrange (const struct attr* attr, const struct attr_val* val,
|
||||||
case DW_AT_low_pc:
|
case DW_AT_low_pc:
|
||||||
if (val->encoding == ATTR_VAL_ADDRESS)
|
if (val->encoding == ATTR_VAL_ADDRESS)
|
||||||
{
|
{
|
||||||
pcrange->lowpc = val->u.uint;
|
pcrange->lowpc = (uintptr_t) val->u.uint;
|
||||||
pcrange->have_lowpc = 1;
|
pcrange->have_lowpc = 1;
|
||||||
}
|
}
|
||||||
else if (val->encoding == ATTR_VAL_ADDRESS_INDEX)
|
else if (val->encoding == ATTR_VAL_ADDRESS_INDEX)
|
||||||
{
|
{
|
||||||
pcrange->lowpc = val->u.uint;
|
pcrange->lowpc = (uintptr_t) val->u.uint;
|
||||||
pcrange->have_lowpc = 1;
|
pcrange->have_lowpc = 1;
|
||||||
pcrange->lowpc_is_addr_index = 1;
|
pcrange->lowpc_is_addr_index = 1;
|
||||||
}
|
}
|
||||||
|
@ -1567,18 +1567,18 @@ update_pcrange (const struct attr* attr, const struct attr_val* val,
|
||||||
case DW_AT_high_pc:
|
case DW_AT_high_pc:
|
||||||
if (val->encoding == ATTR_VAL_ADDRESS)
|
if (val->encoding == ATTR_VAL_ADDRESS)
|
||||||
{
|
{
|
||||||
pcrange->highpc = val->u.uint;
|
pcrange->highpc = (uintptr_t) val->u.uint;
|
||||||
pcrange->have_highpc = 1;
|
pcrange->have_highpc = 1;
|
||||||
}
|
}
|
||||||
else if (val->encoding == ATTR_VAL_UINT)
|
else if (val->encoding == ATTR_VAL_UINT)
|
||||||
{
|
{
|
||||||
pcrange->highpc = val->u.uint;
|
pcrange->highpc = (uintptr_t) val->u.uint;
|
||||||
pcrange->have_highpc = 1;
|
pcrange->have_highpc = 1;
|
||||||
pcrange->highpc_is_relative = 1;
|
pcrange->highpc_is_relative = 1;
|
||||||
}
|
}
|
||||||
else if (val->encoding == ATTR_VAL_ADDRESS_INDEX)
|
else if (val->encoding == ATTR_VAL_ADDRESS_INDEX)
|
||||||
{
|
{
|
||||||
pcrange->highpc = val->u.uint;
|
pcrange->highpc = (uintptr_t) val->u.uint;
|
||||||
pcrange->have_highpc = 1;
|
pcrange->have_highpc = 1;
|
||||||
pcrange->highpc_is_addr_index = 1;
|
pcrange->highpc_is_addr_index = 1;
|
||||||
}
|
}
|
||||||
|
@ -1613,16 +1613,16 @@ add_low_high_range (struct backtrace_state *state,
|
||||||
uintptr_t base_address, int is_bigendian,
|
uintptr_t base_address, int is_bigendian,
|
||||||
struct unit *u, const struct pcrange *pcrange,
|
struct unit *u, const struct pcrange *pcrange,
|
||||||
int (*add_range) (struct backtrace_state *state,
|
int (*add_range) (struct backtrace_state *state,
|
||||||
void *rdata, uint64_t lowpc,
|
void *rdata, uintptr_t lowpc,
|
||||||
uint64_t highpc,
|
uintptr_t highpc,
|
||||||
backtrace_error_callback error_callback,
|
backtrace_error_callback error_callback,
|
||||||
void *data, void *vec),
|
void *data, void *vec),
|
||||||
void *rdata,
|
void *rdata,
|
||||||
backtrace_error_callback error_callback, void *data,
|
backtrace_error_callback error_callback, void *data,
|
||||||
void *vec)
|
void *vec)
|
||||||
{
|
{
|
||||||
uint64_t lowpc;
|
uintptr_t lowpc;
|
||||||
uint64_t highpc;
|
uintptr_t highpc;
|
||||||
|
|
||||||
lowpc = pcrange->lowpc;
|
lowpc = pcrange->lowpc;
|
||||||
if (pcrange->lowpc_is_addr_index)
|
if (pcrange->lowpc_is_addr_index)
|
||||||
|
@ -1660,10 +1660,10 @@ add_ranges_from_ranges (
|
||||||
struct backtrace_state *state,
|
struct backtrace_state *state,
|
||||||
const struct dwarf_sections *dwarf_sections,
|
const struct dwarf_sections *dwarf_sections,
|
||||||
uintptr_t base_address, int is_bigendian,
|
uintptr_t base_address, int is_bigendian,
|
||||||
struct unit *u, uint64_t base,
|
struct unit *u, uintptr_t base,
|
||||||
const struct pcrange *pcrange,
|
const struct pcrange *pcrange,
|
||||||
int (*add_range) (struct backtrace_state *state, void *rdata,
|
int (*add_range) (struct backtrace_state *state, void *rdata,
|
||||||
uint64_t lowpc, uint64_t highpc,
|
uintptr_t lowpc, uintptr_t highpc,
|
||||||
backtrace_error_callback error_callback, void *data,
|
backtrace_error_callback error_callback, void *data,
|
||||||
void *vec),
|
void *vec),
|
||||||
void *rdata,
|
void *rdata,
|
||||||
|
@ -1702,12 +1702,12 @@ add_ranges_from_ranges (
|
||||||
break;
|
break;
|
||||||
|
|
||||||
if (is_highest_address (low, u->addrsize))
|
if (is_highest_address (low, u->addrsize))
|
||||||
base = high;
|
base = (uintptr_t) high;
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (!add_range (state, rdata,
|
if (!add_range (state, rdata,
|
||||||
low + base + base_address,
|
(uintptr_t) low + base + base_address,
|
||||||
high + base + base_address,
|
(uintptr_t) high + base + base_address,
|
||||||
error_callback, data, vec))
|
error_callback, data, vec))
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -1727,10 +1727,10 @@ add_ranges_from_rnglists (
|
||||||
struct backtrace_state *state,
|
struct backtrace_state *state,
|
||||||
const struct dwarf_sections *dwarf_sections,
|
const struct dwarf_sections *dwarf_sections,
|
||||||
uintptr_t base_address, int is_bigendian,
|
uintptr_t base_address, int is_bigendian,
|
||||||
struct unit *u, uint64_t base,
|
struct unit *u, uintptr_t base,
|
||||||
const struct pcrange *pcrange,
|
const struct pcrange *pcrange,
|
||||||
int (*add_range) (struct backtrace_state *state, void *rdata,
|
int (*add_range) (struct backtrace_state *state, void *rdata,
|
||||||
uint64_t lowpc, uint64_t highpc,
|
uintptr_t lowpc, uintptr_t highpc,
|
||||||
backtrace_error_callback error_callback, void *data,
|
backtrace_error_callback error_callback, void *data,
|
||||||
void *vec),
|
void *vec),
|
||||||
void *rdata,
|
void *rdata,
|
||||||
|
@ -1796,8 +1796,8 @@ add_ranges_from_rnglists (
|
||||||
case DW_RLE_startx_endx:
|
case DW_RLE_startx_endx:
|
||||||
{
|
{
|
||||||
uint64_t index;
|
uint64_t index;
|
||||||
uint64_t low;
|
uintptr_t low;
|
||||||
uint64_t high;
|
uintptr_t high;
|
||||||
|
|
||||||
index = read_uleb128 (&rnglists_buf);
|
index = read_uleb128 (&rnglists_buf);
|
||||||
if (!resolve_addr_index (dwarf_sections, u->addr_base,
|
if (!resolve_addr_index (dwarf_sections, u->addr_base,
|
||||||
|
@ -1819,8 +1819,8 @@ add_ranges_from_rnglists (
|
||||||
case DW_RLE_startx_length:
|
case DW_RLE_startx_length:
|
||||||
{
|
{
|
||||||
uint64_t index;
|
uint64_t index;
|
||||||
uint64_t low;
|
uintptr_t low;
|
||||||
uint64_t length;
|
uintptr_t length;
|
||||||
|
|
||||||
index = read_uleb128 (&rnglists_buf);
|
index = read_uleb128 (&rnglists_buf);
|
||||||
if (!resolve_addr_index (dwarf_sections, u->addr_base,
|
if (!resolve_addr_index (dwarf_sections, u->addr_base,
|
||||||
|
@ -1850,16 +1850,16 @@ add_ranges_from_rnglists (
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case DW_RLE_base_address:
|
case DW_RLE_base_address:
|
||||||
base = read_address (&rnglists_buf, u->addrsize);
|
base = (uintptr_t) read_address (&rnglists_buf, u->addrsize);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case DW_RLE_start_end:
|
case DW_RLE_start_end:
|
||||||
{
|
{
|
||||||
uint64_t low;
|
uintptr_t low;
|
||||||
uint64_t high;
|
uintptr_t high;
|
||||||
|
|
||||||
low = read_address (&rnglists_buf, u->addrsize);
|
low = (uintptr_t) read_address (&rnglists_buf, u->addrsize);
|
||||||
high = read_address (&rnglists_buf, u->addrsize);
|
high = (uintptr_t) read_address (&rnglists_buf, u->addrsize);
|
||||||
if (!add_range (state, rdata, low + base_address,
|
if (!add_range (state, rdata, low + base_address,
|
||||||
high + base_address, error_callback, data,
|
high + base_address, error_callback, data,
|
||||||
vec))
|
vec))
|
||||||
|
@ -1869,11 +1869,11 @@ add_ranges_from_rnglists (
|
||||||
|
|
||||||
case DW_RLE_start_length:
|
case DW_RLE_start_length:
|
||||||
{
|
{
|
||||||
uint64_t low;
|
uintptr_t low;
|
||||||
uint64_t length;
|
uintptr_t length;
|
||||||
|
|
||||||
low = read_address (&rnglists_buf, u->addrsize);
|
low = (uintptr_t) read_address (&rnglists_buf, u->addrsize);
|
||||||
length = read_uleb128 (&rnglists_buf);
|
length = (uintptr_t) read_uleb128 (&rnglists_buf);
|
||||||
low += base_address;
|
low += base_address;
|
||||||
if (!add_range (state, rdata, low, low + length,
|
if (!add_range (state, rdata, low, low + length,
|
||||||
error_callback, data, vec))
|
error_callback, data, vec))
|
||||||
|
@ -1903,9 +1903,9 @@ static int
|
||||||
add_ranges (struct backtrace_state *state,
|
add_ranges (struct backtrace_state *state,
|
||||||
const struct dwarf_sections *dwarf_sections,
|
const struct dwarf_sections *dwarf_sections,
|
||||||
uintptr_t base_address, int is_bigendian,
|
uintptr_t base_address, int is_bigendian,
|
||||||
struct unit *u, uint64_t base, const struct pcrange *pcrange,
|
struct unit *u, uintptr_t base, const struct pcrange *pcrange,
|
||||||
int (*add_range) (struct backtrace_state *state, void *rdata,
|
int (*add_range) (struct backtrace_state *state, void *rdata,
|
||||||
uint64_t lowpc, uint64_t highpc,
|
uintptr_t lowpc, uintptr_t highpc,
|
||||||
backtrace_error_callback error_callback,
|
backtrace_error_callback error_callback,
|
||||||
void *data, void *vec),
|
void *data, void *vec),
|
||||||
void *rdata,
|
void *rdata,
|
||||||
|
@ -3183,7 +3183,7 @@ read_referenced_name (struct dwarf_data *ddata, struct unit *u,
|
||||||
|
|
||||||
static int
|
static int
|
||||||
add_function_range (struct backtrace_state *state, void *rdata,
|
add_function_range (struct backtrace_state *state, void *rdata,
|
||||||
uint64_t lowpc, uint64_t highpc,
|
uintptr_t lowpc, uintptr_t highpc,
|
||||||
backtrace_error_callback error_callback, void *data,
|
backtrace_error_callback error_callback, void *data,
|
||||||
void *pvec)
|
void *pvec)
|
||||||
{
|
{
|
||||||
|
@ -3223,7 +3223,7 @@ add_function_range (struct backtrace_state *state, void *rdata,
|
||||||
|
|
||||||
static int
|
static int
|
||||||
read_function_entry (struct backtrace_state *state, struct dwarf_data *ddata,
|
read_function_entry (struct backtrace_state *state, struct dwarf_data *ddata,
|
||||||
struct unit *u, uint64_t base, struct dwarf_buf *unit_buf,
|
struct unit *u, uintptr_t base, struct dwarf_buf *unit_buf,
|
||||||
const struct line_header *lhdr,
|
const struct line_header *lhdr,
|
||||||
backtrace_error_callback error_callback, void *data,
|
backtrace_error_callback error_callback, void *data,
|
||||||
struct function_vector *vec_function,
|
struct function_vector *vec_function,
|
||||||
|
@ -3287,7 +3287,7 @@ read_function_entry (struct backtrace_state *state, struct dwarf_data *ddata,
|
||||||
&& abbrev->attrs[i].name == DW_AT_low_pc)
|
&& abbrev->attrs[i].name == DW_AT_low_pc)
|
||||||
{
|
{
|
||||||
if (val.encoding == ATTR_VAL_ADDRESS)
|
if (val.encoding == ATTR_VAL_ADDRESS)
|
||||||
base = val.u.uint;
|
base = (uintptr_t) val.u.uint;
|
||||||
else if (val.encoding == ATTR_VAL_ADDRESS_INDEX)
|
else if (val.encoding == ATTR_VAL_ADDRESS_INDEX)
|
||||||
{
|
{
|
||||||
if (!resolve_addr_index (&ddata->dwarf_sections,
|
if (!resolve_addr_index (&ddata->dwarf_sections,
|
||||||
|
|
Loading…
Reference in New Issue