From 308e70b7ba1183529136b5584ea8945645480854 Mon Sep 17 00:00:00 2001
From: Nguyen Anh Quynh <aquynh@gmail.com>
Date: Thu, 13 Oct 2016 22:08:58 +0800
Subject: [PATCH] arm: fix target address of BL (issue #248)

---
 llvm/lib/MC/ELFObjectWriter.cpp                    |  3 ++-
 llvm/lib/MC/MCAssembler.cpp                        |  1 +
 llvm/lib/Target/ARM/MCTargetDesc/ARMAsmBackend.cpp | 11 +++++++----
 3 files changed, 10 insertions(+), 5 deletions(-)

diff --git a/llvm/lib/MC/ELFObjectWriter.cpp b/llvm/lib/MC/ELFObjectWriter.cpp
index c2361d5..18f014d 100644
--- a/llvm/lib/MC/ELFObjectWriter.cpp
+++ b/llvm/lib/MC/ELFObjectWriter.cpp
@@ -553,7 +553,8 @@ void ELFObjectWriter::recordRelocation(MCAssembler &Asm,
                                        const MCAsmLayout &Layout,
                                        const MCFragment *Fragment,
                                        const MCFixup &Fixup, MCValue Target,
-                                       bool &IsPCRel, uint64_t &FixedValue) {
+                                       bool &IsPCRel, uint64_t &FixedValue)
+{
   const MCSectionELF &FixupSection = cast<MCSectionELF>(*Fragment->getParent());
   uint64_t C = Target.getConstant();
   bool valid;
diff --git a/llvm/lib/MC/MCAssembler.cpp b/llvm/lib/MC/MCAssembler.cpp
index 22591c5..d38df9e 100644
--- a/llvm/lib/MC/MCAssembler.cpp
+++ b/llvm/lib/MC/MCAssembler.cpp
@@ -685,6 +685,7 @@ std::pair<uint64_t, bool> MCAssembler::handleFixup(const MCAsmLayout &Layout,
     getWriter().recordRelocation(*this, Layout, &F, Fixup, Target, IsPCRel,
                                  FixedValue);
   }
+
   return std::make_pair(FixedValue, IsPCRel);
 }
 
diff --git a/llvm/lib/Target/ARM/MCTargetDesc/ARMAsmBackend.cpp b/llvm/lib/Target/ARM/MCTargetDesc/ARMAsmBackend.cpp
index be82b29..102f497 100644
--- a/llvm/lib/Target/ARM/MCTargetDesc/ARMAsmBackend.cpp
+++ b/llvm/lib/Target/ARM/MCTargetDesc/ARMAsmBackend.cpp
@@ -351,7 +351,8 @@ static uint32_t joinHalfWords(uint32_t FirstHalf, uint32_t SecondHalf,
 unsigned ARMAsmBackend::adjustFixupValue(const MCFixup &Fixup, uint64_t Value,
                                          bool IsPCRel, MCContext *Ctx,
                                          bool IsLittleEndian,
-                                         bool IsResolved) const {
+                                         bool IsResolved) const
+{
   unsigned Kind = Fixup.getKind();
   switch (Kind) {
   default:
@@ -673,7 +674,8 @@ void ARMAsmBackend::processFixupValue(const MCAssembler &Asm,
                                       const MCFixup &Fixup,
                                       const MCFragment *DF,
                                       const MCValue &Target, uint64_t &Value,
-                                      bool &IsResolved) {
+                                      bool &IsResolved)
+{
   const MCSymbolRefExpr *A = Target.getSymA();
   const MCSymbol *Sym = A ? &A->getSymbol() : nullptr;
   // Some fixups to thumb function symbols need the low bit (thumb bit)
@@ -705,7 +707,7 @@ void ARMAsmBackend::processFixupValue(const MCAssembler &Asm,
   // symbol's thumb-ness to get interworking right.
   if (A && ((unsigned)Fixup.getKind() == ARM::fixup_arm_thumb_blx ||
             (unsigned)Fixup.getKind() == ARM::fixup_arm_blx ||
-            (unsigned)Fixup.getKind() == ARM::fixup_arm_uncondbl ||
+            //(unsigned)Fixup.getKind() == ARM::fixup_arm_uncondbl ||
             (unsigned)Fixup.getKind() == ARM::fixup_arm_condbl))
     IsResolved = false;
 
@@ -816,7 +818,8 @@ static unsigned getFixupKindContainerSizeBytes(unsigned Kind) {
 
 void ARMAsmBackend::applyFixup(const MCFixup &Fixup, char *Data,
                                unsigned DataSize, uint64_t Value,
-                               bool IsPCRel, unsigned int &KsError) const {
+                               bool IsPCRel, unsigned int &KsError) const
+{
   unsigned NumBytes = getFixupKindNumBytes(Fixup.getKind());
   Value =
       adjustFixupValue(Fixup, Value, IsPCRel, nullptr, IsLittleEndian, true);
-- 
GitLab