[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