Support multiple COFF sections with the same name but different COMDAT.
[oota-llvm.git] / test / MC / COFF / linkonce.s
1 // Test section manipulation via .linkonce directive.
2 //
3 // RUN: llvm-mc -triple i386-pc-win32 -filetype=obj %s | llvm-readobj -s -t | FileCheck %s
4 // RUN: llvm-mc -triple x86_64-pc-win32 -filetype=obj %s | llvm-readobj -s -t | FileCheck %s
5
6 .section s1
7 .linkonce
8 .long 1
9
10 .section s2
11 .linkonce one_only
12 .long 1
13
14 .section s3
15 .linkonce discard
16 .long 1
17
18 .section s4
19 .linkonce same_size
20 .long 1
21
22 .section s5
23 .linkonce same_contents
24 .long 1
25
26 .section s6
27 .linkonce associative s1
28 .long 1
29
30 .section s7
31 .linkonce largest
32 .long 1
33
34 .section s8
35 .linkonce newest
36 .long 1
37
38 .section .foo$bar
39 .linkonce discard
40 .long 1
41
42 // Check that valid '.section' names can be associated.
43 .section multi
44 .linkonce associative .foo$bar
45 .long 1
46
47
48 // CHECK: Sections [
49 // CHECK:   Section {
50 // CHECK:     Name: s1
51 // CHECK:     Characteristics [
52 // CHECK:       IMAGE_SCN_LNK_COMDAT
53 // CHECK:     ]
54 // CHECK:   }
55 // CHECK:   Section {
56 // CHECK:     Name: s2
57 // CHECK:     Characteristics [
58 // CHECK:       IMAGE_SCN_LNK_COMDAT
59 // CHECK:     ]
60 // CHECK:   }
61 // CHECK:   Section {
62 // CHECK:     Name: s3
63 // CHECK:     Characteristics [
64 // CHECK:       IMAGE_SCN_LNK_COMDAT
65 // CHECK:     ]
66 // CHECK:   }
67 // CHECK:   Section {
68 // CHECK:     Name: s4
69 // CHECK:     Characteristics [
70 // CHECK:       IMAGE_SCN_LNK_COMDAT
71 // CHECK:     ]
72 // CHECK:   }
73 // CHECK:   Section {
74 // CHECK:     Name: s5
75 // CHECK:     Characteristics [
76 // CHECK:       IMAGE_SCN_LNK_COMDAT
77 // CHECK:     ]
78 // CHECK:   }
79 // CHECK:   Section {
80 // CHECK:     Name: s6
81 // CHECK:     Characteristics [
82 // CHECK:       IMAGE_SCN_LNK_COMDAT
83 // CHECK:     ]
84 // CHECK:   }
85 // CHECK:   Section {
86 // CHECK:     Name: s7
87 // CHECK:     Characteristics [
88 // CHECK:       IMAGE_SCN_LNK_COMDAT
89 // CHECK:     ]
90 // CHECK:   }
91 // CHECK:   Section {
92 // CHECK:     Name: s8
93 // CHECK:     Characteristics [
94 // CHECK:       IMAGE_SCN_LNK_COMDAT
95 // CHECK:     ]
96 // CHECK:   }
97 // CHECK:   Section {
98 // CHECK:     Name: multi
99 // CHECK:     Characteristics [
100 // CHECK:       IMAGE_SCN_LNK_COMDAT
101 // CHECK:     ]
102 // CHECK:   }
103 // CHECK: ]
104 // CHECK: Symbols [
105 // CHECK:   Symbol {
106 // CHECK:     Name: s1
107 // CHECK:     Section: s1 (1)
108 // CHECK:     AuxSectionDef {
109 // CHECK:       Number: 1
110 // CHECK:       Selection: Any (0x2)
111 // CHECK:     }
112 // CHECK:   }
113 // CHECK:   Symbol {
114 // CHECK:     Name: s2
115 // CHECK:     Section: s2 (2)
116 // CHECK:     AuxSectionDef {
117 // CHECK:       Number: 2
118 // CHECK:       Selection: NoDuplicates (0x1)
119 // CHECK:     }
120 // CHECK:   }
121 // CHECK:   Symbol {
122 // CHECK:     Name: s3
123 // CHECK:     Section: s3 (3)
124 // CHECK:     AuxSectionDef {
125 // CHECK:       Number: 3
126 // CHECK:       Selection: Any (0x2)
127 // CHECK:     }
128 // CHECK:   }
129 // CHECK:   Symbol {
130 // CHECK:     Name: s4
131 // CHECK:     Section: s4 (4)
132 // CHECK:     AuxSectionDef {
133 // CHECK:       Number: 4
134 // CHECK:       Selection: SameSize (0x3)
135 // CHECK:     }
136 // CHECK:   }
137 // CHECK:   Symbol {
138 // CHECK:     Name: s5
139 // CHECK:     Section: s5 (5)
140 // CHECK:     AuxSectionDef {
141 // CHECK:       Number: 5
142 // CHECK:       Selection: ExactMatch (0x4)
143 // CHECK:     }
144 // CHECK:   }
145 // CHECK:   Symbol {
146 // CHECK:     Name: s6
147 // CHECK:     Section: s6 (6)
148 // CHECK:     AuxSectionDef {
149 // CHECK:       Number: 1
150 // CHECK:       Selection: Associative (0x5)
151 // CHECK:       AssocSection: s1
152 // CHECK:     }
153 // CHECK:   }
154 // CHECK:   Symbol {
155 // CHECK:     Name: s7
156 // CHECK:     Section: s7 (7)
157 // CHECK:     AuxSectionDef {
158 // CHECK:       Number: 7
159 // CHECK:       Selection: Largest (0x6)
160 // CHECK:     }
161 // CHECK:   }
162 // CHECK:   Symbol {
163 // CHECK:     Name: s8
164 // CHECK:     Section: s8 (8)
165 // CHECK:     AuxSectionDef {
166 // CHECK:       Number: 8
167 // CHECK:       Selection: Newest (0x7)
168 // CHECK:     }
169 // CHECK:   }
170 // CHECK:   Symbol {
171 // CHECK:     Name: multi
172 // CHECK:     Value: 0
173 // CHECK:     Section: multi (10)
174 // CHECK:     AuxSectionDef {
175 // CHECK:       Number: 9
176 // CHECK:       Selection: Associative (0x5)
177 // CHECK:       AssocSection: .foo$bar
178 // CHECK:     }
179 // CHECK:   }