[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