* dwarf2.h: Mention the location of the DWARF3 spec on the web.

(DW_AT_stride_size): Rename to DW_AT_bit_stride.
  (DW_AT_stride): Rename to DW_AT_byte_stride.
* dwarf.c (process_extended_line_op): Add cases for HP extensions to the line ops.
  Mention if an unknown op code is in the user defined range.
  (decode_location_expression): Add cases for HP extensions, the DW_OP_GNU_uninit extension and the DW_OP_call_frame_cfa and DW_OP_bit_piece DWARF3 operators.
  (read_and_display_attr): Correct list of attributes which can reference a location list.
  (read_and_display_attr_value): Add cases for DWARF3 values and HP extensions.
  Correct list of attributes which can reference a location list.
  (get_AT_name): Add cases for DWARF3 values and HP and PGI extensions.
This commit is contained in:
Nick Clifton 2007-11-16 15:36:21 +00:00
parent 62d7f7907a
commit e2a0d921a7
4 changed files with 198 additions and 32 deletions

View file

@ -1,3 +1,19 @@
2007-11-16 Nick Clifton <nickc@redhat.com>
* dwarf.c (process_extended_line_op): Add cases for HP extensions
to the line ops. Mention if an unknown op code is in the user
defined range.
(decode_location_expression): Add cases for HP extensions, the
DW_OP_GNU_uninit extension and the DW_OP_call_frame_cfa and
DW_OP_bit_piece DWARF3 operators.
(read_and_display_attr): Correct list of attributes which can
reference a location list.
(read_and_display_attr_value): Add cases for DWARF3 values and HP
extensions.
Correct list of attributes which can reference a location list.
(get_AT_name): Add cases for DWARF3 values and HP and PGI
extensions.
2007-11-07 Karl Berry <karl@gnu.org> 2007-11-07 Karl Berry <karl@gnu.org>
* doc/binutils.texi: Update to FDL 1.2. * doc/binutils.texi: Update to FDL 1.2.

View file

