[lld] r211681 - [mach-o] don't assume all sections have symbols

Tim Northover tnorthover at apple.com
Wed Jun 25 03:59:37 PDT 2014


Author: tnorthover
Date: Wed Jun 25 05:59:37 2014
New Revision: 211681

URL: http://llvm.org/viewvc/llvm-project?rev=211681&view=rev
Log:
[mach-o] don't assume all sections have symbols

We were trying to examine the first symbol in a section that we wanted to
atomize by symbols, even when there wasn't one. Instead, we should make the
initial anonymous symbol cover the entire section in that situation.

Added:
    lld/trunk/test/mach-o/parse-section-no-symbol.yaml
Modified:
    lld/trunk/lib/ReaderWriter/MachO/MachONormalizedFileToAtoms.cpp

Modified: lld/trunk/lib/ReaderWriter/MachO/MachONormalizedFileToAtoms.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/MachO/MachONormalizedFileToAtoms.cpp?rev=211681&r1=211680&r2=211681&view=diff
==============================================================================
--- lld/trunk/lib/ReaderWriter/MachO/MachONormalizedFileToAtoms.cpp (original)
+++ lld/trunk/lib/ReaderWriter/MachO/MachONormalizedFileToAtoms.cpp Wed Jun 25 05:59:37 2014
@@ -284,11 +284,13 @@ std::error_code processSymboledSection(D
   if (symbols.empty() && section.content.empty())
     return std::error_code();
 
-  const uint64_t firstSymbolAddr = symbols.front()->value;
-  if (firstSymbolAddr != section.address) {
+  uint64_t anonAtomEnd = symbols.empty()
+                             ? section.address + section.content.size()
+                             : (uint64_t)symbols.front()->value;
+  if (anonAtomEnd != section.address) {
     // Section has anonymous content before first symbol.
-    atomFromSymbol(atomType, section, file, section.address, StringRef(),
-                  0, Atom::scopeTranslationUnit, firstSymbolAddr, copyRefs);
+    atomFromSymbol(atomType, section, file, section.address, StringRef(), 0,
+                   Atom::scopeTranslationUnit, anonAtomEnd, copyRefs);
   }
 
   const Symbol *lastSym = nullptr;

Added: lld/trunk/test/mach-o/parse-section-no-symbol.yaml
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/mach-o/parse-section-no-symbol.yaml?rev=211681&view=auto
==============================================================================
--- lld/trunk/test/mach-o/parse-section-no-symbol.yaml (added)
+++ lld/trunk/test/mach-o/parse-section-no-symbol.yaml Wed Jun 25 05:59:37 2014
@@ -0,0 +1,23 @@
+# RUN: lld -flavor darwin -arch x86_64 -r %s -print_atoms -o %t2 | FileCheck %s
+#
+# Test parsing of mach-o functions with no symbols at all.
+#
+
+--- !mach-o
+arch:            x86_64
+file-type:       MH_OBJECT
+flags:           [ MH_SUBSECTIONS_VIA_SYMBOLS ]
+has-UUID:        false
+OS:              unknown
+sections:
+  - segment:         __TEXT
+    section:         __text
+    type:            S_REGULAR
+    attributes:      [ S_ATTR_PURE_INSTRUCTIONS, S_ATTR_SOME_INSTRUCTIONS ]
+    alignment:       4
+    address:         0x0000000000000000
+    content:         [ 0xCC ]
+...
+
+# CHECK-NOT:  name:
+# CHECK:      content:         [ CC ]





More information about the llvm-commits mailing list