[Lldb-commits] [lldb] r373810 - [MachO] Reduce indentation further in ParseSymtab (NFC)

Jonas Devlieghere via lldb-commits lldb-commits at lists.llvm.org
Fri Oct 4 16:09:56 PDT 2019


Author: jdevlieghere
Date: Fri Oct  4 16:09:55 2019
New Revision: 373810

URL: http://llvm.org/viewvc/llvm-project?rev=373810&view=rev
Log:
[MachO] Reduce indentation further in ParseSymtab (NFC)

Modified:
    lldb/trunk/source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.cpp

Modified: lldb/trunk/source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.cpp?rev=373810&r1=373809&r2=373810&view=diff
==============================================================================
--- lldb/trunk/source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.cpp (original)
+++ lldb/trunk/source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.cpp Fri Oct  4 16:09:55 2019
@@ -2038,8 +2038,9 @@ UUID ObjectFileMachO::GetSharedCacheUUID
   return dsc_uuid;
 }
 
-bool ParseNList(DataExtractor &nlist_data, lldb::offset_t &nlist_data_offset,
-                size_t nlist_byte_size, struct nlist_64 &nlist) {
+static bool 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;
   nlist.n_strx = nlist_data.GetU32_unchecked(&nlist_data_offset);
@@ -4268,205 +4269,205 @@ size_t ObjectFileMachO::ParseSymtab() {
         }
       }
 
