From 02638d41bb06858a7b0c25dcbb5aef4ba9724957 Mon Sep 17 00:00:00 2001
From: Logan Chien <loganchien@google.com>
Date: Fri, 24 Aug 2012 17:06:53 +0800
Subject: [PATCH 2/2] Add missing ARM fixup kind for ARMELFObjectWriter.

---
 lib/Target/ARM/MCTargetDesc/ARMELFObjectWriter.cpp |    4 +++
 test/CodeGen/ARM/fixup-elf.ll                      |   23 ++++++++++++++++++++
 2 files changed, 27 insertions(+), 0 deletions(-)
 create mode 100644 test/CodeGen/ARM/fixup-elf.ll

diff --git a/llvm-3.1/lib/Target/ARM/MCTargetDesc/ARMELFObjectWriter.cpp b/llvm-3.1/lib/Target/ARM/MCTargetDesc/ARMELFObjectWriter.cpp
index 7d6acbc..f24a29f 100644
--- a/llvm-3.1/lib/Target/ARM/MCTargetDesc/ARMELFObjectWriter.cpp
+++ b/llvm-3.1/lib/Target/ARM/MCTargetDesc/ARMELFObjectWriter.cpp
@@ -214,6 +214,10 @@ unsigned ARMELFObjectWriter::GetRelocTypeInner(const MCValue &Target,
     case ARM::fixup_arm_thumb_blx:
       Type = ELF::R_ARM_THM_CALL;
       break;
+    case ARM::fixup_t2_condbranch:
+    case ARM::fixup_t2_uncondbranch:
+      Type = ELF::R_ARM_THM_JUMP24;
+      break;
     }
   } else {
     switch ((unsigned)Fixup.getKind()) {
diff --git a/llvm-3.1/test/CodeGen/ARM/fixup-elf.ll b/llvm-3.1/test/CodeGen/ARM/fixup-elf.ll
new file mode 100644
index 0000000..90d880f
--- /dev/null
+++ b/llvm-3.1/test/CodeGen/ARM/fixup-elf.ll
@@ -0,0 +1,23 @@
+; RUN: llc -mtriple thumbv7-none-linux-gnueabi -mcpu=cortex-a8 -march=thumb -mattr=thumb2 -filetype=obj -o - < %s | llvm-objdump -r - | FileCheck %s
+
+target datalayout = "e-p:32:32:32-i1:8:32-i8:8:32-i16:16:32-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:64:128-a0:0:32-n32-S64"
+target triple = "thumbv7-none-linux-gnueabi"
+
+define i32 @test_fixup_t2_uncondbranch(i8* %a, i8* %b, i8* %c) {
+invoke.cont:
+  invoke void @__cxa_throw(i8* %a, i8* %b, i8* %c) noreturn
+    to label %unreachable unwind label %lpad
+
+; CHECK: 6 R_ARM_THM_JUMP24 __cxa_throw
+
+lpad:
+  %0 = landingpad { i8*, i32 } personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) cleanup
+  ret i32 0
+
+unreachable:
+  unreachable
+}
+
+declare i32 @__gxx_personality_v0(...)
+
+declare void @__cxa_throw(i8*, i8*, i8*)
-- 
1.7.7.3