[GOOGLE] Add discriminator for inlined callsite

Dehao Chen dehao@google.com
Mon Aug 19 18:45:00 GMT 2013


Patch updated. BTW, do you think this patch should actually go into trunk?

Thanks,
Dehao

Index: include/dwarf2.def
===================================================================
--- include/dwarf2.def (revision 201852)
+++ include/dwarf2.def (working copy)
@@ -390,6 +390,8 @@ DW_AT (DW_AT_GNU_ranges_base, 0x2132)
 DW_AT (DW_AT_GNU_addr_base, 0x2133)
 DW_AT (DW_AT_GNU_pubnames, 0x2134)
 DW_AT (DW_AT_GNU_pubtypes, 0x2135)
+/* Attribute for discriminator.  */
+DW_AT (DW_AT_GNU_discriminator, 0x2136)
 /* VMS extensions.  */
 DW_AT (DW_AT_VMS_rtnbeg_pd_address, 0x2201)
 /* GNAT extensions.  */
Index: gcc/dwarf2out.c
===================================================================
--- gcc/dwarf2out.c (revision 201852)
+++ gcc/dwarf2out.c (working copy)
@@ -18815,12 +18815,16 @@ gen_label_die (tree decl, dw_die_ref context_die)
 static inline void
 add_call_src_coords_attributes (tree stmt, dw_die_ref die)
 {
-  expanded_location s = expand_location (BLOCK_SOURCE_LOCATION (stmt));
+  location_t locus = BLOCK_SOURCE_LOCATION (stmt);
+  expanded_location s = expand_location (locus);

   if (dwarf_version >= 3 || !dwarf_strict)
     {
       add_AT_file (die, DW_AT_call_file, lookup_filename (s.file));
       add_AT_unsigned (die, DW_AT_call_line, s.line);
+      unsigned discr = get_discriminator_from_locus (locus);
+      if (discr != 0)
+ add_AT_unsigned (die, DW_AT_GNU_discriminator, discr);
     }
 }


On Mon, Aug 19, 2013 at 9:31 AM, Cary Coutant <ccoutant@google.com> wrote:
>> -  expanded_location s = expand_location (BLOCK_SOURCE_LOCATION (stmt));
>> +  location_t locus = BLOCK_SOURCE_LOCATION (stmt);
>> +  expanded_location s = expand_location (locus);
>>
>>    if (dwarf_version >= 3 || !dwarf_strict)
>>      {
>>        add_AT_file (die, DW_AT_call_file, lookup_filename (s.file));
>>        add_AT_unsigned (die, DW_AT_call_line, s.line);
>> +      unsigned discr = get_discriminator_from_locus (locus);
>> +      if (discr != 0)
>> + add_AT_unsigned (die, DW_AT_discr, discr);
>
> DW_AT_discr is used to identify the "discriminant" for variant
> records; we should not reuse it for the discriminator, even if it's
> the case that the other meaning could never apply to a
> DW_TAG_inlined_subroutine. You should instead add a new
> DW_AT_GNU_discriminator to include/dwarf2.def and use that. 0x2136
> looks like the next value in the GNU vendor range. Note that
> dwarf2.def lives in both GCC and binutils repos, so once you have
> approval to commit to the GCC repo, you'll need to commit the same
> change to the binutils repo as well.
>
> -cary



More information about the Gcc-patches mailing list