llvm-project
100 строк · 2.8 Кб
1# REQUIRES: x86
2# RUN: grep -B99999 [S]PLITMARKER %s | llvm-mc -triple x86_64-windows-msvc -filetype=obj -o %t1.obj
3# RUN: grep -A99999 [S]PLITMARKER %s | llvm-mc -triple x86_64-windows-msvc -filetype=obj -o %t2.obj
4# RUN: lld-link %t1.obj %t2.obj -guard:cf,nolongjmp -out:%t.exe -entry:main -opt:noref
5# RUN: llvm-readobj --file-headers --coff-load-config %t.exe | FileCheck %s
6
7# CHECK: ImageBase: 0x140000000
8# CHECK: LoadConfig [
9# CHECK: SEHandlerTable: 0x0
10# CHECK: SEHandlerCount: 0
11# CHECK: GuardCFCheckFunction: 0x0
12# CHECK: GuardCFCheckDispatch: 0x0
13# CHECK: GuardCFFunctionTable: 0x14000{{.*}}
14# CHECK: GuardCFFunctionCount: 3
15# CHECK: GuardFlags [ (0x500)
16# CHECK: CF_FUNCTION_TABLE_PRESENT (0x400)
17# CHECK: CF_INSTRUMENTED (0x100)
18# CHECK: ]
19# CHECK: GuardAddressTakenIatEntryTable: 0x0
20# CHECK: GuardAddressTakenIatEntryCount: 0
21# CHECK: GuardLongJumpTargetTable: 0x0
22# CHECK: GuardLongJumpTargetCount: 0
23# CHECK: ]
24# CHECK: GuardFidTable [
25# CHECK-NEXT: 0x14000{{.*}}
26# CHECK-NEXT: 0x14000{{.*}}
27# CHECK-NEXT: 0x14000{{.*}}
28# CHECK-NEXT: ]
29
30
31# Indicate that no gfids are present. All symbols used by relocations in this
32# file will be considered address-taken.
33.def @feat.00; .scl 3; .type 0; .endef
34.globl @feat.00
35@feat.00 = 0
36
37.def main; .scl 2; .type 32; .endef
38.section .text,"xr",one_only,main
39.globl main
40main:
41subq $8, %rsp
42leaq foo(%rip), %rdx
43callq bar
44movl $0, %eax
45addq $8, %rsp
46retq
47
48# Should not appear in gfids table.
49.def baz; .scl 2; .type 32; .endef
50.section .text,"xr",one_only,baz
51.globl baz
52baz:
53mov $1, %eax
54retq
55
56.def qux; .scl 2; .type 32; .endef
57.section .text,"xr",one_only,qux
58.globl qux
59qux:
60mov $2, %eax
61retq
62
63.def quxx; .scl 2; .type 32; .endef
64.section .text,"xr",one_only,quxx
65.globl quxx
66quxx:
67mov $3, %eax
68retq
69
70# Load config.
71.section .rdata,"dr"
72.globl _load_config_used
73_load_config_used:
74.long 256
75.fill 124, 1, 0
76.quad __guard_fids_table
77.quad __guard_fids_count
78.long __guard_flags
79.fill 128, 1, 0
80
81# SPLITMARKER
82
83# Indicate that gfids are present. This file does not take any addresses.
84.def @feat.00; .scl 3; .type 0; .endef
85.globl @feat.00
86@feat.00 = 0x800
87
88.def foo; .scl 2; .type 32; .endef
89.section .text,"xr",one_only,foo
90.global foo
91foo:
92movl $42, %eax
93retq
94
95.def bar; .scl 2; .type 32; .endef
96.section .text,"xr",one_only,bar
97.global bar
98bar:
99movl $13, %eax
100retq
101