Joel Jones | a5752e1 | 2018-06-06 13:56:51 | [diff] [blame] | 1 | # REQUIRES: x86 |
Peter Collingbourne | 107f550 | 2018-05-12 02:12:40 | [diff] [blame] | 2 | # RUN: llvm-mc %s -triple x86_64-windows-msvc -filetype=obj -o %t.obj |
| 3 | # RUN: lld-link %t.obj -dll -noentry -out:%t.dll -merge:.xdata=.xdata |
Fangrui Song | b159906 | 2019-05-01 05:49:01 | [diff] [blame] | 4 | # RUN: llvm-readobj --sections --coff-exports %t.dll | FileCheck %s |
Peter Collingbourne | 107f550 | 2018-05-12 02:12:40 | [diff] [blame] | 5 | |
| 6 | # CHECK: Name: .pdata |
| 7 | # CHECK-NEXT: VirtualSize: 0x18 |
| 8 | # CHECK: Name: .xdata |
| 9 | # CHECK-NEXT: VirtualSize: 0x10 |
| 10 | |
| 11 | # CHECK: Name: xdata1 |
| 12 | # CHECK-NEXT: RVA: 0x1010 |
| 13 | # CHECK: Name: xdata1a |
| 14 | # CHECK-NEXT: RVA: 0x1010 |
| 15 | # CHECK: Name: xdata1b |
| 16 | # CHECK-NEXT: RVA: 0x1030 |
| 17 | |
| 18 | .text |
| 19 | callee: |
| 20 | ret |
| 21 | |
| 22 | .def xdata1; |
| 23 | .scl 2; |
| 24 | .type 32; |
| 25 | .endef |
| 26 | .section .text,"xr",one_only,xdata1 |
| 27 | .globl xdata1 # -- Begin function xdata1 |
| 28 | .p2align 4, 0x90 |
| 29 | xdata1: # @xdata1 |
| 30 | .seh_proc xdata1 |
| 31 | # BB#0: # %entry |
| 32 | subq $40, %rsp |
| 33 | .seh_stackalloc 40 |
| 34 | .seh_endprologue |
| 35 | callq callee |
| 36 | nop |
| 37 | addq $40, %rsp |
| 38 | jmp callee # TAILCALL |
| 39 | .seh_handlerdata |
| 40 | .section .text,"xr",one_only,xdata1 |
| 41 | .seh_endproc |
| 42 | # -- End function |
| 43 | |
| 44 | # xdata1a is identical to xdata1, so it should be ICFd, and so should its pdata. |
| 45 | # It also has associative debug and CFG sections which should be ignored by ICF. |
| 46 | .def xdata1a; |
| 47 | .scl 2; |
| 48 | .type 32; |
| 49 | .endef |
| 50 | .section .text,"xr",one_only,xdata1a |
| 51 | .globl xdata1a # -- Begin function xdata1a |
| 52 | .p2align 4, 0x90 |
| 53 | xdata1a: # @xdata1a |
| 54 | .seh_proc xdata1a |
| 55 | # BB#0: # %entry |
| 56 | subq $40, %rsp |
| 57 | .seh_stackalloc 40 |
| 58 | .seh_endprologue |
| 59 | callq callee |
| 60 | nop |
| 61 | addq $40, %rsp |
| 62 | jmp callee # TAILCALL |
| 63 | .seh_handlerdata |
| 64 | .section .text,"xr",one_only,xdata1a |
| 65 | .seh_endproc |
| 66 | |
| 67 | .section .debug$S,"r",associative,xdata1a |
| 68 | .section .gfids$y,"r",associative,xdata1a |
| 69 | .section .gljmp$y,"r",associative,xdata1a |
| 70 | |
| 71 | # xdata1b's text is identical to xdata1, but its xdata specifies a different |
| 72 | # stack size, so it cannot be ICFd with xdata1. |
| 73 | .def xdata1b; |
| 74 | .scl 2; |
| 75 | .type 32; |
| 76 | .endef |
| 77 | .section .text,"xr",one_only,xdata1b |
| 78 | .globl xdata1b # -- Begin function xdata1b |
| 79 | .p2align 4, 0x90 |
| 80 | xdata1b: # @xdata1b |
| 81 | .seh_proc xdata1b |
| 82 | # BB#0: # %entry |
| 83 | subq $40, %rsp |
| 84 | .seh_stackalloc 48 |
| 85 | .seh_endprologue |
| 86 | callq callee |
| 87 | nop |
| 88 | addq $40, %rsp |
| 89 | jmp callee # TAILCALL |
| 90 | .seh_handlerdata |
| 91 | .section .text,"xr",one_only,xdata1b |
| 92 | .seh_endproc |
| 93 | # -- End function |
| 94 | |
| 95 | .section .drectve,"yn" |
| 96 | .ascii " -export:xdata1" |
| 97 | .ascii " -export:xdata1a" |
| 98 | .ascii " -export:xdata1b" |