Jacek Caban | 72c6ca6 | 2023-12-05 10:59:43 | [diff] [blame] | 1 | REQUIRES: aarch64, x86 |
| 2 | RUN: split-file %s %t.dir && cd %t.dir |
| 3 | |
| 4 | Test handlign of hybrid .pdata section on ARM64EC target. |
| 5 | |
| 6 | RUN: llvm-mc -filetype=obj -triple=arm64-windows arm64-func-sym.s -o arm64-func-sym.obj |
| 7 | RUN: llvm-mc -filetype=obj -triple=arm64ec-windows arm64ec-func-sym.s -o arm64ec-func-sym.obj |
| 8 | RUN: llvm-mc -filetype=obj -triple=x86_64-windows x86_64-func-sym.s -o x86_64-func-sym.obj |
Jacek Caban | 659e66e | 2025-01-21 21:24:00 | [diff] [blame] | 9 | RUN: llvm-mc -filetype=obj -triple=aarch64-windows %S/Inputs/loadconfig-arm64.s -o loadconfig-arm64.obj |
Jacek Caban | 72c6ca6 | 2023-12-05 10:59:43 | [diff] [blame] | 10 | RUN: llvm-mc -filetype=obj -triple=arm64ec-windows %p/Inputs/loadconfig-arm64ec.s -o loadconfig-arm64ec.obj |
| 11 | |
| 12 | Only arm64ec code: |
| 13 | |
| 14 | RUN: lld-link -out:test1.dll -machine:arm64ec arm64ec-func-sym.obj loadconfig-arm64ec.obj -dll -noentry |
| 15 | |
| 16 | RUN: llvm-readobj --coff-load-config test1.dll | FileCheck -check-prefix=LOADCFG %s |
| 17 | LOADCFG: ExtraRFETable: 0x4000 |
| 18 | LOADCFG-NEXT: ExtraRFETableSize: 0x8 |
| 19 | |
| 20 | RUN: llvm-readobj --headers test1.dll | FileCheck -check-prefix=NODIR %s |
| 21 | NODIR: ExceptionTableSize: 0x0 |
| 22 | |
| 23 | RUN: llvm-objdump -s --section=.pdata test1.dll | FileCheck -check-prefix=DATA %s |
| 24 | DATA: 180004000 00100000 11000001 |
| 25 | |
| 26 | Only x86_64 code: |
| 27 | |
| 28 | RUN: lld-link -out:test2.dll -machine:arm64ec x86_64-func-sym.obj loadconfig-arm64ec.obj -dll -noentry |
| 29 | |
| 30 | RUN: llvm-readobj --coff-load-config test2.dll | FileCheck -check-prefix=NOLOADCFG %s |
| 31 | NOLOADCFG: ExtraRFETableSize: 0x0 |
| 32 | |
| 33 | RUN: llvm-readobj --headers test2.dll | FileCheck -check-prefix=DIR %s |
| 34 | DIR: ExceptionTableRVA: 0x4000 |
| 35 | DIR-NEXT: ExceptionTableSize: 0xC |
| 36 | |
| 37 | RUN: llvm-objdump -s --section=.pdata test2.dll | FileCheck -check-prefix=DATA2 %s |
| 38 | DATA2: 180004000 00100000 0e100000 |
| 39 | |
| 40 | Mixed arm64ec and x86_64 code: |
| 41 | |
| 42 | RUN: lld-link -out:test3.dll -machine:arm64ec arm64ec-func-sym.obj x86_64-func-sym.obj \ |
| 43 | RUN: loadconfig-arm64ec.obj -dll -noentry |
| 44 | |
| 45 | RUN: llvm-readobj --coff-load-config test3.dll | FileCheck -check-prefix=LOADCFG2 %s |
| 46 | LOADCFG2: ExtraRFETable: 0x5000 |
| 47 | LOADCFG2-NEXT: ExtraRFETableSize: 0x8 |
| 48 | |
| 49 | RUN: llvm-readobj --headers test3.dll | FileCheck -check-prefix=DIR2 %s |
| 50 | DIR2: ExceptionTableRVA: 0x5008 |
| 51 | DIR2-NEXT: ExceptionTableSize: 0xC |
| 52 | |
| 53 | RUN: llvm-objdump -s --section=.pdata test3.dll | FileCheck -check-prefix=DATA3 %s |
| 54 | DATA3: 180005000 00100000 11000001 00200000 0e200000 |
| 55 | |
| 56 | Mixed arm64x code: |
| 57 | |
| 58 | RUN: lld-link -out:test4.dll -machine:arm64x arm64-func-sym.obj arm64ec-func-sym.obj \ |
Jacek Caban | 659e66e | 2025-01-21 21:24:00 | [diff] [blame] | 59 | RUN: x86_64-func-sym.obj loadconfig-arm64.obj loadconfig-arm64ec.obj -dll -noentry |
Jacek Caban | 72c6ca6 | 2023-12-05 10:59:43 | [diff] [blame] | 60 | |
Jacek Caban | 8252e0e | 2025-02-13 18:22:57 | [diff] [blame] | 61 | RUN: llvm-readobj --headers --coff-load-config test4.dll | FileCheck -check-prefix=DIR3 %s |
Jacek Caban | 659e66e | 2025-01-21 21:24:00 | [diff] [blame] | 62 | DIR3: ImageOptionalHeader { |
| 63 | DIR3: DataDirectory { |
| 64 | DIR3: ExceptionTableRVA: 0x6000 |
| 65 | DIR3-NEXT: ExceptionTableSize: 0x10 |
| 66 | DIR3: } |
| 67 | DIR3: } |
Jacek Caban | 8252e0e | 2025-02-13 18:22:57 | [diff] [blame] | 68 | DIR3: CHPEMetadata [ |
| 69 | DIR3: ExtraRFETable: 0x6010 |
| 70 | DIR3-NEXT: ExtraRFETableSize: 0xC |
| 71 | DIR3: ] |
Jacek Caban | 659e66e | 2025-01-21 21:24:00 | [diff] [blame] | 72 | DIR3: HybridObject { |
| 73 | DIR3: ImageOptionalHeader { |
| 74 | DIR3: ExceptionTableRVA: 0x6010 |
| 75 | DIR3-NEXT: ExceptionTableSize: 0xC |
| 76 | DIR3: } |
Jacek Caban | 8252e0e | 2025-02-13 18:22:57 | [diff] [blame] | 77 | DIR3: CHPEMetadata [ |
| 78 | DIR3: ExtraRFETable: 0x6000 |
| 79 | DIR3-NEXT: ExtraRFETableSize: 0x10 |
| 80 | DIR3: ] |
Jacek Caban | 659e66e | 2025-01-21 21:24:00 | [diff] [blame] | 81 | DIR3: } |
Jacek Caban | 72c6ca6 | 2023-12-05 10:59:43 | [diff] [blame] | 82 | |
| 83 | RUN: llvm-objdump -s --section=.pdata test4.dll | FileCheck -check-prefix=DATA4 %s |
| 84 | DATA4: 180006000 00100000 11000001 00200000 11000001 ......... ...... |
| 85 | DATA4: 180006010 00300000 0e300000 |
| 86 | |
| 87 | Order of inputs doesn't matter, the data is sorted by type and RVA: |
| 88 | |
| 89 | RUN: lld-link -out:test5.dll -machine:arm64ec x86_64-func-sym.obj arm64ec-func-sym.obj \ |
| 90 | RUN: loadconfig-arm64ec.obj -dll -noentry |
| 91 | RUN: llvm-readobj --coff-load-config test5.dll | FileCheck -check-prefix=LOADCFG2 %s |
| 92 | RUN: llvm-readobj --headers test5.dll | FileCheck -check-prefix=DIR2 %s |
| 93 | RUN: llvm-objdump -s --section=.pdata test5.dll | FileCheck -check-prefix=DATA3 %s |
| 94 | |
| 95 | RUN: lld-link -out:test6.dll -machine:arm64x arm64ec-func-sym.obj x86_64-func-sym.obj \ |
Jacek Caban | 659e66e | 2025-01-21 21:24:00 | [diff] [blame] | 96 | RUN: arm64-func-sym.obj loadconfig-arm64.obj loadconfig-arm64ec.obj -dll -noentry |
Jacek Caban | 8252e0e | 2025-02-13 18:22:57 | [diff] [blame] | 97 | RUN: llvm-readobj --headers --coff-load-config test6.dll | FileCheck -check-prefix=DIR3 %s |
Jacek Caban | 72c6ca6 | 2023-12-05 10:59:43 | [diff] [blame] | 98 | RUN: llvm-objdump -s --section=.pdata test6.dll | FileCheck -check-prefix=DATA4 %s |
| 99 | |
| 100 | RUN: lld-link -out:test7.dll -machine:arm64x x86_64-func-sym.obj arm64ec-func-sym.obj \ |
Jacek Caban | 659e66e | 2025-01-21 21:24:00 | [diff] [blame] | 101 | RUN: arm64-func-sym.obj loadconfig-arm64.obj loadconfig-arm64ec.obj -dll -noentry |
Jacek Caban | 8252e0e | 2025-02-13 18:22:57 | [diff] [blame] | 102 | RUN: llvm-readobj --headers --coff-load-config test7.dll | FileCheck -check-prefix=DIR3 %s |
Jacek Caban | 72c6ca6 | 2023-12-05 10:59:43 | [diff] [blame] | 103 | RUN: llvm-objdump -s --section=.pdata test7.dll | FileCheck -check-prefix=DATA4 %s |
| 104 | |
| 105 | #--- arm64-func-sym.s |
| 106 | .text |
| 107 | .globl arm64_func_sym |
| 108 | .p2align 2, 0x0 |
| 109 | arm64_func_sym: |
| 110 | .seh_proc arm64_func_sym |
| 111 | sub sp, sp, #32 |
| 112 | .seh_stackalloc 32 |
| 113 | .seh_endprologue |
| 114 | mov w0, #2 |
| 115 | .seh_startepilogue |
| 116 | add sp, sp, #32 |
| 117 | .seh_stackalloc 32 |
| 118 | .seh_endepilogue |
| 119 | ret |
| 120 | .seh_endproc |
| 121 | |
| 122 | #--- arm64ec-func-sym.s |
| 123 | .text |
| 124 | .globl arm64ec_func_sym |
| 125 | .p2align 2, 0x0 |
| 126 | arm64ec_func_sym: |
| 127 | .seh_proc arm64ec_func_sym |
| 128 | sub sp, sp, #32 |
| 129 | .seh_stackalloc 32 |
| 130 | .seh_endprologue |
| 131 | mov w0, #3 |
| 132 | .seh_startepilogue |
| 133 | add sp, sp, #32 |
| 134 | .seh_stackalloc 32 |
| 135 | .seh_endepilogue |
| 136 | ret |
| 137 | .seh_endproc |
| 138 | |
| 139 | #--- x86_64-func-sym.s |
| 140 | .text |
| 141 | .globl x86_64_func_sym |
| 142 | .p2align 2, 0x0 |
| 143 | x86_64_func_sym: |
| 144 | .seh_proc x86_64_func_sym |
| 145 | subq $40, %rsp |
| 146 | .seh_stackalloc 40 |
| 147 | .seh_endprologue |
| 148 | movl $4, %eax |
| 149 | addq $40, %rsp |
| 150 | retq |
| 151 | .seh_endproc |