brintos

brintos / llvm-project-archived public Read only

0
0
Text · 10.3 KiB · bb2b772 Raw
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