[llvm] r312052 - [cfi] Build __cfi_check as Thumb when applicable.

Evgeniy Stepanov via llvm-commits llvm-commits at lists.llvm.org
Tue Aug 29 15:29:15 PDT 2017


Author: eugenis
Date: Tue Aug 29 15:29:15 2017
New Revision: 312052

URL: http://llvm.org/viewvc/llvm-project?rev=312052&view=rev
Log:
[cfi] Build __cfi_check as Thumb when applicable.

Summary:
Cross-DSO CFI needs all __cfi_check exports to use the same encoding
(ARM vs Thumb).

Reviewers: pcc

Subscribers: aemerson, srhines, kristof.beyls, hiraditya, llvm-commits

Differential Revision: https://reviews.llvm.org/D37243

Added:
    llvm/trunk/test/Transforms/CrossDSOCFI/thumb.ll
Modified:
    llvm/trunk/lib/Transforms/IPO/CrossDSOCFI.cpp

Modified: llvm/trunk/lib/Transforms/IPO/CrossDSOCFI.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/IPO/CrossDSOCFI.cpp?rev=312052&r1=312051&r2=312052&view=diff
==============================================================================
--- llvm/trunk/lib/Transforms/IPO/CrossDSOCFI.cpp (original)
+++ llvm/trunk/lib/Transforms/IPO/CrossDSOCFI.cpp Tue Aug 29 15:29:15 2017
@@ -16,6 +16,7 @@
 #include "llvm/ADT/DenseSet.h"
 #include "llvm/ADT/EquivalenceClasses.h"
 #include "llvm/ADT/Statistic.h"
+#include "llvm/ADT/Triple.h"
 #include "llvm/IR/Constant.h"
 #include "llvm/IR/Constants.h"
 #include "llvm/IR/Function.h"
@@ -115,6 +116,11 @@ void CrossDSOCFI::buildCFICheck(Module &
   // linker knows about the symbol; this pass replaces the function body.
   F->deleteBody();
   F->setAlignment(4096);
+
+  Triple T(M.getTargetTriple());
+  if (T.isARM() || T.isThumb())
+    F->addFnAttr("target-features", "+thumb-mode");
+
   auto args = F->arg_begin();
   Value &CallSiteTypeId = *(args++);
   CallSiteTypeId.setName("CallSiteTypeId");

Added: llvm/trunk/test/Transforms/CrossDSOCFI/thumb.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/CrossDSOCFI/thumb.ll?rev=312052&view=auto
==============================================================================
--- llvm/trunk/test/Transforms/CrossDSOCFI/thumb.ll (added)
+++ llvm/trunk/test/Transforms/CrossDSOCFI/thumb.ll Tue Aug 29 15:29:15 2017
@@ -0,0 +1,22 @@
+; RUN: opt -mtriple=armv7-linux-android -S -cross-dso-cfi < %s | FileCheck --check-prefix=THUMB %s
+; RUN: opt -mtriple=thumbv7-linux-android -S -cross-dso-cfi < %s | FileCheck --check-prefix=THUMB %s
+; RUN: opt -mtriple=i386-linux -S -cross-dso-cfi < %s | FileCheck --check-prefix=NOTHUMB %s
+; RUN: opt -mtriple=x86_64-linux -S -cross-dso-cfi < %s | FileCheck --check-prefix=NOTHUMB %s
+
+target datalayout = "e-m:e-p:32:32-i64:64-v128:64:128-a:0:32-n32-S64"
+
+define signext i8 @f() !type !0 !type !1 {
+entry:
+  ret i8 1
+}
+
+!llvm.module.flags = !{!2}
+
+!0 = !{i64 0, !"_ZTSFcvE"}
+!1 = !{i64 0, i64 111}
+!2 = !{i32 4, !"Cross-DSO CFI", i32 1}
+
+; THUMB: define void @__cfi_check({{.*}} #[[A:.*]] align 4096
+; THUMB: attributes #[[A]] = { {{.*}}"target-features"="+thumb-mode"
+
+; NOTHUMB: define void @__cfi_check({{.*}} align 4096




More information about the llvm-commits mailing list