247 lines · plain
1REQUIRES: aarch64, x862RUN: split-file %s %t.dir && cd %t.dir3 4RUN: llvm-mc -filetype=obj -triple=arm64ec-windows test.s -o test.obj5RUN: llvm-mc -filetype=obj -triple=arm64ec-windows icall.s -o icall.obj6RUN: llvm-mc -filetype=obj -triple=arm64ec-windows hybmp.s -o hybmp.obj7RUN: llvm-mc -filetype=obj -triple=x86_64-windows test.s -o test-x86_64.obj8RUN: llvm-mc -filetype=obj -triple=arm64ec-windows %S/Inputs/loadconfig-arm64ec.s -o loadconfig-arm64ec.obj9RUN: llvm-lib -machine:arm64ec -def:test.def -out:test-arm64ec.lib10RUN: llvm-lib -machine:arm64ec -def:test2.def -out:test2-arm64ec.lib11RUN: llvm-lib -machine:x64 -def:test.def -out:test-x86_64.lib12 13Link using ARM64EC import library:14RUN: lld-link -machine:arm64ec -dll -noentry -out:out.dll loadconfig-arm64ec.obj icall.obj hybmp.obj \15RUN: test.obj test-arm64ec.lib test2-arm64ec.lib -map16 17Link using x86_64 import library:18RUN: lld-link -machine:arm64ec -dll -noentry -out:out2.dll loadconfig-arm64ec.obj icall.obj hybmp.obj \19RUN: test.obj test-x86_64.lib test2-arm64ec.lib -map20 21Link using x86_64 object file:22RUN: lld-link -machine:arm64ec -dll -noentry -out:out3.dll loadconfig-arm64ec.obj icall.obj hybmp.obj \23RUN: test-x86_64.obj test-arm64ec.lib test2-arm64ec.lib -map24 25RUN: llvm-readobj --coff-imports out.dll | FileCheck --check-prefix=IMPORTS %s26RUN: llvm-readobj --coff-imports out2.dll | FileCheck --check-prefix=IMPORTS %s27RUN: llvm-readobj --coff-imports out3.dll | FileCheck -check-prefix=IMPORTS %s28IMPORTS: Import {29IMPORTS-NEXT: Name: test.dll30IMPORTS-NEXT: ImportLookupTableRVA: 0x421831IMPORTS-NEXT: ImportAddressTableRVA: 0x300032IMPORTS-NEXT: Symbol: data (0)33IMPORTS-NEXT: Symbol: func (0)34IMPORTS-NEXT: Symbol: func2 (0)35IMPORTS-NEXT: }36IMPORTS-NEXT: Import {37IMPORTS-NEXT: Name: test2.dll38IMPORTS-NEXT: ImportLookupTableRVA:39IMPORTS-NEXT: ImportAddressTableRVA: 0x302040IMPORTS-NEXT: Symbol: t2func (0)41IMPORTS-NEXT: }42 43RUN: llvm-objdump -d out.dll | FileCheck --check-prefix=DISASM %s44RUN: llvm-objdump -d out2.dll | FileCheck --check-prefix=DISASM %s45RUN: llvm-objdump -d out3.dll | FileCheck -check-prefix=DISASM %s46 47DISASM: 180001000: 52800000 mov w0, #0x0 // =048DISASM-NEXT: 180001004: d65f03c0 ret49DISASM-NEXT: 180001008: 90000030 adrp x16, 0x18000500050DISASM-NEXT: 18000100c: f9400610 ldr x16, [x16, #0x8]51DISASM-NEXT: 180001010: d61f0200 br x1652DISASM-NEXT: 180001014: d000000b adrp x11, 0x18000300053DISASM-NEXT: 180001018: f940056b ldr x11, [x11, #0x8]54DISASM-NEXT: 18000101c: 9000000a adrp x10, 0x180001000 <.text>55DISASM-NEXT: 180001020: 9101714a add x10, x10, #0x5c56DISASM-NEXT: 180001024: 17fffff7 b 0x180001000 <.text>57DISASM-NEXT: 180001028: d000000b adrp x11, 0x18000300058DISASM-NEXT: 18000102c: f940096b ldr x11, [x11, #0x10]59DISASM-NEXT: 180001030: f0ffffea adrp x10, 0x18000000060DISASM-NEXT: 180001034: 9100014a add x10, x10, #0x061DISASM-NEXT: 180001038: 17fffff2 b 0x180001000 <.text>62DISASM-NEXT: 18000103c: 90000030 adrp x16, 0x18000500063DISASM-NEXT: 180001040: f9401210 ldr x16, [x16, #0x20]64DISASM-NEXT: 180001044: d61f0200 br x1665DISASM-NEXT: 180001048: d000000b adrp x11, 0x18000300066DISASM-NEXT: 18000104c: f940116b ldr x11, [x11, #0x20]67DISASM-NEXT: 180001050: 9000000a adrp x10, 0x180001000 <.text>68DISASM-NEXT: 180001054: 9101914a add x10, x10, #0x6469DISASM-NEXT: 180001058: 17ffffea b 0x180001000 <.text>70DISASM-NEXT: 18000105c: 52800020 mov w0, #0x1 // =171DISASM-NEXT: 180001060: d65f03c0 ret72DISASM-NEXT: 180001064: 52800040 mov w0, #0x2 // =273DISASM-NEXT: 180001068: d65f03c0 ret74DISASM-NEXT: ...75DISASM-NEXT: 180002000: ff 25 02 10 00 00 jmpq *0x1002(%rip) # 0x18000300876 77RUN: llvm-readobj --hex-dump=.test out.dll | FileCheck --check-prefix=TESTSEC %s78RUN: llvm-readobj --hex-dump=.test out2.dll | FileCheck --check-prefix=TESTSEC %s79TESTSEC: 0x180008000 08500000 00300000 10500000 2050000080TESTSEC-NEXT: 0x180008010 08300000 00500000 10300000 2030000081TESTSEC-NEXT: 0x180008020 14100000 28100000 00200000 0810000082TESTSEC-NEXT: 0x180008030 3c100000 8842000083 84RUN: llvm-readobj --hex-dump=.test out3.dll | FileCheck -check-prefix=TESTSEC-X64 %s85TESTSEC-X64: 0x180008000 08300000 00300000 10300000 2030000086TESTSEC-X64-NEXT: 0x180008010 08300000 00500000 10300000 2030000087TESTSEC-X64-NEXT: 0x180008020 14100000 28100000 00200000 0810000088TESTSEC-X64-NEXT: 0x180008030 3c100000 8842000089 90RUN: FileCheck --check-prefix=MAP %s < out.map91RUN: FileCheck --check-prefix=MAP %s < out2.map92RUN: FileCheck --check-prefix=MAP %s < out3.map93MAP: 0001:00000008 #func 0000000180001008 test{{.*}}:test.dll94MAP-NEXT: 0001:00000014 __impchk_func 0000000180001014 test{{.*}}:test.dll95MAP-NEXT: 0001:00000028 __impchk_func2 0000000180001028 test{{.*}}:test.dll96MAP-NEXT: 0001:0000003c #t2func 000000018000103c test2{{.*}}:test2.dll97MAP-NEXT: 0001:00000048 __impchk_t2func 0000000180001048 test2{{.*}}:test2.dll98MAP: 0001:00001000 func 0000000180002000 test{{.*}}:test.dll99MAP-NEXT: 0002:00000000 __imp_data 0000000180003000 test{{.*}}:test.dll100MAP-NEXT: 0002:00000008 __imp_aux_func 0000000180003008 test{{.*}}:test.dll101MAP-NEXT: 0002:00000010 __imp_aux_func2 0000000180003010 test{{.*}}:test.dll102MAP-NEXT: 0002:00000020 __imp_aux_t2func 0000000180003020 test2{{.*}}:test2.dll103MAP: 0002:00001280 __auximpcopy_data 0000000180004280 test{{.*}}:test.dll104MAP-NEXT: 0002:00001288 __auximpcopy_func 0000000180004288 test{{.*}}:test.dll105MAP-NEXT: 0002:00001290 __auximpcopy_func2 0000000180004290 test{{.*}}:test.dll106MAP-NEXT: 0002:000012a0 __auximpcopy_t2func 00000001800042a0 test2{{.*}}:test2.dll107MAP: 0002:00002000 __imp_aux_data 0000000180005000 test{{.*}}:test.dll108MAP-NEXT: 0002:00002008 __imp_func 0000000180005008 test{{.*}}:test.dll109MAP-NEXT: 0002:00002010 __imp_func2 0000000180005010 test{{.*}}:test.dll110MAP-NEXT: 0002:00002020 __imp_t2func 0000000180005020 test2{{.*}}:test2.dll111 112RUN: llvm-readobj --headers out.dll | FileCheck -check-prefix=HEADERS %s113RUN: llvm-readobj --headers out2.dll | FileCheck -check-prefix=HEADERS %s114RUN: llvm-readobj --headers out3.dll | FileCheck -check-prefix=HEADERS %s115HEADERS: LoadConfigTableRVA: 0x4010116HEADERS: IATRVA: 0x3000117HEADERS: IATSize: 0x1000118 119RUN: llvm-readobj --coff-load-config out.dll | FileCheck -check-prefix=LOADCONFIG %s120RUN: llvm-readobj --coff-load-config out2.dll | FileCheck -check-prefix=LOADCONFIG %s121RUN: llvm-readobj --coff-load-config out3.dll | FileCheck -check-prefix=LOADCONFIG %s122LOADCONFIG: AuxiliaryIAT: 0x5000123LOADCONFIG: AuxiliaryIATCopy: 0x4280124 125RUN: llvm-readobj --hex-dump=.rdata out.dll | FileCheck -check-prefix=RDATA %s126RUN: llvm-readobj --hex-dump=.rdata out2.dll | FileCheck -check-prefix=RDATA %s127RUN: llvm-readobj --hex-dump=.rdata out3.dll | FileCheck -check-prefix=RDATA %s128RDATA: 0x180004280 00000000 00000000 14100080 01000000129RDATA-NEXT: 0x180004290 28100080 01000000 00000000 00000000130RDATA-NEXT: 0x1800042a0 48100080 01000000 00000000 00000000131RDATA: 0x180005000 00000000 00000000 14100080 01000000132RDATA-NEXT: 0x180005010 28100080 01000000 00000000 00000000133RDATA-NEXT: 0x180005020 48100080 01000000 00000000 00000000134 135RUN: llvm-readobj --coff-basereloc out.dll | FileCheck -check-prefix=BASERELOC %s136RUN: llvm-readobj --coff-basereloc out2.dll | FileCheck -check-prefix=BASERELOC %s137RUN: llvm-readobj --coff-basereloc out3.dll | FileCheck -check-prefix=BASERELOC %s138BASERELOC: BaseReloc [139Aux IAT copy:140BASERELOC: Address: 0x4288141BASERELOC-NEXT: }142BASERELOC-NEXT: Entry {143BASERELOC-NEXT: Type: DIR64144BASERELOC-NEXT: Address: 0x4290145BASERELOC-NEXT: }146BASERELOC-NEXT: Entry {147BASERELOC-NEXT: Type: DIR64148BASERELOC-NEXT: Address: 0x42A0149BASERELOC-NEXT: }150Aux IAT:151BASERELOC-NOT: Address: 0x5000152BASERELOC: Address: 0x5008153BASERELOC-NEXT: }154BASERELOC-NEXT: Entry {155BASERELOC-NEXT: Type: DIR64156BASERELOC-NEXT: Address: 0x5010157BASERELOC-NEXT: }158BASERELOC-NEXT: Entry {159BASERELOC-NEXT: Type: DIR64160BASERELOC-NEXT: Address: 0x5020161BASERELOC-NEXT: }162 163 164Build with -filealign:8 to enable precise size checking.165 166RUN: lld-link -machine:arm64ec -dll -noentry -out:out-size.dll loadconfig-arm64ec.obj icall.obj hybmp.obj \167RUN: test.obj test-arm64ec.lib test2-arm64ec.lib -filealign:8168 169RUN: llvm-readobj --headers out-size.dll | FileCheck --check-prefix=RDATA-HEADER %s170 171RDATA-HEADER: Name: .rdata (2E 72 64 61 74 61 00 00)172RDATA-HEADER-NEXT: VirtualSize: 0x2030173RDATA-HEADER-NEXT: VirtualAddress: 0x3000174RDATA-HEADER-NEXT: RawDataSize: 8240175 176#--- test.s177 .section .test, "r"178 .globl arm64ec_data_sym179 .p2align 2, 0x0180arm64ec_data_sym:181 .rva __imp_func182 .rva __imp_data183 .rva __imp_func2184 .rva __imp_t2func185 .rva __imp_aux_func186 .rva __imp_aux_data187 .rva __imp_aux_func2188 .rva __imp_aux_t2func189 .rva __impchk_func190 .rva __impchk_func2191 .rva func192 .rva "#func"193 .rva "#t2func"194 .rva __auximpcopy_func195 196#--- icall.s197 .text198 .globl __icall_helper_arm64ec199 .p2align 2, 0x0200__icall_helper_arm64ec:201 mov w0, #0202 ret203 204#--- hybmp.s205 .section .hybmp$x, "yi"206 // __imp_func exit thunk is ignored when func is defined as well207 .symidx __imp_func208 .symidx dead_exit_thunk209 .word 4210 .symidx func211 .symidx func_exit_thunk212 .word 4213 .symidx __imp_t2func214 .symidx t2func_exit_thunk215 .word 4216 217 .section .wowthk$aa,"xr",discard,func_exit_thunk218 .globl func_exit_thunk219func_exit_thunk:220 mov w0, #1221 ret222 223 .section .wowthk$aa,"xr",discard,t2func_exit_thunk224 .globl t2func_exit_thunk225t2func_exit_thunk:226 mov w0, #2227 ret228 229 .section .wowthk$aa,"xr",discard,dead_exit_thunk230 .globl dead_exit_thunk231dead_exit_thunk:232 mov w0, #0xdead233 ret234 235#--- test.def236NAME test.dll237EXPORTS238 data DATA239 func240 func2241 unused_func242 243#--- test2.def244NAME test2.dll245EXPORTS246 t2func247