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;
--- /dev/null
+# 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 ]