Emit ARM build-attributes in the file scope (as header).

The ARM linker will check that .o files declare compatible
build attributes (e.g., all claim hard-float calling convention,
all claim VFP-vX ,etc.). Thus, in order to set up cross tests that
link LLC generated code against and Subzero generated code,
we need the build attributes to be compatible.

Pick ARMv7, hard-float calling convention, and neon, etc. which
we use for PNaCl LLVM.

Will probably have to reorganize to keep in sync once the ELF
writer also emits this.

BUG= https://code.google.com/p/nativeclient/issues/detail?id=4076
R=kschimpf@google.com, stichnot@chromium.org

Review URL: https://codereview.chromium.org/1171563002.
diff --git a/src/IceTargetLowering.h b/src/IceTargetLowering.h
index a2eac4b..069b49e 100644
--- a/src/IceTargetLowering.h
+++ b/src/IceTargetLowering.h
@@ -389,6 +389,26 @@
   GlobalContext *Ctx;
 };
 
+// TargetHeaderLowering is used to "lower" the header of an output file.
+// It writes out the target-specific header attributes. E.g., for ARM
+// this writes out the build attributes (float ABI, etc.).
+class TargetHeaderLowering {
+  TargetHeaderLowering() = delete;
+  TargetHeaderLowering(const TargetHeaderLowering &) = delete;
+  TargetHeaderLowering &operator=(const TargetHeaderLowering &) = delete;
+
+public:
+  static std::unique_ptr<TargetHeaderLowering>
+  createLowering(GlobalContext *Ctx);
+  virtual ~TargetHeaderLowering();
+
+  virtual void lower() {}
+
+protected:
+  explicit TargetHeaderLowering(GlobalContext *Ctx) : Ctx(Ctx) {}
+  GlobalContext *Ctx;
+};
+
 } // end of namespace Ice
 
 #endif // SUBZERO_SRC_ICETARGETLOWERING_H