Object, Mach-O: Refactor and clean code up

Don't assert if we can return an error code, reuse existing
functionality like is64Bit().

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@221915 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
David Majnemer
2014-11-13 19:48:56 +00:00
parent 89a5f54f1d
commit 4141e003f9
2 changed files with 32 additions and 18 deletions

View File

@ -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";