* [PATCH] -dA -gdwarf-4 fixes
@ 2009-10-15 7:19 Jakub Jelinek
2009-10-15 16:27 ` Richard Henderson
2009-10-15 18:33 ` Cary Coutant
0 siblings, 2 replies; 3+ messages in thread
From: Jakub Jelinek @ 2009-10-15 7:19 UTC (permalink / raw)
To: gcc-patches
Hi!
This patch fixes a bunch of issues I've noticed while looking at
-gdwarf-4 -dA output.
We certainly don't want to see DW_TAG_<unknown>, DW_AT_<unknown> or
DW_FORM_<unknown> in the output, that's not very readable.
Also, when printing 8 byte signatures, it is printed one byte on
a line, like:
.uleb128 0x8 # (DIE (0x66) DW_TAG_variable)
.ascii "t\0" # DW_AT_name
.byte 0x1 # DW_AT_decl_file (a.c)
.byte 0x3 # DW_AT_decl_line
.byte 0x18 # DW_AT_type
.byte 0x5c # DW_AT_type
.byte 0x9f # DW_AT_type
.byte 0x3d # DW_AT_type
.byte 0x6e # DW_AT_type
.byte 0x7c # DW_AT_type
.byte 0x1a # DW_AT_type
.byte 0x2e # DW_AT_type
.byte 0x1 # DW_AT_external
.byte 0x9 # DW_AT_location
.byte 0x3 # DW_OP_addr
.quad t
which is IMHO very unreadable, on the first sight that reads like
the variable has 8 type attributes. This patch changes that to:
.uleb128 0x8 # (DIE (0x66) DW_TAG_variable)
.ascii "t\0" # DW_AT_name
.byte 0x1 # DW_AT_decl_file (a.c)
.byte 0x3 # DW_AT_decl_line
.byte 0x18 # DW_AT_type
.byte 0x5c
.byte 0x9f
.byte 0x3d
.byte 0x6e
.byte 0x7c
.byte 0x1a
.byte 0x2e
.byte 0x1 # DW_AT_external
.byte 0x9 # DW_AT_location
.byte 0x3 # DW_OP_addr
.quad t
Ok for trunk?
2009-10-15 Jakub Jelinek <jakub@redhat.com>
* dwarf2out.c (dwarf_tag_name): Handle DW_TAG_rvalue_reference_type
and DW_TAG_template_alias.
(dwarf_attr_name): Handle DW_AT_main_subprogram,
DW_AT_data_bit_offset, DW_AT_const_expr, DW_AT_enum_class,
DW_AT_linkage_name, DW_AT_GNU_guarded_by, DW_AT_GNU_pt_guarded_by,
DW_AT_GNU_guarded, DW_AT_GNU_pt_guarded, DW_AT_GNU_locks_excluded,
DW_AT_GNU_exclusive_locks_required, DW_AT_GNU_shared_locks_required
and DW_AT_GNU_odr_signature.
(dwarf_form_name): Handle DW_FORM_sec_offset, DW_FORM_exprloc,
DW_FORM_flag_present and DW_FORM_ref_sig8.
(output_signature): Only print name on the first byte.
(output_die): Likewise for dw_val_class_data8.
* include/dwarf2.h (DW_LANG_Python): Add comment that it is
a DWARF 4 addition.
--- gcc/dwarf2out.c.jj 2009-10-13 16:20:12.000000000 +0200
+++ gcc/dwarf2out.c 2009-10-15 08:52:23.000000000 +0200
@@ -6478,6 +6478,10 @@ dwarf_tag_name (unsigned int tag)
return "DW_TAG_shared_type";
case DW_TAG_type_unit:
return "DW_TAG_type_unit";
+ case DW_TAG_rvalue_reference_type:
+ return "DW_TAG_rvalue_reference_type";
+ case DW_TAG_template_alias:
+ return "DW_TAG_template_alias";
case DW_TAG_GNU_template_parameter_pack:
return "DW_TAG_GNU_template_parameter_pack";
case DW_TAG_GNU_formal_parameter_pack:
@@ -6662,6 +6666,16 @@ dwarf_attr_name (unsigned int attr)
case DW_AT_signature:
return "DW_AT_signature";
+ case DW_AT_main_subprogram:
+ return "DW_AT_main_subprogram";
+ case DW_AT_data_bit_offset:
+ return "DW_AT_data_bit_offset";
+ case DW_AT_const_expr:
+ return "DW_AT_const_expr";
+ case DW_AT_enum_class:
+ return "DW_AT_enum_class";
+ case DW_AT_linkage_name:
+ return "DW_AT_linkage_name";
case DW_AT_MIPS_fde:
return "DW_AT_MIPS_fde";
@@ -6700,6 +6714,22 @@ dwarf_attr_name (unsigned int attr)
return "DW_AT_body_end";
case DW_AT_GNU_vector:
return "DW_AT_GNU_vector";
+ case DW_AT_GNU_guarded_by:
+ return "DW_AT_GNU_guarded_by";
+ case DW_AT_GNU_pt_guarded_by:
+ return "DW_AT_GNU_pt_guarded_by";
+ case DW_AT_GNU_guarded:
+ return "DW_AT_GNU_guarded";
+ case DW_AT_GNU_pt_guarded:
+ return "DW_AT_GNU_pt_guarded";
+ case DW_AT_GNU_locks_excluded:
+ return "DW_AT_GNU_locks_excluded";
+ case DW_AT_GNU_exclusive_locks_required:
+ return "DW_AT_GNU_exclusive_locks_required";
+ case DW_AT_GNU_shared_locks_required:
+ return "DW_AT_GNU_shared_locks_required";
+ case DW_AT_GNU_odr_signature:
+ return "DW_AT_GNU_odr_signature";
case DW_AT_GNU_template_name:
return "DW_AT_GNU_template_name";
@@ -6760,6 +6790,14 @@ dwarf_form_name (unsigned int form)
return "DW_FORM_ref_udata";
case DW_FORM_indirect:
return "DW_FORM_indirect";
+ case DW_FORM_sec_offset:
+ return "DW_FORM_sec_offset";
+ case DW_FORM_exprloc:
+ return "DW_FORM_exprloc";
+ case DW_FORM_flag_present:
+ return "DW_FORM_flag_present";
+ case DW_FORM_ref_sig8:
+ return "DW_FORM_ref_sig8";
default:
return "DW_FORM_<unknown>";
}
@@ -10352,7 +10390,7 @@ output_signature (const char *sig, const
int i;
for (i = 0; i < DWARF_TYPE_SIGNATURE_SIZE; i++)
- dw2_asm_output_data (1, sig[i], "%s", name);
+ dw2_asm_output_data (1, sig[i], i == 0 ? "%s" : NULL, name);
}
/* Output the DIE and its attributes. Called recursively to generate
@@ -10573,7 +10611,7 @@ output_die (dw_die_ref die)
for (i = 0; i < 8; i++)
dw2_asm_output_data (1, a->dw_attr_val.v.val_data8[i],
- "%s", name);
+ i == 0 ? "%s" : NULL, name);
break;
}
--- include/dwarf2.h.jj 2009-09-29 15:10:46.000000000 +0200
+++ include/dwarf2.h 2009-10-15 08:37:42.000000000 +0200
@@ -858,6 +858,7 @@ enum dwarf_source_language
DW_LANG_ObjC_plus_plus = 0x0011,
DW_LANG_UPC = 0x0012,
DW_LANG_D = 0x0013,
+ /* DWARF 4. */
DW_LANG_Python = 0x0014,
DW_LANG_lo_user = 0x8000, /* Implementation-defined range start. */
Jakub
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH] -dA -gdwarf-4 fixes
2009-10-15 7:19 [PATCH] -dA -gdwarf-4 fixes Jakub Jelinek
@ 2009-10-15 16:27 ` Richard Henderson
2009-10-15 18:33 ` Cary Coutant
1 sibling, 0 replies; 3+ messages in thread
From: Richard Henderson @ 2009-10-15 16:27 UTC (permalink / raw)
To: Jakub Jelinek; +Cc: gcc-patches
On 10/15/2009 12:07 AM, Jakub Jelinek wrote:
> * dwarf2out.c (dwarf_tag_name): Handle DW_TAG_rvalue_reference_type
> and DW_TAG_template_alias.
> (dwarf_attr_name): Handle DW_AT_main_subprogram,
> DW_AT_data_bit_offset, DW_AT_const_expr, DW_AT_enum_class,
> DW_AT_linkage_name, DW_AT_GNU_guarded_by, DW_AT_GNU_pt_guarded_by,
> DW_AT_GNU_guarded, DW_AT_GNU_pt_guarded, DW_AT_GNU_locks_excluded,
> DW_AT_GNU_exclusive_locks_required, DW_AT_GNU_shared_locks_required
> and DW_AT_GNU_odr_signature.
> (dwarf_form_name): Handle DW_FORM_sec_offset, DW_FORM_exprloc,
> DW_FORM_flag_present and DW_FORM_ref_sig8.
> (output_signature): Only print name on the first byte.
> (output_die): Likewise for dw_val_class_data8.
>
> * include/dwarf2.h (DW_LANG_Python): Add comment that it is
> a DWARF 4 addition.
Ok.
r~
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH] -dA -gdwarf-4 fixes
2009-10-15 7:19 [PATCH] -dA -gdwarf-4 fixes Jakub Jelinek
2009-10-15 16:27 ` Richard Henderson
@ 2009-10-15 18:33 ` Cary Coutant
1 sibling, 0 replies; 3+ messages in thread
From: Cary Coutant @ 2009-10-15 18:33 UTC (permalink / raw)
To: Jakub Jelinek; +Cc: gcc-patches
> This patch fixes a bunch of issues I've noticed while looking at
> -gdwarf-4 -dA output.
> We certainly don't want to see DW_TAG_<unknown>, DW_AT_<unknown> or
> DW_FORM_<unknown> in the output, that's not very readable.
Thanks! I'd been meaning to fix that myself. Looks like you found a
few more missing names than I had, though. The thread annotations
attributes aren't used except on that branch, and I think they've been
added to dwarf_attr_name there.
> Also, when printing 8 byte signatures, it is printed one byte on
> a line, like:
> ...
> which is IMHO very unreadable, on the first sight that reads like
> the variable has 8 type attributes. This patch changes that to:
> .uleb128 0x8 # (DIE (0x66) DW_TAG_variable)
> .ascii "t\0" # DW_AT_name
> .byte 0x1 # DW_AT_decl_file (a.c)
> .byte 0x3 # DW_AT_decl_line
> .byte 0x18 # DW_AT_type
> .byte 0x5c
> .byte 0x9f
> ...
That does look better.
-cary
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2009-10-15 18:11 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2009-10-15 7:19 [PATCH] -dA -gdwarf-4 fixes Jakub Jelinek
2009-10-15 16:27 ` Richard Henderson
2009-10-15 18:33 ` Cary Coutant
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).