[Dwarf-Discuss] Is this legal DWARF, and if so, what does it mean?
John DelSignore
John.DelSignore@roguewave.com
Mon Sep 15 19:32:57 GMT 2014
Hi Michael,
Thanks for the reply. In-line below...
Michael Eager wrote:
> On 09/15/14 10:32, John DelSignore wrote:
>> Hi,
>>
>> TotalView has a customer that has C++ code that produces the
>> following DWARF with the Intel 12.1
>> compiler:
>
> ICC generates a lot of idiosyncratic DWARF.
I would not disagree with that statement!
>
>>
>> <0><1192a2>: Abbrev Number: 1 (DW_TAG_compile_unit)
>> DW_AT_comp_dir : ...SNIPPED...
>> DW_AT_language : 4 (C++)
>> DW_AT_name : ...SNIPPED...
>> DW_AT_producer : Intel(R) C++ Intel(R) 64 Compiler XE for
>> applications running on Intel(R)
>> 64, Version 12.1 Build 20110811
>> Fixes SameLinkageName MemberPointers
>>
>> DW_AT_stmt_list : 0x5d20
>> <1><119376>: Abbrev Number: 2 (DW_TAG_namespace)
>> DW_AT_name : std
>> ...SNIPPED...
>> <2><268209>: Abbrev Number: 37 (DW_TAG_lexical_block)
>> DW_AT_decl_line : 1301
>> DW_AT_decl_column : 79
>> DW_AT_decl_file : 1
>> DW_AT_low_pc : 0xb02a1
>> DW_AT_high_pc : 0xb02d4
>> <3><26821e>: Abbrev Number: 38 (DW_TAG_lexical_block)
>> DW_AT_decl_line : 1351
>> DW_AT_decl_column : 31
>> DW_AT_decl_file : 1
>> DW_AT_low_pc : 0xb03a7
>> DW_AT_high_pc : 0xb03f7
>> <2><268234>: Abbrev Number: 16 (DW_TAG_inlined_subroutine)
>> ...SNIPPED...
>>
>> Notice:
>>
>> 1. The lexical block at <268209> is at "std" namespace scope. What
>> does it mean to have a lexical
>> block at namespace scope? Note that that lexical block contains
>> /only/ another lexical block at
>> <26821e>; no subroutines or variables.
>
> Looks unnecessary to me. Do you have the source for this file?
Unfortunately, I don't. All I have is a shared library that the customer
sent us.
>
> I guess this might be generated if you had something like
>
> namespace std
> {
> {
> {
> /* whatever */
> }
> }
> }
>
> But my guess is that the original source did not look like this.
I omitted a bunch of DWARF from my original email, but the DWARF in
question did appear to be inside "namespace std {}", because the names
of the surrounding DIEs were consistent with variables/functions one
would expect to find in "std::", but I don't know that for certain.
Cheers, John D.
>
>> 2. The lexical block at <26821e> has an address range that is not
>> nested inside its containing
>> lexical block's address range. Is that legal, and if so, what
>> does that mean? Note that that
>> lexical block contains nothing else; no subroutines, blocks, or
>> variables.
>
> Maybe legal. The DWARF tree indicates the static nesting. If a
> compiler generated
> code/data for a nested scope at a different location from the
> containing scope, then
> maybe it might describe the lexical block with a different address range.
>
> Since the lexical block is empty, I'm not sure that this really has
> any meaning.
>
> ICC does a significant amount of code movement during optimization. I
> think
> that it doesn't clean up all of the DWARF when it moves code and is
> accidentally
> leaving a now-empty lexical block behind.
>
More information about the Dwarf-discuss
mailing list