From 175fb36f101a20df10db90bfe4d0c44a7d05325b Mon Sep 17 00:00:00 2001 From: Owen Anderson Date: Fri, 17 Dec 2010 21:49:48 +0000 Subject: Thumb's forced-PC-alignment requirement applies to the _total_ displacement, not just to the fragment relative portion. While the fragment boundary is usually already aligned, it is possible for it not to be, which would lead to a non-aligned final displacement. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@122091 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/MC/MCAssembler.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'lib/MC/MCAssembler.cpp') diff --git a/lib/MC/MCAssembler.cpp b/lib/MC/MCAssembler.cpp index 0a9783d885..2d89fb3ed9 100644 --- a/lib/MC/MCAssembler.cpp +++ b/lib/MC/MCAssembler.cpp @@ -254,12 +254,12 @@ bool MCAssembler::EvaluateFixup(const MCAsmLayout &Layout, "FKF_IsAlignedDownTo32Bits is only allowed on PC-relative fixups!"); if (IsPCRel) { - uint32_t Offset = Fixup.getOffset(); + uint32_t Offset = Layout.getFragmentOffset(DF) + Fixup.getOffset(); // A number of ARM fixups in Thumb mode require that the effective PC // address be determined as the 32-bit aligned version of the actual offset. if (ShouldAlignPC) Offset &= ~0x3; - Value -= Layout.getFragmentOffset(DF) + Offset; + Value -= Offset; } // ARM fixups based from a thumb function address need to have the low -- cgit v1.2.3-18-g5258