[Lldb-commits] [lldb] de8793b - [lldb/DWARF] Add support for type units in dwp files

Pavel Labath via lldb-commits lldb-commits at lists.llvm.org
Tue Feb 25 01:05:37 PST 2020


Yes, the order of these is unfortunately nondeterministic. I've changed
the test expectation in eefbff00.

On 25/02/2020 01:22, Jonas Devlieghere wrote:
> I don't think it's this particular change that caused it, but every so
> often this test fails for me locally. 
> 
> Command Output (stderr):
> --
> /Users/jonas/llvm/llvm-project/lldb/test/Shell/SymbolFile/DWARF/dwp-debug-types.s:24:17:
> error: SYMBOLS-NEXT: is not on the line after the previous match
> # SYMBOLS-NEXT: 3fffffff/TYPE/00000018 "ENUM0"
>                 ^
> <stdin>:109:1: note: 'next' match was here
> 3fffffff/TYPE/00000018 "ENUM0"
> ^
> <stdin>:105:7: note: previous match ended here
> Types:
>       ^
> <stdin>:106:1: note: non-matching line after previous match is here
> 3fffffff/TYPE/0000002d "int"
> ^
> --
> 
> From the output it looks like "int" gets printed before "ENUM0"? 
> 
> 
> On Fri, Feb 21, 2020 at 7:01 AM Pavel Labath via lldb-commits
> <lldb-commits at lists.llvm.org <mailto:lldb-commits at lists.llvm.org>> wrote:
> 
> 
>     Author: Pavel Labath
>     Date: 2020-02-21T16:01:17+01:00
>     New Revision: de8793b9184ece0d24f46bc2d86711092848f938
> 
>     URL:
>     https://github.com/llvm/llvm-project/commit/de8793b9184ece0d24f46bc2d86711092848f938
>     DIFF:
>     https://github.com/llvm/llvm-project/commit/de8793b9184ece0d24f46bc2d86711092848f938.diff
> 
>     LOG: [lldb/DWARF] Add support for type units in dwp files
> 
>     all that was needed was to teach lldb's DWARF context about the
>     debug_tu_index section.
> 
>     Added:
>         lldb/test/Shell/SymbolFile/DWARF/dwp-debug-types.s
> 
>     Modified:
>         lldb/source/Plugins/SymbolFile/DWARF/DWARFContext.cpp
>         lldb/source/Plugins/SymbolFile/DWARF/DWARFContext.h
> 
>     Removed:
> 
> 
> 
>     ################################################################################
>     diff  --git a/lldb/source/Plugins/SymbolFile/DWARF/DWARFContext.cpp
>     b/lldb/source/Plugins/SymbolFile/DWARF/DWARFContext.cpp
>     index 79601e3bad0d..37e28a09f3c4 100644
>     --- a/lldb/source/Plugins/SymbolFile/DWARF/DWARFContext.cpp
>     +++ b/lldb/source/Plugins/SymbolFile/DWARF/DWARFContext.cpp
>     @@ -45,6 +45,11 @@ const DWARFDataExtractor
>     &DWARFContext::getOrLoadCuIndexData() {
>                                m_data_debug_cu_index);
>      }
> 
>     +const DWARFDataExtractor &DWARFContext::getOrLoadTuIndexData() {
>     +  return LoadOrGetSection(llvm::None, eSectionTypeDWARFDebugTuIndex,
>     +                          m_data_debug_tu_index);
>     +}
>     +
>      const DWARFDataExtractor &DWARFContext::getOrLoadAbbrevData() {
>        return LoadOrGetSection(eSectionTypeDWARFDebugAbbrev,
>                                eSectionTypeDWARFDebugAbbrevDwo,
>     m_data_debug_abbrev);
>     @@ -134,6 +139,7 @@ llvm::DWARFContext &DWARFContext::GetAsLLVM() {
> 
>          AddSection("debug_line_str", getOrLoadLineStrData());
>          AddSection("debug_cu_index", getOrLoadCuIndexData());
>     +    AddSection("debug_tu_index", getOrLoadTuIndexData());
> 
>          m_llvm_context = llvm::DWARFContext::create(section_map,
>     addr_size);
>        }
> 
>     diff  --git a/lldb/source/Plugins/SymbolFile/DWARF/DWARFContext.h
>     b/lldb/source/Plugins/SymbolFile/DWARF/DWARFContext.h
>     index 8de5e9c8a5fb..92161a21d167 100644
>     --- a/lldb/source/Plugins/SymbolFile/DWARF/DWARFContext.h
>     +++ b/lldb/source/Plugins/SymbolFile/DWARF/DWARFContext.h
>     @@ -42,6 +42,7 @@ class DWARFContext {
>        SectionData m_data_debug_rnglists;
>        SectionData m_data_debug_str;
>        SectionData m_data_debug_str_offsets;
>     +  SectionData m_data_debug_tu_index;
>        SectionData m_data_debug_types;
> 
>        const DWARFDataExtractor &
>     @@ -50,6 +51,7 @@ class DWARFContext {
>                         SectionData &data);
> 
>        const DWARFDataExtractor &getOrLoadCuIndexData();
>     +  const DWARFDataExtractor &getOrLoadTuIndexData();
> 
>      public:
>        explicit DWARFContext(SectionList *main_section_list,
> 
>     diff  --git a/lldb/test/Shell/SymbolFile/DWARF/dwp-debug-types.s
>     b/lldb/test/Shell/SymbolFile/DWARF/dwp-debug-types.s
>     new file mode 100644
>     index 000000000000..fd009381b452
>     --- /dev/null
>     +++ b/lldb/test/Shell/SymbolFile/DWARF/dwp-debug-types.s
>     @@ -0,0 +1,211 @@
>     +# REQUIRES: x86
>     +
>     +# RUN: llvm-mc --filetype=obj --triple x86_64-pc-linux %s -o %t
>     --defsym MAIN=0
>     +# RUN: llvm-mc --filetype=obj --triple x86_64-pc-linux %s -o %t.dwp
>     --defsym DWP=0
>     +# RUN: %lldb %t -o "type lookup ENUM0" -o "target variable A" -b |
>     FileCheck %s
>     +
>     +# CHECK-LABEL: type lookup ENUM0
>     +# CHECK-NEXT: enum ENUM0 {
>     +# CHECK-NEXT:   case0
>     +# CHECK-NEXT: }
>     +
>     +# CHECK-LABEL: target variable A
>     +# CHECK: (ENUM0) A = case0
>     +# CHECK: (ENUM1) A = case0
>     +
>     +.ifdef MAIN
>     +        .section        .debug_abbrev,"", at progbits
>     +        .byte   1                       # Abbreviation Code
>     +        .byte   17                      # DW_TAG_compile_unit
>     +        .byte   0                       # DW_CHILDREN_no
>     +        .ascii  "\260B"                 # DW_AT_GNU_dwo_name
>     +        .byte   8                       # DW_FORM_string
>     +        .ascii  "\261B"                 # DW_AT_GNU_dwo_id
>     +        .byte   7                       # DW_FORM_data8
>     +        .ascii  "\263B"                 # DW_AT_GNU_addr_base
>     +        .byte   23                      # DW_FORM_sec_offset
>     +        .byte   0                       # EOM(1)
>     +        .byte   0                       # EOM(2)
>     +        .byte   0                       # EOM(3)
>     +
>     +.irpc I,01
>     +        .data
>     +A\I:
>     +        .long 0
>     +
>     +        .section        .debug_info,"", at progbits
>     +.Lcu_begin\I:
>     +        .long   .Ldebug_info_end\I-.Ldebug_info_start\I # Length of
>     Unit
>     +.Ldebug_info_start\I:
>     +        .short  4                       # DWARF version number
>     +        .long   .debug_abbrev           # Offset Into Abbrev. Section
>     +        .byte   8                       # Address Size (in bytes)
>     +        .byte   1                       # Abbrev [1]
>     DW_TAG_compile_unit
>     +        .asciz  "A.dwo"                 # DW_AT_GNU_dwo_name
>     +        .quad   \I                      # DW_AT_GNU_dwo_id
>     +        .long   .debug_addr             # DW_AT_GNU_addr_base
>     +.Ldebug_info_end\I:
>     +
>     +        .section        .debug_addr,"", at progbits
>     +        .quad   A\I
>     +
>     +.endr
>     +.endif
>     +
>     +.ifdef DWP
>     +.irpc I,01
>     +        .section        .debug_abbrev.dwo,"e", at progbits
>     +.Labbrev\I:
>     +        .byte   \I*10+1                 # Abbreviation Code
>     +        .byte   17                      # DW_TAG_compile_unit
>     +        .byte   1                       # DW_CHILDREN_yes
>     +        .byte   37                      # DW_AT_producer
>     +        .byte   8                       # DW_FORM_string
>     +        .byte   3                       # DW_AT_name
>     +        .byte   8                       # DW_FORM_string
>     +        .byte   0                       # EOM(1)
>     +        .byte   0                       # EOM(2)
>     +        .byte   \I*10+2                 # Abbreviation Code
>     +        .byte   52                      # DW_TAG_variable
>     +        .byte   0                       # DW_CHILDREN_no
>     +        .byte   3                       # DW_AT_name
>     +        .byte   8                       # DW_FORM_string
>     +        .byte   73                      # DW_AT_type
>     +        .byte   19                      # DW_FORM_ref4
>     +        .byte   2                       # DW_AT_location
>     +        .byte   24                      # DW_FORM_exprloc
>     +        .byte   0                       # EOM(1)
>     +        .byte   0                       # EOM(2)
>     +        .byte   \I*10+3                 # Abbreviation Code
>     +        .byte   4                       # DW_TAG_enumeration_type
>     +        .byte   0                       # DW_CHILDREN_no
>     +        .byte   60                      # DW_AT_declaration
>     +        .byte   25                      # DW_FORM_flag_present
>     +        .byte   105                     # DW_AT_signature
>     +        .byte   32                      # DW_FORM_ref_sig8
>     +        .byte   0                       # EOM(1)
>     +        .byte   0                       # EOM(2)
>     +        .byte   \I*10+4                 # Abbreviation Code
>     +        .byte   4                       # DW_TAG_enumeration_type
>     +        .byte   1                       # DW_CHILDREN_yes
>     +        .byte   73                      # DW_AT_type
>     +        .byte   19                      # DW_FORM_ref4
>     +        .byte   3                       # DW_AT_name
>     +        .byte   8                       # DW_FORM_string
>     +        .byte   11                      # DW_AT_byte_size
>     +        .byte   11                      # DW_FORM_data1
>     +        .byte   0                       # EOM(1)
>     +        .byte   0                       # EOM(2)
>     +        .byte   \I*10+5                 # Abbreviation Code
>     +        .byte   40                      # DW_TAG_enumerator
>     +        .byte   0                       # DW_CHILDREN_no
>     +        .byte   3                       # DW_AT_name
>     +        .byte   8                       # DW_FORM_string
>     +        .byte   28                      # DW_AT_const_value
>     +        .byte   15                      # DW_FORM_udata
>     +        .byte   0                       # EOM(1)
>     +        .byte   0                       # EOM(2)
>     +        .byte   \I*10+6                 # Abbreviation Code
>     +        .byte   36                      # DW_TAG_base_type
>     +        .byte   0                       # DW_CHILDREN_no
>     +        .byte   3                       # DW_AT_name
>     +        .byte   8                       # DW_FORM_string
>     +        .byte   62                      # DW_AT_encoding
>     +        .byte   11                      # DW_FORM_data1
>     +        .byte   11                      # DW_AT_byte_size
>     +        .byte   11                      # DW_FORM_data1
>     +        .byte   0                       # EOM(1)
>     +        .byte   0                       # EOM(2)
>     +        .byte   \I*10+7                 # Abbreviation Code
>     +        .byte   65                      # DW_TAG_type_unit
>     +        .byte   1                       # DW_CHILDREN_yes
>     +        .byte   0                       # EOM(1)
>     +        .byte   0                       # EOM(2)
>     +        .byte   0                       # EOM(3)
>     +.Labbrev_end\I:
>     +
>     +        .section        .debug_info.dwo,"e", at progbits
>     +.Lcu_begin\I:
>     +        .long   .Ldebug_info_end\I-.Ldebug_info_start\I # Length of
>     Unit
>     +.Ldebug_info_start\I:
>     +        .short  4                       # DWARF version number
>     +        .long   0                       # Offset Into Abbrev. Section
>     +        .byte   8                       # Address Size (in bytes)
>     +        .byte   \I*10+1                 # Abbrev DW_TAG_compile_unit
>     +        .asciz  "Hand-written DWARF"    # DW_AT_producer
>     +        .byte   '0'+\I, '.', 'c', 0     # DW_AT_name
>     +        .byte   \I*10+2                 # Abbrev DW_TAG_variable
>     +        .asciz  "A"                     # DW_AT_name
>     +        .long   .Lenum_ref\I-.Lcu_begin\I# DW_AT_type
>     +        .byte   2                       # DW_AT_location
>     +        .byte   0xfb                    # DW_OP_GNU_addr_index
>     +        .byte   \I
>     +
>     +.Lenum_ref\I:
>     +        .byte   \I*10+3                 # Abbrev
>     DW_TAG_enumeration_type
>     +        .quad   \I                      # DW_AT_signature
>     +
>     +        .byte   0                       # End Of Children Mark
>     +.Ldebug_info_end\I:
>     +
>     +        .section        .debug_types.dwo,"e", at progbits
>     +.Ltu_begin\I:
>     +        .long   .Ltype_info_end\I-.Ltype_info_start\I # Length of Unit
>     +.Ltype_info_start\I:
>     +        .short  4                       # DWARF version number
>     +        .long   0                       # Offset Into Abbrev. Section
>     +        .byte   8                       # Address Size (in bytes)
>     +        .quad   \I                      # Type Signature
>     +        .long   .Lenum\I-.Ltu_begin\I   # Type DIE Offset
>     +        .byte   \I*10+7                 # Abbrev DW_TAG_type_unit
>     +
>     +.Lenum\I:
>     +        .byte   \I*10+4                 # Abbrev
>     DW_TAG_enumeration_type
>     +        .long   .Lint\I-.Ltu_begin\I    # DW_AT_type
>     +        .byte   'E', 'N', 'U', 'M', '0'+\I, 0# DW_AT_name
>     +        .byte   4                       # DW_AT_byte_size
>     +
>     +        .byte   \I*10+5                 # Abbrev DW_TAG_enumerator
>     +        .asciz  "case0"                 # DW_AT_name
>     +        .byte   0                       # DW_AT_const_value
>     +        .byte   0                       # End Of Children Mark
>     +
>     +.Lint\I:
>     +        .byte   \I*10+6                 # Abbrev DW_TAG_base_type
>     +        .asciz  "int"                   # DW_AT_name
>     +        .byte   7                       # DW_AT_encoding
>     +        .byte   4                       # DW_AT_byte_size
>     +
>     +        .byte   0                       # End Of Children Mark
>     +.Ltype_info_end\I:
>     +.endr
>     +
>     +.macro index dw_sect, section, contrib, contrib_end
>     +        .short  2                       # DWARF version number
>     +        .short  0                       # Reserved
>     +        .long   2                       # Section count
>     +        .long   2                       # Unit count
>     +        .long   4                       # Slot count
>     +
>     +        .quad   0, 1, 0, 0              # Hash table
>     +        .long   1, 2, 0, 0              # Index table
>     +
>     +        .long   \dw_sect
>     +        .long   3                       # DW_SECT_ABBREV
>     +
>     +.irpc I,01
>     +        .long   \contrib\I-\section
>     +        .long    .Labbrev\I-.debug_abbrev.dwo
>     +.endr
>     +.irpc I,01
>     +        .long   \contrib_end\I-\contrib\I
>     +        .long   .Labbrev_end\I-.Labbrev\I
>     +.endr
>     +.endmacro
>     +
>     +        .section        .debug_cu_index,"e", at progbits
>     +        index 1, .debug_info.dwo, .Lcu_begin, .Ldebug_info_end
>     +
>     +        .section        .debug_tu_index,"e", at progbits
>     +        index 2, .debug_types.dwo, .Ltu_begin, .Ltype_info_end
>     +.endif
> 
> 
> 
>     _______________________________________________
>     lldb-commits mailing list
>     lldb-commits at lists.llvm.org <mailto:lldb-commits at lists.llvm.org>
>     https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits
> 



More information about the lldb-commits mailing list