[Lldb-commits] [lldb] a8c3d98 - [DebugInfo] Teach LLVM and LLDB about ptrauth in DWARF

Jonas Devlieghere via lldb-commits lldb-commits at lists.llvm.org
Wed Jul 27 11:49:05 PDT 2022


Author: Jonas Devlieghere
Date: 2022-07-27T11:48:35-07:00
New Revision: a8c3d9815e0443bacf5315536ad356e4acb184f2

URL: https://github.com/llvm/llvm-project/commit/a8c3d9815e0443bacf5315536ad356e4acb184f2
DIFF: https://github.com/llvm/llvm-project/commit/a8c3d9815e0443bacf5315536ad356e4acb184f2.diff

LOG: [DebugInfo] Teach LLVM and LLDB about ptrauth in DWARF

Teach libDebugInfo (llvm-dwarfdump) and lldb about DWARF tags and
attributes for pointer authentication. These values have been emitted by
Apple clang for several releases. Although upstream LLVM doesn't emit
these values yet, we hope to upstream that part sometime soon.

Differential revision: https://reviews.llvm.org/D130215

Added: 
    llvm/test/tools/llvm-dwarfdump/AArch64/ptrauth.s

Modified: 
    lldb/source/Plugins/SymbolFile/DWARF/DWARFDIE.cpp
    llvm/include/llvm/BinaryFormat/Dwarf.def
    llvm/lib/DebugInfo/DWARF/DWARFTypePrinter.cpp

Removed: 
    


################################################################################
diff  --git a/lldb/source/Plugins/SymbolFile/DWARF/DWARFDIE.cpp b/lldb/source/Plugins/SymbolFile/DWARF/DWARFDIE.cpp
index 06cdd877f7dcd..e1d0efa844c34 100644
--- a/lldb/source/Plugins/SymbolFile/DWARF/DWARFDIE.cpp
+++ b/lldb/source/Plugins/SymbolFile/DWARF/DWARFDIE.cpp
@@ -320,6 +320,18 @@ void DWARFDIE::AppendTypeName(Stream &s) const {
   case DW_TAG_volatile_type:
     s.PutCString("volatile ");
     break;
+  case DW_TAG_LLVM_ptrauth_type: {
+    unsigned key = GetAttributeValueAsUnsigned(DW_AT_LLVM_ptrauth_key, 0);
+    bool isAddressDiscriminated = GetAttributeValueAsUnsigned(
+        DW_AT_LLVM_ptrauth_address_discriminated, 0);
+    unsigned extraDiscriminator =
+        GetAttributeValueAsUnsigned(DW_AT_LLVM_ptrauth_extra_discriminator, 0);
+    bool isaPointer =
+        GetAttributeValueAsUnsigned(DW_AT_LLVM_ptrauth_isa_pointer, 0);
+    s.Printf("__ptrauth(%d, %d, 0x0%x, %d)", key, isAddressDiscriminated,
+             extraDiscriminator, isaPointer);
+    break;
+  }
   default:
     return;
   }

diff  --git a/llvm/include/llvm/BinaryFormat/Dwarf.def b/llvm/include/llvm/BinaryFormat/Dwarf.def
index 76e51b3157d3f..ef328ccde09b3 100644
--- a/llvm/include/llvm/BinaryFormat/Dwarf.def
+++ b/llvm/include/llvm/BinaryFormat/Dwarf.def
@@ -241,6 +241,9 @@ HANDLE_DW_TAG(0x420c, SUN_f90_interface, 0, SUN, DW_KIND_NONE)
 HANDLE_DW_TAG(0x420d, SUN_fortran_vax_structure, 0, SUN, DW_KIND_NONE)
 HANDLE_DW_TAG(0x42ff, SUN_hi, 0, SUN, DW_KIND_NONE)
 
+// LLVM
+HANDLE_DW_TAG(0x4300, LLVM_ptrauth_type, 0, LLVM, DW_KIND_NONE)
+
 // DSP-C/Starcore __circ, _rev
 HANDLE_DW_TAG(0x5101, ALTIUM_circ_type, 0, ALTIUM, DW_KIND_NONE)
 HANDLE_DW_TAG(0x5102, ALTIUM_mwa_circ_type, 0, ALTIUM, DW_KIND_NONE)
