forked from OSchip/llvm-project
[COFF] Add integration test for LTO + /guard:cf
This tests that LLVM emits the relocations that /guard:cf needs to identify address taken. This was PR36624, which was fixed in r327557. llvm-svn: 327559
This commit is contained in:
parent
fdf39fa4bf
commit
850b610cc5
|
@ -0,0 +1,11 @@
|
|||
# This is the _load_config_used definition needed for /guard:cf tests.
|
||||
|
||||
.section .rdata,"dr"
|
||||
.globl _load_config_used
|
||||
_load_config_used:
|
||||
.long 256
|
||||
.fill 124, 1, 0
|
||||
.quad __guard_fids_table
|
||||
.quad __guard_fids_count
|
||||
.long __guard_flags
|
||||
.fill 128, 1, 0
|
|
@ -0,0 +1,39 @@
|
|||
; Set up an import library for a DLL that will do the indirect call.
|
||||
; RUN: echo -e 'LIBRARY library\nEXPORTS\n do_indirect_call\n' > %t.def
|
||||
; RUN: lld-link -lib -def:%t.def -out:%t.lib -machine:x64
|
||||
|
||||
; Generate an object that will have the load configuration normally provided by
|
||||
; the CRT.
|
||||
; RUN: llvm-mc -triple x86_64-windows-msvc -filetype=obj %S/Inputs/loadconfig-cfg-x64.s -o %t.ldcfg.obj
|
||||
|
||||
; RUN: llvm-as %s -o %t.bc
|
||||
; RUN: lld-link -entry:main -guard:cf -dll %t.bc %t.lib %t.ldcfg.obj -out:%t.dll
|
||||
; RUN: llvm-readobj -coff-load-config %t.dll | FileCheck %s
|
||||
|
||||
; There must be *two* entries in the table: DLL entry point, and my_handler.
|
||||
|
||||
; CHECK: LoadConfig [
|
||||
; CHECK: GuardCFFunctionTable: 0x{{[^0].*}}
|
||||
; CHECK-NEXT: GuardCFFunctionCount: 2
|
||||
; CHECK-NEXT: GuardFlags: 0x10500
|
||||
; CHECK: ]
|
||||
; CHECK: GuardFidTable [
|
||||
; CHECK-NEXT: 0x180{{.*}}
|
||||
; CHECK-NEXT: 0x180{{.*}}
|
||||
; CHECK-NEXT: ]
|
||||
|
||||
target datalayout = "e-m:w-i64:64-f80:128-n8:16:32:64-S128"
|
||||
target triple = "x86_64-pc-windows-msvc19.12.25835"
|
||||
|
||||
declare dllimport void @do_indirect_call(void ()*)
|
||||
|
||||
define dso_local i32 @main() local_unnamed_addr {
|
||||
entry:
|
||||
tail call void @do_indirect_call(void ()* nonnull @my_handler)
|
||||
ret i32 0
|
||||
}
|
||||
|
||||
define dso_local void @my_handler() {
|
||||
entry:
|
||||
ret void
|
||||
}
|
Loading…
Reference in New Issue