Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Constified addr2line.c #4740

Merged
merged 1 commit into from
Aug 14, 2021
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
136 changes: 68 additions & 68 deletions addr2line.c
Original file line number Diff line number Diff line change
Expand Up @@ -192,12 +192,12 @@ struct debug_section_definition {
static char binary_filename[PATH_MAX + 1];

static unsigned long
uleb128(char **p)
uleb128(const char **p)
{
unsigned long r = 0;
int s = 0;
for (;;) {
unsigned char b = *(unsigned char *)(*p)++;
unsigned char b = (unsigned char)*(*p)++;
if (b < 0x80) {
r += (unsigned long)b << s;
break;
Expand All @@ -209,12 +209,12 @@ uleb128(char **p)
}

static long
sleb128(char **p)
sleb128(const char **p)
{
long r = 0;
int s = 0;
for (;;) {
unsigned char b = *(unsigned char *)(*p)++;
unsigned char b = (unsigned char)*(*p)++;
if (b < 0x80) {
if (b & 0x40) {
r -= (0x80 - b) << s;
Expand All @@ -231,7 +231,7 @@ sleb128(char **p)
}

static const char *
get_nth_dirname(unsigned long dir, char *p)
get_nth_dirname(unsigned long dir, const char *p)
{
if (!dir--) {
return "";
Expand All @@ -249,11 +249,11 @@ get_nth_dirname(unsigned long dir, char *p)
}

static void
fill_filename(int file, char *include_directories, char *filenames, line_info_t *line, obj_info_t *obj)
fill_filename(int file, const char *include_directories, const char *filenames, line_info_t *line, obj_info_t *obj)
{
int i;
char *p = filenames;
char *filename;
const char *p = filenames;
const char *filename;
unsigned long dir;
for (i = 1; i <= file; i++) {
filename = p;
Expand All @@ -280,7 +280,7 @@ fill_filename(int file, char *include_directories, char *filenames, line_info_t

static void
fill_line(int num_traces, void **traces, uintptr_t addr, int file, int line,
char *include_directories, char *filenames,
const char *include_directories, const char *filenames,
obj_info_t *obj, line_info_t *lines, int offset)
{
int i;
Expand Down Expand Up @@ -374,7 +374,7 @@ parse_debug_line_header(const char **pp, struct LineNumberProgramHeader *header)
}

static int
parse_debug_line_cu(int num_traces, void **traces, char **debug_line,
parse_debug_line_cu(int num_traces, void **traces, const char **debug_line,
obj_info_t *obj, line_info_t *lines, int offset)
{
const char *p = (const char *)*debug_line;
Expand All @@ -399,8 +399,8 @@ parse_debug_line_cu(int num_traces, void **traces, char **debug_line,
#define FILL_LINE() \
do { \
fill_line(num_traces, traces, addr, file, line, \
(char *)header.include_directories, \
(char *)header.filenames, \
header.include_directories, \
header.filenames, \
obj, lines, offset); \
/*basic_block = prologue_end = epilogue_begin = 0;*/ \
} while (0)
Expand All @@ -413,19 +413,19 @@ parse_debug_line_cu(int num_traces, void **traces, char **debug_line,
FILL_LINE();
break;
case DW_LNS_advance_pc:
a = uleb128((char **)&p) * header.minimum_instruction_length;
a = uleb128(&p) * header.minimum_instruction_length;
addr += a;
break;
case DW_LNS_advance_line: {
long a = sleb128((char **)&p);
long a = sleb128(&p);
line += a;
break;
}
case DW_LNS_set_file:
file = (unsigned int)uleb128((char **)&p);
file = (unsigned int)uleb128(&p);
break;
case DW_LNS_set_column:
/*column = (unsigned int)*/(void)uleb128((char **)&p);
/*column = (unsigned int)*/(void)uleb128(&p);
break;
case DW_LNS_negate_stmt:
is_stmt = !is_stmt;
Expand All @@ -450,10 +450,10 @@ parse_debug_line_cu(int num_traces, void **traces, char **debug_line,
/* epilogue_begin = 1; */
break;
case DW_LNS_set_isa:
/* isa = (unsigned int)*/(void)uleb128((char **)&p);
/* isa = (unsigned int)*/(void)uleb128(&p);
break;
case 0:
a = uleb128((char **)&p);
a = uleb128(&p);
op = *p++;
switch (op) {
case DW_LNE_end_sequence:
Expand All @@ -477,7 +477,7 @@ parse_debug_line_cu(int num_traces, void **traces, char **debug_line,
break;
case DW_LNE_set_discriminator:
/* TODO:currently ignore */
uleb128((char **)&p);
uleb128(&p);
break;
default:
kprintf("Unknown extended opcode: %d in %s\n",
Expand All @@ -500,10 +500,10 @@ parse_debug_line_cu(int num_traces, void **traces, char **debug_line,

static int
parse_debug_line(int num_traces, void **traces,
char *debug_line, unsigned long size,
const char *debug_line, unsigned long size,
obj_info_t *obj, line_info_t *lines, int offset)
{
char *debug_line_end = debug_line + size;
const char *debug_line_end = debug_line + size;
while (debug_line < debug_line_end) {
if (parse_debug_line_cu(num_traces, traces, &debug_line, obj, lines, offset))
return -1;
Expand Down Expand Up @@ -833,21 +833,21 @@ enum {
# define ABBREV_TABLE_SIZE 256
typedef struct {
obj_info_t *obj;
char *file;
char *current_cu;
const char *file;
const char *current_cu;
uint64_t current_low_pc;
char *debug_line_cu_end;
char *debug_line_files;
char *debug_line_directories;
char *p;
char *cu_end;
char *pend;
char *q0;
char *q;
const char *debug_line_cu_end;
const char *debug_line_files;
const char *debug_line_directories;
const char *p;
const char *cu_end;
const char *pend;
const char *q0;
const char *q;
int format; // 4 or 8
uint8_t address_size;
int level;
char *abbrev_table[ABBREV_TABLE_SIZE];
const char *abbrev_table[ABBREV_TABLE_SIZE];
} DebugInfoReader;

typedef struct {
Expand All @@ -858,7 +858,7 @@ typedef struct {

typedef struct {
union {
char *ptr;
const char *ptr;
uint64_t uint64;
int64_t int64;
} as;
Expand Down Expand Up @@ -891,47 +891,47 @@ get_uint64(const uint8_t *p)
}

static uint8_t
read_uint8(char **ptr)
read_uint8(const char **ptr)
{
const unsigned char *p = (const unsigned char *)*ptr;
*ptr = (char *)(p + 1);
return *p;
const char *p = *ptr;
*ptr = (p + 1);
return (uint8_t)*p;
}

static uint16_t
read_uint16(char **ptr)
read_uint16(const char **ptr)
{
const unsigned char *p = (const unsigned char *)*ptr;
*ptr = (char *)(p + 2);
return get_uint16(p);
const char *p = *ptr;
*ptr = (p + 2);
return get_uint16((const uint8_t *)p);
}

static uint32_t
read_uint24(char **ptr)
read_uint24(const char **ptr)
{
const unsigned char *p = (const unsigned char *)*ptr;
*ptr = (char *)(p + 3);
return (*p << 16) | get_uint16(p+1);
const char *p = *ptr;
*ptr = (p + 3);
return ((uint8_t)*p << 16) | get_uint16((const uint8_t *)p+1);
}

static uint32_t
read_uint32(char **ptr)
read_uint32(const char **ptr)
{
const unsigned char *p = (const unsigned char *)*ptr;
*ptr = (char *)(p + 4);
return get_uint32(p);
const char *p = *ptr;
*ptr = (p + 4);
return get_uint32((const uint8_t *)p);
}

static uint64_t
read_uint64(char **ptr)
read_uint64(const char **ptr)
{
const unsigned char *p = (const unsigned char *)*ptr;
*ptr = (char *)(p + 8);
return get_uint64(p);
}

static uintptr_t
read_uintptr(char **ptr)
read_uintptr(const char **ptr)
{
const unsigned char *p = (const unsigned char *)*ptr;
*ptr = (char *)(p + SIZEOF_VOIDP);
Expand Down Expand Up @@ -976,7 +976,7 @@ debug_info_reader_init(DebugInfoReader *reader, obj_info_t *obj)
}

static void
di_skip_die_attributes(char **p)
di_skip_die_attributes(const char **p)
{
for (;;) {
uint64_t at = uleb128(p);
Expand All @@ -996,7 +996,7 @@ static void
di_read_debug_abbrev_cu(DebugInfoReader *reader)
{
uint64_t prev = 0;
char *p = reader->q0;
const char *p = reader->q0;
for (;;) {
uint64_t abbrev_number = uleb128(&p);
if (abbrev_number <= prev) break;
Expand Down Expand Up @@ -1042,23 +1042,23 @@ set_int_value(DebugInfoValue *v, int64_t n)
}

static void
set_cstr_value(DebugInfoValue *v, char *s)
set_cstr_value(DebugInfoValue *v, const char *s)
{
v->as.ptr = s;
v->off = 0;
v->type = VAL_cstr;
}

static void
set_cstrp_value(DebugInfoValue *v, char *s, uint64_t off)
set_cstrp_value(DebugInfoValue *v, const char *s, uint64_t off)
{
v->as.ptr = s;
v->off = off;
v->type = VAL_cstr;
}

static void
set_data_value(DebugInfoValue *v, char *s)
set_data_value(DebugInfoValue *v, const char *s)
{
v->as.ptr = s;
v->type = VAL_data;
Expand Down Expand Up @@ -1138,12 +1138,12 @@ debug_info_reader_read_value(DebugInfoReader *reader, uint64_t form, DebugInfoVa
set_uint_value(v, read_uleb128(reader));
break;
case DW_FORM_ref_addr:
if (reader->address_size == 4) {
if (reader->format == 4) {
set_uint_value(v, read_uint32(&reader->p));
} else if (reader->address_size == 8) {
} else if (reader->format == 8) {
set_uint_value(v, read_uint64(&reader->p));
} else {
fprintf(stderr,"unknown address_size:%d", reader->address_size);
fprintf(stderr,"unknown format:%d", reader->format);
abort();
}
break;
Expand Down Expand Up @@ -1259,10 +1259,10 @@ debug_info_reader_read_value(DebugInfoReader *reader, uint64_t form, DebugInfoVa
}

/* find abbrev in current compilation unit */
static char *
static const char *
di_find_abbrev(DebugInfoReader *reader, uint64_t abbrev_number)
{
char *p;
const char *p;
if (abbrev_number < ABBREV_TABLE_SIZE) {
return reader->abbrev_table[abbrev_number];
}
Expand Down Expand Up @@ -1313,10 +1313,10 @@ div_inspect(DebugInfoValue *v)
{
switch (v->type) {
case VAL_uint:
fprintf(stderr,"%d: type:%d size:%zx v:%lx\n",__LINE__,v->type,v->size,v->as.uint64);
fprintf(stderr,"%d: type:%d size:%zx v:%"PRIx64"\n",__LINE__,v->type,v->size,v->as.uint64);
break;
case VAL_int:
fprintf(stderr,"%d: type:%d size:%zx v:%ld\n",__LINE__,v->type,v->size,(int64_t)v->as.uint64);
fprintf(stderr,"%d: type:%d size:%zx v:%"PRId64"\n",__LINE__,v->type,v->size,(int64_t)v->as.uint64);
break;
case VAL_cstr:
fprintf(stderr,"%d: type:%d size:%zx v:'%s'\n",__LINE__,v->type,v->size,v->as.ptr);
Expand Down Expand Up @@ -1407,9 +1407,9 @@ ranges_set(ranges_t *ptr, DebugInfoValue *v)
}

static uint64_t
read_dw_form_addr(DebugInfoReader *reader, char **ptr)
read_dw_form_addr(DebugInfoReader *reader, const char **ptr)
{
char *p = *ptr;
const char *p = *ptr;
*ptr = p + reader->format;
if (reader->format == 4) {
return read_uint32(&p);
Expand All @@ -1434,7 +1434,7 @@ ranges_include(DebugInfoReader *reader, ranges_t *ptr, uint64_t addr)
}
else if (ptr->ranges_set) {
/* TODO: support base address selection entry */
char *p;
const char *p;
uint64_t base = ptr->low_pc_set ? ptr->low_pc : reader->current_low_pc;
if (reader->obj->debug_rnglists.ptr) {
p = reader->obj->debug_rnglists.ptr + ptr->ranges;
Expand Down Expand Up @@ -1595,8 +1595,8 @@ di_read_cu(DebugInfoReader *reader)
static void
read_abstract_origin(DebugInfoReader *reader, uint64_t abstract_origin, line_info_t *line)
{
char *p = reader->p;
char *q = reader->q;
const char *p = reader->p;
const char *q = reader->q;
int level = reader->level;
DIE die;

Expand Down