This commit is contained in:
Nobuyoshi Nakada 2021-08-14 10:08:19 +09:00
Родитель 963f2e01e7
Коммит a9977ba2f9
1 изменённых файлов: 68 добавлений и 68 удалений

Просмотреть файл

@ -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;
@ -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;
@ -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 "";
@ -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;
@ -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;
@ -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;
@ -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)
@ -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;
@ -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:
@ -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",
@ -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;
@ -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 {
@ -858,7 +858,7 @@ typedef struct {
typedef struct {
union {
char *ptr;
const char *ptr;
uint64_t uint64;
int64_t int64;
} as;
@ -891,39 +891,39 @@ 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);
@ -931,7 +931,7 @@ read_uint64(char **ptr)
}
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);
@ -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);
@ -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;
@ -1042,7 +1042,7 @@ 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;
@ -1050,7 +1050,7 @@ set_cstr_value(DebugInfoValue *v, char *s)
}
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;
@ -1058,7 +1058,7 @@ set_cstrp_value(DebugInfoValue *v, char *s, uint64_t off)
}
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;
@ -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;
@ -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];
}
@ -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);
@ -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);
@ -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;
@ -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;