mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-06-25 00:24:26 +00:00
Return ErrorOr<std::unique_ptr<Archive>> form getAsArchive.
This is the same return type of Archive::create. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@223827 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@ -58,7 +58,7 @@ public:
|
|||||||
|
|
||||||
ErrorOr<std::unique_ptr<MachOObjectFile>> getAsObjectFile() const;
|
ErrorOr<std::unique_ptr<MachOObjectFile>> getAsObjectFile() const;
|
||||||
|
|
||||||
std::error_code getAsArchive(std::unique_ptr<Archive> &Result) const;
|
ErrorOr<std::unique_ptr<Archive>> getAsArchive() const;
|
||||||
};
|
};
|
||||||
|
|
||||||
class object_iterator {
|
class object_iterator {
|
||||||
|
@ -79,20 +79,16 @@ MachOUniversalBinary::ObjectForArch::getAsObjectFile() const {
|
|||||||
return object_error::parse_failed;
|
return object_error::parse_failed;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::error_code MachOUniversalBinary::ObjectForArch::getAsArchive(
|
ErrorOr<std::unique_ptr<Archive>>
|
||||||
std::unique_ptr<Archive> &Result) const {
|
MachOUniversalBinary::ObjectForArch::getAsArchive() const {
|
||||||
if (Parent) {
|
if (!Parent)
|
||||||
|
return object_error::parse_failed;
|
||||||
|
|
||||||
StringRef ParentData = Parent->getData();
|
StringRef ParentData = Parent->getData();
|
||||||
StringRef ObjectData = ParentData.substr(Header.offset, Header.size);
|
StringRef ObjectData = ParentData.substr(Header.offset, Header.size);
|
||||||
StringRef ObjectName = Parent->getFileName();
|
StringRef ObjectName = Parent->getFileName();
|
||||||
MemoryBufferRef ObjBuffer(ObjectData, ObjectName);
|
MemoryBufferRef ObjBuffer(ObjectData, ObjectName);
|
||||||
ErrorOr<std::unique_ptr<Archive>> Obj = Archive::create(ObjBuffer);
|
return Archive::create(ObjBuffer);
|
||||||
if (std::error_code EC = Obj.getError())
|
|
||||||
return EC;
|
|
||||||
Result = std::move(Obj.get());
|
|
||||||
return object_error::success;
|
|
||||||
}
|
|
||||||
return object_error::parse_failed;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void MachOUniversalBinary::anchor() { }
|
void MachOUniversalBinary::anchor() { }
|
||||||
|
@ -1069,7 +1069,6 @@ static void dumpSymbolNamesFromFile(std::string &Filename) {
|
|||||||
ArchFound = true;
|
ArchFound = true;
|
||||||
ErrorOr<std::unique_ptr<ObjectFile>> ObjOrErr =
|
ErrorOr<std::unique_ptr<ObjectFile>> ObjOrErr =
|
||||||
I->getAsObjectFile();
|
I->getAsObjectFile();
|
||||||
std::unique_ptr<Archive> A;
|
|
||||||
std::string ArchiveName;
|
std::string ArchiveName;
|
||||||
std::string ArchitectureName;
|
std::string ArchitectureName;
|
||||||
ArchiveName.clear();
|
ArchiveName.clear();
|
||||||
@ -1086,7 +1085,9 @@ static void dumpSymbolNamesFromFile(std::string &Filename) {
|
|||||||
}
|
}
|
||||||
dumpSymbolNamesFromObject(Obj, false, ArchiveName,
|
dumpSymbolNamesFromObject(Obj, false, ArchiveName,
|
||||||
ArchitectureName);
|
ArchitectureName);
|
||||||
} else if (!I->getAsArchive(A)) {
|
} else if (ErrorOr<std::unique_ptr<Archive>> AOrErr =
|
||||||
|
I->getAsArchive()) {
|
||||||
|
std::unique_ptr<Archive> &A = *AOrErr;
|
||||||
for (Archive::child_iterator AI = A->child_begin(),
|
for (Archive::child_iterator AI = A->child_begin(),
|
||||||
AE = A->child_end();
|
AE = A->child_end();
|
||||||
AI != AE; ++AI) {
|
AI != AE; ++AI) {
|
||||||
@ -1133,13 +1134,14 @@ static void dumpSymbolNamesFromFile(std::string &Filename) {
|
|||||||
I != E; ++I) {
|
I != E; ++I) {
|
||||||
if (HostArchName == I->getArchTypeName()) {
|
if (HostArchName == I->getArchTypeName()) {
|
||||||
ErrorOr<std::unique_ptr<ObjectFile>> ObjOrErr = I->getAsObjectFile();
|
ErrorOr<std::unique_ptr<ObjectFile>> ObjOrErr = I->getAsObjectFile();
|
||||||
std::unique_ptr<Archive> A;
|
|
||||||
std::string ArchiveName;
|
std::string ArchiveName;
|
||||||
ArchiveName.clear();
|
ArchiveName.clear();
|
||||||
if (ObjOrErr) {
|
if (ObjOrErr) {
|
||||||
ObjectFile &Obj = *ObjOrErr.get();
|
ObjectFile &Obj = *ObjOrErr.get();
|
||||||
dumpSymbolNamesFromObject(Obj, false);
|
dumpSymbolNamesFromObject(Obj, false);
|
||||||
} else if (!I->getAsArchive(A)) {
|
} else if (ErrorOr<std::unique_ptr<Archive>> AOrErr =
|
||||||
|
I->getAsArchive()) {
|
||||||
|
std::unique_ptr<Archive> &A = *AOrErr;
|
||||||
for (Archive::child_iterator AI = A->child_begin(),
|
for (Archive::child_iterator AI = A->child_begin(),
|
||||||
AE = A->child_end();
|
AE = A->child_end();
|
||||||
AI != AE; ++AI) {
|
AI != AE; ++AI) {
|
||||||
@ -1170,7 +1172,6 @@ static void dumpSymbolNamesFromFile(std::string &Filename) {
|
|||||||
E = UB->end_objects();
|
E = UB->end_objects();
|
||||||
I != E; ++I) {
|
I != E; ++I) {
|
||||||
ErrorOr<std::unique_ptr<ObjectFile>> ObjOrErr = I->getAsObjectFile();
|
ErrorOr<std::unique_ptr<ObjectFile>> ObjOrErr = I->getAsObjectFile();
|
||||||
std::unique_ptr<Archive> A;
|
|
||||||
std::string ArchiveName;
|
std::string ArchiveName;
|
||||||
std::string ArchitectureName;
|
std::string ArchitectureName;
|
||||||
ArchiveName.clear();
|
ArchiveName.clear();
|
||||||
@ -1189,7 +1190,8 @@ static void dumpSymbolNamesFromFile(std::string &Filename) {
|
|||||||
outs() << ":\n";
|
outs() << ":\n";
|
||||||
}
|
}
|
||||||
dumpSymbolNamesFromObject(Obj, false, ArchiveName, ArchitectureName);
|
dumpSymbolNamesFromObject(Obj, false, ArchiveName, ArchitectureName);
|
||||||
} else if (!I->getAsArchive(A)) {
|
} else if (ErrorOr<std::unique_ptr<Archive>> AOrErr = I->getAsArchive()) {
|
||||||
|
std::unique_ptr<Archive> &A = *AOrErr;
|
||||||
for (Archive::child_iterator AI = A->child_begin(), AE = A->child_end();
|
for (Archive::child_iterator AI = A->child_begin(), AE = A->child_end();
|
||||||
AI != AE; ++AI) {
|
AI != AE; ++AI) {
|
||||||
ErrorOr<std::unique_ptr<Binary>> ChildOrErr =
|
ErrorOr<std::unique_ptr<Binary>> ChildOrErr =
|
||||||
|
@ -340,7 +340,6 @@ void llvm::DisassembleInputMachO(StringRef Filename) {
|
|||||||
ArchFound = true;
|
ArchFound = true;
|
||||||
ErrorOr<std::unique_ptr<ObjectFile>> ObjOrErr =
|
ErrorOr<std::unique_ptr<ObjectFile>> ObjOrErr =
|
||||||
I->getAsObjectFile();
|
I->getAsObjectFile();
|
||||||
std::unique_ptr<Archive> A;
|
|
||||||
std::string ArchitectureName = "";
|
std::string ArchitectureName = "";
|
||||||
if (ArchFlags.size() > 1)
|
if (ArchFlags.size() > 1)
|
||||||
ArchitectureName = I->getArchTypeName();
|
ArchitectureName = I->getArchTypeName();
|
||||||
@ -348,7 +347,9 @@ void llvm::DisassembleInputMachO(StringRef Filename) {
|
|||||||
ObjectFile &O = *ObjOrErr.get();
|
ObjectFile &O = *ObjOrErr.get();
|
||||||
if (MachOObjectFile *MachOOF = dyn_cast<MachOObjectFile>(&O))
|
if (MachOObjectFile *MachOOF = dyn_cast<MachOObjectFile>(&O))
|
||||||
DisassembleInputMachO2(Filename, MachOOF, "", ArchitectureName);
|
DisassembleInputMachO2(Filename, MachOOF, "", ArchitectureName);
|
||||||
} else if (!I->getAsArchive(A)) {
|
} else if (ErrorOr<std::unique_ptr<Archive>> AOrErr =
|
||||||
|
I->getAsArchive()) {
|
||||||
|
std::unique_ptr<Archive> &A = *AOrErr;
|
||||||
outs() << "Archive : " << Filename;
|
outs() << "Archive : " << Filename;
|
||||||
if (!ArchitectureName.empty())
|
if (!ArchitectureName.empty())
|
||||||
outs() << " (architecture " << ArchitectureName << ")";
|
outs() << " (architecture " << ArchitectureName << ")";
|
||||||
@ -384,14 +385,15 @@ void llvm::DisassembleInputMachO(StringRef Filename) {
|
|||||||
I != E; ++I) {
|
I != E; ++I) {
|
||||||
if (HostArchName == I->getArchTypeName()) {
|
if (HostArchName == I->getArchTypeName()) {
|
||||||
ErrorOr<std::unique_ptr<ObjectFile>> ObjOrErr = I->getAsObjectFile();
|
ErrorOr<std::unique_ptr<ObjectFile>> ObjOrErr = I->getAsObjectFile();
|
||||||
std::unique_ptr<Archive> A;
|
|
||||||
std::string ArchiveName;
|
std::string ArchiveName;
|
||||||
ArchiveName.clear();
|
ArchiveName.clear();
|
||||||
if (ObjOrErr) {
|
if (ObjOrErr) {
|
||||||
ObjectFile &O = *ObjOrErr.get();
|
ObjectFile &O = *ObjOrErr.get();
|
||||||
if (MachOObjectFile *MachOOF = dyn_cast<MachOObjectFile>(&O))
|
if (MachOObjectFile *MachOOF = dyn_cast<MachOObjectFile>(&O))
|
||||||
DisassembleInputMachO2(Filename, MachOOF);
|
DisassembleInputMachO2(Filename, MachOOF);
|
||||||
} else if (!I->getAsArchive(A)) {
|
} else if (ErrorOr<std::unique_ptr<Archive>> AOrErr =
|
||||||
|
I->getAsArchive()) {
|
||||||
|
std::unique_ptr<Archive> &A = *AOrErr;
|
||||||
outs() << "Archive : " << Filename << "\n";
|
outs() << "Archive : " << Filename << "\n";
|
||||||
for (Archive::child_iterator AI = A->child_begin(),
|
for (Archive::child_iterator AI = A->child_begin(),
|
||||||
AE = A->child_end();
|
AE = A->child_end();
|
||||||
@ -415,7 +417,6 @@ void llvm::DisassembleInputMachO(StringRef Filename) {
|
|||||||
E = UB->end_objects();
|
E = UB->end_objects();
|
||||||
I != E; ++I) {
|
I != E; ++I) {
|
||||||
ErrorOr<std::unique_ptr<ObjectFile>> ObjOrErr = I->getAsObjectFile();
|
ErrorOr<std::unique_ptr<ObjectFile>> ObjOrErr = I->getAsObjectFile();
|
||||||
std::unique_ptr<Archive> A;
|
|
||||||
std::string ArchitectureName = "";
|
std::string ArchitectureName = "";
|
||||||
if (moreThanOneArch)
|
if (moreThanOneArch)
|
||||||
ArchitectureName = I->getArchTypeName();
|
ArchitectureName = I->getArchTypeName();
|
||||||
@ -423,7 +424,8 @@ void llvm::DisassembleInputMachO(StringRef Filename) {
|
|||||||
ObjectFile &Obj = *ObjOrErr.get();
|
ObjectFile &Obj = *ObjOrErr.get();
|
||||||
if (MachOObjectFile *MachOOF = dyn_cast<MachOObjectFile>(&Obj))
|
if (MachOObjectFile *MachOOF = dyn_cast<MachOObjectFile>(&Obj))
|
||||||
DisassembleInputMachO2(Filename, MachOOF, "", ArchitectureName);
|
DisassembleInputMachO2(Filename, MachOOF, "", ArchitectureName);
|
||||||
} else if (!I->getAsArchive(A)) {
|
} else if (ErrorOr<std::unique_ptr<Archive>> AOrErr = I->getAsArchive()) {
|
||||||
|
std::unique_ptr<Archive> &A = *AOrErr;
|
||||||
outs() << "Archive : " << Filename;
|
outs() << "Archive : " << Filename;
|
||||||
if (!ArchitectureName.empty())
|
if (!ArchitectureName.empty())
|
||||||
outs() << " (architecture " << ArchitectureName << ")";
|
outs() << " (architecture " << ArchitectureName << ")";
|
||||||
|
@ -484,7 +484,6 @@ static void PrintFileSectionSizes(StringRef file) {
|
|||||||
if (ArchFlags[i] == I->getArchTypeName()) {
|
if (ArchFlags[i] == I->getArchTypeName()) {
|
||||||
ArchFound = true;
|
ArchFound = true;
|
||||||
ErrorOr<std::unique_ptr<ObjectFile>> UO = I->getAsObjectFile();
|
ErrorOr<std::unique_ptr<ObjectFile>> UO = I->getAsObjectFile();
|
||||||
std::unique_ptr<Archive> UA;
|
|
||||||
if (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);
|
||||||
@ -503,7 +502,9 @@ static void PrintFileSectionSizes(StringRef file) {
|
|||||||
outs() << "\n";
|
outs() << "\n";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else if (!I->getAsArchive(UA)) {
|
} else if (ErrorOr<std::unique_ptr<Archive>> AOrErr =
|
||||||
|
I->getAsArchive()) {
|
||||||
|
std::unique_ptr<Archive> &UA = *AOrErr;
|
||||||
// This is an archive. Iterate over each member and display its
|
// This is an archive. Iterate over each member and display its
|
||||||
// sizes.
|
// sizes.
|
||||||
for (object::Archive::child_iterator i = UA->child_begin(),
|
for (object::Archive::child_iterator i = UA->child_begin(),
|
||||||
@ -560,7 +561,6 @@ static void PrintFileSectionSizes(StringRef file) {
|
|||||||
I != E; ++I) {
|
I != E; ++I) {
|
||||||
if (HostArchName == I->getArchTypeName()) {
|
if (HostArchName == I->getArchTypeName()) {
|
||||||
ErrorOr<std::unique_ptr<ObjectFile>> UO = I->getAsObjectFile();
|
ErrorOr<std::unique_ptr<ObjectFile>> UO = I->getAsObjectFile();
|
||||||
std::unique_ptr<Archive> UA;
|
|
||||||
if (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);
|
||||||
@ -579,7 +579,9 @@ static void PrintFileSectionSizes(StringRef file) {
|
|||||||
outs() << "\n";
|
outs() << "\n";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else if (!I->getAsArchive(UA)) {
|
} else if (ErrorOr<std::unique_ptr<Archive>> AOrErr =
|
||||||
|
I->getAsArchive()) {
|
||||||
|
std::unique_ptr<Archive> &UA = *AOrErr;
|
||||||
// This is an archive. Iterate over each member and display its
|
// This is an archive. Iterate over each member and display its
|
||||||
// sizes.
|
// sizes.
|
||||||
for (object::Archive::child_iterator i = UA->child_begin(),
|
for (object::Archive::child_iterator i = UA->child_begin(),
|
||||||
@ -623,7 +625,6 @@ static void PrintFileSectionSizes(StringRef file) {
|
|||||||
E = UB->end_objects();
|
E = UB->end_objects();
|
||||||
I != E; ++I) {
|
I != E; ++I) {
|
||||||
ErrorOr<std::unique_ptr<ObjectFile>> UO = I->getAsObjectFile();
|
ErrorOr<std::unique_ptr<ObjectFile>> UO = I->getAsObjectFile();
|
||||||
std::unique_ptr<Archive> UA;
|
|
||||||
if (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);
|
||||||
@ -643,7 +644,9 @@ static void PrintFileSectionSizes(StringRef file) {
|
|||||||
outs() << "\n";
|
outs() << "\n";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else if (!I->getAsArchive(UA)) {
|
} else if (ErrorOr<std::unique_ptr<Archive>> AOrErr =
|
||||||
|
I->getAsArchive()) {
|
||||||
|
std::unique_ptr<Archive> &UA = *AOrErr;
|
||||||
// This is an archive. Iterate over each member and display its sizes.
|
// This is an archive. Iterate over each member and display its sizes.
|
||||||
for (object::Archive::child_iterator i = UA->child_begin(),
|
for (object::Archive::child_iterator i = UA->child_begin(),
|
||||||
e = UA->child_end();
|
e = UA->child_end();
|
||||||
|
Reference in New Issue
Block a user