libbacktrace: change PC variables from uint64_t to uintptr_t (afe2967c)

This commit is contained in:
Bartosz Taudul 2023-04-05 17:23:04 +02:00
parent eb8f485f99
commit 0f19727dc6
No known key found for this signature in database
GPG Key ID: B7FE2008B7575DF3

View File

@ -473,7 +473,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,
@ -611,8 +611,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;
}; };
@ -693,8 +693,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;
}; };
@ -1431,7 +1431,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;
@ -1452,7 +1452,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;
} }
@ -1531,7 +1531,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)
{ {
@ -1867,10 +1867,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. */
@ -1890,12 +1890,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;
} }
@ -1904,18 +1904,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;
} }
@ -1950,16 +1950,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)
@ -1997,10 +1997,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,
@ -2039,12 +2039,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;
} }
@ -2064,10 +2064,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,
@ -2133,8 +2133,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,
@ -2156,8 +2156,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,
@ -2187,16 +2187,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))
@ -2206,11 +2206,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))
@ -2240,9 +2240,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,
@ -3520,7 +3520,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)
{ {
@ -3560,7 +3560,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,
@ -3624,7 +3624,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,