diff options
author | Owen Anderson <resistor@mac.com> | 2011-04-01 21:07:39 +0000 |
---|---|---|
committer | Owen Anderson <resistor@mac.com> | 2011-04-01 21:07:39 +0000 |
commit | 1721324d97e2b05c9276ffe116dfb6c808521c2b (patch) | |
tree | 71818eba00c1cd6b27ee0607b663a4e4b0350f77 /lib/Target/ARM/ARMAsmBackend.cpp | |
parent | 9a3507f0913036615013d0218362d76cbe053b57 (diff) | |
download | external_llvm-1721324d97e2b05c9276ffe116dfb6c808521c2b.zip external_llvm-1721324d97e2b05c9276ffe116dfb6c808521c2b.tar.gz external_llvm-1721324d97e2b05c9276ffe116dfb6c808521c2b.tar.bz2 |
When the architecture is explicitly armv6 or thumbv6, we need to mark the object file appropriately.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@128739 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Target/ARM/ARMAsmBackend.cpp')
-rw-r--r-- | lib/Target/ARM/ARMAsmBackend.cpp | 24 |
1 files changed, 15 insertions, 9 deletions
diff --git a/lib/Target/ARM/ARMAsmBackend.cpp b/lib/Target/ARM/ARMAsmBackend.cpp index ea8a70c..e972a08 100644 --- a/lib/Target/ARM/ARMAsmBackend.cpp +++ b/lib/Target/ARM/ARMAsmBackend.cpp @@ -416,21 +416,22 @@ void ELFARMAsmBackend::ApplyFixup(const MCFixup &Fixup, char *Data, // FIXME: This should be in a separate file. class DarwinARMAsmBackend : public ARMAsmBackend { public: - DarwinARMAsmBackend(const Target &T) : ARMAsmBackend(T) { } - - void ApplyFixup(const MCFixup &Fixup, char *Data, unsigned DataSize, - uint64_t Value) const; + const object::mach::CPUSubtypeARM Subtype; + DarwinARMAsmBackend(const Target &T, object::mach::CPUSubtypeARM st) + : ARMAsmBackend(T), Subtype(st) { } MCObjectWriter *createObjectWriter(raw_ostream &OS) const { - // FIXME: Subtarget info should be derived. Force v7 for now. return createMachObjectWriter(new ARMMachObjectWriter( /*Is64Bit=*/false, object::mach::CTM_ARM, - object::mach::CSARM_V7), + Subtype), OS, /*IsLittleEndian=*/true); } + void ApplyFixup(const MCFixup &Fixup, char *Data, unsigned DataSize, + uint64_t Value) const; + virtual bool doesSectionRequireSymbols(const MCSection &Section) const { return false; } @@ -499,9 +500,14 @@ void DarwinARMAsmBackend::ApplyFixup(const MCFixup &Fixup, char *Data, TargetAsmBackend *llvm::createARMAsmBackend(const Target &T, const std::string &TT) { - switch (Triple(TT).getOS()) { - case Triple::Darwin: - return new DarwinARMAsmBackend(T); + Triple TheTriple(TT); + switch (TheTriple.getOS()) { + case Triple::Darwin: { + if (TheTriple.getArchName() == "armv6" || + TheTriple.getArchName() == "thumbv6") + return new DarwinARMAsmBackend(T, object::mach::CSARM_V6); + return new DarwinARMAsmBackend(T, object::mach::CSARM_V7); + } case Triple::MinGW32: case Triple::Cygwin: case Triple::Win32: |