aboutsummaryrefslogtreecommitdiff
path: root/test/COFF/pdb-comdat.test
blob: f85dacdbf4bb55b0ff1034230ed09dc64c57dec6 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
Consider this example program with an inline function "foo":

==> foo.h <==
extern int global;
__inline void foo() {
  ++global;
}
void bar();
==> pdb_comdat_main.c <==
#include "foo.h"
int main(void) {
  foo();
  bar();
  return 42;
}
==> pdb_comdat_bar.c <==
#include "foo.h"
void bar(void) {
  foo();
}

Both object files will contain debug info for foo, but only the debug info from
pdb_comdat_main.obj should be included in the PDB.

RUN: rm -rf %t && mkdir -p %t && cd %t
RUN: yaml2obj %S/Inputs/pdb_comdat_main.yaml -o pdb_comdat_main.obj
RUN: yaml2obj %S/Inputs/pdb_comdat_bar.yaml -o pdb_comdat_bar.obj
RUN: lld-link pdb_comdat_main.obj pdb_comdat_bar.obj -out:t.exe -debug -pdb:t.pdb -nodefaultlib -entry:main
RUN: llvm-pdbutil dump -l -symbols t.pdb | FileCheck %s

CHECK:                            Lines
CHECK: ============================================================
CHECK-LABEL:   Mod 0000 | `{{.*}}pdb_comdat_main.obj`:
CHECK:       c:\src\llvm-project\build\pdb_comdat_main.c (MD5: F969E51BBE373436D81492EB61387F36)
CHECK:       c:\src\llvm-project\build\foo.h (MD5: D74D834EFAC3AE2B45E606A8320B1D5C)
CHECK-LABEL:   Mod 0001 | `{{.*}}pdb_comdat_bar.obj`:
CHECK:       c:\src\llvm-project\build\pdb_comdat_bar.c (MD5: 365279DB4FCBEDD721BBFC3B14A953C2)
CHECK-NOT:       c:\src\llvm-project\build\foo.h
CHECK-LABEL:   Mod 0002 | `* Linker *`:

CHECK:                           Symbols
CHECK: ============================================================
CHECK-LABEL:   Mod 0000 | `{{.*}}pdb_comdat_main.obj`:
CHECK:     4 | S_OBJNAME [size = 56] sig=0, `C:\src\llvm-project\build\pdb_comdat_main.obj`
CHECK:    60 | S_COMPILE3 [size = 60]
CHECK:         machine = intel x86-x64, Ver = Microsoft (R) Optimizing Compiler, language = c
CHECK:         frontend = 19.0.24215.1, backend = 19.0.24215.1
CHECK:         flags = security checks | hot patchable
CHECK:   120 | S_GPROC32_ID [size = 44] `main`
CHECK:         parent = 0, end = 196, addr = 0002:0000, code size = 24
CHECK:         debug start = 4, debug end = 19, flags = none
CHECK:   164 | S_FRAMEPROC [size = 32]
CHECK:         size = 40, padding size = 0, offset to padding = 0
CHECK:         bytes of callee saved registers = 0, exception handler addr = 0000:0000
CHECK:         flags = has async eh | opt speed
CHECK:   196 | S_END [size = 4]
CHECK:   200 | S_GDATA32 [size = 24] `global`
CHECK:         type = 0x0074 (int), addr = 0000:0000
CHECK:   224 | S_BUILDINFO [size = 8] BuildId = `0x100A`
CHECK:   232 | S_GPROC32_ID [size = 44] `foo`
CHECK:         parent = 0, end = 308, addr = 0002:0032, code size = 15
CHECK:         debug start = 0, debug end = 14, flags = none
CHECK:   276 | S_FRAMEPROC [size = 32]
CHECK:         size = 0, padding size = 0, offset to padding = 0
CHECK:         bytes of callee saved registers = 0, exception handler addr = 0000:0000
CHECK:         flags = marked inline | has async eh | opt speed
CHECK:   308 | S_END [size = 4]
CHECK-LABEL:   Mod 0001 | `{{.*}}pdb_comdat_bar.obj`:
CHECK:     4 | S_OBJNAME [size = 56] sig=0, `C:\src\llvm-project\build\pdb_comdat_bar.obj`
CHECK:    60 | S_COMPILE3 [size = 60]
CHECK:       machine = intel x86-x64, Ver = Microsoft (R) Optimizing Compiler, language = c
CHECK:       frontend = 19.0.24215.1, backend = 19.0.24215.1
CHECK:       flags = security checks | hot patchable
CHECK:   120 | S_GPROC32_ID [size = 44] `bar`
CHECK:       parent = 0, end = 196, addr = 0002:0048, code size = 14
CHECK:       debug start = 4, debug end = 9, flags = none
CHECK:   164 | S_FRAMEPROC [size = 32]
CHECK:       size = 40, padding size = 0, offset to padding = 0
CHECK:       bytes of callee saved registers = 0, exception handler addr = 0000:0000
CHECK:       flags = has async eh | opt speed
CHECK:   196 | S_END [size = 4]
CHECK:   200 | S_GDATA32 [size = 24] `global`
CHECK:       type = 0x0074 (int), addr = 0000:0000
CHECK:   224 | S_BUILDINFO [size = 8] BuildId = `0x100D`
CHECK-NOT:   S_GPROC32_ID {{.*}} `foo`
CHECK-LABEL:   Mod 0002 | `* Linker *`:

Reorder the object files and verify that the other table is selected.

RUN: lld-link pdb_comdat_bar.obj pdb_comdat_main.obj -out:t.exe -debug -pdb:t.pdb -nodefaultlib -entry:main
RUN: llvm-pdbutil dump -l t.pdb | FileCheck %s --check-prefix=REORDER

REORDER-LABEL:   Mod 0000 | `{{.*}}pdb_comdat_bar.obj`:
REORDER:       c:\src\llvm-project\build\pdb_comdat_bar.c (MD5: 365279DB4FCBEDD721BBFC3B14A953C2)
REORDER:       c:\src\llvm-project\build\foo.h (MD5: D74D834EFAC3AE2B45E606A8320B1D5C)
REORDER-LABEL:   Mod 0001 | `{{.*}}pdb_comdat_main.obj`:
REORDER:       c:\src\llvm-project\build\pdb_comdat_main.c
REORDER-NOT:       c:\src\llvm-project\build\foo.h
REORDER-LABEL:   Mod 0002 | `* Linker *`: