forked from OSchip/llvm-project
[MachO] Add valid architecture function
Added array of valid architectures and function returning array. Modified llvm-lipo to include list of valid architectures in error message for invalid arch. Patch by Anusha Basana <anusha.basana@gmail.com> Differential Revision: https://reviews.llvm.org/D63735 llvm-svn: 365099
This commit is contained in:
parent
f5a885fddd
commit
995798d2d5
|
@ -571,6 +571,7 @@ public:
|
|||
const char **McpuDefault = nullptr,
|
||||
const char **ArchFlag = nullptr);
|
||||
static bool isValidArch(StringRef ArchFlag);
|
||||
static ArrayRef<StringRef> getValidArchs();
|
||||
static Triple getHostArch();
|
||||
|
||||
bool isRelocatableObject() const override;
|
||||
|
|
|
@ -57,6 +57,12 @@ namespace {
|
|||
|
||||
} // end anonymous namespace
|
||||
|
||||
static const std::array<StringRef, 17> validArchs = {
|
||||
"i386", "x86_64", "x86_64h", "armv4t", "arm", "armv5e",
|
||||
"armv6", "armv6m", "armv7", "armv7em", "armv7k", "armv7m",
|
||||
"armv7s", "arm64", "arm64_32", "ppc", "ppc64",
|
||||
};
|
||||
|
||||
static Error malformedError(const Twine &Msg) {
|
||||
return make_error<GenericBinaryError>("truncated or malformed object (" +
|
||||
Msg + ")",
|
||||
|
@ -2718,27 +2724,12 @@ Triple MachOObjectFile::getHostArch() {
|
|||
}
|
||||
|
||||
bool MachOObjectFile::isValidArch(StringRef ArchFlag) {
|
||||
return StringSwitch<bool>(ArchFlag)
|
||||
.Case("i386", true)
|
||||
.Case("x86_64", true)
|
||||
.Case("x86_64h", true)
|
||||
.Case("armv4t", true)
|
||||
.Case("arm", true)
|
||||
.Case("armv5e", true)
|
||||
.Case("armv6", true)
|
||||
.Case("armv6m", true)
|
||||
.Case("armv7", true)
|
||||
.Case("armv7em", true)
|
||||
.Case("armv7k", true)
|
||||
.Case("armv7m", true)
|
||||
.Case("armv7s", true)
|
||||
.Case("arm64", true)
|
||||
.Case("arm64_32", true)
|
||||
.Case("ppc", true)
|
||||
.Case("ppc64", true)
|
||||
.Default(false);
|
||||
return std::find(validArchs.cbegin(), validArchs.cend(), ArchFlag) !=
|
||||
validArchs.cend();
|
||||
}
|
||||
|
||||
ArrayRef<StringRef> MachOObjectFile::getValidArchs() { return validArchs; }
|
||||
|
||||
Triple::ArchType MachOObjectFile::getArch() const {
|
||||
return getArch(getCPUType(*this));
|
||||
}
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
# RUN: yaml2obj %s > %t
|
||||
|
||||
# RUN: not llvm-lipo %t -thin arc -output %t.out 2>&1 | FileCheck --check-prefix=ARCH_NOT_IN_FILE %s
|
||||
# ARCH_NOT_IN_FILE: does not contain the specified architecture arc to thin it to
|
||||
# RUN: not llvm-lipo %t -thin arm64_32 -output %t.out 2>&1 | FileCheck --check-prefix=ARCH_NOT_IN_FILE %s
|
||||
# ARCH_NOT_IN_FILE: does not contain the specified architecture arm64_32 to thin it to
|
||||
|
||||
# RUN: not llvm-lipo %t -thin aarch101 -output %t.out 2>&1 | FileCheck --check-prefix=INVALID_ARCH %s
|
||||
# INVALID_ARCH: Invalid architecture: aarch101
|
||||
|
|
|
@ -93,8 +93,15 @@ struct Config {
|
|||
} // end namespace
|
||||
|
||||
static void validateArchitectureName(StringRef ArchitectureName) {
|
||||
if (Triple(ArchitectureName).getArch() == Triple::ArchType::UnknownArch)
|
||||
reportError("Invalid architecture: " + ArchitectureName);
|
||||
if (!MachOObjectFile::isValidArch(ArchitectureName)) {
|
||||
std::string Buf;
|
||||
raw_string_ostream OS(Buf);
|
||||
OS << "Invalid architecture: " << ArchitectureName
|
||||
<< "\nValid architecture names are:";
|
||||
for (auto arch : MachOObjectFile::getValidArchs())
|
||||
OS << " " << arch;
|
||||
reportError(OS.str());
|
||||
}
|
||||
}
|
||||
|
||||
static Config parseLipoOptions(ArrayRef<const char *> ArgsArr) {
|
||||
|
|
Loading…
Reference in New Issue