brintos

brintos / llvm-project-archived public Read only

0
0
Text · 7.4 KiB · 955e19c Raw
193 lines · plain
1# REQUIRES: aarch64, x862# RUN: split-file %s %t.dir && cd %t.dir3 4# RUN: llvm-mc -filetype=obj -triple=arm64ec-windows funcs.s -o funcs-arm64ec.obj5# RUN: llvm-mc -filetype=obj -triple=aarch64-windows native-funcs.s -o funcs-aarch64.obj6# RUN: llvm-mc -filetype=obj -triple=x86_64-windows space.s -o space-x86_64.obj7# RUN: llvm-mc -filetype=obj -triple=aarch64-windows space.s -o space-aarch64.obj8# RUN: llvm-mc -filetype=obj -triple=aarch64-windows %S/Inputs/loadconfig-arm64.s -o loadconfig-arm64.obj9# RUN: llvm-mc -filetype=obj -triple=arm64ec-windows %S/Inputs/loadconfig-arm64ec.s -o loadconfig-arm64ec.obj10 11 12# Test generating range extension thunks for ARM64EC code. Place some x86_64 chunks in a middle13# and make sure that thunks stay in ARM64EC code range.14 15# RUN: lld-link -machine:arm64ec -noentry -dll funcs-arm64ec.obj space-x86_64.obj loadconfig-arm64ec.obj -out:test.dll \16# RUN:          -verbose 2>&1 | FileCheck -check-prefix=VERBOSE %s17# VERBOSE: Added 3 thunks with margin {{.*}} in 1 passes18 19# RUN: llvm-objdump -d test.dll | FileCheck --check-prefix=DISASM %s20 21# DISASM:      Disassembly of section .code1:22# DISASM-EMPTY:23# DISASM-NEXT: 0000000180004000 <.code1>:24# DISASM-NEXT: 180004000: 36000040     tbz     w0, #0x0, 0x180004008 <.code1+0x8>25# DISASM-NEXT: 180004004: d65f03c0     ret26# DISASM-NEXT: 180004008: b0000050     adrp    x16, 0x18000d00027# DISASM-NEXT: 18000400c: 91000210     add     x16, x16, #0x028# DISASM-NEXT: 180004010: d61f0200     br      x1629# DISASM-EMPTY:30# DISASM-NEXT: Disassembly of section .code2:31# DISASM-EMPTY:32# DISASM-NEXT: 0000000180005000 <.code2>:33# DISASM-NEXT:                 ...34# DISASM-EMPTY:35# DISASM-NEXT: Disassembly of section .code3:36# DISASM-EMPTY:37# DISASM-NEXT: 0000000180006000 <.code3>:38# DISASM-NEXT:                 ...39# DISASM-NEXT: 18000d000: 36000060     tbz     w0, #0x0, 0x18000d00c <.code3+0x700c>40# DISASM-NEXT: 18000d004: d65f03c0     ret41# DISASM-NEXT: 18000d008: 00000000     udf     #0x042# DISASM-NEXT: 18000d00c: 90000050     adrp    x16, 0x180015000 <.code3+0xf000>43# DISASM-NEXT: 18000d010: 91006210     add     x16, x16, #0x1844# DISASM-NEXT: 18000d014: d61f0200     br      x1645# DISASM-NEXT:                 ...46# DISASM-NEXT: 180015018: 36000040     tbz     w0, #0x0, 0x180015020 <.code3+0xf020>47# DISASM-NEXT: 18001501c: d65f03c0     ret48# DISASM-NEXT: 180015020: f0ffff70     adrp    x16, 0x180004000 <.code1>49# DISASM-NEXT: 180015024: 91000210     add     x16, x16, #0x050# DISASM-NEXT: 180015028: d61f0200     br      x1651 52# RUN: llvm-readobj --coff-load-config test.dll | FileCheck --check-prefix=LOADCFG %s53 54# LOADCFG:       CodeMap [55# LOADCFG-NEXT:    0x4000 - 0x4014  ARM64EC56# LOADCFG-NEXT:    0x5000 - 0x5300  X6457# LOADCFG-NEXT:    0x6000 - 0x1502C  ARM64EC58# LOADCFG-NEXT:  ]59 60 61# A similar test using a hybrid binary and native placeholder chunks.62 63# RUN: lld-link -machine:arm64x -noentry -dll funcs-arm64ec.obj space-aarch64.obj loadconfig-arm64.obj loadconfig-arm64ec.obj \64# RUN:          -out:testx.dll -verbose 2>&1 | FileCheck -check-prefix=VERBOSE %s65# RUN: llvm-objdump -d testx.dll | FileCheck --check-prefix=DISASM %s66 67# RUN: llvm-readobj --coff-load-config testx.dll | FileCheck --check-prefix=LOADCFGX %s68 69# LOADCFGX:       CodeMap [70# LOADCFGX-NEXT:    0x4000 - 0x4014  ARM64EC71# LOADCFGX-NEXT:    0x5000 - 0x5300  ARM6472# LOADCFGX-NEXT:    0x6000 - 0x1502C  ARM64EC73# LOADCFGX-NEXT:  ]74 75 76# Test a hybrid ARM64X binary which requires range extension thunks for both native and EC relocations.77 78# RUN: lld-link -machine:arm64x -noentry -dll funcs-arm64ec.obj funcs-aarch64.obj loadconfig-arm64.obj loadconfig-arm64ec.obj \79# RUN:           -out:testx2.dll -verbose 2>&1 | FileCheck -check-prefix=VERBOSEX %s80# VERBOSEX: Added 5 thunks with margin {{.*}} in 1 passes81 82# RUN: lld-link -machine:arm64ec -noentry -dll funcs-arm64ec.obj funcs-aarch64.obj loadconfig-arm64.obj loadconfig-arm64ec.obj \83# RUN:           -out:testx2ec.dll -verbose 2>&1 | FileCheck -check-prefix=VERBOSEX %s84 85# RUN: llvm-objdump -d testx2.dll | FileCheck --check-prefix=DISASMX %s86# RUN: llvm-objdump -d testx2ec.dll | FileCheck --check-prefix=DISASMX %s87 88# DISASMX:      Disassembly of section .code1:89# DISASMX-EMPTY:90# DISASMX-NEXT: 0000000180004000 <.code1>:91# DISASMX-NEXT: 180004000: 36000040     tbz     w0, #0x0, 0x180004008 <.code1+0x8>92# DISASMX-NEXT: 180004004: d65f03c0     ret93# DISASMX-NEXT: 180004008: b0000050     adrp    x16, 0x18000d00094# DISASMX-NEXT: 18000400c: 91000210     add     x16, x16, #0x095# DISASMX-NEXT: 180004010: d61f0200     br      x1696# DISASMX-EMPTY:97# DISASMX-NEXT: Disassembly of section .code2:98# DISASMX-EMPTY:99# DISASMX-NEXT: 0000000180005000 <.code2>:100# DISASMX-NEXT: 180005000: 36000040     tbz     w0, #0x0, 0x180005008 <.code2+0x8>101# DISASMX-NEXT: 180005004: d65f03c0     ret102# DISASMX-NEXT: 180005008: b0000090     adrp    x16, 0x180016000103# DISASMX-NEXT: 18000500c: 91000210     add     x16, x16, #0x0104# DISASMX-NEXT: 180005010: d61f0200     br      x16105# DISASMX-EMPTY:106# DISASMX-NEXT: Disassembly of section .code3:107# DISASMX-EMPTY:108# DISASMX-NEXT: 0000000180006000 <.code3>:109# DISASMX-NEXT:                 ...110# DISASMX-NEXT: 18000d000: 36000060     tbz     w0, #0x0, 0x18000d00c <.code3+0x700c>111# DISASMX-NEXT: 18000d004: d65f03c0     ret112# DISASMX-NEXT: 18000d008: 00000000     udf     #0x0113# DISASMX-NEXT: 18000d00c: 90000050     adrp    x16, 0x180015000 <.code3+0xf000>114# DISASMX-NEXT: 18000d010: 91006210     add     x16, x16, #0x18115# DISASMX-NEXT: 18000d014: d61f0200     br      x16116# DISASMX-NEXT:                 ...117# DISASMX-NEXT: 180015018: 36000040     tbz     w0, #0x0, 0x180015020 <.code3+0xf020>118# DISASMX-NEXT: 18001501c: d65f03c0     ret119# DISASMX-NEXT: 180015020: f0ffff70     adrp    x16, 0x180004000 <.code1>120# DISASMX-NEXT: 180015024: 91000210     add     x16, x16, #0x0121# DISASMX-NEXT: 180015028: d61f0200     br      x16122# DISASMX-EMPTY:123# DISASMX-NEXT: Disassembly of section .code4:124# DISASMX-EMPTY:125# DISASMX-NEXT: 0000000180016000 <.code4>:126# DISASMX-NEXT: 180016000: 36000040     tbz     w0, #0x0, 0x180016008 <.code4+0x8>127# DISASMX-NEXT: 180016004: d65f03c0     ret128# DISASMX-NEXT: 180016008: f0ffff70     adrp    x16, 0x180005000 <.code2>129# DISASMX-NEXT: 18001600c: 91000210     add     x16, x16, #0x0130# DISASMX-NEXT: 180016010: d61f0200     br      x16131 132# RUN: llvm-readobj --coff-load-config testx2.dll | FileCheck --check-prefix=LOADCFGX2 %s133# RUN: llvm-readobj --coff-load-config testx2ec.dll | FileCheck --check-prefix=LOADCFGX2 %s134 135# LOADCFGX2:       CodeMap [136# LOADCFGX2-NEXT:    0x4000 - 0x4014  ARM64EC137# LOADCFGX2-NEXT:    0x5000 - 0x5014  ARM64138# LOADCFGX2-NEXT:    0x6000 - 0x1502C  ARM64EC139# LOADCFGX2-NEXT:    0x16000 - 0x16014  ARM64140# LOADCFGX2-NEXT:  ]141 142 143#--- funcs.s144        .globl main145        .globl func1146        .globl func2147 148        .section .code1, "xr"149main:150        tbz w0, #0, func1151        ret152 153        .section .code3$a, "xr"154        .space 0x7000155 156        .section .code3$b, "xr"157func1:158        tbz w0, #0, func2159        ret160        .space 1161 162        .section .code3$c, "xr"163        .space 0x8000164 165        .section .code3$d, "xr"166        .align 2167func2:168        tbz w0, #0, main169        ret170 171#--- space.s172        .section .code2$a, "xr"173        .space 0x100174        .section .code2$b, "xr"175        .space 0x100176        .section .code2$c, "xr"177        .space 0x100178 179#--- native-funcs.s180        .globl nmain181        .globl nfunc182 183        .section .code2, "xr"184nmain:185        tbz w0, #0, nfunc186        ret187 188        .section .code4, "xr"189        .align 2190nfunc:191        tbz w0, #0, nmain192        ret193