[macho] Allow CPUSubtype to contribute to architecture identification

Summary:
Sometimes the CPUSubtype determines the Triple::ArchType that must be used.
Add the subtype to the API's to allow targets that need this to correctly
identify the contents of the binary.

Reviewers: pete

Subscribers: hiraditya, llvm-commits

Tags: #llvm

Differential Revision: https://reviews.llvm.org/D70345
This commit is contained in:
Daniel Sanders 2019-11-15 15:08:34 -08:00
parent c941db5b1a
commit 1791901787
2 changed files with 7 additions and 3 deletions

View File

@ -567,7 +567,7 @@ public:
static StringRef guessLibraryShortName(StringRef Name, bool &isFramework, static StringRef guessLibraryShortName(StringRef Name, bool &isFramework,
StringRef &Suffix); StringRef &Suffix);
static Triple::ArchType getArch(uint32_t CPUType); static Triple::ArchType getArch(uint32_t CPUType, uint32_t CPUSubType);
static Triple getArchTriple(uint32_t CPUType, uint32_t CPUSubType, static Triple getArchTriple(uint32_t CPUType, uint32_t CPUSubType,
const char **McpuDefault = nullptr, const char **McpuDefault = nullptr,
const char **ArchFlag = nullptr); const char **ArchFlag = nullptr);

View File

@ -128,6 +128,10 @@ static unsigned getCPUType(const MachOObjectFile &O) {
return O.getHeader().cputype; return O.getHeader().cputype;
} }
static unsigned getCPUSubType(const MachOObjectFile &O) {
return O.getHeader().cpusubtype;
}
static uint32_t static uint32_t
getPlainRelocationAddress(const MachO::any_relocation_info &RE) { getPlainRelocationAddress(const MachO::any_relocation_info &RE) {
return RE.r_word0; return RE.r_word0;
@ -2565,7 +2569,7 @@ StringRef MachOObjectFile::getFileFormatName() const {
} }
} }
Triple::ArchType MachOObjectFile::getArch(uint32_t CPUType) { Triple::ArchType MachOObjectFile::getArch(uint32_t CPUType, uint32_t CPUSubType) {
switch (CPUType) { switch (CPUType) {
case MachO::CPU_TYPE_I386: case MachO::CPU_TYPE_I386:
return Triple::x86; return Triple::x86;
@ -2737,7 +2741,7 @@ ArrayRef<StringRef> MachOObjectFile::getValidArchs() {
} }
Triple::ArchType MachOObjectFile::getArch() const { Triple::ArchType MachOObjectFile::getArch() const {
return getArch(getCPUType(*this)); return getArch(getCPUType(*this), getCPUSubType(*this));
} }
Triple MachOObjectFile::getArchTriple(const char **McpuDefault) const { Triple MachOObjectFile::getArchTriple(const char **McpuDefault) const {