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

Reply via email to