[llvm-commits] [PATCH] Native Client: Set correct ELF metadata

Bill Wendling wendling at apple.com
Fri Sep 9 02:39:52 PDT 2011


On Sep 9, 2011, at 1:05 AM, David Meyer wrote:

> This patch teaches MC/ELFObjectWriter to set the correct ABI version,
> OS ABI, and EFlags for emitting Native Client ELF objects.
> 
These switches seem a bit heavy-handed. Why not just if-then-else statements?

+  // e_ident[EI_ABIVERSION]
+  switch (TargetObjectWriter->getOSType()) {
+    case Triple::NativeClient: Write8(ELF::ELFABIVERSION_NACL); break;
+    default:                   Write8(0); break;
+  }
+
   WriteZeros(ELF::EI_NIDENT - ELF::EI_PAD);
 
   Write16(ELF::ET_REL);             // e_type
@@ -1283,7 +1289,12 @@
 
 // FIXME: get the real EABI Version from the Triple.
 void ARMELFObjectWriter::WriteEFlags() {
-  Write32(ELF::EF_ARM_EABIMASK & DefaultEABIVersion);
+  unsigned EFlags = ELF::EF_ARM_EABIMASK & DefaultEABIVersion;
+  switch (TargetObjectWriter->getOSType()) {
+    case Triple::NativeClient: EFlags |= ELF::EF_NACL_ALIGN_16; break;
+    default: break;
+  }
+  Write32(EFlags);
 }
 
 // In ARM, _MergedGlobals and other most symbols get emitted directly.
@@ -1642,6 +1653,15 @@
 X86ELFObjectWriter::~X86ELFObjectWriter()
 {}
 
+void X86ELFObjectWriter::WriteEFlags() {
+  unsigned EFlags = 0;
+  switch (TargetObjectWriter->getOSType()) {
+    case Triple::NativeClient: EFlags |= ELF::EF_NACL_ALIGN_32; break;
+    default: break;
+  }
+  Write32(EFlags);


-bw




More information about the llvm-commits mailing list