* readelf.c (read_and_display_attr): Add CU offset to references.
(display_debug_info): Pass it in.
This commit is contained in:
parent
05a342f46d
commit
1fa3730664
2 changed files with 48 additions and 32 deletions
|
@ -1,3 +1,8 @@
|
||||||
|
2000-04-06 Jason Merrill <jason@casey.cygnus.com>
|
||||||
|
|
||||||
|
* readelf.c (read_and_display_attr): Add CU offset to references.
|
||||||
|
(display_debug_info): Pass it in.
|
||||||
|
|
||||||
2000-04-06 Nick Clifton <nickc@cygnus.com>
|
2000-04-06 Nick Clifton <nickc@cygnus.com>
|
||||||
|
|
||||||
* readelf.c (decode_ARM_machine_flags): New function.
|
* readelf.c (decode_ARM_machine_flags): New function.
|
||||||
|
|
|
@ -210,7 +210,7 @@ static char * get_FORM_name PARAMS ((unsigned long));
|
||||||
static void free_abbrevs PARAMS ((void));
|
static void free_abbrevs PARAMS ((void));
|
||||||
static void add_abbrev PARAMS ((unsigned long, unsigned long, int));
|
static void add_abbrev PARAMS ((unsigned long, unsigned long, int));
|
||||||
static void add_abbrev_attr PARAMS ((unsigned long, unsigned long));
|
static void add_abbrev_attr PARAMS ((unsigned long, unsigned long));
|
||||||
static unsigned char * read_and_display_attr PARAMS ((unsigned long, unsigned long, unsigned char *, unsigned long));
|
static unsigned char * read_and_display_attr PARAMS ((unsigned long, unsigned long, unsigned char *, unsigned long, unsigned long));
|
||||||
static unsigned char * display_block PARAMS ((unsigned char *, unsigned long));
|
static unsigned char * display_block PARAMS ((unsigned char *, unsigned long));
|
||||||
static void decode_location_expression PARAMS ((unsigned char *, unsigned int));
|
static void decode_location_expression PARAMS ((unsigned char *, unsigned int));
|
||||||
static void request_dump PARAMS ((unsigned int, char));
|
static void request_dump PARAMS ((unsigned int, char));
|
||||||
|
@ -6060,36 +6060,24 @@ decode_location_expression (data, pointer_size)
|
||||||
|
|
||||||
|
|
||||||
static unsigned char *
|
static unsigned char *
|
||||||
read_and_display_attr (attribute, form, data, pointer_size)
|
read_and_display_attr (attribute, form, data, cu_offset, pointer_size)
|
||||||
unsigned long attribute;
|
unsigned long attribute;
|
||||||
unsigned long form;
|
unsigned long form;
|
||||||
unsigned char * data;
|
unsigned char * data;
|
||||||
|
unsigned long cu_offset;
|
||||||
unsigned long pointer_size;
|
unsigned long pointer_size;
|
||||||
{
|
{
|
||||||
unsigned long uvalue = 0;
|
unsigned long uvalue = 0;
|
||||||
unsigned char * block_start = NULL;
|
unsigned char * block_start = NULL;
|
||||||
int bytes_read;
|
int bytes_read;
|
||||||
int is_ref = 0;
|
|
||||||
|
|
||||||
printf (" %-18s:", get_AT_name (attribute));
|
printf (" %-18s:", get_AT_name (attribute));
|
||||||
|
|
||||||
switch (form)
|
|
||||||
{
|
|
||||||
case DW_FORM_ref_addr:
|
|
||||||
case DW_FORM_ref1:
|
|
||||||
case DW_FORM_ref2:
|
|
||||||
case DW_FORM_ref4:
|
|
||||||
case DW_FORM_ref8:
|
|
||||||
case DW_FORM_ref_udata:
|
|
||||||
is_ref = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
switch (form)
|
switch (form)
|
||||||
{
|
{
|
||||||
case DW_FORM_ref_addr:
|
case DW_FORM_ref_addr:
|
||||||
case DW_FORM_addr:
|
case DW_FORM_addr:
|
||||||
uvalue = byte_get (data, pointer_size);
|
uvalue = byte_get (data, pointer_size);
|
||||||
printf (is_ref ? " <%lx>" : " %#lx", uvalue);
|
|
||||||
data += pointer_size;
|
data += pointer_size;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -6097,21 +6085,55 @@ read_and_display_attr (attribute, form, data, pointer_size)
|
||||||
case DW_FORM_flag:
|
case DW_FORM_flag:
|
||||||
case DW_FORM_data1:
|
case DW_FORM_data1:
|
||||||
uvalue = byte_get (data ++, 1);
|
uvalue = byte_get (data ++, 1);
|
||||||
printf (is_ref ? " <%lx>" : " %ld", uvalue);
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case DW_FORM_ref2:
|
case DW_FORM_ref2:
|
||||||
case DW_FORM_data2:
|
case DW_FORM_data2:
|
||||||
uvalue = byte_get (data, 2);
|
uvalue = byte_get (data, 2);
|
||||||
data += 2;
|
data += 2;
|
||||||
printf (is_ref ? " <%lx>" : " %ld", uvalue);
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case DW_FORM_ref4:
|
case DW_FORM_ref4:
|
||||||
case DW_FORM_data4:
|
case DW_FORM_data4:
|
||||||
uvalue = byte_get (data, 4);
|
uvalue = byte_get (data, 4);
|
||||||
data += 4;
|
data += 4;
|
||||||
printf (is_ref ? " <%lx>" : " %ld", uvalue);
|
break;
|
||||||
|
|
||||||
|
case DW_FORM_sdata:
|
||||||
|
uvalue = read_leb128 (data, & bytes_read, 1);
|
||||||
|
data += bytes_read;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case DW_FORM_ref_udata:
|
||||||
|
case DW_FORM_udata:
|
||||||
|
uvalue = read_leb128 (data, & bytes_read, 0);
|
||||||
|
data += bytes_read;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
switch (form)
|
||||||
|
{
|
||||||
|
case DW_FORM_ref_addr:
|
||||||
|
printf (" <#%lx>", uvalue);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case DW_FORM_ref1:
|
||||||
|
case DW_FORM_ref2:
|
||||||
|
case DW_FORM_ref4:
|
||||||
|
case DW_FORM_ref_udata:
|
||||||
|
printf (" <%lx>", uvalue + cu_offset);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case DW_FORM_addr:
|
||||||
|
printf (" %#lx", uvalue);
|
||||||
|
|
||||||
|
case DW_FORM_flag:
|
||||||
|
case DW_FORM_data1:
|
||||||
|
case DW_FORM_data2:
|
||||||
|
case DW_FORM_data4:
|
||||||
|
case DW_FORM_sdata:
|
||||||
|
case DW_FORM_udata:
|
||||||
|
printf (" %ld", uvalue);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case DW_FORM_ref8:
|
case DW_FORM_ref8:
|
||||||
|
@ -6127,19 +6149,6 @@ read_and_display_attr (attribute, form, data, pointer_size)
|
||||||
data += strlen (data) + 1;
|
data += strlen (data) + 1;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case DW_FORM_sdata:
|
|
||||||
uvalue = read_leb128 (data, & bytes_read, 1);
|
|
||||||
data += bytes_read;
|
|
||||||
printf (" %ld", (long) uvalue);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case DW_FORM_ref_udata:
|
|
||||||
case DW_FORM_udata:
|
|
||||||
uvalue = read_leb128 (data, & bytes_read, 0);
|
|
||||||
data += bytes_read;
|
|
||||||
printf (is_ref ? " <%lx>" : " %ld", uvalue);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case DW_FORM_block:
|
case DW_FORM_block:
|
||||||
uvalue = read_leb128 (data, & bytes_read, 0);
|
uvalue = read_leb128 (data, & bytes_read, 0);
|
||||||
block_start = data + bytes_read;
|
block_start = data + bytes_read;
|
||||||
|
@ -6330,6 +6339,7 @@ display_debug_info (section, start, file)
|
||||||
unsigned char * tags;
|
unsigned char * tags;
|
||||||
int i;
|
int i;
|
||||||
int level;
|
int level;
|
||||||
|
unsigned long cu_offset;
|
||||||
|
|
||||||
external = (DWARF2_External_CompUnit *) start;
|
external = (DWARF2_External_CompUnit *) start;
|
||||||
|
|
||||||
|
@ -6339,6 +6349,7 @@ display_debug_info (section, start, file)
|
||||||
compunit.cu_pointer_size = BYTE_GET (external->cu_pointer_size);
|
compunit.cu_pointer_size = BYTE_GET (external->cu_pointer_size);
|
||||||
|
|
||||||
tags = start + sizeof (* external);
|
tags = start + sizeof (* external);
|
||||||
|
cu_offset = start - section_begin;
|
||||||
start += compunit.cu_length + sizeof (external->cu_length);
|
start += compunit.cu_length + sizeof (external->cu_length);
|
||||||
|
|
||||||
if (compunit.cu_version != 2)
|
if (compunit.cu_version != 2)
|
||||||
|
@ -6424,7 +6435,7 @@ display_debug_info (section, start, file)
|
||||||
for (attr = entry->first_attr; attr; attr = attr->next)
|
for (attr = entry->first_attr; attr; attr = attr->next)
|
||||||
tags = read_and_display_attr (attr->attribute,
|
tags = read_and_display_attr (attr->attribute,
|
||||||
attr->form,
|
attr->form,
|
||||||
tags,
|
tags, cu_offset,
|
||||||
compunit.cu_pointer_size);
|
compunit.cu_pointer_size);
|
||||||
|
|
||||||
if (entry->children)
|
if (entry->children)
|
||||||
|
|
Loading…
Reference in a new issue