}
}
-static void processSection(MachOFile &file, const Section §ion,
- bool copyRefs) {
+static error_code processSection(MachOFile &file, const Section §ion,
+ bool copyRefs) {
unsigned offset = 0;
switch (section.type) {
case llvm::MachO::S_REGULAR:
}
break;
case llvm::MachO::S_4BYTE_LITERALS:
- assert((section.content.size() % 4) == 0);
+ if ((section.content.size() % 4) != 0)
+ return llvm::make_error_code(llvm::errc::executable_format_error);
for (size_t i = 0, e = section.content.size(); i != e; i += 4) {
ArrayRef<uint8_t> byteContent = section.content.slice(offset, 4);
file.addDefinedAtom(StringRef(), DefinedAtom::scopeLinkageUnit,
}
break;
case llvm::MachO::S_8BYTE_LITERALS:
- assert((section.content.size() % 8) == 0);
+ if ((section.content.size() % 8) != 0)
+ return llvm::make_error_code(llvm::errc::executable_format_error);
for (size_t i = 0, e = section.content.size(); i != e; i += 8) {
ArrayRef<uint8_t> byteContent = section.content.slice(offset, 8);
file.addDefinedAtom(StringRef(), DefinedAtom::scopeLinkageUnit,
}
break;
case llvm::MachO::S_16BYTE_LITERALS:
- assert((section.content.size() % 16) == 0);
+ if ((section.content.size() % 16) != 0)
+ return llvm::make_error_code(llvm::errc::executable_format_error);
for (size_t i = 0, e = section.content.size(); i != e; i += 16) {
ArrayRef<uint8_t> byteContent = section.content.slice(offset, 16);
file.addDefinedAtom(StringRef(), DefinedAtom::scopeLinkageUnit,
}
break;
default:
- llvm_unreachable("mach-o section type not supported");
+ llvm_unreachable("mach-o section type not supported yet");
break;
}
+ return error_code::success();
}
static ErrorOr<std::unique_ptr<lld::File>>
}
// Create atoms from sections that don't have symbols.
for (auto § : normalizedFile.sections) {
- processSection(*file, sect, copyRefs);
+ if (error_code ec = processSection(*file, sect, copyRefs))
+ return ec;
}
return std::unique_ptr<File>(std::move(file));
--- /dev/null
+# RUN: not lld -flavor darwin -arch x86_64 -r -print_atoms %s -o %t 2> %t.err
+# RUN: FileCheck %s < %t.err
+#
+# Test for error if literal section is not correct size mulitple.
+#
+
+--- !mach-o
+arch: x86_64
+file-type: MH_OBJECT
+flags: [ MH_SUBSECTIONS_VIA_SYMBOLS ]
+has-UUID: false
+OS: unknown
+sections:
+ - segment: __TEXT
+ section: __literal8
+ type: S_8BYTE_LITERALS
+ attributes: [ ]
+ alignment: 0
+ address: 0x0000000000000120
+ content: [ 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,
+ 0x28, 0x29, 0x2A, 0x2B, 0x2C, 0x2D ]
+...
+
+# CHECK: error:
+