aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJim Grosbach <grosbach@apple.com>2012-01-18 00:40:25 +0000
committerJim Grosbach <grosbach@apple.com>2012-01-18 00:40:25 +0000
commit5a7efa7f134dd6f8f927c162d9f4062eaa3eb4ac (patch)
tree487ba0164586923c76c5501b2bc48cdc21648345
parent9b5b125c34b47e0e7eef2548acee8bf1448c4b71 (diff)
downloadexternal_llvm-5a7efa7f134dd6f8f927c162d9f4062eaa3eb4ac.zip
external_llvm-5a7efa7f134dd6f8f927c162d9f4062eaa3eb4ac.tar.gz
external_llvm-5a7efa7f134dd6f8f927c162d9f4062eaa3eb4ac.tar.bz2
Thumb2 load/store fixups don't set the thumb bit.
Load/store instructions w/ a fixup to be relative a function marked as thumb don't use the low bit to specify thumb vs. non-thumb like interworking branches do, so don't set it when dealing with those fixups. rdar://10348687. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@148366 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--lib/Target/ARM/MCTargetDesc/ARMAsmBackend.cpp12
1 files changed, 8 insertions, 4 deletions
diff --git a/lib/Target/ARM/MCTargetDesc/ARMAsmBackend.cpp b/lib/Target/ARM/MCTargetDesc/ARMAsmBackend.cpp
index 88fea57..0e10b64 100644
--- a/lib/Target/ARM/MCTargetDesc/ARMAsmBackend.cpp
+++ b/lib/Target/ARM/MCTargetDesc/ARMAsmBackend.cpp
@@ -109,10 +109,14 @@ public:
MCValue &Target, uint64_t &Value) {
// Some fixups to thumb function symbols need the low bit (thumb bit)
// twiddled.
- if (const MCSymbolRefExpr *A = Target.getSymA()) {
- const MCSymbol &Sym = A->getSymbol().AliasedSymbol();
- if (Asm.isThumbFunc(&Sym))
- Value |= 1;
+ if ((unsigned)Fixup.getKind() != ARM::fixup_arm_ldst_pcrel_12 &&
+ (unsigned)Fixup.getKind() != ARM::fixup_t2_ldst_pcrel_12 &&
+ (unsigned)Fixup.getKind() != ARM::fixup_arm_thumb_cp) {
+ if (const MCSymbolRefExpr *A = Target.getSymA()) {
+ const MCSymbol &Sym = A->getSymbol().AliasedSymbol();
+ if (Asm.isThumbFunc(&Sym))
+ Value |= 1;
+ }
}
}