-      if (add_nlist) {
-        uint64_t symbol_value = nlist.n_value;
+      if (!add_nlist) {
+        sym[sym_idx].Clear();
+        continue;
+      }
 
-        if (symbol_name_non_abi_mangled) {
-          sym[sym_idx].GetMangled().SetMangledName(
-              ConstString(symbol_name_non_abi_mangled));
-          sym[sym_idx].GetMangled().SetDemangledName(ConstString(symbol_name));
-        } else {
-          bool symbol_name_is_mangled = false;
-
-          if (symbol_name && symbol_name[0] == '_') {
-            symbol_name_is_mangled = symbol_name[1] == '_';
-            symbol_name++; // Skip the leading underscore
-          }
+      uint64_t symbol_value = nlist.n_value;
 
-          if (symbol_name) {
-            ConstString const_symbol_name(symbol_name);
-            sym[sym_idx].GetMangled().SetValue(const_symbol_name,
-                                               symbol_name_is_mangled);
-          }
+      if (symbol_name_non_abi_mangled) {
+        sym[sym_idx].GetMangled().SetMangledName(
+            ConstString(symbol_name_non_abi_mangled));
+        sym[sym_idx].GetMangled().SetDemangledName(ConstString(symbol_name));
+      } else {
+        bool symbol_name_is_mangled = false;
+
+        if (symbol_name && symbol_name[0] == '_') {
+          symbol_name_is_mangled = symbol_name[1] == '_';
+          symbol_name++; // Skip the leading underscore
         }
 
-        if (is_gsym) {
-          const char *gsym_name =
-              sym[sym_idx]
-                  .GetMangled()
-                  .GetName(lldb::eLanguageTypeUnknown, Mangled::ePreferMangled)
-                  .GetCString();
-          if (gsym_name)
-            N_GSYM_name_to_sym_idx[gsym_name] = sym_idx;
+        if (symbol_name) {
+          ConstString const_symbol_name(symbol_name);
+          sym[sym_idx].GetMangled().SetValue(const_symbol_name,
+                                             symbol_name_is_mangled);
         }
+      }
 
-        if (symbol_section) {
-          const addr_t section_file_addr = symbol_section->GetFileAddress();
-          if (symbol_byte_size == 0 && function_starts_count > 0) {
-            addr_t symbol_lookup_file_addr = nlist.n_value;
-            // Do an exact address match for non-ARM addresses, else get the
-            // closest since the symbol might be a thumb symbol which has an
-            // address with bit zero set
-            FunctionStarts::Entry *func_start_entry =
-                function_starts.FindEntry(symbol_lookup_file_addr, !is_arm);
-            if (is_arm && func_start_entry) {
-              // Verify that the function start address is the symbol address
-              // (ARM) or the symbol address + 1 (thumb)
-              if (func_start_entry->addr != symbol_lookup_file_addr &&
-                  func_start_entry->addr != (symbol_lookup_file_addr + 1)) {
-                // Not the right entry, NULL it out...
-                func_start_entry = nullptr;
-              }
+      if (is_gsym) {
+        const char *gsym_name =
+            sym[sym_idx]
+                .GetMangled()
+                .GetName(lldb::eLanguageTypeUnknown, Mangled::ePreferMangled)
+                .GetCString();
+        if (gsym_name)
+          N_GSYM_name_to_sym_idx[gsym_name] = sym_idx;
+      }
+
+      if (symbol_section) {
+        const addr_t section_file_addr = symbol_section->GetFileAddress();
+        if (symbol_byte_size == 0 && function_starts_count > 0) {
+          addr_t symbol_lookup_file_addr = nlist.n_value;
+          // Do an exact address match for non-ARM addresses, else get the
+          // closest since the symbol might be a thumb symbol which has an
+          // address with bit zero set.
+          FunctionStarts::Entry *func_start_entry =
+              function_starts.FindEntry(symbol_lookup_file_addr, !is_arm);
+          if (is_arm && func_start_entry) {
+            // Verify that the function start address is the symbol address
+            // (ARM) or the symbol address + 1 (thumb).
+            if (func_start_entry->addr != symbol_lookup_file_addr &&
+                func_start_entry->addr != (symbol_lookup_file_addr + 1)) {
+              // Not the right entry, NULL it out...
+              func_start_entry = nullptr;
             }
-            if (func_start_entry) {
-              func_start_entry->data = true;
+          }
+          if (func_start_entry) {
+            func_start_entry->data = true;
 
-              addr_t symbol_file_addr = func_start_entry->addr;
+            addr_t symbol_file_addr = func_start_entry->addr;
+            if (is_arm)
+              symbol_file_addr &= THUMB_ADDRESS_BIT_MASK;
+
+            const FunctionStarts::Entry *next_func_start_entry =
+                function_starts.FindNextEntry(func_start_entry);
+            const addr_t section_end_file_addr =
+                section_file_addr + symbol_section->GetByteSize();
+            if (next_func_start_entry) {
+              addr_t next_symbol_file_addr = next_func_start_entry->addr;
+              // Be sure the clear the Thumb address bit when we calculate the
+              // size from the current and next address
               if (is_arm)
-                symbol_file_addr &= THUMB_ADDRESS_BIT_MASK;
-
-              const FunctionStarts::Entry *next_func_start_entry =
-                  function_starts.FindNextEntry(func_start_entry);
-              const addr_t section_end_file_addr =
-                  section_file_addr + symbol_section->GetByteSize();
-              if (next_func_start_entry) {
-                addr_t next_symbol_file_addr = next_func_start_entry->addr;
-                // Be sure the clear the Thumb address bit when we calculate
-                // the size from the current and next address
-                if (is_arm)
-                  next_symbol_file_addr &= THUMB_ADDRESS_BIT_MASK;
-                symbol_byte_size = std::min<lldb::addr_t>(
-                    next_symbol_file_addr - symbol_file_addr,
-                    section_end_file_addr - symbol_file_addr);
-              } else {
-                symbol_byte_size = section_end_file_addr - symbol_file_addr;
-              }
+                next_symbol_file_addr &= THUMB_ADDRESS_BIT_MASK;
+              symbol_byte_size = std::min<lldb::addr_t>(
+                  next_symbol_file_addr - symbol_file_addr,
+                  section_end_file_addr - symbol_file_addr);
+            } else {
+              symbol_byte_size = section_end_file_addr - symbol_file_addr;
             }
           }
-          symbol_value -= section_file_addr;
         }
+        symbol_value -= section_file_addr;
+      }
 
-        if (!is_debug) {
-          if (type == eSymbolTypeCode) {
-            // See if we can find a N_FUN entry for any code symbols. If we
-            // do find a match, and the name matches, then we can merge the
-            // two into just the function symbol to avoid duplicate entries
-            // in the symbol table
-            std::pair<ValueToSymbolIndexMap::const_iterator,
-                      ValueToSymbolIndexMap::const_iterator>
-                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, Mangled::ePreferMangled) ==
-                    sym[pos->second].GetMangled().GetName(
-                        lldb::eLanguageTypeUnknown, Mangled::ePreferMangled)) {
-                  m_nlist_idx_to_sym_idx[nlist_idx] = pos->second;
-                  // We just need the flags from the linker symbol, so put
-                  // these flags into the N_FUN flags to avoid duplicate
-                  // symbols in the symbol table
-                  sym[pos->second].SetExternal(sym[sym_idx].IsExternal());
-                  sym[pos->second].SetFlags(nlist.n_type << 16 | nlist.n_desc);
-                  if (resolver_addresses.find(nlist.n_value) !=
-                      resolver_addresses.end())
-                    sym[pos->second].SetType(eSymbolTypeResolver);
-                  sym[sym_idx].Clear();
-                  found_it = true;
-                  break;
-                }
+      if (!is_debug) {
+        if (type == eSymbolTypeCode) {
+          // See if we can find a N_FUN entry for any code symbols. If we do
+          // find a match, and the name matches, then we can merge the two into
+          // just the function symbol to avoid duplicate entries in the symbol
+          // table.
+          std::pair<ValueToSymbolIndexMap::const_iterator,
+                    ValueToSymbolIndexMap::const_iterator>
+              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,
+                                                    Mangled::ePreferMangled) ==
+                  sym[pos->second].GetMangled().GetName(
+                      lldb::eLanguageTypeUnknown, Mangled::ePreferMangled)) {
+                m_nlist_idx_to_sym_idx[nlist_idx] = pos->second;
+                // We just need the flags from the linker symbol, so put these
+                // flags into the N_FUN flags to avoid duplicate symbols in the
+                // symbol table.
+                sym[pos->second].SetExternal(sym[sym_idx].IsExternal());
+                sym[pos->second].SetFlags(nlist.n_type << 16 | nlist.n_desc);
+                if (resolver_addresses.find(nlist.n_value) !=
+                    resolver_addresses.end())
+                  sym[pos->second].SetType(eSymbolTypeResolver);
+                sym[sym_idx].Clear();
+                found_it = true;
+                break;
               }
-              if (found_it)
-                continue;
-            } else {
-              if (resolver_addresses.find(nlist.n_value) !=
-                  resolver_addresses.end())
-                type = eSymbolTypeResolver;
             }
-          } else if (type == eSymbolTypeData || type == eSymbolTypeObjCClass ||
-                     type == eSymbolTypeObjCMetaClass ||
-                     type == eSymbolTypeObjCIVar) {
-            // See if we can find a N_STSYM entry for any data symbols. If we
-            // do find a match, and the name matches, then we can merge the
-            // two into just the Static symbol to avoid duplicate entries in
-            // the symbol table
-            std::pair<ValueToSymbolIndexMap::const_iterator,
-                      ValueToSymbolIndexMap::const_iterator>
-                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, Mangled::ePreferMangled) ==
-                    sym[pos->second].GetMangled().GetName(
-                        lldb::eLanguageTypeUnknown, Mangled::ePreferMangled)) {
-                  m_nlist_idx_to_sym_idx[nlist_idx] = pos->second;
-                  // We just need the flags from the linker symbol, so put
-                  // these flags into the N_STSYM flags to avoid duplicate
-                  // symbols in the symbol table
-                  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;
-                }
+            if (found_it)
+              continue;
+          } else {
+            if (resolver_addresses.find(nlist.n_value) !=
+                resolver_addresses.end())
+              type = eSymbolTypeResolver;
+          }
+        } else if (type == eSymbolTypeData || type == eSymbolTypeObjCClass ||
+                   type == eSymbolTypeObjCMetaClass ||
+                   type == eSymbolTypeObjCIVar) {
+          // See if we can find a N_STSYM entry for any data symbols. If we do
+          // find a match, and the name matches, then we can merge the two into
+          // just the Static symbol to avoid duplicate entries in the symbol
+          // table.
+          std::pair<ValueToSymbolIndexMap::const_iterator,
+                    ValueToSymbolIndexMap::const_iterator>
+              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,
+                                                    Mangled::ePreferMangled) ==
+                  sym[pos->second].GetMangled().GetName(
+                      lldb::eLanguageTypeUnknown, Mangled::ePreferMangled)) {
+                m_nlist_idx_to_sym_idx[nlist_idx] = pos->second;
+                // We just need the flags from the linker symbol, so put these
+                // flags into the N_STSYM flags to avoid duplicate symbols in
+                // the symbol table.
+                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;
               }
-              if (found_it)
+            }
+            if (found_it)
+              continue;
+          } else {
+            // Combine N_GSYM stab entries with the non stab symbol.
+            const char *gsym_name = sym[sym_idx]
+                                        .GetMangled()
+                                        .GetName(lldb::eLanguageTypeUnknown,
+                                                 Mangled::ePreferMangled)
+                                        .GetCString();
+            if (gsym_name) {
+              ConstNameToSymbolIndexMap::const_iterator pos =
+                  N_GSYM_name_to_sym_idx.find(gsym_name);
+              if (pos != N_GSYM_name_to_sym_idx.end()) {
+                const uint32_t GSYM_sym_idx = pos->second;
+                m_nlist_idx_to_sym_idx[nlist_idx] = GSYM_sym_idx;
+                // Copy the address, because often the N_GSYM address has an
+                // invalid address of zero when the global is a common symbol.
+                sym[GSYM_sym_idx].GetAddressRef().SetSection(symbol_section);
+                sym[GSYM_sym_idx].GetAddressRef().SetOffset(symbol_value);
+                // We just need the flags from the linker symbol, so put these
+                // flags into the N_GSYM flags to avoid duplicate symbols in
+                // the symbol table.
+                sym[GSYM_sym_idx].SetFlags(nlist.n_type << 16 | nlist.n_desc);
+                sym[sym_idx].Clear();
                 continue;
-            } else {
-              // Combine N_GSYM stab entries with the non stab symbol
-              const char *gsym_name = sym[sym_idx]
-                                          .GetMangled()
-                                          .GetName(lldb::eLanguageTypeUnknown,
-                                                   Mangled::ePreferMangled)
-                                          .GetCString();
-              if (gsym_name) {
-                ConstNameToSymbolIndexMap::const_iterator pos =
-                    N_GSYM_name_to_sym_idx.find(gsym_name);
-                if (pos != N_GSYM_name_to_sym_idx.end()) {
-                  const uint32_t GSYM_sym_idx = pos->second;
-                  m_nlist_idx_to_sym_idx[nlist_idx] = GSYM_sym_idx;
-                  // Copy the address, because often the N_GSYM address has
-                  // an invalid address of zero when the global is a common
-                  // symbol
-                  sym[GSYM_sym_idx].GetAddressRef().SetSection(symbol_section);
-                  sym[GSYM_sym_idx].GetAddressRef().SetOffset(symbol_value);
-                  // We just need the flags from the linker symbol, so put
-                  // these flags into the N_GSYM flags to avoid duplicate
-                  // symbols in the symbol table
-                  sym[GSYM_sym_idx].SetFlags(nlist.n_type << 16 | nlist.n_desc);
-                  sym[sym_idx].Clear();
-                  continue;
-                }
               }
             }
           }
         }
+      }
 
-        sym[sym_idx].SetID(nlist_idx);
-        sym[sym_idx].SetType(type);
-        if (set_value) {
-          sym[sym_idx].GetAddressRef().SetSection(symbol_section);
-          sym[sym_idx].GetAddressRef().SetOffset(symbol_value);
-        }
-        sym[sym_idx].SetFlags(nlist.n_type << 16 | nlist.n_desc);
-        if (nlist.n_desc & N_WEAK_REF)
-          sym[sym_idx].SetIsWeak(true);
+      sym[sym_idx].SetID(nlist_idx);
+      sym[sym_idx].SetType(type);
+      if (set_value) {
+        sym[sym_idx].GetAddressRef().SetSection(symbol_section);
+        sym[sym_idx].GetAddressRef().SetOffset(symbol_value);
+      }
+      sym[sym_idx].SetFlags(nlist.n_type << 16 | nlist.n_desc);
+      if (nlist.n_desc & N_WEAK_REF)
+        sym[sym_idx].SetIsWeak(true);
 
-        if (symbol_byte_size > 0)
-          sym[sym_idx].SetByteSize(symbol_byte_size);
+      if (symbol_byte_size > 0)
+        sym[sym_idx].SetByteSize(symbol_byte_size);
 
-        if (demangled_is_synthesized)
-          sym[sym_idx].SetDemangledNameIsSynthesized(true);
+      if (demangled_is_synthesized)
+        sym[sym_idx].SetDemangledNameIsSynthesized(true);
 
-        ++sym_idx;
-      } else {
-        sym[sym_idx].Clear();
-      }
+      ++sym_idx;
     }
 
     for (const auto &pos : reexport_shlib_needs_fixup) {




More information about the lldb-commits mailing list