Skip to content
  1. Nov 16, 2013
  2. Nov 15, 2013
  3. Nov 02, 2013
  4. Oct 31, 2013
    • Manman Ren's avatar
      Debug Info: remove duplication of DIEs when a DIE can be shared across CUs. · 4dbdc902
      Manman Ren authored
      We add a map in DwarfDebug to map MDNodes that are shareable across CUs to the
      corresponding DIEs: MDTypeNodeToDieMap. These DIEs can be shared across CUs,
      that is why we keep the maps in DwarfDebug instead of CompileUnit.
      
      We make the assumption that if a DIE is not added to an owner yet, we assume
      it belongs to the current CU. Since DIEs for the type system are added to
      their owners immediately after creation, and other DIEs belong to the current
      CU, the assumption should be true.
      
      A testing case is added to show that we only create a single DIE for a type
      MDNode and we use ref_addr to refer to the type DIE.
      
      We also add a testing case to show ref_addr relocations for non-darwin
      platforms.
      
      llvm-svn: 193779
      4dbdc902
  5. Oct 30, 2013
  6. Oct 29, 2013
    • Manman Ren's avatar
      Debug Info: support for DW_FORM_ref_addr. · ce20d460
      Manman Ren authored
      To support ref_addr, we calculate the section offset of a DIE (i.e. offset
      of a DIE from beginning of the debug info section). The Offset field in DIE
      is currently CU-relative. To calculate the section offset, we add a
      DebugInfoOffset field in CompileUnit to store the offset of a CU from beginning
      of the debug info section. We set the value in DwarfUnits::computeSizeAndOffset
      for each CompileUnit.
      
      A helper function DIE::getCompileUnit is added to return the CU DIE that
      the input DIE belongs to. We also add a map CUDieMap in DwarfDebug to help
      finding the CU for a given CU DIE.
      
      For a cross-referenced DIE, we first find the CU DIE it belongs to with
      getCompileUnit, then we use CUDieMap to get the corresponding CU for the CU DIE.
      Adding the section offset of the CU with the CU-relative offset of a DIE gives
      us the seciton offset of the DIE.
      
      We correctly emit ref_addr with relocation using EmitLabelPlusOffset when
      doesDwarfUseRelocationsAcrossSections is true.
      
      This commit handles the emission of DW_FORM_ref_addr when we have an attribute
      with FORM_ref_addr. A follow-on patch will start using ref_addr when adding a
      DIEEntry. This commit will be tested and verified in the follow-on patch.
      
      Reviewed off-list by Eric, Thanks.
      
      llvm-svn: 193658
      ce20d460
    • Manman Ren's avatar
      Debug Info: use createAndAddDIE to wrap around "new DIE" in DwarfDebug. · 4a841a86
      Manman Ren authored
      This commit ensures DIEs are constructed within a compile unit and
      immediately added to their parents.
      
      Reviewed off-list by Eric.
      
      llvm-svn: 193568
      4a841a86
  7. Oct 25, 2013
  8. Oct 24, 2013
  9. Oct 22, 2013
    • Manman Ren's avatar
      Debug Info: code clean up. · 642a0acc
      Manman Ren authored
      Remove unnecessary creation of LexicalScope in collectDeadVariables.
      The created LexicialScope was only used to get isAbstractScope, which
      should be false from the creation:
      "new LexicalScope(NULL, DIDescriptor(SP), NULL, false);".
      
      We can also remove a DenseMap that holds the created LexicalScopes.
      
      llvm-svn: 193196
      642a0acc
    • Eric Christopher's avatar
      Formatting/whitespace. · c798d8ad
      Eric Christopher authored
      llvm-svn: 193135
      c798d8ad
  10. Oct 21, 2013
  11. Oct 18, 2013
  12. Oct 17, 2013
    • Eric Christopher's avatar
      According to the dwarf standard pubnames and pubtypes for languages · 2c8b7907
      Eric Christopher authored
      like C++ should be the fully qualified names for the type.
      
      Add a routine that does a language specific context walk to build
      up the qualified name and use it when we add types/names to the
      tables. Expand the gnu pubnames testcase as it's the most complex
      to make sure that qualified types are also being added.
      
      llvm-svn: 192865
      2c8b7907
  13. Oct 16, 2013
    • Eric Christopher's avatar
      Fix a pair of bugs in the emission of pubname tables: · d2b497b5
      Eric Christopher authored
      1) Make sure we emit static member variables by checking
      at the end of createGlobalVariableDIE rather than piecemeal
      in the function.
      (As a note, createGlobalVariableDIE needs rewriting.)
      
      2) Make sure we use the definition rather than declaration DIE
      for two things: a) determining linkage for gnu pubnames, and b)
      as the address of the DIE for global variables.
      (As a note, createGlobalVariableDIE really needs rewriting.)
      
      Adjust the testcase to make sure we're checking the correct DIEs.
      
      llvm-svn: 192761
      d2b497b5
    • Eric Christopher's avatar
      Make sure we're not attempting to construct a subprogram DIE · a6c38a32
      Eric Christopher authored
      twice and just look up the value. Fix the one case where
      we were trying to create a subprogram DIE and we should already
      have had one. Reflow formatting in collectDeadVariables while fixing.
      
      llvm-svn: 192749
      a6c38a32
  14. Oct 15, 2013
  15. Oct 12, 2013
  16. Oct 10, 2013
  17. Oct 08, 2013
  18. Oct 05, 2013
    • Rafael Espindola's avatar
      Remove some really nasty uses of hasRawTextSupport. · ac4ad25a
      Rafael Espindola authored
      When MC was first added, targets could use hasRawTextSupport to keep features
      working before they were added to the MC interface.
      
      The design goal of MC is to provide an uniform api for printing assembly and
      object files. Short of relaxations and other corner cases, a object file is
      just another representation of the assembly.
      
      It was never the intention that targets would keep doing things like
      
      if (hasRawTextSupport())
        Set flags in one way.
      else
        Set flags in another way.
      
      When they do that they create two code paths and the object file is no longer
      just another representation of the assembly. This also then requires testing
      with llc -filetype=obj, which is extremelly brittle.
      
      This patch removes some of these hacks by replacing them with smaller ones.
      The ARM flag setting is trivial, so I just moved it to the constructor. For
      Mips, the patch adds two temporary hack directives that allow the assembly
      to represent the same things as the object file was already able to.
      
      The hope is that the mips developers will replace the hack directives with
      the same ones that gas uses and drop the -print-hack-directives flag.
      
      I will also try to implement a target streamer interface, so that we can
      move this out of the common code.
      
      In summary, for any new work, two rules of the thumb are
        * Don't use "llc -filetype=obj" in tests.
        * Don't add calls to hasRawTextSupport.
      
      llvm-svn: 192035
      ac4ad25a
    • Manman Ren's avatar
      Debug Info: In DIBuilder, the derived-from field of a DW_TAG_pointer_type · b3388601
      Manman Ren authored
      is updated to use DITypeRef.
      
      Move isUnsignedDIType and getOriginalTypeSize from DebugInfo.h to be static
      helper functions in DwarfCompileUnit. We already have a static helper function
      "isTypeSigned" in DwarfCompileUnit, and a pointer to DwarfDebug is added to
      resolve the derived-from field. All three functions need to go across link
      for derived-from fields, so we need to get hold of a type identifier map.
      
      A pointer to DwarfDebug is also added to DbgVariable in order to resolve the
      derived-from field.
      
      Debug info verifier is updated to check a derived-from field is a TypeRef.
      Verifier will not go across link for derived-from fields, in debug info finder,
      we go across the link to add derived-from fields to types.
      
      Function getDICompositeType is only used by dragonegg and since dragonegg does
      not generate identifier for types, we use an empty map to resolve the
      derived-from field.
      
      When printing a derived-from field, we use DITypeRef::getName to either return
      the type identifier or getName of the DIType.
      
      A paired commit at clang is required due to changes to DIBuilder.
      
      llvm-svn: 192018
      b3388601
  19. Oct 04, 2013
  20. Oct 03, 2013
    • David Blaikie's avatar
      DebugInfo: Avoid redundantly adding child DIEs to parents. · 811bfe63
      David Blaikie authored
      DIE::addChild had a shortcircuit that silently no-op'd when a child was
      readded to the same parent. This hid some quirky/redundant code in
      DwarfDebug/CompileUnit. By removing that functionality and replacing it
      with an assert I was able to find and cleanup those cases, mostly
      centering around adding members to types in various circumstances.
      
      1) The original oddity I noticed while working on type units (which
      actually was helping me in the short term, by accident) was the
      addToContextOwner call in constructTypeDIE. This call was completely
      bogus (why was it only done for non-virtual types? what relevance does
      that have at all) and redundant with the more uniform addToContextOwner
      made in getOrCreateTypeDIE.
      
      2) If a member function definition was visited (createSubprogramDIE), it
      would attempt to build the member function declaration. The declaration
      DIE would then be added to its context, but in building the context (the
      type for which this function is a member) the members of the type would
      be added to the type automatically, so by the time the context was
      constructed, the member function was already associated with it.
      
      3) The same as (2) but without the member function being constructed
      first. Whenever a type was constructed, the members would be created and
      member functions would be created by getOrCreateSubprogramDIE - this
      would lead to the subprogram being added to the (incomplete) type
      already, then the general member-construction code would add it again.
      
      llvm-svn: 191928
      811bfe63
    • Eric Christopher's avatar
      Make sure we emit a section for pubnames even if that section is · c948b9df
      Eric Christopher authored
      going to be empty. This is particularly important for the gnu
      pubnames case since we're emitting a relocation to the section.
      
      llvm-svn: 191915
      c948b9df
    • Eric Christopher's avatar
      Fix cut and paste typo. · f976c77e
      Eric Christopher authored
      llvm-svn: 191914
      f976c77e
    • Alexey Samsonov's avatar
      Remove wild .debug_aranges entries generated from unimportant labels · 4436bf03
      Alexey Samsonov authored
      r191052 added emitting .debug_aranges to Clang, but this
      functionality is broken: it uses all MC labels added in DWARF Asm
      printer, including the labels for build relocations between
      different DWARF sections, like .Lsection_line or .Ldebug_loc0.
      
      As a result, if any DIE .debug_info would contain "DW_AT_location=0x123"
      attribute, .debug_aranges would also contain a range starting from 0x123,
      breaking tools that rely on this section.
      
      This patch fixes this by using only MC labels that corresponds to the
      addresses in the user program.
      
      llvm-svn: 191884
      4436bf03
  21. Oct 02, 2013
    • Manman Ren's avatar
      Debug Info: In DIBuilder, the derived-from field of a DW_TAG_pointer_type · 9a0a6703
      Manman Ren authored
      is updated to use DITypeRef.
      
      Move isUnsignedDIType and getOriginalTypeSize from DebugInfo.h to be static
      helper functions in DwarfCompileUnit. We already have a static helper function
      "isTypeSigned" in DwarfCompileUnit, and a pointer to DwarfDebug is added to
      resolve the derived-from field. All three functions need to go across link
      for derived-from fields, so we need to get hold of a type identifier map.
      
      A pointer to DwarfDebug is also added to DbgVariable in order to resolve the
      derived-from field.
      
      Debug info verifier is updated to check a derived-from field is a TypeRef.
      Verifier will not go across link for derived-from fields, in debug info finder,
      we go across the link to add derived-from fields to types.
      
      Function getDICompositeType is only used by dragonegg and since dragonegg does
      not generate identifier for types, we use an empty map to resolve the
      derived-from field.
      
      When printing a derived-from field, we use DITypeRef::getName to either return
      the type identifier or getName of the DIType.
      
      A paired commit at clang is required due to changes to DIBuilder.
      
      llvm-svn: 191800
      9a0a6703
  22. Oct 01, 2013
    • Manman Ren's avatar
      Debug Info: remove duplication of DIEs when a DIE is part of the type system · 8990d7ee
      Manman Ren authored
      and it is shared across CUs.
      
      We add a few maps in DwarfDebug to map MDNodes for the type system to the
      corresponding DIEs: MDTypeNodeToDieMap, MDSPNodeToDieMap, and
      MDStaticMemberNodeToDieMap. These DIEs can be shared across CUs, that is why we
      keep the maps in DwarfDebug instead of CompileUnit.
      
      Sometimes, when we try to add an attribute to a DIE, the DIE is not yet added
      to its owner yet, so we don't know whether we should use ref_addr or ref4.
      We create a worklist that will be processed during finalization to add
      attributes with the correct form (ref_addr or ref4).
      
      We add addDIEEntry to DwarfDebug to be a wrapper around DIE->addValue. It checks
      whether we know the correct form, if not, we update the worklist
      (DIEEntryWorklist).
      
      A testing case is added to show that we only create a single DIE for a type
      MDNode and we use ref_addr to refer to the type DIE.
      
      llvm-svn: 191792
      8990d7ee
    • Eric Christopher's avatar
      Add the DW_AT_GNU_ranges_base attribute if we've emitted any ranges · 9a08f9e5
      Eric Christopher authored
      into the debug_ranges section.
      
      llvm-svn: 191721
      9a08f9e5
Loading