return object_error::success;
}
-error_code MachOObjectFile::getSymbolNMTypeChar(DataRefImpl Symb,
- char &Res) const {
- nlist_base Entry = getSymbolTableEntryBase(this, Symb);
- uint8_t NType = Entry.n_type;
-
- char Char;
- switch (NType & MachO::N_TYPE) {
- case MachO::N_UNDF:
- Char = 'u';
- break;
- case MachO::N_ABS:
- Char = 's';
- break;
- case MachO::N_SECT: {
- section_iterator Sec = end_sections();
- getSymbolSection(Symb, Sec);
- DataRefImpl Ref = Sec->getRawDataRefImpl();
- StringRef SectionName;
- getSectionName(Ref, SectionName);
- StringRef SegmentName = getSectionFinalSegmentName(Ref);
- if (SegmentName == "__TEXT" && SectionName == "__text")
- Char = 't';
- else
- Char = 's';
- }
- break;
- default:
- Char = '?';
- break;
- }
-
- if (NType & (MachO::N_EXT | MachO::N_PEXT))
- Char = toupper(static_cast<unsigned char>(Char));
- Res = Char;
- return object_error::success;
-}
-
error_code MachOObjectFile::getSymbolFlags(DataRefImpl DRI,
uint32_t &Result) const {
nlist_base Entry = getSymbolTableEntryBase(this, DRI);
"GENERIC_RELOC_LOCAL_SECTDIFF",
"GENERIC_RELOC_TLV" };
- if (RType > 6)
+ if (RType > 5)
res = "Unknown";
else
res = Table[RType];
"PPC_RELOC_LO14_SECTDIFF",
"PPC_RELOC_LOCAL_SECTDIFF" };
- res = Table[RType];
+ if (RType > 15)
+ res = "Unknown";
+ else
+ res = Table[RType];
break;
}
case Triple::UnknownArch:
}
}
-ObjectFile *ObjectFile::createMachOObjectFile(MemoryBuffer *Buffer) {
+ErrorOr<ObjectFile *> ObjectFile::createMachOObjectFile(MemoryBuffer *Buffer) {
StringRef Magic = Buffer->getBuffer().slice(0, 4);
- error_code ec;
- OwningPtr<ObjectFile> Ret;
+ error_code EC;
+ OwningPtr<MachOObjectFile> Ret;
if (Magic == "\xFE\xED\xFA\xCE")
- Ret.reset(new MachOObjectFile(Buffer, false, false, ec));
+ Ret.reset(new MachOObjectFile(Buffer, false, false, EC));
else if (Magic == "\xCE\xFA\xED\xFE")
- Ret.reset(new MachOObjectFile(Buffer, true, false, ec));
+ Ret.reset(new MachOObjectFile(Buffer, true, false, EC));
else if (Magic == "\xFE\xED\xFA\xCF")
- Ret.reset(new MachOObjectFile(Buffer, false, true, ec));
+ Ret.reset(new MachOObjectFile(Buffer, false, true, EC));
else if (Magic == "\xCF\xFA\xED\xFE")
- Ret.reset(new MachOObjectFile(Buffer, true, true, ec));
+ Ret.reset(new MachOObjectFile(Buffer, true, true, EC));
else {
delete Buffer;
- return NULL;
+ return object_error::parse_failed;
}
- if (ec)
- return NULL;
+ if (EC)
+ return EC;
return Ret.take();
}