From ce3a1bac4bb3168b4862e4b674800dd6922267ac Mon Sep 17 00:00:00 2001 From: Owen Anderson Date: Mon, 21 Mar 2011 23:13:43 +0000 Subject: [PATCH] Add support for Thumb interworking addresses for symbol offsets that get constant folded very early. This fixes SPASS with -integrated-as. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@128037 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/MC/MCExpr.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/lib/MC/MCExpr.cpp b/lib/MC/MCExpr.cpp index 54d3743e68e..2debe18bfb2 100644 --- a/lib/MC/MCExpr.cpp +++ b/lib/MC/MCExpr.cpp @@ -310,6 +310,11 @@ static void AttemptToFoldSymbolOffsetDifference(const MCAssembler *Asm, if (AD.getFragment() == BD.getFragment()) { Addend += (AD.getOffset() - BD.getOffset()); + // Pointers to Thumb symbols need to have their low-bit set to allow + // for interworking. + if (Asm->isThumbFunc(&SA)) + Addend |= 1; + // Clear the symbol expr pointers to indicate we have folded these // operands. A = B = 0;