diff options
Diffstat (limited to 'lld/test/COFF/gc-dwarf.s')
-rw-r--r-- | lld/test/COFF/gc-dwarf.s | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/lld/test/COFF/gc-dwarf.s b/lld/test/COFF/gc-dwarf.s new file mode 100644 index 00000000000..56b866f4a4a --- /dev/null +++ b/lld/test/COFF/gc-dwarf.s @@ -0,0 +1,60 @@ +# REQUIRES: x86 + +# RUN: llvm-mc -triple=x86_64-windows-msvc %s -filetype=obj -o %t.obj +# RUN: lld-link -lldmap:%t.map -out:%t.exe -opt:ref -entry:main %t.obj -verbose 2>&1 | FileCheck %s +# RUN: FileCheck %s --check-prefix=MAP --input-file=%t.map + +# CHECK: Discarded unused1 +# CHECK-NEXT: Discarded unused2 +# CHECK-NOT: Discarded + +# MAP: In Symbol +# MAP: gc-dwarf.s.tmp.obj:(.text) +# MAP: {{ main$}} +# MAP: gc-dwarf.s.tmp.obj:(.text) +# MAP: {{ used$}} + + .def @feat.00; .scl 3; .type 0; .endef + .globl @feat.00 +.set @feat.00, 0 + + .def main; .scl 2; .type 32; .endef + .section .text,"xr",one_only,main + .globl main +main: + callq used + xorl %eax, %eax + retq + + .def used; .scl 2; .type 32; .endef + .section .text,"xr",one_only,used + .globl used +used: + retq + + + .def unused1; .scl 2; .type 32; .endef + .section .text,"xr",one_only,unused1 + .globl unused1 +unused1: + retq + + .def unused2; .scl 2; .type 32; .endef + .section .text,"xr",one_only,unused2 + .globl unused2 +unused2: + retq + +# This isn't valid DWARF, but LLD doesn't care. Make up some data that +# references the functions above. +.section .debug_info,"r" +.long main@IMGREL +.long unused1@IMGREL +.long unused2@IMGREL + +# Similarly, .eh_frame unwind info should not keep functions alive. Again, this +# is not valid unwind info, but it doesn't matter for testing purposes. +.section .eh_frame,"r" +.long main@IMGREL +.long unused1@IMGREL +.long unused2@IMGREL |