[llvm] r242044 - [WinEH] Strip the \01 character from the __CxxFrameHandler3 thunk name
Reid Kleckner
reid at kleckner.net
Mon Jul 13 10:55:14 PDT 2015
Author: rnk
Date: Mon Jul 13 12:55:14 2015
New Revision: 242044
URL: http://llvm.org/viewvc/llvm-project?rev=242044&view=rev
Log:
[WinEH] Strip the \01 character from the __CxxFrameHandler3 thunk name
Add another C++ 32-bit EH table test.
Modified:
llvm/trunk/lib/Target/X86/X86WinEHState.cpp
llvm/trunk/test/CodeGen/WinEH/cppeh-prepared-catch.ll
Modified: llvm/trunk/lib/Target/X86/X86WinEHState.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86WinEHState.cpp?rev=242044&r1=242043&r2=242044&view=diff
==============================================================================
--- llvm/trunk/lib/Target/X86/X86WinEHState.cpp (original)
+++ llvm/trunk/lib/Target/X86/X86WinEHState.cpp Mon Jul 13 12:55:14 2015
@@ -336,9 +336,11 @@ Function *WinEHStatePass::generateLSDAIn
FunctionType *TargetFuncTy =
FunctionType::get(Int32Ty, makeArrayRef(&ArgTys[0], 5),
/*isVarArg=*/false);
- Function *Trampoline = Function::Create(
- TrampolineTy, GlobalValue::InternalLinkage,
- Twine("__ehhandler$") + ParentFunc->getName(), TheModule);
+ Function *Trampoline =
+ Function::Create(TrampolineTy, GlobalValue::InternalLinkage,
+ Twine("__ehhandler$") + GlobalValue::getRealLinkageName(
+ ParentFunc->getName()),
+ TheModule);
BasicBlock *EntryBB = BasicBlock::Create(Context, "entry", Trampoline);
IRBuilder<> Builder(EntryBB);
Value *LSDA = emitEHLSDA(Builder, ParentFunc);
Modified: llvm/trunk/test/CodeGen/WinEH/cppeh-prepared-catch.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/WinEH/cppeh-prepared-catch.ll?rev=242044&r1=242043&r2=242044&view=diff
==============================================================================
--- llvm/trunk/test/CodeGen/WinEH/cppeh-prepared-catch.ll (original)
+++ llvm/trunk/test/CodeGen/WinEH/cppeh-prepared-catch.ll Mon Jul 13 12:55:14 2015
@@ -1,7 +1,5 @@
-; RUN: llc < %s | FileCheck %s
-
-target datalayout = "e-m:w-i64:64-f80:128-n8:16:32:64-S128"
-target triple = "x86_64-pc-windows-msvc"
+; RUN: llc -mtriple=x86_64-windows-msvc < %s | FileCheck %s --check-prefix=CHECK --check-prefix=X64
+; RUN: llc -mtriple=i686-windows-msvc < %s | FileCheck %s --check-prefix=CHECK --check-prefix=X86
; This test case is equivalent to:
; void f() {
@@ -51,9 +49,9 @@ lpad1:
; CHECK-LABEL: "?f@@YAXXZ.catch":
; No code should be generated for the indirectbr.
-; CHECK-NOT: jmpq *
-; CHECK: .seh_handlerdata
-; CHECK: .long ("$cppxdata$?f@@YAXXZ")@IMGREL
+; CHECK-NOT: jmp{{[ql]}} *
+; X64: .seh_handlerdata
+; X64-NEXT: .long ("$cppxdata$?f@@YAXXZ")@IMGREL
define internal i8* @"\01?f@@YAXXZ.catch1"(i8*, i8*) #4 personality i8* bitcast (i32 (...)* @__CxxFrameHandler3 to i8*) {
@@ -76,11 +74,11 @@ lpad:
; CHECK-LABEL: "?f@@YAXXZ.catch1":
; No code should be generated for the indirectbr.
-; CHECK-NOT: jmpq *
-; CHECK: ".L?f@@YAXXZ.catch1$parent_frame_offset" = 16
-; CHECK: movq %rdx, 16(%rsp)
-; CHECK: .seh_handlerdata
-; CHECK: .long ("$cppxdata$?f@@YAXXZ")@IMGREL
+; CHECK-NOT: jmp{{[ql]}} *
+; X64: ".L?f@@YAXXZ.catch1$parent_frame_offset" = 16
+; X64: movq %rdx, 16(%rsp)
+; X64: .seh_handlerdata
+; X64: .long ("$cppxdata$?f@@YAXXZ")@IMGREL
define void @"\01?f@@YAXXZ"() #0 personality i8* bitcast (i32 (...)* @__CxxFrameHandler3 to i8*) {
entry:
@@ -118,21 +116,38 @@ try.cont8:
; CHECK-LABEL: "?f@@YAXXZ":
; No code should be generated for the indirectbr.
-; CHECK-NOT: jmpq *
-; CHECK: .seh_handlerdata
-; CHECK-NEXT: .long ("$cppxdata$?f@@YAXXZ")@IMGREL
-; CHECK-NEXT: .align 4
-; CHECK-NEXT:"$cppxdata$?f@@YAXXZ":
-; CHECK-NEXT: .long 429065506
-; CHECK-NEXT: .long 4
-; CHECK-NEXT: .long ("$stateUnwindMap$?f@@YAXXZ")@IMGREL
-; CHECK-NEXT: .long 2
-; CHECK-NEXT: .long ("$tryMap$?f@@YAXXZ")@IMGREL
-; CHECK-NEXT: .long 6
-; CHECK-NEXT: .long ("$ip2state$?f@@YAXXZ")@IMGREL
-; CHECK-NEXT: .long 32
-; CHECK-NEXT: .long 0
-; CHECK-NEXT: .long 1
+; CHECK-NOT: jmp{{[ql]}} *
+
+; X64: .seh_handlerdata
+; X64-NEXT: .long ("$cppxdata$?f@@YAXXZ")@IMGREL
+; X86: .section .xdata,"dr"
+
+; CHECK: .align 4
+
+; X64: "$cppxdata$?f@@YAXXZ":
+; X64-NEXT: .long 429065506
+; X64-NEXT: .long 4
+; X64-NEXT: .long ("$stateUnwindMap$?f@@YAXXZ")@IMGREL
+; X64-NEXT: .long 2
+; X64-NEXT: .long ("$tryMap$?f@@YAXXZ")@IMGREL
+; X64-NEXT: .long 6
+; X64-NEXT: .long ("$ip2state$?f@@YAXXZ")@IMGREL
+; X64-NEXT: .long 32
+; X64-NEXT: .long 0
+; X64-NEXT: .long 1
+
+; X86: "L__ehtable$?f@@YAXXZ":
+; X86-NEXT: .long 429065506
+; X86-NEXT: .long 4
+; X86-NEXT: .long ("$stateUnwindMap$?f@@YAXXZ")
+; X86-NEXT: .long 2
+; X86-NEXT: .long ("$tryMap$?f@@YAXXZ")
+; X86-NEXT: .long 0
+; X86-NEXT: .long 0
+; X86-NEXT: .long 0
+; X86-NEXT: .long 1
+
+
; CHECK-NEXT:"$stateUnwindMap$?f@@YAXXZ":
; CHECK-NEXT: .long -1
; CHECK-NEXT: .long 0
@@ -147,37 +162,43 @@ try.cont8:
; CHECK-NEXT: .long 1
; CHECK-NEXT: .long 2
; CHECK-NEXT: .long 1
-; CHECK-NEXT: .long ("$handlerMap$0$?f@@YAXXZ")@IMGREL
+; CHECK-NEXT: .long ("$handlerMap$0$?f@@YAXXZ")
; CHECK-NEXT: .long 0
; CHECK-NEXT: .long 2
; CHECK-NEXT: .long 3
; CHECK-NEXT: .long 1
-; CHECK-NEXT: .long ("$handlerMap$1$?f@@YAXXZ")@IMGREL
+; CHECK-NEXT: .long ("$handlerMap$1$?f@@YAXXZ")
; CHECK-NEXT:"$handlerMap$0$?f@@YAXXZ":
; CHECK-NEXT: .long 8
-; CHECK-NEXT: .long "??_R0H at 8"@IMGREL
-; CHECK-NEXT: .long ".L?f@@YAXXZ$frame_escape_0"
-; CHECK-NEXT: .long "?f@@YAXXZ.catch"@IMGREL
-; CHECK-NEXT: .long ".L?f@@YAXXZ.catch$parent_frame_offset"
+; CHECK-NEXT: .long "??_R0H at 8"
+; CHECK-NEXT: .long "{{.?}}L?f@@YAXXZ$frame_escape_0"
+; CHECK-NEXT: .long "?f@@YAXXZ.catch"
+; X64-NEXT: .long ".L?f@@YAXXZ.catch$parent_frame_offset"
; CHECK-NEXT:"$handlerMap$1$?f@@YAXXZ":
; CHECK-NEXT: .long 0
-; CHECK-NEXT: .long "??_R0N at 8"@IMGREL
-; CHECK-NEXT: .long ".L?f@@YAXXZ$frame_escape_1"
-; CHECK-NEXT: .long "?f@@YAXXZ.catch1"@IMGREL
-; CHECK-NEXT: .long ".L?f@@YAXXZ.catch1$parent_frame_offset"
-; CHECK-NEXT:"$ip2state$?f@@YAXXZ":
-; CHECK-NEXT: .long .Lfunc_begin0 at IMGREL
-; CHECK-NEXT: .long 2
-; CHECK-NEXT: .long .Ltmp0 at IMGREL
-; CHECK-NEXT: .long 0
-; CHECK-NEXT: .long .Lfunc_begin1 at IMGREL
-; CHECK-NEXT: .long 3
-; CHECK-NEXT: .long .Lfunc_begin2 at IMGREL
-; CHECK-NEXT: .long -1
-; CHECK-NEXT: .long .Ltmp13 at IMGREL
-; CHECK-NEXT: .long 1
-; CHECK-NEXT: .long .Ltmp16 at IMGREL
-; CHECK-NEXT: .long 0
+; CHECK-NEXT: .long "??_R0N at 8"
+; CHECK-NEXT: .long "{{.?}}L?f@@YAXXZ$frame_escape_1"
+; CHECK-NEXT: .long "?f@@YAXXZ.catch1"
+; X64-NEXT: .long ".L?f@@YAXXZ.catch1$parent_frame_offset"
+
+; X64-NEXT:"$ip2state$?f@@YAXXZ":
+; X64-NEXT: .long .Lfunc_begin0
+; X64-NEXT: .long 2
+; X64-NEXT: .long .Ltmp0
+; X64-NEXT: .long 0
+; X64-NEXT: .long .Lfunc_begin1
+; X64-NEXT: .long 3
+; X64-NEXT: .long .Lfunc_begin2
+; X64-NEXT: .long -1
+; X64-NEXT: .long .Ltmp13
+; X64-NEXT: .long 1
+; X64-NEXT: .long .Ltmp16
+; X64-NEXT: .long 0
+
+
+; X86: "___ehhandler$?f@@YAXXZ": # @"__ehhandler$?f@@YAXXZ"
+; X86: movl $"L__ehtable$?f@@YAXXZ", %eax
+; X86: jmp ___CxxFrameHandler3 # TAILCALL
declare void @"\01?may_throw@@YAXXZ"() #1
More information about the llvm-commits
mailing list