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. > _______________________________________________ Dwarf-Discuss mailing list Dwarf-Discuss@lists.dwarfstd.org http://lists.dwarfstd.org/listinfo.cgi/dwarf-discuss-dwarfstd.org