llvm-project

Форк
0
/
export-all.s 
120 строк · 4.2 Кб
1
# REQUIRES: x86
2

3
# RUN: llvm-mc -triple=i686-windows-gnu %s -filetype=obj -o %t.obj
4

5
# RUN: lld-link -lldmingw -dll -out:%t.dll -entry:DllMainCRTStartup@12 %t.obj -implib:%t.lib
6
# RUN: llvm-readobj --coff-exports %t.dll | grep Name: | FileCheck %s
7
# RUN: llvm-readobj --coff-exports %t.dll | FileCheck %s --check-prefix=CHECK-RVA
8
# RUN: llvm-readobj %t.lib | FileCheck -check-prefix=IMPLIB %s
9

10
# CHECK:      Name:
11
# CHECK-SAME:       comdatFunc
12
# CHECK-NEXT: Name: dataSym
13
# CHECK-NEXT: Name: foobar
14
# CHECK-EMPTY:
15

16
# CHECK-RVA: Name: comdatFunc
17
# CHECK-RVA-NEXT: RVA: 0x1003
18
# CHECK-RVA: Name: dataSym
19
# CHECK-RVA-NEXT: RVA: 0x3000
20
# CHECK-RVA: Name: foobar
21
# CHECK-RVA-NEXT: RVA: 0x1001
22

23
# IMPLIB: Symbol: __imp__comdatFunc
24
# IMPLIB: Symbol: _comdatFunc
25
# IMPLIB: Symbol: __imp__dataSym
26
# IMPLIB-NOT: Symbol: _dataSym
27
# IMPLIB: Symbol: __imp__foobar
28
# IMPLIB: Symbol: _foobar
29

30
.global _foobar
31
.global _DllMainCRTStartup@12
32
.global _dataSym
33
.global _unexported
34
.global __imp__unexported
35
.global .refptr._foobar
36
.global _comdatFunc
37
.text
38
_DllMainCRTStartup@12:
39
  ret
40
_foobar:
41
  ret
42
_unexported:
43
  ret
44
.section .text$_comdatFunc,"xr",one_only,_comdatFunc
45
_comdatFunc:
46
  ret
47
.data
48
_dataSym:
49
  .int 4
50
__imp__unexported:
51
  .int _unexported
52
.refptr._foobar:
53
  .int _foobar
54

55
# Test specifying -export-all-symbols, on an object file that contains
56
# dllexport directive for some of the symbols.
57

58
# RUN: yaml2obj %p/Inputs/export.yaml -o %t.obj
59
#
60
# RUN: lld-link -safeseh:no -out:%t.dll -dll %t.obj -lldmingw -export-all-symbols -output-def:%t.def
61
# RUN: llvm-readobj --coff-exports %t.dll | FileCheck -check-prefix=CHECK2 %s
62
# RUN: cat %t.def | FileCheck -check-prefix=CHECK2-DEF %s
63

64
# RUN: lld-link -safeseh:no -out:%t.exe %t.obj -lldmingw -export-all-symbols -output-def:%t.def -entry:_DllMainCRTStartup
65
# RUN: llvm-readobj --coff-exports %t.exe | FileCheck -check-prefix=CHECK2 %s
66
# RUN: cat %t.def | FileCheck -check-prefix=CHECK2-DEF %s
67

68
# Note, this will actually export _DllMainCRTStartup as well, since
69
# it uses the standard spelling in this object file, not the MinGW one.
70

71
# CHECK2: Name: exportfn1
72
# CHECK2: Name: exportfn2
73
# CHECK2: Name: exportfn3
74

75
# CHECK2-DEF: EXPORTS
76
# CHECK2-DEF: exportfn1 @3
77
# CHECK2-DEF: exportfn2 @4
78
# CHECK2-DEF: exportfn3 @5
79

80
# Test ignoring certain object files and libs.
81

82
# RUN: echo -e ".global foobar\n.global DllMainCRTStartup\n.text\nDllMainCRTStartup:\nret\nfoobar:\ncall mingwfunc\ncall crtfunc\nret\n" > %t.main.s
83
# RUN: llvm-mc -triple=x86_64-windows-gnu %t.main.s -filetype=obj -o %t.main.obj
84
# RUN: mkdir -p %T/libs
85
# RUN: echo -e ".global mingwfunc\n.text\nmingwfunc:\nret\n" > %T/libs/mingwfunc.s
86
# RUN: llvm-mc -triple=x86_64-windows-gnu %T/libs/mingwfunc.s -filetype=obj -o %T/libs/mingwfunc.o
87
# RUN: rm -f %T/libs/libmingwex.a
88
# RUN: llvm-ar rcs %T/libs/libmingwex.a %T/libs/mingwfunc.o
89
# RUN: echo -e ".global crtfunc\n.text\ncrtfunc:\nret\n" > %T/libs/crtfunc.s
90
# RUN: llvm-mc -triple=x86_64-windows-gnu %T/libs/crtfunc.s -filetype=obj -o %T/libs/crt2.o
91
# RUN: lld-link -safeseh:no -out:%t.dll -dll -entry:DllMainCRTStartup %t.main.obj -lldmingw %T/libs/crt2.o %T/libs/libmingwex.a -output-def:%t.def
92
# RUN: echo "EOF" >> %t.def
93
# RUN: cat %t.def | FileCheck -check-prefix=CHECK-EXCLUDE %s
94

95
# CHECK-EXCLUDE: EXPORTS
96
# CHECK-EXCLUDE-NEXT: foobar @1
97
# CHECK-EXCLUDE-NEXT: EOF
98

99
# Test that libraries included with -wholearchive: are autoexported, even if
100
# they are in a library that otherwise normally would be excluded.
101

102
# RUN: lld-link -safeseh:no -out:%t.dll -dll -entry:DllMainCRTStartup %t.main.obj -lldmingw %T/libs/crt2.o -wholearchive:%T/libs/libmingwex.a -output-def:%t.def
103
# RUN: echo "EOF" >> %t.def
104
# RUN: cat %t.def | FileCheck -check-prefix=CHECK-WHOLEARCHIVE %s
105

106
# CHECK-WHOLEARCHIVE: EXPORTS
107
# CHECK-WHOLEARCHIVE-NEXT: foobar @1
108
# CHECK-WHOLEARCHIVE-NEXT: mingwfunc @2
109
# CHECK-WHOLEARCHIVE-NEXT: EOF
110

111
# Test that we handle import libraries together with -opt:noref.
112

113
# RUN: yaml2obj %p/Inputs/hello32.yaml -o %t.obj
114
# RUN: lld-link -lldmingw -dll -out:%t.dll -entry:main@0 %t.obj -implib:%t.lib -opt:noref %p/Inputs/std32.lib -output-def:%t.def
115
# RUN: echo "EOF" >> %t.def
116
# RUN: cat %t.def | FileCheck -check-prefix=CHECK-IMPLIB %s
117

118
# CHECK-IMPLIB: EXPORTS
119
# CHECK-IMPLIB-NEXT: main@0 @1
120
# CHECK-IMPLIB-NEXT: EOF
121

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

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

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

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