mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-07-19 02:25:01 +00:00
Convert a few methods to use ErrorOr.
It used to be inconvenient to mix ErrorOr and UniquePtr, but with c++11 they work OK together. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@211532 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -57,7 +57,7 @@ public:
|
|||||||
return Triple::getArchTypeName(MachOObjectFile::getArch(Header.cputype));
|
return Triple::getArchTypeName(MachOObjectFile::getArch(Header.cputype));
|
||||||
}
|
}
|
||||||
|
|
||||||
std::error_code getAsObjectFile(std::unique_ptr<ObjectFile> &Result) const;
|
ErrorOr<std::unique_ptr<ObjectFile>> getAsObjectFile() const;
|
||||||
|
|
||||||
std::error_code getAsArchive(std::unique_ptr<Archive> &Result) const;
|
std::error_code getAsArchive(std::unique_ptr<Archive> &Result) const;
|
||||||
};
|
};
|
||||||
@@ -100,8 +100,8 @@ public:
|
|||||||
return V->isMachOUniversalBinary();
|
return V->isMachOUniversalBinary();
|
||||||
}
|
}
|
||||||
|
|
||||||
std::error_code getObjectForArch(Triple::ArchType Arch,
|
ErrorOr<std::unique_ptr<ObjectFile>>
|
||||||
std::unique_ptr<ObjectFile> &Result) const;
|
getObjectForArch(Triple::ArchType Arch) const;
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@@ -67,19 +67,15 @@ MachOUniversalBinary::ObjectForArch::ObjectForArch(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
std::error_code MachOUniversalBinary::ObjectForArch::getAsObjectFile(
|
ErrorOr<std::unique_ptr<ObjectFile>>
|
||||||
std::unique_ptr<ObjectFile> &Result) const {
|
MachOUniversalBinary::ObjectForArch::getAsObjectFile() const {
|
||||||
if (Parent) {
|
if (Parent) {
|
||||||
StringRef ParentData = Parent->getData();
|
StringRef ParentData = Parent->getData();
|
||||||
StringRef ObjectData = ParentData.substr(Header.offset, Header.size);
|
StringRef ObjectData = ParentData.substr(Header.offset, Header.size);
|
||||||
std::string ObjectName = Parent->getFileName().str();
|
std::string ObjectName = Parent->getFileName().str();
|
||||||
MemoryBuffer *ObjBuffer = MemoryBuffer::getMemBuffer(
|
MemoryBuffer *ObjBuffer = MemoryBuffer::getMemBuffer(
|
||||||
ObjectData, ObjectName, false);
|
ObjectData, ObjectName, false);
|
||||||
ErrorOr<ObjectFile *> Obj = ObjectFile::createMachOObjectFile(ObjBuffer);
|
return ObjectFile::createMachOObjectFile(ObjBuffer);
|
||||||
if (std::error_code EC = Obj.getError())
|
|
||||||
return EC;
|
|
||||||
Result.reset(Obj.get());
|
|
||||||
return object_error::success;
|
|
||||||
}
|
}
|
||||||
return object_error::parse_failed;
|
return object_error::parse_failed;
|
||||||
}
|
}
|
||||||
@@ -145,14 +141,14 @@ static bool getCTMForArch(Triple::ArchType Arch, MachO::CPUType &CTM) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
std::error_code MachOUniversalBinary::getObjectForArch(
|
ErrorOr<std::unique_ptr<ObjectFile>>
|
||||||
Triple::ArchType Arch, std::unique_ptr<ObjectFile> &Result) const {
|
MachOUniversalBinary::getObjectForArch(Triple::ArchType Arch) const {
|
||||||
MachO::CPUType CTM;
|
MachO::CPUType CTM;
|
||||||
if (!getCTMForArch(Arch, CTM))
|
if (!getCTMForArch(Arch, CTM))
|
||||||
return object_error::arch_not_found;
|
return object_error::arch_not_found;
|
||||||
for (object_iterator I = begin_objects(), E = end_objects(); I != E; ++I) {
|
for (object_iterator I = begin_objects(), E = end_objects(); I != E; ++I) {
|
||||||
if (I->getCPUType() == static_cast<uint32_t>(CTM))
|
if (I->getCPUType() == static_cast<uint32_t>(CTM))
|
||||||
return I->getAsObjectFile(Result);
|
return I->getAsObjectFile();
|
||||||
}
|
}
|
||||||
return object_error::arch_not_found;
|
return object_error::arch_not_found;
|
||||||
}
|
}
|
||||||
|
@@ -773,9 +773,10 @@ static void dumpSymbolNamesFromFile(std::string &Filename) {
|
|||||||
for (MachOUniversalBinary::object_iterator I = UB->begin_objects(),
|
for (MachOUniversalBinary::object_iterator I = UB->begin_objects(),
|
||||||
E = UB->end_objects();
|
E = UB->end_objects();
|
||||||
I != E; ++I) {
|
I != E; ++I) {
|
||||||
std::unique_ptr<ObjectFile> Obj;
|
ErrorOr<std::unique_ptr<ObjectFile>> ObjOrErr = I->getAsObjectFile();
|
||||||
std::unique_ptr<Archive> A;
|
std::unique_ptr<Archive> A;
|
||||||
if (!I->getAsObjectFile(Obj)) {
|
if (ObjOrErr) {
|
||||||
|
std::unique_ptr<ObjectFile> Obj = std::move(ObjOrErr.get());
|
||||||
if (moreThanOneArch)
|
if (moreThanOneArch)
|
||||||
outs() << "\n";
|
outs() << "\n";
|
||||||
outs() << Obj->getFileName();
|
outs() << Obj->getFileName();
|
||||||
|
@@ -466,9 +466,9 @@ static void PrintFileSectionSizes(StringRef file) {
|
|||||||
for (MachOUniversalBinary::object_iterator I = UB->begin_objects(),
|
for (MachOUniversalBinary::object_iterator I = UB->begin_objects(),
|
||||||
E = UB->end_objects();
|
E = UB->end_objects();
|
||||||
I != E; ++I) {
|
I != E; ++I) {
|
||||||
std::unique_ptr<ObjectFile> UO;
|
ErrorOr<std::unique_ptr<ObjectFile>> UO = I->getAsObjectFile();
|
||||||
std::unique_ptr<Archive> UA;
|
std::unique_ptr<Archive> UA;
|
||||||
if (!I->getAsObjectFile(UO)) {
|
if (UO) {
|
||||||
if (ObjectFile *o = dyn_cast<ObjectFile>(&*UO.get())) {
|
if (ObjectFile *o = dyn_cast<ObjectFile>(&*UO.get())) {
|
||||||
MachOObjectFile *MachO = dyn_cast<MachOObjectFile>(o);
|
MachOObjectFile *MachO = dyn_cast<MachOObjectFile>(o);
|
||||||
if (OutputFormat == sysv)
|
if (OutputFormat == sysv)
|
||||||
|
@@ -349,10 +349,11 @@ LLVMSymbolizer::getObjectFileFromBinary(Binary *Bin, const std::string &ArchName
|
|||||||
std::make_pair(UB, ArchName));
|
std::make_pair(UB, ArchName));
|
||||||
if (I != ObjectFileForArch.end())
|
if (I != ObjectFileForArch.end())
|
||||||
return I->second;
|
return I->second;
|
||||||
std::unique_ptr<ObjectFile> ParsedObj;
|
ErrorOr<std::unique_ptr<ObjectFile>> ParsedObj =
|
||||||
if (!UB->getObjectForArch(Triple(ArchName).getArch(), ParsedObj)) {
|
UB->getObjectForArch(Triple(ArchName).getArch());
|
||||||
Res = ParsedObj.get();
|
if (ParsedObj) {
|
||||||
ParsedBinariesAndObjects.push_back(std::move(ParsedObj));
|
Res = ParsedObj.get().get();
|
||||||
|
ParsedBinariesAndObjects.push_back(std::move(ParsedObj.get()));
|
||||||
}
|
}
|
||||||
ObjectFileForArch[std::make_pair(UB, ArchName)] = Res;
|
ObjectFileForArch[std::make_pair(UB, ArchName)] = Res;
|
||||||
} else if (Bin->isObject()) {
|
} else if (Bin->isObject()) {
|
||||||
|
Reference in New Issue
Block a user