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.
<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?
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.
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.
--
Michael Eager ea...@eagercon.com
1960 Park Blvd., Palo Alto, CA 94306 650-325-8077
_______________________________________________
Dwarf-Discuss mailing list
Dwarf-Discuss@lists.dwarfstd.org
http://lists.dwarfstd.org/listinfo.cgi/dwarf-discuss-dwarfstd.org