@ -270,7 +270,46 @@ process_extended_line_op (unsigned char *data, int is_stmt)
printf (_("%s\n\n"), name); printf (_("%s\n\n"), name);
break; break;
/* HP extensions. */
case DW_LNE_HP_negate_is_UV_update:
printf ("DW_LNE_HP_negate_is_UV_update");
break;
case DW_LNE_HP_push_context:
printf ("DW_LNE_HP_push_context");
break;
case DW_LNE_HP_pop_context:
printf ("DW_LNE_HP_pop_context");
break;
case DW_LNE_HP_set_file_line_column:
printf ("DW_LNE_HP_set_file_line_column");
break;
case DW_LNE_HP_set_routine_name:
printf ("DW_LNE_HP_set_routine_name");
break;
case DW_LNE_HP_set_sequence:
printf ("DW_LNE_HP_set_sequence");
break;
case DW_LNE_HP_negate_post_semantics:
printf ("DW_LNE_HP_negate_post_semantics");
break;
case DW_LNE_HP_negate_function_exit:
printf ("DW_LNE_HP_negate_function_exit");
break;
case DW_LNE_HP_negate_front_end_logical:
printf ("DW_LNE_HP_negate_front_end_logical");
break;
case DW_LNE_HP_define_proc:
printf ("DW_LNE_HP_define_proc");
break;
default: default:
if (op_code >= DW_LNE_lo_user
/* The test against DW_LNW_hi_user is redundant due to
the limited range of the unsigned char data type used
for op_code. */
/*&& op_code <= DW_LNE_hi_user*/)
printf (_("user defined: length %d\n"), len - bytes_read);
else
printf (_("UNKNOWN: length %d\n"), len - bytes_read); printf (_("UNKNOWN: length %d\n"), len - bytes_read);
break; break;
} }
@ -892,15 +931,58 @@ decode_location_expression (unsigned char * data,
data += 4; data += 4;
break; break;
case DW_OP_call_ref: case DW_OP_call_ref:
printf ("DW_OP_call_ref"); /* XXX: Strictly speaking for 64-bit DWARF3 files
this ought to be an 8-byte wide computation. */
printf ("DW_OP_call_ref: <%lx>", (long) byte_get (data, 4) + cu_offset);
data += 4;
break; break;
case DW_OP_form_tls_address: case DW_OP_form_tls_address:
printf ("DW_OP_form_tls_address"); printf ("DW_OP_form_tls_address");
break; break;
case DW_OP_call_frame_cfa:
printf ("DW_OP_call_frame_cfa");
break;
case DW_OP_bit_piece:
printf ("DW_OP_bit_piece: ");
printf ("size: %lu ", read_leb128 (data, &bytes_read, 0));
data += bytes_read;
printf ("offset: %lu ", read_leb128 (data, &bytes_read, 0));
data += bytes_read;
break;
/* GNU extensions. */ /* GNU extensions. */
case DW_OP_GNU_push_tls_address: case DW_OP_GNU_push_tls_address:
printf ("DW_OP_GNU_push_tls_address"); printf ("DW_OP_GNU_push_tls_address or DW_OP_HP_unknown");
break;
case DW_OP_GNU_uninit:
printf ("DW_OP_GNU_uninit");
/* FIXME: Is there data associated with this OP ? */
break;
/* HP extensions. */
case DW_OP_HP_is_value:
printf ("DW_OP_HP_is_value");
/* FIXME: Is there data associated with this OP ? */
break;
case DW_OP_HP_fltconst4:
printf ("DW_OP_HP_fltconst4");
/* FIXME: Is there data associated with this OP ? */
break;
case DW_OP_HP_fltconst8:
printf ("DW_OP_HP_fltconst8");
/* FIXME: Is there data associated with this OP ? */
break;
case DW_OP_HP_mod_range:
printf ("DW_OP_HP_mod_range");
/* FIXME: Is there data associated with this OP ? */
break;
case DW_OP_HP_unmod_range:
printf ("DW_OP_HP_unmod_range");
/* FIXME: Is there data associated with this OP ? */
break;
case DW_OP_HP_tls:
printf ("DW_OP_HP_tls");
/* FIXME: Is there data associated with this OP ? */
break; break;
default: default:
@ -1123,14 +1205,13 @@ read_and_display_attr_value (unsigned long attribute,
case DW_AT_frame_base: case DW_AT_frame_base:
have_frame_base = 1; have_frame_base = 1;
case DW_AT_location: case DW_AT_location:
case DW_AT_string_length:
case DW_AT_return_addr:
case DW_AT_data_member_location: case DW_AT_data_member_location:
case DW_AT_vtable_elem_location: case DW_AT_vtable_elem_location:
case DW_AT_allocated: case DW_AT_segment:
case DW_AT_associated: case DW_AT_static_link:
case DW_AT_data_location: case DW_AT_use_location:
case DW_AT_stride:
case DW_AT_upper_bound:
case DW_AT_lower_bound:
if (form == DW_FORM_data4 || form == DW_FORM_data8) if (form == DW_FORM_data4 || form == DW_FORM_data8)
{ {
/* Process location list. */ /* Process location list. */
@ -1262,9 +1343,24 @@ read_and_display_attr_value (unsigned long attribute,
case DW_ATE_signed_char: printf ("(signed char)"); break; case DW_ATE_signed_char: printf ("(signed char)"); break;
case DW_ATE_unsigned: printf ("(unsigned)"); break; case DW_ATE_unsigned: printf ("(unsigned)"); break;
case DW_ATE_unsigned_char: printf ("(unsigned char)"); break; case DW_ATE_unsigned_char: printf ("(unsigned char)"); break;
/* DWARF 2.1 value. */ /* DWARF 2.1 values: */
case DW_ATE_imaginary_float: printf ("(imaginary float)"); break; case DW_ATE_imaginary_float: printf ("(imaginary float)"); break;
case DW_ATE_decimal_float: printf ("(decimal float)"); break; case DW_ATE_decimal_float: printf ("(decimal float)"); break;
/* DWARF 3 values: */
case DW_ATE_packed_decimal: printf ("(packed_decimal)"); break;
case DW_ATE_numeric_string: printf ("(numeric_string)"); break;
case DW_ATE_edited: printf ("(edited)"); break;
case DW_ATE_signed_fixed: printf ("(signed_fixed)"); break;
case DW_ATE_unsigned_fixed: printf ("(unsigned_fixed)"); break;
/* HP extensions: */
case DW_ATE_HP_float80: printf ("(HP_float80)"); break;
case DW_ATE_HP_complex_float80: printf ("(HP_complex_float80)"); break;
case DW_ATE_HP_float128: printf ("(HP_float128)"); break;
case DW_ATE_HP_complex_float128:printf ("(HP_complex_float128)"); break;
case DW_ATE_HP_floathpintel: printf ("(HP_floathpintel)"); break;
case DW_ATE_HP_imaginary_float80: printf ("(HP_imaginary_float80)"); break;
case DW_ATE_HP_imaginary_float128: printf ("(HP_imaginary_float128)"); break;
default: default:
if (uvalue >= DW_ATE_lo_user if (uvalue >= DW_ATE_lo_user
&& uvalue <= DW_ATE_hi_user) && uvalue <= DW_ATE_hi_user)
@ -1345,8 +1441,16 @@ read_and_display_attr_value (unsigned long attribute,
case DW_AT_frame_base: case DW_AT_frame_base:
have_frame_base = 1; have_frame_base = 1;
case DW_AT_location: case DW_AT_location:
case DW_AT_string_length:
case DW_AT_return_addr:
case DW_AT_data_member_location: case DW_AT_data_member_location:
case DW_AT_vtable_elem_location: case DW_AT_vtable_elem_location:
case DW_AT_segment:
case DW_AT_static_link:
case DW_AT_use_location:
if (form == DW_FORM_data4 || form == DW_FORM_data8)
printf (_("(location list)"));
/* Fall through. */
case DW_AT_allocated: case DW_AT_allocated:
case DW_AT_associated: case DW_AT_associated:
case DW_AT_data_location: case DW_AT_data_location:
@ -1366,9 +1470,6 @@ read_and_display_attr_value (unsigned long attribute,
if (need_frame_base && !have_frame_base) if (need_frame_base && !have_frame_base)
printf (_(" [without DW_AT_frame_base]")); printf (_(" [without DW_AT_frame_base]"));
} }
else if (form == DW_FORM_data4 || form == DW_FORM_data8)
printf (_("(location list)"));
break; break;
default: default:
@ -1458,19 +1559,52 @@ get_AT_name (unsigned long attribute)
case DW_AT_call_column: return "DW_AT_call_column"; case DW_AT_call_column: return "DW_AT_call_column";
case DW_AT_call_file: return "DW_AT_call_file"; case DW_AT_call_file: return "DW_AT_call_file";
case DW_AT_call_line: return "DW_AT_call_line"; case DW_AT_call_line: return "DW_AT_call_line";
/* SGI/MIPS extensions. */ case DW_AT_description: return "DW_AT_description";
case DW_AT_MIPS_fde: return "DW_AT_MIPS_fde"; case DW_AT_binary_scale: return "DW_AT_binary_scale";
case DW_AT_decimal_scale: return "DW_AT_decimal_scale";
case DW_AT_small: return "DW_AT_small";
case DW_AT_decimal_sign: return "DW_AT_decimal_sign";
case DW_AT_digit_count: return "DW_AT_digit_count";
case DW_AT_picture_string: return "DW_AT_picture_string";
case DW_AT_mutable: return "DW_AT_mutable";
case DW_AT_threads_scaled: return "DW_AT_threads_scaled";
case DW_AT_explicit: return "DW_AT_explicit";
case DW_AT_object_pointer: return "DW_AT_object_pointer";
case DW_AT_endianity: return "DW_AT_endianity";
case DW_AT_elemental: return "DW_AT_elemental";
case DW_AT_pure: return "DW_AT_pure";
case DW_AT_recursive: return "DW_AT_recursive";
/* HP and SGI/MIPS extensions. */
case DW_AT_MIPS_loop_begin: return "DW_AT_MIPS_loop_begin"; case DW_AT_MIPS_loop_begin: return "DW_AT_MIPS_loop_begin";
case DW_AT_MIPS_tail_loop_begin: return "DW_AT_MIPS_tail_loop_begin"; case DW_AT_MIPS_tail_loop_begin: return "DW_AT_MIPS_tail_loop_begin";
case DW_AT_MIPS_epilog_begin: return "DW_AT_MIPS_epilog_begin"; case DW_AT_MIPS_epilog_begin: return "DW_AT_MIPS_epilog_begin";
case DW_AT_MIPS_loop_unroll_factor: return "DW_AT_MIPS_loop_unroll_factor"; case DW_AT_MIPS_loop_unroll_factor: return "DW_AT_MIPS_loop_unroll_factor";
case DW_AT_MIPS_software_pipeline_depth: case DW_AT_MIPS_software_pipeline_depth: return "DW_AT_MIPS_software_pipeline_depth";
return "DW_AT_MIPS_software_pipeline_depth";
case DW_AT_MIPS_linkage_name: return "DW_AT_MIPS_linkage_name"; case DW_AT_MIPS_linkage_name: return "DW_AT_MIPS_linkage_name";
case DW_AT_MIPS_stride: return "DW_AT_MIPS_stride"; case DW_AT_MIPS_stride: return "DW_AT_MIPS_stride";
case DW_AT_MIPS_abstract_name: return "DW_AT_MIPS_abstract_name"; case DW_AT_MIPS_abstract_name: return "DW_AT_MIPS_abstract_name";
case DW_AT_MIPS_clone_origin: return "DW_AT_MIPS_clone_origin"; case DW_AT_MIPS_clone_origin: return "DW_AT_MIPS_clone_origin";
case DW_AT_MIPS_has_inlines: return "DW_AT_MIPS_has_inlines"; case DW_AT_MIPS_has_inlines: return "DW_AT_MIPS_has_inlines";
/* HP Extensions. */
case DW_AT_HP_block_index: return "DW_AT_HP_block_index";
case DW_AT_HP_actuals_stmt_list: return "DW_AT_HP_actuals_stmt_list";
case DW_AT_HP_proc_per_section: return "DW_AT_HP_proc_per_section";
case DW_AT_HP_raw_data_ptr: return "DW_AT_HP_raw_data_ptr";
case DW_AT_HP_pass_by_reference: return "DW_AT_HP_pass_by_reference";
case DW_AT_HP_opt_level: return "DW_AT_HP_opt_level";
case DW_AT_HP_prof_version_id: return "DW_AT_HP_prof_version_id";
case DW_AT_HP_opt_flags: return "DW_AT_HP_opt_flags";
case DW_AT_HP_cold_region_low_pc: return "DW_AT_HP_cold_region_low_pc";
case DW_AT_HP_cold_region_high_pc: return "DW_AT_HP_cold_region_high_pc";
case DW_AT_HP_all_variables_modifiable: return "DW_AT_HP_all_variables_modifiable";
case DW_AT_HP_linkage_name: return "DW_AT_HP_linkage_name";
case DW_AT_HP_prof_flags: return "DW_AT_HP_prof_flags";
/* One value is shared by the MIPS and HP extensions: */
case DW_AT_MIPS_fde: return "DW_AT_MIPS_fde or DW_AT_HP_unmodifiable";
/* GNU extensions. */ /* GNU extensions. */
case DW_AT_sf_names: return "DW_AT_sf_names"; case DW_AT_sf_names: return "DW_AT_sf_names";
case DW_AT_src_info: return "DW_AT_src_info"; case DW_AT_src_info: return "DW_AT_src_info";
@ -1479,8 +1613,15 @@ get_AT_name (unsigned long attribute)
case DW_AT_body_begin: return "DW_AT_body_begin"; case DW_AT_body_begin: return "DW_AT_body_begin";
case DW_AT_body_end: return "DW_AT_body_end"; case DW_AT_body_end: return "DW_AT_body_end";
case DW_AT_GNU_vector: return "DW_AT_GNU_vector"; case DW_AT_GNU_vector: return "DW_AT_GNU_vector";
/* UPC extension. */ /* UPC extension. */
case DW_AT_upc_threads_scaled: return "DW_AT_upc_threads_scaled"; case DW_AT_upc_threads_scaled: return "DW_AT_upc_threads_scaled";
/* PGI (STMicroelectronics) extensions. */
case DW_AT_PGI_lbase: return "DW_AT_PGI_lbase";
case DW_AT_PGI_soffset: return "DW_AT_PGI_soffset";
case DW_AT_PGI_lstride: return "DW_AT_PGI_lstride";
default: default:
{ {
static char buffer[100]; static char buffer[100];

View file

@ -1,3 +1,9 @@
2007-11-16 Nick Clifton <nickc@redhat.com>
* dwarf2.h: Mention the location of the DWARF3 spec on the web.
(DW_AT_stride_size): Rename to DW_AT_bit_stride.
(DW_AT_stride): Rename to DW_AT_byte_stride.
2007-11-08 Nathan Sidwell <nathan@codesourcery.com> 2007-11-08 Nathan Sidwell <nathan@codesourcery.com>
* vxworks.h: New. * vxworks.h: New.

View file

@ -33,7 +33,8 @@
by UNIX International. Copies of this specification are available from by UNIX International. Copies of this specification are available from
UNIX International, 20 Waterview Boulevard, Parsippany, NJ, 07054. UNIX International, 20 Waterview Boulevard, Parsippany, NJ, 07054.
This file also now contains definitions from the DWARF 3 specification. */ This file also now contains definitions from the DWARF 3 specification
published Dec 20, 2005, available from: http://dwarf.freestandards.org. */
/* This file is shared between GCC and GDB, and should not contain /* This file is shared between GCC and GDB, and should not contain
prototypes. */ prototypes. */
@ -275,7 +276,8 @@ enum dwarf_attribute
DW_AT_prototyped = 0x27, DW_AT_prototyped = 0x27,
DW_AT_return_addr = 0x2a, DW_AT_return_addr = 0x2a,
DW_AT_start_scope = 0x2c, DW_AT_start_scope = 0x2c,
DW_AT_stride_size = 0x2e, DW_AT_bit_stride = 0x2e,
#define DW_AT_stride_size DW_AT_bit_stride /* Note: The use of DW_AT_stride_size is deprecated. */
DW_AT_upper_bound = 0x2f, DW_AT_upper_bound = 0x2f,
DW_AT_abstract_origin = 0x31, DW_AT_abstract_origin = 0x31,
DW_AT_accessibility = 0x32, DW_AT_accessibility = 0x32,
@ -310,7 +312,8 @@ enum dwarf_attribute
DW_AT_allocated = 0x4e, DW_AT_allocated = 0x4e,
DW_AT_associated = 0x4f, DW_AT_associated = 0x4f,
DW_AT_data_location = 0x50, DW_AT_data_location = 0x50,
DW_AT_stride = 0x51, DW_AT_byte_stride = 0x51,
#define DW_AT_stride DW_AT_byte_stride /* Note: The use of DW_AT_stride is deprecated. */
DW_AT_entry_pc = 0x52, DW_AT_entry_pc = 0x52,
DW_AT_use_UTF8 = 0x53, DW_AT_use_UTF8 = 0x53,
DW_AT_extension = 0x54, DW_AT_extension = 0x54,