diff options
| author | Charlie Turner <charlie.turner@arm.com> | 2015-01-05 13:12:17 +0000 |
|---|---|---|
| committer | Charlie Turner <charlie.turner@arm.com> | 2015-01-05 13:12:17 +0000 |
| commit | 8b2caa458fc26df05009749a19650db3af73304b (patch) | |
| tree | 51f72365ec7caf5e9545d577ea2379a2b96ca6d6 /llvm/lib/Target/ARM | |
| parent | 8ec742c2f9c12e463365f97d25103dc2d095d7b3 (diff) | |
| download | bcm5719-llvm-8b2caa458fc26df05009749a19650db3af73304b.tar.gz bcm5719-llvm-8b2caa458fc26df05009749a19650db3af73304b.zip | |
Emit the build attribute Tag_conformance.
Claim conformance to version 2.09 of the ARM ABI.
This build attribute must be emitted first amongst the build attributes when
written to an object file. This is to simplify conformance detection by
consumers.
Change-Id: If9eddcfc416bc9ad6e5cc8cdcb05d0031af7657e
llvm-svn: 225166
Diffstat (limited to 'llvm/lib/Target/ARM')
| -rw-r--r-- | llvm/lib/Target/ARM/ARMAsmPrinter.cpp | 2 | ||||
| -rw-r--r-- | llvm/lib/Target/ARM/MCTargetDesc/ARMELFStreamer.cpp | 14 |
2 files changed, 15 insertions, 1 deletions
diff --git a/llvm/lib/Target/ARM/ARMAsmPrinter.cpp b/llvm/lib/Target/ARM/ARMAsmPrinter.cpp index 0300f5875ca..b17d4aa19f7 100644 --- a/llvm/lib/Target/ARM/ARMAsmPrinter.cpp +++ b/llvm/lib/Target/ARM/ARMAsmPrinter.cpp @@ -629,6 +629,8 @@ void ARMAsmPrinter::emitAttributes() { MCTargetStreamer &TS = *OutStreamer.getTargetStreamer(); ARMTargetStreamer &ATS = static_cast<ARMTargetStreamer &>(TS); + ATS.emitTextAttribute(ARMBuildAttrs::conformance, "2.09"); + ATS.switchVendor("aeabi"); std::string CPUString = Subtarget->getCPUString(); diff --git a/llvm/lib/Target/ARM/MCTargetDesc/ARMELFStreamer.cpp b/llvm/lib/Target/ARM/MCTargetDesc/ARMELFStreamer.cpp index e92a43c5b79..f9403063dd6 100644 --- a/llvm/lib/Target/ARM/MCTargetDesc/ARMELFStreamer.cpp +++ b/llvm/lib/Target/ARM/MCTargetDesc/ARMELFStreamer.cpp @@ -300,7 +300,19 @@ private: StringRef StringValue; static bool LessTag(const AttributeItem &LHS, const AttributeItem &RHS) { - return (LHS.Tag < RHS.Tag); + // The conformance tag must be emitted first when serialised + // into an object file. Specifically, the addenda to the ARM ABI + // states that (2.3.7.4): + // + // "To simplify recognition by consumers in the common case of + // claiming conformity for the whole file, this tag should be + // emitted first in a file-scope sub-subsection of the first + // public subsection of the attributes section." + // + // So it is special-cased in this comparison predicate when the + // attributes are sorted in finishAttributeSection(). + return (RHS.Tag != ARMBuildAttrs::conformance) && + ((LHS.Tag == ARMBuildAttrs::conformance) || (LHS.Tag < RHS.Tag)); } }; |

