[ARM] Enable objdump to construct triple for ARM
Now that The ARMAttributeParser has been moved into the library, it has been modified so that it can parse the attributes without printing them and stores them in a map. ELFObjectFile now queries the attributes to fill out the architecture details of a provided triple for 'arm' and 'thumb' targets. llvm-objdump uses this new functionality. Differential Revision: https://reviews.llvm.org/D28281 llvm-svn: 291898
This commit is contained in:
@@ -122,4 +122,69 @@ SubtargetFeatures ELFObjectFileBase::getFeatures() const {
|
||||
}
|
||||
}
|
||||
|
||||
// FIXME Encode from a tablegen description or target parser.
|
||||
void ELFObjectFileBase::setARMSubArch(Triple &TheTriple) const {
|
||||
if (TheTriple.getSubArch() != Triple::NoSubArch)
|
||||
return;
|
||||
|
||||
ARMAttributeParser Attributes;
|
||||
std::error_code EC = getBuildAttributes(Attributes);
|
||||
if (EC)
|
||||
return;
|
||||
|
||||
std::string Triple;
|
||||
// Default to ARM, but use the triple if it's been set.
|
||||
if (TheTriple.getArch() == Triple::thumb ||
|
||||
TheTriple.getArch() == Triple::thumbeb)
|
||||
Triple = "thumb";
|
||||
else
|
||||
Triple = "arm";
|
||||
|
||||
switch(Attributes.getAttributeValue(ARMBuildAttrs::CPU_arch)) {
|
||||
case ARMBuildAttrs::v4:
|
||||
Triple += "v4";
|
||||
break;
|
||||
case ARMBuildAttrs::v4T:
|
||||
Triple += "v4t";
|
||||
break;
|
||||
case ARMBuildAttrs::v5T:
|
||||
Triple += "v5t";
|
||||
break;
|
||||
case ARMBuildAttrs::v5TE:
|
||||
Triple += "v5te";
|
||||
break;
|
||||
case ARMBuildAttrs::v5TEJ:
|
||||
Triple += "v5tej";
|
||||
break;
|
||||
case ARMBuildAttrs::v6:
|
||||
Triple += "v6";
|
||||
break;
|
||||
case ARMBuildAttrs::v6KZ:
|
||||
Triple += "v6kz";
|
||||
break;
|
||||
case ARMBuildAttrs::v6T2:
|
||||
Triple += "v6t2";
|
||||
break;
|
||||
case ARMBuildAttrs::v6K:
|
||||
Triple += "v6k";
|
||||
break;
|
||||
case ARMBuildAttrs::v7:
|
||||
Triple += "v7";
|
||||
break;
|
||||
case ARMBuildAttrs::v6_M:
|
||||
Triple += "v6m";
|
||||
break;
|
||||
case ARMBuildAttrs::v6S_M:
|
||||
Triple += "v6sm";
|
||||
break;
|
||||
case ARMBuildAttrs::v7E_M:
|
||||
Triple += "v7em";
|
||||
break;
|
||||
}
|
||||
if (!isLittleEndian())
|
||||
Triple += "eb";
|
||||
|
||||
TheTriple.setArchName(Triple);
|
||||
}
|
||||
|
||||
} // end namespace llvm
|
||||
|
||||
Reference in New Issue
Block a user