summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Object
diff options
context:
space:
mode:
authorDavid Majnemer <david.majnemer@gmail.com>2014-11-13 19:48:56 +0000
committerDavid Majnemer <david.majnemer@gmail.com>2014-11-13 19:48:56 +0000
commit73cc6ff54d68bf50859f90c084ec3922ae18e65a (patch)
treec18aa428d22fdac7c4b89110cdce98eb265a7adb /llvm/lib/Object
parent09e4972a37d7cdc72ffd30827db0e5796db5acfb (diff)
downloadbcm5719-llvm-73cc6ff54d68bf50859f90c084ec3922ae18e65a.tar.gz
bcm5719-llvm-73cc6ff54d68bf50859f90c084ec3922ae18e65a.zip
Object, Mach-O: Refactor and clean code up
Don't assert if we can return an error code, reuse existing functionality like is64Bit(). llvm-svn: 221915
Diffstat (limited to 'llvm/lib/Object')
-rw-r--r--llvm/lib/Object/MachOObjectFile.cpp37
1 files changed, 25 insertions, 12 deletions
diff --git a/llvm/lib/Object/MachOObjectFile.cpp b/llvm/lib/Object/MachOObjectFile.cpp
index b114e844794..bbef6390dde 100644
--- a/llvm/lib/Object/MachOObjectFile.cpp
+++ b/llvm/lib/Object/MachOObjectFile.cpp
@@ -242,20 +242,40 @@ MachOObjectFile::MachOObjectFile(MemoryBufferRef Object, bool IsLittleEndian,
MachOObjectFile::LoadCommandInfo Load = getFirstLoadCommandInfo();
for (unsigned I = 0; ; ++I) {
if (Load.C.cmd == MachO::LC_SYMTAB) {
- assert(!SymtabLoadCmd && "Multiple symbol tables");
+ // Multiple symbol tables
+ if (SymtabLoadCmd) {
+ EC = object_error::parse_failed;
+ return;
+ }
SymtabLoadCmd = Load.Ptr;
} else if (Load.C.cmd == MachO::LC_DYSYMTAB) {
- assert(!DysymtabLoadCmd && "Multiple dynamic symbol tables");
+ // Multiple dynamic symbol tables
+ if (DysymtabLoadCmd) {
+ EC = object_error::parse_failed;
+ return;
+ }
DysymtabLoadCmd = Load.Ptr;
} else if (Load.C.cmd == MachO::LC_DATA_IN_CODE) {
- assert(!DataInCodeLoadCmd && "Multiple data in code tables");
+ // Multiple data in code tables
+ if (DataInCodeLoadCmd) {
+ EC = object_error::parse_failed;
+ return;
+ }
DataInCodeLoadCmd = Load.Ptr;
} else if (Load.C.cmd == MachO::LC_DYLD_INFO ||
Load.C.cmd == MachO::LC_DYLD_INFO_ONLY) {
- assert(!DyldInfoLoadCmd && "Multiple dyldinfo load commands");
+ // Multiple dyldinfo load commands
+ if (DyldInfoLoadCmd) {
+ EC = object_error::parse_failed;
+ return;
+ }
DyldInfoLoadCmd = Load.Ptr;
} else if (Load.C.cmd == MachO::LC_UUID) {
- assert(!UuidLoadCmd && "Multiple UUID load commands");
+ // Multiple UUID load commands
+ if (UuidLoadCmd) {
+ EC = object_error::parse_failed;
+ return;
+ }
UuidLoadCmd = Load.Ptr;
} else if (Load.C.cmd == SegmentLoadType) {
uint32_t NumSections = getSegmentLoadCommandNumSections(this, Load);
@@ -1227,17 +1247,10 @@ StringRef MachOObjectFile::getFileFormatName() const {
case llvm::MachO::CPU_TYPE_POWERPC:
return "Mach-O 32-bit ppc";
default:
- assert((CPUType & llvm::MachO::CPU_ARCH_ABI64) == 0 &&
- "64-bit object file when we're not 64-bit?");
return "Mach-O 32-bit unknown";
}
}
- // Make sure the cpu type has the correct mask.
- assert((CPUType & llvm::MachO::CPU_ARCH_ABI64)
- == llvm::MachO::CPU_ARCH_ABI64 &&
- "32-bit object file when we're 64-bit?");
-
switch (CPUType) {
case llvm::MachO::CPU_TYPE_X86_64:
return "Mach-O 64-bit x86-64";
OpenPOWER on IntegriCloud