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 | 975ddf8035b2dbb92cbbdd6755360ec49139831b (patch) | |
tree | ea1ca7d2d14dffa8c12793d8d8212472142e0d29 /llvm/lib | |
parent | 16d970950f0b35a678d6ba7c53716e18c24b4a25 (diff) | |
download | llvm-975ddf8035b2dbb92cbbdd6755360ec49139831b.zip llvm-975ddf8035b2dbb92cbbdd6755360ec49139831b.tar.gz llvm-975ddf8035b2dbb92cbbdd6755360ec49139831b.tar.bz2 |
When the architecture is explicitly armv6 or thumbv6, we need to mark the object file appropriately.
llvm-svn: 128739
Diffstat (limited to 'llvm/lib')
-rw-r--r-- | llvm/lib/Target/ARM/ARMAsmBackend.cpp | 24 |
1 files changed, 15 insertions, 9 deletions
diff --git a/llvm/lib/Target/ARM/ARMAsmBackend.cpp b/llvm/lib/Target/ARM/ARMAsmBackend.cpp index ea8a70c..e972a08 100644 --- a/llvm/lib/Target/ARM/ARMAsmBackend.cpp +++ b/llvm/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: |