@@ -597,8 +600,12 @@ HANDLE_DW_AT(0x3e00, LLVM_include_path, 0, LLVM)
 HANDLE_DW_AT(0x3e01, LLVM_config_macros, 0, LLVM)
 HANDLE_DW_AT(0x3e02, LLVM_sysroot, 0, LLVM)
 HANDLE_DW_AT(0x3e03, LLVM_tag_offset, 0, LLVM)
-// The missing numbers here are reserved for ptrauth support.
+HANDLE_DW_AT(0x3e04, LLVM_ptrauth_key, 0, LLVM)
+HANDLE_DW_AT(0x3e05, LLVM_ptrauth_address_discriminated, 0, LLVM)
+HANDLE_DW_AT(0x3e06, LLVM_ptrauth_extra_discriminator, 0, LLVM)
 HANDLE_DW_AT(0x3e07, LLVM_apinotes, 0, APPLE)
+HANDLE_DW_AT(0x3e08, LLVM_ptrauth_isa_pointer, 0, LLVM)
+HANDLE_DW_AT(0x3e09, LLVM_ptrauth_authenticates_null_values, 0, LLVM)
 
 // Apple extensions.
 

diff  --git a/llvm/lib/DebugInfo/DWARF/DWARFTypePrinter.cpp b/llvm/lib/DebugInfo/DWARF/DWARFTypePrinter.cpp
index 86cc07b0d0f29..83711552ebd95 100644
--- a/llvm/lib/DebugInfo/DWARF/DWARFTypePrinter.cpp
+++ b/llvm/lib/DebugInfo/DWARF/DWARFTypePrinter.cpp
@@ -143,6 +143,9 @@ DWARFTypePrinter::appendUnqualifiedNameBefore(DWARFDie D,
     Word = false;
     break;
   }
+  case DW_TAG_LLVM_ptrauth_type:
+    appendQualifiedNameBefore(Inner());
+    break;
   case DW_TAG_const_type:
   case DW_TAG_volatile_type:
     appendConstVolatileQualifierBefore(D);
@@ -237,6 +240,35 @@ void DWARFTypePrinter::appendUnqualifiedNameAfter(
                                /*SkipFirstParamIfArtificial=*/D.getTag() ==
                                    DW_TAG_ptr_to_member_type);
     break;
+  }
+  case DW_TAG_LLVM_ptrauth_type: {
+    auto getValOrNull = [&](dwarf::Attribute Attr) -> uint64_t {
+      if (auto Form = D.find(Attr))
+        return *Form->getAsUnsignedConstant();
+      return 0;
+    };
+    SmallVector<const char *, 2> optionsVec;
+    if (getValOrNull(DW_AT_LLVM_ptrauth_isa_pointer))
+      optionsVec.push_back("isa-pointer");
+    if (getValOrNull(DW_AT_LLVM_ptrauth_authenticates_null_values))
+      optionsVec.push_back("authenticates-null-values");
+    std::string options;
+    for (auto option : optionsVec) {
+      if (options.size())
+        options += ",";
+      options += option;
+    }
+    if (options.size())
+      options = ", \"" + options + "\"";
+    std::string PtrauthString;
+    llvm::raw_string_ostream PtrauthStream(PtrauthString);
+    PtrauthStream
+        << "__ptrauth(" << getValOrNull(DW_AT_LLVM_ptrauth_key) << ", "
+        << getValOrNull(DW_AT_LLVM_ptrauth_address_discriminated) << ", 0x0"
+        << utohexstr(getValOrNull(DW_AT_LLVM_ptrauth_extra_discriminator), true)
+        << options << ")";
+    OS << PtrauthStream.str();
+    break;
   }
     /*
   case DW_TAG_structure_type:

diff  --git a/llvm/test/tools/llvm-dwarfdump/AArch64/ptrauth.s b/llvm/test/tools/llvm-dwarfdump/AArch64/ptrauth.s
new file mode 100644
index 0000000000000..4d93528557cb9
--- /dev/null
+++ b/llvm/test/tools/llvm-dwarfdump/AArch64/ptrauth.s
@@ -0,0 +1,310 @@
+# RUN: llvm-mc %s -filetype obj -triple arm64-apple-darwin -o - \
+# RUN: | llvm-dwarfdump --debug-info - \
+# RUN: | FileCheck %s
+
+# CHECK: 0x0000001e:   DW_TAG_variable
+# CHECK:                 DW_AT_name      ("p1")
+# CHECK:                 DW_AT_type      (0x00000033 "void *__ptrauth(4, 1, 0x04d2)")
+
+# CHECK: 0x00000033:   DW_TAG_LLVM_ptrauth_type
+# CHECK:                 DW_AT_LLVM_ptrauth_key  (0x04)
+# CHECK:                 DW_AT_LLVM_ptrauth_address_discriminated        (true)
+# CHECK:                 DW_AT_LLVM_ptrauth_extra_discriminator  (0x04d2)
+
+# CHECK: 0x0000003c:   DW_TAG_variable
+# CHECK:                 DW_AT_name      ("p2")
+# CHECK:                 DW_AT_type      (0x00000047 "void *__ptrauth(4, 1, 0x04d3, "isa-pointer")")
+
+# CHECK: 0x00000047:   DW_TAG_LLVM_ptrauth_type
+# CHECK:                 DW_AT_LLVM_ptrauth_key  (0x04)
+# CHECK:                 DW_AT_LLVM_ptrauth_address_discriminated        (true)
+# CHECK:                 DW_AT_LLVM_ptrauth_extra_discriminator  (0x04d3)
+# CHECK:                 DW_AT_LLVM_ptrauth_isa_pointer  (true)
+
+# CHECK: 0x0000004f:   DW_TAG_variable
+# CHECK:                 DW_AT_name      ("p3")
+# CHECK:                 DW_AT_type      (0x0000005a "void *__ptrauth(4, 1, 0x04d4, "authenticates-null-values")")
+
+# CHECK: 0x0000005a:   DW_TAG_LLVM_ptrauth_type
+# CHECK:                 DW_AT_LLVM_ptrauth_key  (0x04)
+# CHECK:                 DW_AT_LLVM_ptrauth_address_discriminated        (true)
+# CHECK:                 DW_AT_LLVM_ptrauth_extra_discriminator  (0x04d4)
+# CHECK:                 DW_AT_LLVM_ptrauth_authenticates_null_values    (true)
+
+# CHECK: 0x00000062:   DW_TAG_variable
+# CHECK:                 DW_AT_name      ("p4")
+# CHECK:                 DW_AT_type      (0x0000006d "void *__ptrauth(4, 1, 0x04d5, "isa-pointer,authenticates-null-values")")
+
+# CHECK: 0x0000006d:   DW_TAG_LLVM_ptrauth_type
+# CHECK:                 DW_AT_LLVM_ptrauth_key  (0x04)
+# CHECK:                 DW_AT_LLVM_ptrauth_address_discriminated        (true)
+# CHECK:                 DW_AT_LLVM_ptrauth_extra_discriminator  (0x04d5)
+# CHECK:                 DW_AT_LLVM_ptrauth_isa_pointer  (true)
+# CHECK:                 DW_AT_LLVM_ptrauth_authenticates_null_values    (true)
+
+	.section	__TEXT,__text,regular,pure_instructions
+	.file	1 "/" "/tmp/p.c"
+	.comm	_p,8                            ; @p
+	.section	__DWARF,__debug_abbrev,regular,debug
+Lsection_abbrev:
+	.byte	1                               ; Abbreviation Code
+	.byte	17                              ; DW_TAG_compile_unit
+	.byte	1                               ; DW_CHILDREN_yes
+	.byte	37                              ; DW_AT_producer
+	.byte	14                              ; DW_FORM_strp
+	.byte	19                              ; DW_AT_language
+	.byte	5                               ; DW_FORM_data2
+	.byte	3                               ; DW_AT_name
+	.byte	14                              ; DW_FORM_strp
+	.byte	16                              ; DW_AT_stmt_list
+	.byte	23                              ; DW_FORM_sec_offset
+	.byte	27                              ; DW_AT_comp_dir
+	.byte	14                              ; DW_FORM_strp
+	.byte	0                               ; EOM(1)
+	.byte	0                               ; EOM(2)
+	.byte	2                               ; Abbreviation Code
+	.byte	52                              ; DW_TAG_variable
+	.byte	0                               ; DW_CHILDREN_no
+	.byte	3                               ; DW_AT_name
+	.byte	14                              ; DW_FORM_strp
+	.byte	73                              ; DW_AT_type
+	.byte	19                              ; DW_FORM_ref4
+	.byte	63                              ; DW_AT_external
+	.byte	25                              ; DW_FORM_flag_present
+	.byte	58                              ; DW_AT_decl_file
+	.byte	11                              ; DW_FORM_data1
+	.byte	59                              ; DW_AT_decl_line
+	.byte	11                              ; DW_FORM_data1
+	.byte	2                               ; DW_AT_location
+	.byte	24                              ; DW_FORM_exprloc
+	.byte	0                               ; EOM(1)
+	.byte	0                               ; EOM(2)
+	.byte	3                               ; Abbreviation Code
+	.ascii	"\200\206\001"                  ; DW_TAG_LLVM_ptrauth_type
+	.byte	0                               ; DW_CHILDREN_no
+	.byte	73                              ; DW_AT_type
+	.byte	19                              ; DW_FORM_ref4
+	.ascii	"\204|"                         ; DW_AT_LLVM_ptrauth_key
+	.byte	11                              ; DW_FORM_data1
+	.ascii	"\205|"                         ; DW_AT_LLVM_ptrauth_address_discriminated
+	.byte	25                              ; DW_FORM_flag_present
+	.ascii	"\206|"                         ; DW_AT_LLVM_ptrauth_extra_discriminator
+	.byte	5                               ; DW_FORM_data2
+	.byte	0                               ; EOM(1)
+	.byte	0                               ; EOM(2)
+	.byte	4                               ; Abbreviation Code
+	.byte	15                              ; DW_TAG_pointer_type
+	.byte	0                               ; DW_CHILDREN_no
+	.byte	0                               ; EOM(1)
+	.byte	0                               ; EOM(2)
+	.byte	5                               ; Abbreviation Code
+	.byte	52                              ; DW_TAG_variable
+	.byte	0                               ; DW_CHILDREN_no
+	.byte	3                               ; DW_AT_name
+	.byte	14                              ; DW_FORM_strp
+	.byte	73                              ; DW_AT_type
+	.byte	19                              ; DW_FORM_ref4
+	.byte	63                              ; DW_AT_external
+	.byte	25                              ; DW_FORM_flag_present
+	.byte	58                              ; DW_AT_decl_file
+	.byte	11                              ; DW_FORM_data1
+	.byte	59                              ; DW_AT_decl_line
+	.byte	11                              ; DW_FORM_data1
+	.byte	0                               ; EOM(1)
+	.byte	0                               ; EOM(2)
+	.byte	6                               ; Abbreviation Code
+	.ascii	"\200\206\001"                  ; DW_TAG_LLVM_ptrauth_type
+	.byte	0                               ; DW_CHILDREN_no
+	.byte	73                              ; DW_AT_type
+	.byte	19                              ; DW_FORM_ref4
+	.ascii	"\204|"                         ; DW_AT_LLVM_ptrauth_key
+	.byte	11                              ; DW_FORM_data1
+	.ascii	"\205|"                         ; DW_AT_LLVM_ptrauth_address_discriminated
+	.byte	25                              ; DW_FORM_flag_present
+	.ascii	"\206|"                         ; DW_AT_LLVM_ptrauth_extra_discriminator
+	.byte	5                               ; DW_FORM_data2
+	.ascii	"\210|"                         ; DW_AT_LLVM_ptrauth_isa_pointer
+	.byte	25                              ; DW_FORM_flag_present
+	.byte	0                               ; EOM(1)
+	.byte	0                               ; EOM(2)
+	.byte	7                               ; Abbreviation Code
+	.ascii	"\200\206\001"                  ; DW_TAG_LLVM_ptrauth_type
+	.byte	0                               ; DW_CHILDREN_no
+	.byte	73                              ; DW_AT_type
+	.byte	19                              ; DW_FORM_ref4
+	.ascii	"\204|"                         ; DW_AT_LLVM_ptrauth_key
+	.byte	11                              ; DW_FORM_data1
+	.ascii	"\205|"                         ; DW_AT_LLVM_ptrauth_address_discriminated
+	.byte	25                              ; DW_FORM_flag_present
+	.ascii	"\206|"                         ; DW_AT_LLVM_ptrauth_extra_discriminator
+	.byte	5                               ; DW_FORM_data2
+	.ascii	"\211|"                         ; DW_AT_LLVM_ptrauth_authenticates_null_values
+	.byte	25                              ; DW_FORM_flag_present
+	.byte	0                               ; EOM(1)
+	.byte	0                               ; EOM(2)
+	.byte	8                               ; Abbreviation Code
+	.ascii	"\200\206\001"                  ; DW_TAG_LLVM_ptrauth_type
+	.byte	0                               ; DW_CHILDREN_no
+	.byte	73                              ; DW_AT_type
+	.byte	19                              ; DW_FORM_ref4
+	.ascii	"\204|"                         ; DW_AT_LLVM_ptrauth_key
+	.byte	11                              ; DW_FORM_data1
+	.ascii	"\205|"                         ; DW_AT_LLVM_ptrauth_address_discriminated
+	.byte	25                              ; DW_FORM_flag_present
+	.ascii	"\206|"                         ; DW_AT_LLVM_ptrauth_extra_discriminator
+	.byte	5                               ; DW_FORM_data2
+	.ascii	"\210|"                         ; DW_AT_LLVM_ptrauth_isa_pointer
+	.byte	25                              ; DW_FORM_flag_present
+	.ascii	"\211|"                         ; DW_AT_LLVM_ptrauth_authenticates_null_values
+	.byte	25                              ; DW_FORM_flag_present
+	.byte	0                               ; EOM(1)
+	.byte	0                               ; EOM(2)
+	.byte	0                               ; EOM(3)
+	.section	__DWARF,__debug_info,regular,debug
+Lsection_info:
+Lcu_begin0:
+.set Lset0, Ldebug_info_end0-Ldebug_info_start0 ; Length of Unit
+	.long	Lset0
+Ldebug_info_start0:
+	.short	4                               ; DWARF version number
+.set Lset1, Lsection_abbrev-Lsection_abbrev ; Offset Into Abbrev. Section
+	.long	Lset1
+	.byte	8                               ; Address Size (in bytes)
+	.byte	1                               ; Abbrev [1] 0xb:0x6b DW_TAG_compile_unit
+	.long	0                               ; DW_AT_producer
+	.short	12                              ; DW_AT_language
+	.long	1                               ; DW_AT_name
+.set Lset2, Lline_table_start0-Lsection_line ; DW_AT_stmt_list
+	.long	Lset2
+	.long	10                              ; DW_AT_comp_dir
+	.byte	2                               ; Abbrev [2] 0x1e:0x15 DW_TAG_variable
+	.long	12                              ; DW_AT_name
+	.long	51                              ; DW_AT_type
+                                        ; DW_AT_external
+	.byte	1                               ; DW_AT_decl_file
+	.byte	1                               ; DW_AT_decl_line
+	.byte	9                               ; DW_AT_location
+	.byte	3
+	.quad	_p
+	.byte	3                               ; Abbrev [3] 0x33:0x8 DW_TAG_LLVM_ptrauth_type
+	.long	59                              ; DW_AT_type
+	.byte	4                               ; DW_AT_LLVM_ptrauth_key
+                                        ; DW_AT_LLVM_ptrauth_address_discriminated
+	.short	1234                            ; DW_AT_LLVM_ptrauth_extra_discriminator
+	.byte	4                               ; Abbrev [4] 0x3b:0x1 DW_TAG_pointer_type
+	.byte	5                               ; Abbrev [5] 0x3c:0xb DW_TAG_variable
+	.long	15                              ; DW_AT_name
+	.long	71                              ; DW_AT_type
+                                        ; DW_AT_external
+	.byte	1                               ; DW_AT_decl_file
+	.byte	1                               ; DW_AT_decl_line
+	.byte	6                               ; Abbrev [6] 0x47:0x8 DW_TAG_LLVM_ptrauth_type
+	.long	59                              ; DW_AT_type
+	.byte	4                               ; DW_AT_LLVM_ptrauth_key
+                                        ; DW_AT_LLVM_ptrauth_address_discriminated
+	.short	1235                            ; DW_AT_LLVM_ptrauth_extra_discriminator
+                                        ; DW_AT_LLVM_ptrauth_isa_pointer
+	.byte	5                               ; Abbrev [5] 0x4f:0xb DW_TAG_variable
+	.long	18                              ; DW_AT_name
+	.long	90                              ; DW_AT_type
+                                        ; DW_AT_external
+	.byte	1                               ; DW_AT_decl_file
+	.byte	1                               ; DW_AT_decl_line
+	.byte	7                               ; Abbrev [7] 0x5a:0x8 DW_TAG_LLVM_ptrauth_type
+	.long	59                              ; DW_AT_type
+	.byte	4                               ; DW_AT_LLVM_ptrauth_key
+                                        ; DW_AT_LLVM_ptrauth_address_discriminated
+	.short	1236                            ; DW_AT_LLVM_ptrauth_extra_discriminator
+                                        ; DW_AT_LLVM_ptrauth_authenticates_null_values
+	.byte	5                               ; Abbrev [5] 0x62:0xb DW_TAG_variable
+	.long	21                              ; DW_AT_name
+	.long	109                             ; DW_AT_type
+                                        ; DW_AT_external
+	.byte	1                               ; DW_AT_decl_file
+	.byte	1                               ; DW_AT_decl_line
+	.byte	8                               ; Abbrev [8] 0x6d:0x8 DW_TAG_LLVM_ptrauth_type
+	.long	59                              ; DW_AT_type
+	.byte	4                               ; DW_AT_LLVM_ptrauth_key
+                                        ; DW_AT_LLVM_ptrauth_address_discriminated
+	.short	1237                            ; DW_AT_LLVM_ptrauth_extra_discriminator
+                                        ; DW_AT_LLVM_ptrauth_isa_pointer
+                                        ; DW_AT_LLVM_ptrauth_authenticates_null_values
+	.byte	0                               ; End Of Children Mark
+Ldebug_info_end0:
+	.section	__DWARF,__debug_str,regular,debug
+Linfo_string:
+	.byte	0                               ; string offset=0
+	.asciz	"/tmp/p.c"                      ; string offset=1
+	.asciz	"/"                             ; string offset=10
+	.asciz	"p1"                            ; string offset=12
+	.asciz	"p2"                            ; string offset=15
+	.asciz	"p3"                            ; string offset=18
+	.asciz	"p4"                            ; string offset=21
+	.section	__DWARF,__apple_names,regular,debug
+Lnames_begin:
+	.long	1212240712                      ; Header Magic
+	.short	1                               ; Header Version
+	.short	0                               ; Header Hash Function
+	.long	1                               ; Header Bucket Count
+	.long	1                               ; Header Hash Count
+	.long	12                              ; Header Data Length
+	.long	0                               ; HeaderData Die Offset Base
+	.long	1                               ; HeaderData Atom Count
+	.short	1                               ; DW_ATOM_die_offset
+	.short	6                               ; DW_FORM_data4
+	.long	0                               ; Bucket 0
+	.long	5863654                         ; Hash in Bucket 0
+.set Lset3, LNames0-Lnames_begin        ; Offset in Bucket 0
+	.long	Lset3
+LNames0:
+	.long	12                              ; p1
+	.long	1                               ; Num DIEs
+	.long	30
+	.long	0
+	.section	__DWARF,__apple_objc,regular,debug
+Lobjc_begin:
+	.long	1212240712                      ; Header Magic
+	.short	1                               ; Header Version
+	.short	0                               ; Header Hash Function
+	.long	1                               ; Header Bucket Count
+	.long	0                               ; Header Hash Count
+	.long	12                              ; Header Data Length
+	.long	0                               ; HeaderData Die Offset Base
+	.long	1                               ; HeaderData Atom Count
+	.short	1                               ; DW_ATOM_die_offset
+	.short	6                               ; DW_FORM_data4
+	.long	-1                              ; Bucket 0
+	.section	__DWARF,__apple_namespac,regular,debug
+Lnamespac_begin:
+	.long	1212240712                      ; Header Magic
+	.short	1                               ; Header Version
+	.short	0                               ; Header Hash Function
+	.long	1                               ; Header Bucket Count
+	.long	0                               ; Header Hash Count
+	.long	12                              ; Header Data Length
+	.long	0                               ; HeaderData Die Offset Base
+	.long	1                               ; HeaderData Atom Count
+	.short	1                               ; DW_ATOM_die_offset
+	.short	6                               ; DW_FORM_data4
+	.long	-1                              ; Bucket 0
+	.section	__DWARF,__apple_types,regular,debug
+Ltypes_begin:
+	.long	1212240712                      ; Header Magic
+	.short	1                               ; Header Version
+	.short	0                               ; Header Hash Function
+	.long	1                               ; Header Bucket Count
+	.long	0                               ; Header Hash Count
+	.long	20                              ; Header Data Length
+	.long	0                               ; HeaderData Die Offset Base
+	.long	3                               ; HeaderData Atom Count
+	.short	1                               ; DW_ATOM_die_offset
+	.short	6                               ; DW_FORM_data4
+	.short	3                               ; DW_ATOM_die_tag
+	.short	5                               ; DW_FORM_data2
+	.short	4                               ; DW_ATOM_type_flags
+	.short	11                              ; DW_FORM_data1
+	.long	-1                              ; Bucket 0
+.subsections_via_symbols
+	.section	__DWARF,__debug_line,regular,debug
+Lsection_line:
+Lline_table_start0:


        


More information about the lldb-commits mailing list