brintos

brintos / llvm-project-archived public Read only

0
0
Text · 8.8 KiB · 12f7387 Raw
232 lines · plain
1// REQUIRES: aarch642// RUN: split-file %s %t.dir && cd %t.dir3 4// RUN: llvm-mc -filetype=obj -triple=aarch64-windows test.s -o test.obj5// RUN: llvm-mc -filetype=obj -triple=arm64ec-windows chpe.s -o chpe.obj6// RUN: llvm-mc -filetype=obj -triple=aarch64-windows loadconfig.s -o loadconfig.obj7// RUN: llvm-mc -filetype=obj -triple=arm64ec-windows loadconfig-ec.s -o loadconfig-ec.obj8// RUN: llvm-mc -filetype=obj -triple=aarch64-windows loadconfig-short.s -o loadconfig-short.obj9// RUN: llvm-mc -filetype=obj -triple=arm64ec-windows loadconfig-short.s -o loadconfig-short-arm64ec.obj10// RUN: llvm-lib -machine:arm64x -out:loadconfig.lib loadconfig.obj loadconfig-ec.obj11 12// RUN: lld-link -machine:arm64x -out:out-warn.dll -dll -noentry test.obj \13// RUN:           2>&1 | FileCheck --check-prefixes=WARN-LOADCFG,WARN-EC-LOADCFG %s14// WARN-LOADCFG:    lld-link: warning: native version of '_load_config_used' is missing for ARM64X target15// WARN-EC-LOADCFG: lld-link: warning: EC version of '_load_config_used' is missing16 17// RUN: lld-link -machine:arm64x -out:out-nonative.dll -dll -noentry loadconfig-ec.obj chpe.obj \18// RUN:           2>&1 | FileCheck --check-prefixes=WARN-LOADCFG --implicit-check-not EC %s19 20// RUN: lld-link -machine:arm64ec -out:out-ec.dll -dll -noentry chpe.obj \21// RUN:           2>&1 | FileCheck --check-prefixes=WARN-EC-LOADCFG --implicit-check-not native %s22 23// RUN: lld-link -machine:arm64x -out:out.dll -dll -noentry loadconfig.obj test.obj \24// RUN:           2>&1 | FileCheck --check-prefixes=WARN-EC-LOADCFG --implicit-check-not native %s25 26// RUN: llvm-readobj --coff-load-config out.dll | FileCheck --check-prefix=DYNRELOCS %s27// DYNRELOCS:      DynamicValueRelocTableOffset: 0xC28// DYNRELOCS-NEXT: DynamicValueRelocTableSection: 429// DYNRELOCS:      DynamicRelocations [30// DYNRELOCS-NEXT:   Version: 0x131// DYNRELOCS-NEXT:   Arm64X [32// DYNRELOCS-NEXT:     Entry [33// DYNRELOCS-NEXT:       RVA: 0x7C34// DYNRELOCS-NEXT:       Type: VALUE35// DYNRELOCS-NEXT:       Size: 0x236// DYNRELOCS-NEXT:       Value: 0x866437// DYNRELOCS-NEXT:     ]38// DYNRELOCS-NEXT:     Entry [39// DYNRELOCS-NEXT:       RVA: 0x15040// DYNRELOCS-NEXT:       Type: VALUE41// DYNRELOCS-NEXT:       Size: 0x442// DYNRELOCS-NEXT:       Value: 0x043// DYNRELOCS-NEXT:     ]44// DYNRELOCS-NEXT:     Entry [45// DYNRELOCS-NEXT:       RVA: 0x15446// DYNRELOCS-NEXT:       Type: VALUE47// DYNRELOCS-NEXT:       Size: 0x448// DYNRELOCS-NEXT:       Value: 0x049// DYNRELOCS-NEXT:     ]50// DYNRELOCS-NEXT:   ]51// DYNRELOCS-NEXT: ]52 53// RUN: llvm-readobj --headers out.dll | FileCheck --check-prefix=HEADERS %s54// HEADERS:      BaseRelocationTableRVA: 0x400055// HEADERS-NEXT: BaseRelocationTableSize: 0xC56// HEADERS:      LoadConfigTableRVA: 0x100057// HEADERS-NEXT: LoadConfigTableSize: 0x14058// HEADERS:      Name: .reloc (2E 72 65 6C 6F 63 00 00)59// HEADERS-NEXT: VirtualSize: 0x3860 61// RUN: lld-link -machine:arm64x -out:out-short.dll -dll -noentry loadconfig-short.obj 2>&1 | FileCheck --check-prefix=WARN-RELOC-SIZE %s62// RUN: lld-link -machine:arm64x -out:out-short.dll -dll -noentry loadconfig-short-arm64ec.obj 2>&1 | FileCheck --check-prefix=WARN-RELOC-SIZE %s63// WARN-RELOC-SIZE: lld-link: warning: '_load_config_used' structure too small to include dynamic relocations64 65// Check that the CHPE metadata pointer is correctly copied from the EC load config to the native load config.66 67// RUN: lld-link -machine:arm64x -out:out-hyb.dll -dll -noentry loadconfig.obj loadconfig-ec.obj chpe.obj test.obj68 69// RUN: llvm-readobj --coff-load-config out-hyb.dll | FileCheck --check-prefix=LOADCFG %s70// LOADCFG:      Format: COFF-ARM64X71// LOADCFG-NEXT: Arch: aarch6472// LOADCFG-NEXT: AddressSize: 64bit73// LOADCFG-NEXT: LoadConfig [74// LOADCFG-NEXT:   Size: 0x14075// LOADCFG:      CHPEMetadata [76// LOADCFG-NEXT:   Version: 0x277// LOADCFG:        RedirectionMetadata: 1228878// LOADCFG:        AlternateEntryPoint: 0x079// LOADCFG-NEXT:   AuxiliaryIAT: 0x080// LOADCFG-NEXT:   GetX64InformationFunctionPointer: 0x081// LOADCFG-NEXT:   SetX64InformationFunctionPointer: 0x082// LOADCFG-NEXT:   ExtraRFETable: 0x083// LOADCFG-NEXT:   ExtraRFETableSize: 0x084// LOADCFG-NEXT:   __os_arm64x_dispatch_fptr: 0x085// LOADCFG-NEXT:   AuxiliaryIATCopy: 0x086// LOADCFG-NEXT:   AuxiliaryDelayloadIAT: 0x087// LOADCFG-NEXT:   AuxiliaryDelayloadIATCopy: 0x088// LOADCFG-NEXT:   HybridImageInfoBitfield: 0x089// LOADCFG:      ]90// LOADCFG-NEXT: DynamicRelocations [91// LOADCFG-NEXT:   Version: 0x192// LOADCFG-NEXT:   Arm64X [93// LOADCFG-NEXT:     Entry [94// LOADCFG-NEXT:       RVA: 0x7C95// LOADCFG-NEXT:       Type: VALUE96// LOADCFG-NEXT:       Size: 0x297// LOADCFG-NEXT:       Value: 0x866498// LOADCFG-NEXT:     ]99// LOADCFG-NEXT:     Entry [100// LOADCFG-NEXT:       RVA: 0x150101// LOADCFG-NEXT:       Type: VALUE102// LOADCFG-NEXT:       Size: 0x4103// LOADCFG-NEXT:       Value: 0x1140104// LOADCFG-NEXT:     ]105// LOADCFG-NEXT:     Entry [106// LOADCFG-NEXT:       RVA: 0x154107// LOADCFG-NEXT:       Type: VALUE108// LOADCFG-NEXT:       Size: 0x4109// LOADCFG-NEXT:       Value: 0x140110// LOADCFG-NEXT:     ]111// LOADCFG-NEXT:   ]112// LOADCFG-NEXT: ]113// LOADCFG-NEXT: HybridObject {114// LOADCFG-NEXT:   Format: COFF-ARM64EC115// LOADCFG-NEXT:   Arch: aarch64116// LOADCFG-NEXT:   AddressSize: 64bit117// LOADCFG-NEXT:   LoadConfig [118// LOADCFG-NEXT:     Size:   0x140119// LOADCFG:        CHPEMetadata [120// LOADCFG-NEXT:     Version:   0x2121// LOADCFG:        ]122// LOADCFG-NEXT:   DynamicRelocations [123// LOADCFG-NEXT:     Version: 0x1124// LOADCFG-NEXT:     Arm64X [125// LOADCFG-NEXT:       Entry [126// LOADCFG-NEXT:         RVA: 0x7C127// LOADCFG-NEXT:         Type: VALUE128// LOADCFG-NEXT:         Size: 0x2129// LOADCFG-NEXT:         Value: 0x8664130// LOADCFG-NEXT:       ]131// LOADCFG-NEXT:       Entry [132// LOADCFG-NEXT:         RVA: 0x150133// LOADCFG-NEXT:         Type: VALUE134// LOADCFG-NEXT:         Size: 0x4135// LOADCFG-NEXT:         Value: 0x1140136// LOADCFG-NEXT:       ]137// LOADCFG-NEXT:       Entry [138// LOADCFG-NEXT:         RVA: 0x154139// LOADCFG-NEXT:         Type: VALUE140// LOADCFG-NEXT:         Size: 0x4141// LOADCFG-NEXT:         Value: 0x140142// LOADCFG-NEXT:       ]143// LOADCFG-NEXT:     ]144// LOADCFG-NEXT:   ]145// LOADCFG-NEXT: }146 147// RUN: llvm-readobj --coff-basereloc out-hyb.dll | FileCheck --check-prefix=BASERELOC %s148// BASERELOC:      BaseReloc [149// BASERELOC-NEXT:   Entry {150// BASERELOC-NEXT:     Type: DIR64151// BASERELOC-NEXT:     Address: 0x10C8152// BASERELOC-NEXT:   }153// BASERELOC-NEXT:   Entry {154// BASERELOC-NEXT:     Type: DIR64155// BASERELOC-NEXT:     Address: 0x1208156// BASERELOC-NEXT:   }157// BASERELOC-NEXT:   Entry {158// BASERELOC-NEXT:     Type: DIR64159// BASERELOC-NEXT:     Address: 0x2074160// BASERELOC-NEXT:   }161 162// RUN: lld-link -machine:arm64x -out:out-hyb-lib.dll -dll -noentry loadconfig.lib chpe.obj test.obj163// RUN: llvm-readobj --coff-load-config out-hyb-lib.dll | FileCheck --check-prefix=LOADCFG %s164// RUN: llvm-readobj --coff-basereloc out-hyb-lib.dll | FileCheck --check-prefix=BASERELOC %s165 166#--- test.s167        .data168sym:169        // Emit a basereloc to make the loadconfig test more meaningful.170        .xword sym171 172#--- loadconfig.s173        .section .rdata,"dr"174        .globl _load_config_used175        .p2align 3, 0176_load_config_used:177        .word 0x140178        .fill 0x13c,1,0179 180#--- loadconfig-ec.s181        .section .rdata,"dr"182        .globl _load_config_used183        .p2align 3, 0184_load_config_used:185        .word 0x140186        .fill 0xc4,1,0187        .xword __chpe_metadata188        .fill 0x70,1,0189 190#--- loadconfig-short.s191        .section .rdata,"dr"192        .globl _load_config_used193        .p2align 3, 0194_load_config_used:195        .word 0xe4196        .fill 0xe0,1,0197 198#--- chpe.s199        .data200        .globl __chpe_metadata201        .p2align 3, 0202__chpe_metadata:203        .word 2204        .rva __hybrid_code_map205        .word __hybrid_code_map_count206        .rva __x64_code_ranges_to_entry_points207        .rva __arm64x_redirection_metadata208        .word 0 // __os_arm64x_dispatch_call_no_redirect209        .word 0 // __os_arm64x_dispatch_ret210        .word 0 // __os_arm64x_check_call211        .word 0 // __os_arm64x_check_icall212        .word 0 // __os_arm64x_check_icall_cfg213        .rva __arm64x_native_entrypoint214        .rva __hybrid_auxiliary_iat215        .word __x64_code_ranges_to_entry_points_count216        .word __arm64x_redirection_metadata_count217        .word 0 // __os_arm64x_get_x64_information218        .word 0 // __os_arm64x_set_x64_information219        .rva __arm64x_extra_rfe_table220        .word __arm64x_extra_rfe_table_size221        .word 0 // __os_arm64x_dispatch_fptr222        .rva __hybrid_auxiliary_iat_copy223        .rva __hybrid_auxiliary_delayload_iat224        .rva __hybrid_auxiliary_delayload_iat_copy225        .word __hybrid_image_info_bitfield226        .word 0 // __os_arm64x_helper3227        .word 0 // __os_arm64x_helper4228        .word 0 // __os_arm64x_helper5229        .word 0 // __os_arm64x_helper6230        .word 0 // __os_arm64x_helper7231        .word 0 // __os_arm64x_helper8232