xref: /llvm-project/llvm/test/tools/llvm-ar/coff-symtab.test (revision c41966161fffea6ef280fbd341ef1751f70379dd)
1Verify that llvm-ar uses COFF archive format by ensuring that archive map is sorted.
2
3RUN: rm -rf %t.dir && split-file %s %t.dir && cd %t.dir
4
5RUN: yaml2obj coff-symtab.yaml -o coff-symtab.obj
6RUN: llvm-ar crs out.a coff-symtab.obj
7RUN: llvm-nm --print-armap out.a | FileCheck %s
8
9RUN: llvm-as coff-symtab.ll -o coff-symtab.bc
10RUN: llvm-ar crs out2.a coff-symtab.bc
11RUN: llvm-nm --print-armap out2.a | FileCheck %s
12
13RUN: yaml2obj elf.yaml -o coff-symtab.o
14RUN: llvm-ar crs --format coff out3.a coff-symtab.o
15RUN: llvm-nm --print-armap out3.a | FileCheck %s
16
17Create an empty archive with no symbol map, add a COFF file to it and check that the output archive is a COFF archive.
18
19RUN: llvm-ar --format coff rcS out4.a
20RUN: llvm-ar rs out4.a coff-symtab.obj
21RUN: llvm-nm --print-armap out4.a | FileCheck %s
22
23CHECK: Archive map
24CHECK-NEXT: a in coff-symtab
25CHECK-NEXT: b in coff-symtab
26CHECK-NEXT: c in coff-symtab
27CHECK-EMPTY:
28
29#--- coff-symtab.yaml
30--- !COFF
31header:
32  Machine:           IMAGE_FILE_MACHINE_UNKNOWN
33  Characteristics:   [  ]
34sections:
35  - Name:            .text
36    Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
37    Alignment:       4
38    SectionData:     ''
39symbols:
40  - Name:            b
41    Value:           0
42    SectionNumber:   1
43    SimpleType:      IMAGE_SYM_TYPE_NULL
44    ComplexType:     IMAGE_SYM_DTYPE_FUNCTION
45    StorageClass:    IMAGE_SYM_CLASS_EXTERNAL
46  - Name:            c
47    Value:           0
48    SectionNumber:   1
49    SimpleType:      IMAGE_SYM_TYPE_NULL
50    ComplexType:     IMAGE_SYM_DTYPE_FUNCTION
51    StorageClass:    IMAGE_SYM_CLASS_EXTERNAL
52  - Name:            a
53    Value:           0
54    SectionNumber:   1
55    SimpleType:      IMAGE_SYM_TYPE_NULL
56    ComplexType:     IMAGE_SYM_DTYPE_FUNCTION
57    StorageClass:    IMAGE_SYM_CLASS_EXTERNAL
58...
59
60
61#--- coff-symtab.ll
62target triple = "x86_64-unknown-windows-msvc"
63
64define void @b() { ret void }
65define void @c() { ret void }
66define void @a() { ret void }
67
68#--- elf.yaml
69--- !ELF
70FileHeader:
71  Class:             ELFCLASS64
72  Data  :            ELFDATA2LSB
73  Type:              ET_REL
74  Machine:           EM_X86_64
75Sections:
76  - Name:            .text
77    Type:            SHT_PROGBITS
78    Flags:           [ SHF_ALLOC, SHF_EXECINSTR ]
79    AddressAlign:    0x0000000000000004
80    Content:         ''
81Symbols:
82  - Name:            b
83    Binding:         STB_GLOBAL
84    Section:         .text
85  - Name:            c
86    Binding:         STB_GLOBAL
87    Section:         .text
88  - Name:            a
89    Binding:         STB_GLOBAL
90    Section:         .text
91...
92