*ping* Re: PR37132 – RFC patch for generation of DWARF symbol for Fortran's namelists (DW_TAG_namelist)

Tobias Burnus burnus@net-b.de
Wed Dec 4 06:37:00 GMT 2013


On November 28, 2013, Tobias Burnus wrote:
> A slightly early *ping*
>
> Tobias Burnus wrote:
>> attached is an updated version of the patch.
>>
>> Change:
>>
>> Tobias Burnus wrote:
>>> But for "USE mod_name, only: nml", one is supposed to generate a 
>>> DW_TAG_imported_declaration. And there I am stuck. For normal 
>>> variables, the DW_TAG_imported_declaration refers to a 
>>> DW_TAG_variable die. Analogously, for a namelist one would have to 
>>> refer to a DW_TAG_namelist die. But such DW_TAG_namelist comes with 
>>> a DW_TAG_namelist_item list. And for the latter, one needs to have 
>>> the die of all variables in the namelist. But with use-only the 
>>> symbols aren't use associate and no decl or die exists. (Failing 
>>> call tree with the patch: gfc_trans_use_stmts -> 
>>> dwarf2out_imported_module_or_decl_1 -> force_decl_die.)
>>
>> With the attached patch, one now generates DW_TAG_namelist with no 
>> DW_TAG_namelist_item and sets DW_AT_declaration.
>>
>> Thus, for (first file)
>>
>>   module mm
>>     integer :: ii
>>     real :: rr
>>     namelist /nml/ ii, rr
>>   end module mm
>>
>>
>> and (second file):
>>
>>   subroutine test
>>     use mm, only: nml
>>     write(*,nml)
>>   end subroutine test
>>
>>
>> One now generates (first file):
>>
>>  <1><1e>: Abbrev Number: 2 (DW_TAG_module)
>>     <1f>   DW_AT_name        : mm
>>     <22>   DW_AT_decl_file   : 1
>>     <23>   DW_AT_decl_line   : 1
>>     <24>   DW_AT_sibling     : <0x59>
>>  <2><28>: Abbrev Number: 3 (DW_TAG_variable)
>>     <29>   DW_AT_name        : ii
>>     <2c>   DW_AT_decl_file   : 1
>>     <2d>   DW_AT_decl_line   : 2
>>     <2e>   DW_AT_linkage_name: (indirect string, offset: 0x15): 
>> __mm_MOD_ii
>>     <32>   DW_AT_type        : <0x59>
>>     <36>   DW_AT_external    : 1
>>     <36>   DW_AT_location    : 9 byte block: 3 0 0 0 0 0 0 0 0  
>> (DW_OP_addr: 0)
>>  <2><40>: Abbrev Number: 3 (DW_TAG_variable)
>>     <41>   DW_AT_name        : rr
>>     <44>   DW_AT_decl_file   : 1
>>     <45>   DW_AT_decl_line   : 2
>>     <46>   DW_AT_linkage_name: (indirect string, offset: 0x9): 
>> __mm_MOD_rr
>>     <4a>   DW_AT_type        : <0x60>
>>     <4e>   DW_AT_external    : 1
>>     <4e>   DW_AT_location    : 9 byte block: 3 4 0 0 0 0 0 0 0  
>> (DW_OP_addr: 4)
>>  <2><58>: Abbrev Number: 0
>>  <1><59>: Abbrev Number: 4 (DW_TAG_base_type)
>>     <5a>   DW_AT_byte_size   : 4
>>     <5b>   DW_AT_encoding    : 5        (signed)
>>     <5c>   DW_AT_name        : (indirect string, offset: 0x29): 
>> integer(kind=4)
>>  <1><60>: Abbrev Number: 4 (DW_TAG_base_type)
>>     <61>   DW_AT_byte_size   : 4
>>     <62>   DW_AT_encoding    : 4        (float)
>>     <63>   DW_AT_name        : (indirect string, offset: 0x12c): 
>> real(kind=4)
>>  <1><67>: Abbrev Number: 5 (DW_TAG_namelist)
>>     <68>   DW_AT_name        : nml
>>  <2><6c>: Abbrev Number: 6 (DW_TAG_namelist_item)
>>     <6d>   DW_AT_namelist_items: <0x28>
>>  <2><71>: Abbrev Number: 6 (DW_TAG_namelist_item)
>>     <72>   DW_AT_namelist_items: <0x40>
>>
>> Second file:
>>
>>   <2><4f>: Abbrev Number: 3 (DW_TAG_imported_declaration)
>>     <50>   DW_AT_decl_file   : 1
>>     <51>   DW_AT_decl_line   : 2
>>     <52>   DW_AT_import      : <0x70>   [Abbrev Number: 6 
>> (DW_TAG_namelist)]
>>  <2><56>: Abbrev Number: 4 (DW_TAG_lexical_block)
>>     <57>   DW_AT_low_pc      : 0xb
>>     <5f>   DW_AT_high_pc     : 0xb0
>>  <2><67>: Abbrev Number: 0
>>  <1><68>: Abbrev Number: 5 (DW_TAG_module)
>>     <69>   DW_AT_name        : mm
>>     <6c>   DW_AT_declaration : 1
>>     <6c>   DW_AT_sibling     : <0x76>
>>  <2><70>: Abbrev Number: 6 (DW_TAG_namelist)
>>     <71>   DW_AT_name        : nml
>>     <75>   DW_AT_declaration : 1
>>  <2><75>: Abbrev Number: 0
>>
>>
>> Does the dumps look okay? For the first file, DW_TAG_namelist doesn't 
>> come directly after DW_TAG_module but after its sibling 0x59; does 
>> one still see that "nml" belongs to that module? (On dwarf2out level, 
>> context die should point to the module tag, but I don't understand 
>> the readelf/eu-readelf output well enough to see whether that's also 
>> the case for the generated dwarf.)
>>
>> I assume that the compiler can see from the DWARF of the second file 
>> that "nml" comes from module "mm" and doesn't search the value 
>> elsewhere. (It is possible to have multiple namelist with the same 
>> name in different modules.)
>>
>>
>> For previous version, I did an all-language bootstrap + regtesting; 
>> for this one, I only build and tested Fortran. I will do a now a full 
>> all language bootstrap regtesting. Assuming that it is successful:
>> OK for the trunk?
>>
>> Tobias
>
>



More information about the Gcc-patches mailing list