[llvm-commits] [llvm] r124899 - in /llvm/trunk: include/llvm/Support/ELF.h lib/MC/ELFObjectWriter.cpp test/MC/ARM/elf-eflags-eabi.s
Jason W Kim
jason.w.kim.2009 at gmail.com
Fri Feb 4 13:41:11 PST 2011
Author: jasonwkim
Date: Fri Feb 4 15:41:11 2011
New Revision: 124899
URL: http://llvm.org/viewvc/llvm-project?rev=124899&view=rev
Log:
Teach ARM/MC/ELF about EF_ARM_EABI_VERSION. The magic number is set to
5 to match the current doc.
Added FIXME reminder Make it really configurable later.
Added:
llvm/trunk/test/MC/ARM/elf-eflags-eabi.s
Modified:
llvm/trunk/include/llvm/Support/ELF.h
llvm/trunk/lib/MC/ELFObjectWriter.cpp
Modified: llvm/trunk/include/llvm/Support/ELF.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Support/ELF.h?rev=124899&r1=124898&r2=124899&view=diff
==============================================================================
--- llvm/trunk/include/llvm/Support/ELF.h (original)
+++ llvm/trunk/include/llvm/Support/ELF.h Fri Feb 4 15:41:11 2011
@@ -290,6 +290,10 @@
R_MICROBLAZE_COPY = 21
};
+
+// ARM Specific e_flags
+enum { EF_ARM_EABIMASK = 0xFF000000U };
+
// ELF Relocation types for ARM
// Meets 2.08 ABI Specs.
Modified: llvm/trunk/lib/MC/ELFObjectWriter.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/MC/ELFObjectWriter.cpp?rev=124899&r1=124898&r2=124899&view=diff
==============================================================================
--- llvm/trunk/lib/MC/ELFObjectWriter.cpp (original)
+++ llvm/trunk/lib/MC/ELFObjectWriter.cpp Fri Feb 4 15:41:11 2011
@@ -276,6 +276,9 @@
virtual void WriteHeader(uint64_t SectionDataSize, unsigned NumberOfSections);
+ /// Default e_flags = 0
+ virtual void WriteEFlags() { Write32(0); }
+
virtual void WriteSymbolEntry(MCDataFragment *SymtabF, MCDataFragment *ShndxF,
uint64_t name, uint8_t info,
uint64_t value, uint64_t size,
@@ -387,11 +390,16 @@
class ARMELFObjectWriter : public ELFObjectWriter {
public:
+ // FIXME: MCAssembler can't yet return the Subtarget,
+ enum { DefaultEABIVersion = 0x05000000U };
+
ARMELFObjectWriter(MCELFObjectTargetWriter *MOTW,
raw_ostream &_OS,
bool IsLittleEndian);
virtual ~ARMELFObjectWriter();
+
+ virtual void WriteEFlags();
protected:
virtual unsigned GetRelocType(const MCValue &Target, const MCFixup &Fixup,
bool IsPCRel, bool IsRelocWithSymbol,
@@ -459,8 +467,8 @@
WriteWord(SectionDataSize + (is64Bit() ? sizeof(ELF::Elf64_Ehdr) :
sizeof(ELF::Elf32_Ehdr))); // e_shoff = sec hdr table off in bytes
- // FIXME: Make this configurable.
- Write32(0); // e_flags = whatever the target wants
+ // e_flags = whatever the target wants
+ WriteEFlags();
// e_ehsize = ELF header size
Write16(is64Bit() ? sizeof(ELF::Elf64_Ehdr) : sizeof(ELF::Elf32_Ehdr));
@@ -1477,6 +1485,11 @@
ARMELFObjectWriter::~ARMELFObjectWriter()
{}
+// FIXME: get the real EABI Version from the Triple.
+void ARMELFObjectWriter::WriteEFlags() {
+ Write32(ELF::EF_ARM_EABIMASK & DefaultEABIVersion);
+}
+
unsigned ARMELFObjectWriter::GetRelocType(const MCValue &Target,
const MCFixup &Fixup,
bool IsPCRel,
Added: llvm/trunk/test/MC/ARM/elf-eflags-eabi.s
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/ARM/elf-eflags-eabi.s?rev=124899&view=auto
==============================================================================
--- llvm/trunk/test/MC/ARM/elf-eflags-eabi.s (added)
+++ llvm/trunk/test/MC/ARM/elf-eflags-eabi.s Fri Feb 4 15:41:11 2011
@@ -0,0 +1,13 @@
+@ RUN: llvm-mc %s -triple=armv7-linux-gnueabi -filetype=obj -o - | \
+@ RUN: elf-dump --dump-section-data | FileCheck -check-prefix=OBJ %s
+ .syntax unified
+ .text
+ .globl barf
+ .align 2
+ .type barf,%function
+barf: @ @barf
+@ BB#0: @ %entry
+ b foo
+
+@@@ make sure the EF_ARM_EABIMASK comes out OK
+ at OBJ: 'e_flags', 0x05000000
More information about the llvm-commits
mailing list