llvm-project

Форк
0
/
gfids-relocations64.s 
76 строк · 2.0 Кб
1
# REQUIRES: x86
2
# RUN: llvm-mc -triple x86_64-pc-win32 %s -filetype=obj -o %t.obj
3
# RUN: lld-link %t.obj -guard:cf -out:%t.exe -entry:main
4
# RUN: llvm-readobj --coff-load-config %t.exe | FileCheck %s --check-prefix=CHECK
5

6
# f, g, and main go in the table.
7
# Including g isn't strictly necessary since it's not an indirect call target,
8
# however the linker can't know that because relative relocations are used both
9
# for direct calls and for getting the absolute address of a function.
10
# (use /lldmap:map.txt to check their addresses).
11
#
12
# CHECK: GuardFidTable [
13
# CHECK-NEXT: 0x140001000
14
# CHECK-NEXT: 0x140001010
15
# CHECK-NEXT: 0x140001030
16
# CHECK-NEXT: ]
17

18
        .def    f;
19
        .scl    3;
20
        .type   32;
21
        .endef
22
        .section       .text,"xr",one_only,f
23
        .p2align 4
24
f:      movl $1, %eax
25
        ret
26

27

28
        .def    g;
29
        .scl    3;
30
        .type   32;
31
        .endef
32
        .section       .text,"xr",one_only,g
33
        .p2align 4
34
g:      movl $2, %eax
35
        ret
36

37

38
        .def    label;
39
        .scl    6;     # StorageClass: Label
40
        .type   0;     # Type: Not a function.
41
        .endef
42
        .section       .text,"xr",one_only,label
43
        .p2align 4
44
label:  ret
45

46

47
        .data
48
        .globl fp
49
        .p2align 4
50
fp:     .quad f        # DIR32 relocation to function
51
        .quad label    # DIR32 relocation to label
52

53

54
        .def    main;
55
        .scl    2;
56
        .type   32;
57
        .endef
58
        .section       .text,"xr",one_only,main
59
        .globl  main
60
        .p2align 4
61
main:   call *fp       # DIR32 relocation to data
62
        call g         # REL32 relocation to function
63
        ret
64

65

66
# Load configuration directory entry (winnt.h _IMAGE_LOAD_CONFIG_DIRECTORY64).
67
# The linker will define the __guard_* symbols.
68
        .section .rdata,"dr"
69
.globl _load_config_used
70
_load_config_used:
71
        .long 256
72
        .fill 124, 1, 0
73
        .quad __guard_fids_table
74
        .quad __guard_fids_count
75
        .long __guard_flags
76
        .fill 128, 1, 0
77

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.