These yaml test cases appear to have been affected by PR41836 Right now what happens is that these empty .bss sections are merged into .data, then the .data output section ends up having a zero virtual size, and it is discarded from the output after addresses are assigned. However, we've already assigned OutputSections to Chunks, so we don't correctly report the zero-sized chunks that were in there as having been discarded. Soon, we will report them as discarded, so these test cases need to be updated to have a non-zero size so they aren't discarded. llvm-svn: 360476
113 lines
5.3 KiB
Plaintext
113 lines
5.3 KiB
Plaintext
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 -globals %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-LABEL: Global Symbols
|
|
CHECK-NEXT: ============================================================
|
|
CHECK-NEXT: Records
|
|
CHECK-NEXT: 84 | S_PROCREF [size = 20] `main`
|
|
CHECK-NEXT: module = 1, sum name = 0, offset = 120
|
|
CHECK-NEXT: 148 | S_PROCREF [size = 20] `bar`
|
|
CHECK-NEXT: module = 2, sum name = 0, offset = 120
|
|
CHECK-NEXT: 128 | S_PROCREF [size = 20] `foo`
|
|
CHECK-NEXT: module = 1, sum name = 0, offset = 208
|
|
CHECK-NEXT: 104 | S_GDATA32 [size = 24] `global`
|
|
CHECK-NEXT: type = 0x0074 (int), addr = 0003:0000
|
|
CHECK-NEXT: 168 | S_GDATA32 [size = 24] `global`
|
|
CHECK-NEXT: type = 0x0074 (int), addr = 0003:0000
|
|
|
|
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 [size = 44] `main`
|
|
CHECK: parent = 0, end = 196, addr = 0001: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_BUILDINFO [size = 8] BuildId = `0x100A`
|
|
CHECK: 208 | S_GPROC32 [size = 44] `foo`
|
|
CHECK: parent = 0, end = 284, addr = 0001:0032, code size = 15
|
|
CHECK: debug start = 0, debug end = 14, flags = none
|
|
CHECK: 252 | 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: 284 | 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 [size = 44] `bar`
|
|
CHECK: parent = 0, end = 196, addr = 0001: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_BUILDINFO [size = 8] BuildId = `0x100D`
|
|
CHECK-NOT: S_GPROC32 {{.*}} `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 *`:
|
|
|
|
Make sure that we don't crash on non-prevailing debug sections if -debug is not enabled.
|
|
RUN: lld-link pdb_comdat_main.obj pdb_comdat_bar.obj -out:%t.exe -nodefaultlib -entry:main
|