JDevlieghere created this revision.
JDevlieghere added reviewers: clayborg, jasonmolenda, labath, aprantl, friss.
Herald added a subscriber: abidh.
Herald added a project: LLDB.

The symtab parser in ObjectFileMachO has logic to coalesce debug (STAB) and 
non-debug symbols, based on the address and the symbol name, for static (STSYM) 
and global symbols (GSYM) respectively. It makes the assumption that the debug 
variant is always encountered first. Rather than creating a second entry in the 
symbol table for the non-debug symbol, the non-debug symbol gets merged into 
the existing debug symbol.

This breaks when the linker emits the non-debug symbol first. We'd end up with 
two entries in the symbol table, each containing part of the information LLDB 
relies on. Indeed, commenting out the merging logic breaks the test suite 
spectacularly.

This patch solves that problem by always parsing the debug symbols first. This 
guarantees that the assumption for merging holds.

PS: I'm not particularly proud of the way this turned out, but after numerous 
attempts this is the best solution I could come up with. The symtab parsing 
logic is pretty complex in that it touches a lot of things. I've experienced 
first hand that it's very easy to break things. I believe this approach strikes 
a balance between fixing the issue while limiting the risk of regressions.


Repository:
  rLLDB LLDB

https://reviews.llvm.org/D68536

Files:
  lldb/lit/ObjectFile/Inputs/SymbolTable.yaml
  lldb/lit/ObjectFile/TestSymbolTable.test
  lldb/source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.cpp

Index: lldb/source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.cpp
===================================================================
--- lldb/source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.cpp
+++ lldb/source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.cpp
@@ -2038,19 +2038,22 @@
   return dsc_uuid;
 }
 
-static bool ParseNList(DataExtractor &nlist_data,
-                       lldb::offset_t &nlist_data_offset,
-                       size_t nlist_byte_size, struct nlist_64 &nlist) {
+static llvm::Optional<struct nlist_64>
+ParseNList(DataExtractor &nlist_data, lldb::offset_t &nlist_data_offset,
+           size_t nlist_byte_size) {
+  struct nlist_64 nlist;
   if (!nlist_data.ValidOffsetForDataOfSize(nlist_data_offset, nlist_byte_size))
-    return false;
+    return {};
   nlist.n_strx = nlist_data.GetU32_unchecked(&nlist_data_offset);
   nlist.n_type = nlist_data.GetU8_unchecked(&nlist_data_offset);
   nlist.n_sect = nlist_data.GetU8_unchecked(&nlist_data_offset);
   nlist.n_desc = nlist_data.GetU16_unchecked(&nlist_data_offset);
   nlist.n_value = nlist_data.GetAddress_unchecked(&nlist_data_offset);
-  return true;
+  return nlist;
 }
 
+enum { DebugSymbols = true, NonDebugSymbols = false };
+
 size_t ObjectFileMachO::ParseSymtab() {
   static Timer::Category func_cat(LLVM_PRETTY_FUNCTION);
   Timer scoped_timer(func_cat, "ObjectFileMachO::ParseSymtab () module = %s",
@@ -3680,10 +3683,18 @@
     typedef std::map<uint32_t, ConstString> SymbolIndexToName;
     UndefinedNameToDescMap undefined_name_to_desc;
     SymbolIndexToName reexport_shlib_needs_fixup;
-    for (; nlist_idx < symtab_load_command.nsyms; ++nlist_idx) {
-      struct nlist_64 nlist;
-      if (!ParseNList(nlist_data, nlist_data_offset, nlist_byte_size, nlist))
-        break;
+
+    // Symtab parsing is a huge mess. Everything is entangled and the code
+    // requires access to a ridiculous amount of variables. LLDB depends
+    // heavily on the proper merging of symbols and to get that right we need
+    // to make sure we have parsed all the debug symbols first. Therefore we
+    // invoke the lambda twice, once to parse only the debug symbols and then
+    // once more to parse the remaining symbols.
+    auto ParseSymbolLambda = [&](struct nlist_64 &nlist, uint32_t nlist_idx,
+                                 bool debug_only) {
+      const bool is_debug = ((nlist.n_type & N_STAB) != 0);
+      if (is_debug != debug_only)
+        return true;
 
       const char *symbol_name_non_abi_mangled = nullptr;
       const char *symbol_name = nullptr;
@@ -3699,7 +3710,7 @@
                           "0x%x in %s, ignoring symbol\n",
                           nlist_idx, nlist.n_strx,
                           module_sp->GetFileSpec().GetPath().c_str());
-          continue;
+          return true;
         }
         if (symbol_name[0] == '\0')
           symbol_name = nullptr;
@@ -3719,7 +3730,6 @@
       bool demangled_is_synthesized = false;
       bool set_value = true;
 
-      const bool is_debug = ((nlist.n_type & N_STAB) != 0);
       assert(sym_idx < num_syms);
       sym[sym_idx].SetDebug(is_debug);
 
@@ -4270,7 +4280,7 @@
 
       if (!add_nlist) {
         sym[sym_idx].Clear();
-        continue;
+        return true;
       }
 
       uint64_t symbol_value = nlist.n_value;
@@ -4361,7 +4371,6 @@
               range;
           range = N_FUN_addr_to_sym_idx.equal_range(nlist.n_value);
           if (range.first != range.second) {
-            bool found_it = false;
             for (ValueToSymbolIndexMap::const_iterator pos = range.first;
                  pos != range.second; ++pos) {
               if (sym[sym_idx].GetMangled().GetName(lldb::eLanguageTypeUnknown,
@@ -4378,12 +4387,9 @@
                     resolver_addresses.end())
                   sym[pos->second].SetType(eSymbolTypeResolver);
                 sym[sym_idx].Clear();
-                found_it = true;
-                break;
+                return true;
               }
             }
-            if (found_it)
-              continue;
           } else {
             if (resolver_addresses.find(nlist.n_value) !=
                 resolver_addresses.end())
@@ -4401,7 +4407,6 @@
               range;
           range = N_STSYM_addr_to_sym_idx.equal_range(nlist.n_value);
           if (range.first != range.second) {
-            bool found_it = false;
             for (ValueToSymbolIndexMap::const_iterator pos = range.first;
                  pos != range.second; ++pos) {
               if (sym[sym_idx].GetMangled().GetName(lldb::eLanguageTypeUnknown,
@@ -4415,12 +4420,9 @@
                 sym[pos->second].SetExternal(sym[sym_idx].IsExternal());
                 sym[pos->second].SetFlags(nlist.n_type << 16 | nlist.n_desc);
                 sym[sym_idx].Clear();
-                found_it = true;
-                break;
+                return true;
               }
             }
-            if (found_it)
-              continue;
           } else {
             // Combine N_GSYM stab entries with the non stab symbol.
             const char *gsym_name = sym[sym_idx]
@@ -4443,7 +4445,7 @@
                 // the symbol table.
                 sym[GSYM_sym_idx].SetFlags(nlist.n_type << 16 | nlist.n_desc);
                 sym[sym_idx].Clear();
-                continue;
+                return true;
               }
             }
           }
@@ -4467,6 +4469,35 @@
         sym[sym_idx].SetDemangledNameIsSynthesized(true);
 
       ++sym_idx;
+      return true;
+    };
+
+    // First parse all the nlists but don't process them yet. See the next
+    // comment for an explanation why.
+    std::vector<struct nlist_64> nlists;
+    for (; nlist_idx < symtab_load_command.nsyms; ++nlist_idx) {
+      if (auto nlist =
+              ParseNList(nlist_data, nlist_data_offset, nlist_byte_size))
+        nlists.push_back(*nlist);
+      else
+        break;
+    }
+
+    // Now parse all the debug symbols. This is needed to merge non-debug
+    // symbols in the next step. Non-debug symbols are always coalesced into
+    // the debug symbol. Doing this in one step would mean that some symbols
+    // won't be merged.
+    nlist_idx = 0;
+    for (auto &nlist : nlists) {
+      if (!ParseSymnbolLambda(nlist, nlist_idx++, DebugSymbols))
+        break;
+    }
+
+    // Finally parse all the non debug symbols.
+    nlist_idx = 0;
+    for (auto &nlist : nlists) {
+      if (!ParseSymnbolLambda(nlist, nlist_idx++, NonDebugSymbols))
+        break;
     }
 
     for (const auto &pos : reexport_shlib_needs_fixup) {
Index: lldb/lit/ObjectFile/TestSymbolTable.test
===================================================================
--- /dev/null
+++ lldb/lit/ObjectFile/TestSymbolTable.test
@@ -0,0 +1,11 @@
+# REQUIRES: system-darwin
+
+# Tests that the symbol table properly merges the two entries for
+# global_constant, even when the debug symbol comes last.
+
+# RUN: mkdir -p %t
+# RUN: yaml2obj %S/Inputs/SymbolTable.yaml -o %t/a.out
+# RUN: %lldb %t/a.out -o "target modules dump symtab a.out" | FileCheck %s
+
+# CHECK: global_constant
+# CHECK-NOT: global_constant
Index: lldb/lit/ObjectFile/Inputs/SymbolTable.yaml
===================================================================
--- /dev/null
+++ lldb/lit/ObjectFile/Inputs/SymbolTable.yaml
@@ -0,0 +1,692 @@
+--- !mach-o
+FileHeader:
+  magic:           0xFEEDFACF
+  cputype:         0x01000007
+  cpusubtype:      0x80000003
+  filetype:        0x00000002
+  ncmds:           20
+  sizeofcmds:      1992
+  flags:           0x00200085
+  reserved:        0x00000000
+LoadCommands:
+  - cmd:             LC_SEGMENT_64
+    cmdsize:         72
+    segname:         __PAGEZERO
+    vmaddr:          0
+    vmsize:          4294967296
+    fileoff:         0
+    filesize:        0
+    maxprot:         0
+    initprot:        0
+    nsects:          0
+    flags:           0
+  - cmd:             LC_SEGMENT_64
+    cmdsize:         552
+    segname:         __TEXT
+    vmaddr:          4294967296
+    vmsize:          4096
+    fileoff:         0
+    filesize:        4096
+    maxprot:         5
+    initprot:        5
+    nsects:          6
+    flags:           0
+    Sections:
+      - sectname:        __text
+        segname:         __TEXT
+        addr:            0x0000000100000DE0
+        size:            383
+        offset:          0x00000DE0
+        align:           4
+        reloff:          0x00000000
+        nreloc:          0
+        flags:           0x80000400
+        reserved1:       0x00000000
+        reserved2:       0x00000000
+        reserved3:       0x00000000
+        content:         554889E54883EC30488D054112000031C948C7052C1200005704000048C70529120000AE080000488B151A120000897DE44889C7488D45E8488975D84889C6B821000000488955D04889C2E830010000488B7DD0488D35F5110000E840000000488D7DE8E81D01000031C04883C4305DC3662E0F1F8400000000000F1F440000554889E548C745F000000000488975F848897DF05DC3662E0F1F840000000000554889E54883EC3048C745F80000000048C745F00000000048C745E80000000048897DF8488975F0488B06488945E848897DD8488945E0488D3D62110000E81D000000488D7DD84889C6E891FFFFFF4883C4305DC3662E0F1F840000000000904883EC284889F8488B0F4883F9000F9CC2F6C2014889CE48897C2420488944241848894C24104889742408750A488B4424084883C428C3488B44241048C1F82048F7D8488B4C241089CA4863F2488B7C24204801F731D289D6488934244889C6488B1424488B0C24E81F0000004889C1488B54241848890248894C2408EBAE
+      - sectname:        __stubs
+        segname:         __TEXT
+        addr:            0x0000000100000F60
+        size:            18
+        offset:          0x00000F60
+        align:           1
+        reloff:          0x00000000
+        nreloc:          0
+        flags:           0x80000408
+        reserved1:       0x00000000
+        reserved2:       0x00000006
+        reserved3:       0x00000000
+        content:         FF259A100000FF259C100000FF259E100000
+      - sectname:        __stub_helper
+        segname:         __TEXT
+        addr:            0x0000000100000F74
+        size:            46
+        offset:          0x00000F74
+        align:           2
+        reloff:          0x00000000
+        nreloc:          0
+        flags:           0x80000400
+        reserved1:       0x00000000
+        reserved2:       0x00000000
+        reserved3:       0x00000000
+        content:         4C8D1D9D1000004153FF257D000000906800000000E9E6FFFFFF6819000000E9DCFFFFFF6830000000E9D2FFFFFF
+      - sectname:        __swift5_typeref
+        segname:         __TEXT
+        addr:            0x0000000100000FA2
+        size:            7
+        offset:          0x00000FA2
+        align:           1
+        reloff:          0x00000000
+        nreloc:          0
+        flags:           0x00000000
+        reserved1:       0x00000000
+        reserved2:       0x00000000
+        reserved3:       0x00000000
+        content:         53695F53697400
+      - sectname:        __const
+        segname:         __TEXT
+        addr:            0x0000000100000FAA
+        size:            2
+        offset:          0x00000FAA
+        align:           1
+        reloff:          0x00000000
+        nreloc:          0
+        flags:           0x00000000
+        reserved1:       0x00000000
+        reserved2:       0x00000000
+        reserved3:       0x00000000
+        content:         '0300'
+      - sectname:        __unwind_info
+        segname:         __TEXT
+        addr:            0x0000000100000FAC
+        size:            80
+        offset:          0x00000FAC
+        align:           2
+        reloff:          0x00000000
+        nreloc:          0
+        flags:           0x00000000
+        reserved1:       0x00000000
+        reserved2:       0x00000000
+        reserved3:       0x00000000
+        content:         010000001C000000000000001C000000000000001C00000002000000E00D00003400000034000000600F00000000000034000000030000000C0002001400020000000001000100000000060200000001
+  - cmd:             LC_SEGMENT_64
+    cmdsize:         232
+    segname:         __DATA_CONST
+    vmaddr:          4294971392
+    vmsize:          4096
+    fileoff:         4096
+    filesize:        4096
+    maxprot:         3
+    initprot:        3
+    nsects:          2
+    flags:           16
+    Sections:
+      - sectname:        __got
+        segname:         __DATA_CONST
+        addr:            0x0000000100001000
+        size:            8
+        offset:          0x00001000
+        align:           3
+        reloff:          0x00000000
+        nreloc:          0
+        flags:           0x00000006
+        reserved1:       0x00000003
+        reserved2:       0x00000000
+        reserved3:       0x00000000
+        content:         '0000000000000000'
+      - sectname:        __objc_imageinfo
+        segname:         __DATA_CONST
+        addr:            0x0000000100001008
+        size:            8
+        offset:          0x00001008
+        align:           2
+        reloff:          0x00000000
+        nreloc:          0
+        flags:           0x00000000
+        reserved1:       0x00000000
+        reserved2:       0x00000000
+        reserved3:       0x00000000
+        content:         '0000000040070105'
+  - cmd:             LC_SEGMENT_64
+    cmdsize:         312
+    segname:         __DATA
+    vmaddr:          4294975488
+    vmsize:          4096
+    fileoff:         8192
+    filesize:        4096
+    maxprot:         3
+    initprot:        3
+    nsects:          3
+    flags:           0
+    Sections:
+      - sectname:        __la_symbol_ptr
+        segname:         __DATA
+        addr:            0x0000000100002000
+        size:            24
+        offset:          0x00002000
+        align:           3
+        reloff:          0x00000000
+        nreloc:          0
+        flags:           0x00000007
+        reserved1:       0x00000004
+        reserved2:       0x00000000
+        reserved3:       0x00000000
+        content:         840F0000010000008E0F000001000000980F000001000000
+      - sectname:        __data
+        segname:         __DATA
+        addr:            0x0000000100002018
+        size:            16
+        offset:          0x00002018
+        align:           3
+        reloff:          0x00000000
+        nreloc:          0
+        flags:           0x00000000
+        reserved1:       0x00000000
+        reserved2:       0x00000000
+        reserved3:       0x00000000
+        content:         000000000000000082EFFFFFFAFFFFFF
+      - sectname:        __common
+        segname:         __DATA
+        addr:            0x0000000100002028
+        size:            16
+        offset:          0x00000000
+        align:           3
+        reloff:          0x00000000
+        nreloc:          0
+        flags:           0x00000001
+        reserved1:       0x00000000
+        reserved2:       0x00000000
+        reserved3:       0x00000000
+  - cmd:             LC_SEGMENT_64
+    cmdsize:         72
+    segname:         __LINKEDIT
+    vmaddr:          4294979584
+    vmsize:          4096
+    fileoff:         12288
+    filesize:        1924
+    maxprot:         1
+    initprot:        1
+    nsects:          0
+    flags:           0
+  - cmd:             LC_DYLD_INFO_ONLY
+    cmdsize:         48
+    rebase_off:      12288
+    rebase_size:     8
+    bind_off:        12296
+    bind_size:       24
+    weak_bind_off:   0
+    weak_bind_size:  0
+    lazy_bind_off:   12320
+    lazy_bind_size:  96
+    export_off:      12416
+    export_size:     48
+  - cmd:             LC_SYMTAB
+    cmdsize:         24
+    symoff:          12472
+    nsyms:           41
+    stroff:          13156
+    strsize:         1056
+  - cmd:             LC_DYSYMTAB
+    cmdsize:         80
+    ilocalsym:       0
+    nlocalsym:       35
+    iextdefsym:      35
+    nextdefsym:      2
+    iundefsym:       37
+    nundefsym:       4
+    tocoff:          0
+    ntoc:            0
+    modtaboff:       0
+    nmodtab:         0
+    extrefsymoff:    0
+    nextrefsyms:     0
+    indirectsymoff:  13128
+    nindirectsyms:   7
+    extreloff:       0
+    nextrel:         0
+    locreloff:       0
+    nlocrel:         0
+  - cmd:             LC_LOAD_DYLINKER
+    cmdsize:         32
+    name:            12
+    PayloadString:   '/usr/lib/dyld'
+    ZeroPadBytes:    7
+  - cmd:             LC_UUID
+    cmdsize:         24
+    uuid:            A89F9D23-8190-3946-A70B-B8E833E68640
+  - cmd:             LC_BUILD_VERSION
+    cmdsize:         32
+    platform:        1
+    minos:           659200
+    sdk:             659200
+    ntools:          1
+    Tools:
+      - tool:            3
+        version:         36176384
+  - cmd:             LC_SOURCE_VERSION
+    cmdsize:         16
+    version:         0
+  - cmd:             LC_MAIN
+    cmdsize:         24
+    entryoff:        3552
+    stacksize:       0
+  - cmd:             LC_LOAD_DYLIB
+    cmdsize:         56
+    dylib:
+      name:            24
+      timestamp:       2
+      current_version: 14942208
+      compatibility_version: 65536
+    PayloadString:   '/usr/lib/libobjc.A.dylib'
+    ZeroPadBytes:    8
+  - cmd:             LC_LOAD_DYLIB
+    cmdsize:         56
+    dylib:
+      name:            24
+      timestamp:       2
+      current_version: 83951616
+      compatibility_version: 65536
+    PayloadString:   '/usr/lib/libSystem.B.dylib'
+    ZeroPadBytes:    6
+  - cmd:             LC_LOAD_DYLIB
+    cmdsize:         64
+    dylib:
+      name:            24
+      timestamp:       2
+      current_version: 0
+      compatibility_version: 65536
+    PayloadString:   '/usr/lib/swift/libswiftCore.dylib'
+    ZeroPadBytes:    7
+  - cmd:             LC_RPATH
+    cmdsize:         136
+    path:            12
+    PayloadString:   '/Volumes/Jonas/internal-stable/build/Ninja-RelWithDebInfoAssert+stdlib-RelWithDebInfo/swift-macosx-x86_64/lib/swift/macosx'
+    ZeroPadBytes:    2
+  - cmd:             LC_RPATH
+    cmdsize:         128
+    path:            12
+    PayloadString:   '/Applications/XcodeY.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.15.sdk/usr/lib/swift'
+    ZeroPadBytes:    2
+  - cmd:             LC_FUNCTION_STARTS
+    cmdsize:         16
+    dataoff:         12464
+    datasize:        8
+  - cmd:             LC_DATA_IN_CODE
+    cmdsize:         16
+    dataoff:         12472
+    datasize:        0
+LinkEditData:
+  RebaseOpcodes:
+    - Opcode:          REBASE_OPCODE_SET_TYPE_IMM
+      Imm:             1
+    - Opcode:          REBASE_OPCODE_SET_SEGMENT_AND_OFFSET_ULEB
+      Imm:             3
+      ExtraData:
+        - 0x0000000000000000
+    - Opcode:          REBASE_OPCODE_DO_REBASE_IMM_TIMES
+      Imm:             3
+    - Opcode:          REBASE_OPCODE_DONE
+      Imm:             0
+  BindOpcodes:
+    - Opcode:          BIND_OPCODE_SET_DYLIB_ORDINAL_IMM
+      Imm:             2
+      Symbol:          ''
+    - Opcode:          BIND_OPCODE_SET_SYMBOL_TRAILING_FLAGS_IMM
+      Imm:             0
+      Symbol:          dyld_stub_binder
+    - Opcode:          BIND_OPCODE_SET_TYPE_IMM
+      Imm:             1
+      Symbol:          ''
+    - Opcode:          BIND_OPCODE_SET_SEGMENT_AND_OFFSET_ULEB
+      Imm:             2
+      ULEBExtraData:
+        - 0x0000000000000000
+      Symbol:          ''
+    - Opcode:          BIND_OPCODE_DO_BIND
+      Imm:             0
+      Symbol:          ''
+    - Opcode:          BIND_OPCODE_DONE
+      Imm:             0
+      Symbol:          ''
+  LazyBindOpcodes:
+    - Opcode:          BIND_OPCODE_SET_SEGMENT_AND_OFFSET_ULEB
+      Imm:             3
+      ULEBExtraData:
+        - 0x0000000000000000
+      Symbol:          ''
+    - Opcode:          BIND_OPCODE_SET_DYLIB_ORDINAL_IMM
+      Imm:             3
+      Symbol:          ''
+    - Opcode:          BIND_OPCODE_SET_SYMBOL_TRAILING_FLAGS_IMM
+      Imm:             0
+      Symbol:          _swift_beginAccess
+    - Opcode:          BIND_OPCODE_DO_BIND
+      Imm:             0
+      Symbol:          ''
+    - Opcode:          BIND_OPCODE_DONE
+      Imm:             0
+      Symbol:          ''
+    - Opcode:          BIND_OPCODE_SET_SEGMENT_AND_OFFSET_ULEB
+      Imm:             3
+      ULEBExtraData:
+        - 0x0000000000000008
+      Symbol:          ''
+    - Opcode:          BIND_OPCODE_SET_DYLIB_ORDINAL_IMM
+      Imm:             3
+      Symbol:          ''
+    - Opcode:          BIND_OPCODE_SET_SYMBOL_TRAILING_FLAGS_IMM
+      Imm:             0
+      Symbol:          _swift_endAccess
+    - Opcode:          BIND_OPCODE_DO_BIND
+      Imm:             0
+      Symbol:          ''
+    - Opcode:          BIND_OPCODE_DONE
+      Imm:             0
+      Symbol:          ''
+    - Opcode:          BIND_OPCODE_SET_SEGMENT_AND_OFFSET_ULEB
+      Imm:             3
+      ULEBExtraData:
+        - 0x0000000000000010
+      Symbol:          ''
+    - Opcode:          BIND_OPCODE_SET_DYLIB_ORDINAL_IMM
+      Imm:             3
+      Symbol:          ''
+    - Opcode:          BIND_OPCODE_SET_SYMBOL_TRAILING_FLAGS_IMM
+      Imm:             0
+      Symbol:          _swift_getTypeByMangledNameInContext
+    - Opcode:          BIND_OPCODE_DO_BIND
+      Imm:             0
+      Symbol:          ''
+    - Opcode:          BIND_OPCODE_DONE
+      Imm:             0
+      Symbol:          ''
+    - Opcode:          BIND_OPCODE_DONE
+      Imm:             0
+      Symbol:          ''
+    - Opcode:          BIND_OPCODE_DONE
+      Imm:             0
+      Symbol:          ''
+    - Opcode:          BIND_OPCODE_DONE
+      Imm:             0
+      Symbol:          ''
+    - Opcode:          BIND_OPCODE_DONE
+      Imm:             0
+      Symbol:          ''
+    - Opcode:          BIND_OPCODE_DONE
+      Imm:             0
+      Symbol:          ''
+  ExportTrie:
+    TerminalSize:    0
+    NodeOffset:      0
+    Name:            ''
+    Flags:           0x0000000000000000
+    Address:         0x0000000000000000
+    Other:           0x0000000000000000
+    ImportName:      ''
+    Children:
+      - TerminalSize:    0
+        NodeOffset:      5
+        Name:            _
+        Flags:           0x0000000000000000
+        Address:         0x0000000000000000
+        Other:           0x0000000000000000
+        ImportName:      ''
+        Children:
+          - TerminalSize:    2
+            NodeOffset:      33
+            Name:            _mh_execute_header
+            Flags:           0x0000000000000000
+            Address:         0x0000000000000000
+            Other:           0x0000000000000000
+            ImportName:      ''
+          - TerminalSize:    3
+            NodeOffset:      37
+            Name:            main
+            Flags:           0x0000000000000000
+            Address:         0x0000000000000DE0
+            Other:           0x0000000000000000
+            ImportName:      ''
+  NameList:
+    - n_strx:          118
+      n_type:          0x1E
+      n_sect:          1
+      n_desc:          0
+      n_value:         4294970976
+    - n_strx:          133
+      n_type:          0x1E
+      n_sect:          1
+      n_desc:          0
+      n_value:         4294971008
+    - n_strx:          151
+      n_type:          0x1E
+      n_sect:          1
+      n_desc:          128
+      n_value:         4294971104
+    - n_strx:          199
+      n_type:          0x1E
+      n_sect:          4
+      n_desc:          128
+      n_value:         4294971298
+    - n_strx:          216
+      n_type:          0x1E
+      n_sect:          5
+      n_desc:          128
+      n_value:         4294971306
+    - n_strx:          244
+      n_type:          0x0E
+      n_sect:          10
+      n_desc:          0
+      n_value:         4294975512
+    - n_strx:          259
+      n_type:          0x1E
+      n_sect:          10
+      n_desc:          128
+      n_value:         4294975520
+    - n_strx:          271
+      n_type:          0x1E
+      n_sect:          11
+      n_desc:          0
+      n_value:         4294975528
+    - n_strx:          298
+      n_type:          0x1E
+      n_sect:          11
+      n_desc:          0
+      n_value:         4294975536
+    - n_strx:          325
+      n_type:          0x32
+      n_sect:          0
+      n_desc:          0
+      n_value:         1570141141
+    - n_strx:          540
+      n_type:          0x64
+      n_sect:          0
+      n_desc:          0
+      n_value:         0
+    - n_strx:          633
+      n_type:          0x64
+      n_sect:          0
+      n_desc:          0
+      n_value:         0
+    - n_strx:          644
+      n_type:          0x66
+      n_sect:          3
+      n_desc:          1
+      n_value:         1570141203
+    - n_strx:          1
+      n_type:          0x2E
+      n_sect:          1
+      n_desc:          0
+      n_value:         4294970848
+    - n_strx:          852
+      n_type:          0x24
+      n_sect:          1
+      n_desc:          0
+      n_value:         4294970848
+    - n_strx:          1
+      n_type:          0x24
+      n_sect:          0
+      n_desc:          0
+      n_value:         128
+    - n_strx:          1
+      n_type:          0x4E
+      n_sect:          1
+      n_desc:          0
+      n_value:         128
+    - n_strx:          1
+      n_type:          0x2E
+      n_sect:          1
+      n_desc:          0
+      n_value:         4294970976
+    - n_strx:          858
+      n_type:          0x24
+      n_sect:          1
+      n_desc:          0
+      n_value:         4294970976
+    - n_strx:          1
+      n_type:          0x24
+      n_sect:          0
+      n_desc:          0
+      n_value:         32
+    - n_strx:          1
+      n_type:          0x4E
+      n_sect:          1
+      n_desc:          0
+      n_value:         32
+    - n_strx:          1
+      n_type:          0x2E
+      n_sect:          1
+      n_desc:          0
+      n_value:         4294971008
+    - n_strx:          873
+      n_type:          0x24
+      n_sect:          1
+      n_desc:          0
+      n_value:         4294971008
+    - n_strx:          1
+      n_type:          0x24
+      n_sect:          0
+      n_desc:          0
+      n_value:         96
+    - n_strx:          1
+      n_type:          0x4E
+      n_sect:          1
+      n_desc:          0
+      n_value:         96
+    - n_strx:          1
+      n_type:          0x2E
+      n_sect:          1
+      n_desc:          0
+      n_value:         4294971104
+    - n_strx:          891
+      n_type:          0x24
+      n_sect:          1
+      n_desc:          0
+      n_value:         4294971104
+    - n_strx:          1
+      n_type:          0x24
+      n_sect:          0
+      n_desc:          0
+      n_value:         127
+    - n_strx:          1
+      n_type:          0x4E
+      n_sect:          1
+      n_desc:          0
+      n_value:         127
+    - n_strx:          939
+      n_type:          0x20
+      n_sect:          0
+      n_desc:          0
+      n_value:         0
+    - n_strx:          956
+      n_type:          0x20
+      n_sect:          0
+      n_desc:          0
+      n_value:         0
+    - n_strx:          984
+      n_type:          0x20
+      n_sect:          0
+      n_desc:          0
+      n_value:         0
+    - n_strx:          996
+      n_type:          0x20
+      n_sect:          0
+      n_desc:          0
+      n_value:         0
+    - n_strx:          1023
+      n_type:          0x20
+      n_sect:          0
+      n_desc:          0
+      n_value:         0
+    - n_strx:          1
+      n_type:          0x64
+      n_sect:          1
+      n_desc:          0
+      n_value:         0
+    - n_strx:          2
+      n_type:          0x0F
+      n_sect:          1
+      n_desc:          16
+      n_value:         4294967296
+    - n_strx:          22
+      n_type:          0x0F
+      n_sect:          1
+      n_desc:          0
+      n_value:         4294970848
+    - n_strx:          28
+      n_type:          0x01
+      n_sect:          0
+      n_desc:          768
+      n_value:         0
+    - n_strx:          47
+      n_type:          0x01
+      n_sect:          0
+      n_desc:          768
+      n_value:         0
+    - n_strx:          64
+      n_type:          0x01
+      n_sect:          0
+      n_desc:          768
+      n_value:         0
+    - n_strx:          101
+      n_type:          0x01
+      n_sect:          0
+      n_desc:          512
+      n_value:         0
+  StringTable:
+    - ' '
+    - __mh_execute_header
+    - _main
+    - _swift_beginAccess
+    - _swift_endAccess
+    - _swift_getTypeByMangledNameInContext
+    - dyld_stub_binder
+    - '_$s1a3useyyxlF'
+    - '_$s1a1fyySi_SiztF'
+    - ___swift_instantiateConcreteTypeFromMangledName
+    - _symbolic Si_Sit
+    - ___swift_reflection_version
+    - __dyld_private
+    - '_$sSi_SitMD'
+    - '_$s1a15global_constantSivp'
+    - '_$s1a15global_variableSivp'
+    - '/Volumes/Jonas/internal-stable/build/Ninja-RelWithDebInfoAssert+stdlib-RelWithDebInfo/lldb-macosx-x86_64/lldb-test-build.noindex/lang/swift/variables/let/TestSwiftLetConstants.test_let_constants_dwarf/a.swiftmodule'
+    - '/Volumes/Jonas/internal-stable/lldb/packages/Python/lldbsuite/test/lang/swift/variables/let/'
+    - main.swift
+    - '/Volumes/Jonas/internal-stable/build/Ninja-RelWithDebInfoAssert+stdlib-RelWithDebInfo/lldb-macosx-x86_64/lldb-test-build.noindex/lang/swift/variables/let/TestSwiftLetConstants.test_let_constants_dwarf/main.o'
+    - _main
+    - '_$s1a3useyyxlF'
+    - '_$s1a1fyySi_SiztF'
+    - ___swift_instantiateConcreteTypeFromMangledName
+    - _symbolic Si_Sit
+    - ___swift_reflection_version
+    - '_$sSi_SitMD'
+    - '_$s1a15global_constantSivp'
+    - '_$s1a15global_variableSivp'
+    - ''
+    - ''
+    - ''
+    - ''
+    - ''
+    - ''
+...
_______________________________________________
lldb-commits mailing list
lldb-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits

Reply via email to