Skip to content

Commit 87f81bb

Browse files
cjacekSterling-Augustine
authored andcommitted
[LLD][COFF] Define remaining ARM64EC builtin symbols (llvm#110640)
__arm64x_native_entrypoint and __guard_check_icall_a64n_fptr are relevant only for hybrid ARM64X images, we need support for separate namespaces before we can support them. __hybrid_image_info_bitfield is 0 in MSVC linker in all tests I tried.
1 parent 9e13c6f commit 87f81bb

File tree

3 files changed

+43
-2
lines changed

3 files changed

+43
-2
lines changed

lld/COFF/Driver.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2471,8 +2471,11 @@ void LinkerDriver::linkerMain(ArrayRef<const char *> argsArr) {
24712471
ctx.symtab.addAbsolute("__hybrid_auxiliary_iat_copy", 0);
24722472
ctx.symtab.addAbsolute("__hybrid_code_map", 0);
24732473
ctx.symtab.addAbsolute("__hybrid_code_map_count", 0);
2474+
ctx.symtab.addAbsolute("__hybrid_image_info_bitfield", 0);
24742475
ctx.symtab.addAbsolute("__x64_code_ranges_to_entry_points", 0);
24752476
ctx.symtab.addAbsolute("__x64_code_ranges_to_entry_points_count", 0);
2477+
ctx.symtab.addSynthetic("__guard_check_icall_a64n_fptr", nullptr);
2478+
ctx.symtab.addSynthetic("__arm64x_native_entrypoint", nullptr);
24762479
}
24772480

24782481
if (config->pseudoRelocs) {

lld/test/COFF/Inputs/loadconfig-arm64ec.s

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ __chpe_metadata:
6969
.rva __os_arm64x_check_call
7070
.rva __os_arm64x_check_icall
7171
.rva __os_arm64x_check_icall_cfg
72-
.word 0 // __arm64x_native_entrypoint
72+
.rva __arm64x_native_entrypoint
7373
.rva __hybrid_auxiliary_iat
7474
.word __x64_code_ranges_to_entry_points_count
7575
.word __arm64x_redirection_metadata_count
@@ -81,7 +81,7 @@ __chpe_metadata:
8181
.rva __hybrid_auxiliary_iat_copy
8282
.rva __hybrid_auxiliary_delayload_iat
8383
.rva __hybrid_auxiliary_delayload_iat_copy
84-
.word 0 // __hybrid_image_info_bitfield
84+
.word __hybrid_image_info_bitfield
8585
.rva __os_arm64x_helper3
8686
.rva __os_arm64x_helper4
8787
.rva __os_arm64x_helper5

lld/test/COFF/arm64ec-loadcfg.s

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
# REQUIRES: aarch64
2+
3+
# RUN: llvm-mc -filetype=obj -triple=arm64ec-windows %s -o %t.obj
4+
# RUN: llvm-mc -filetype=obj -triple=arm64ec-windows %S/Inputs/loadconfig-arm64ec.s -o %t-loadconfig.obj
5+
6+
# RUN: lld-link -machine:arm64ec -dll -noentry %t.obj %t-loadconfig.obj -out:%t.dll
7+
8+
# RUN: llvm-readobj --coff-load-config %t.dll | FileCheck --check-prefix=LOADCFG %s
9+
# LOADCFG: CHPEMetadata [
10+
# LOADCFG-NEXT: Version: 0x2
11+
# LOADCFG-NEXT: CodeMap: 4096
12+
# LOADCFG-NEXT: CodeRangesToEntryPoints: 4096
13+
# LOADCFG-NEXT: RedirectionMetadata: 12288
14+
# LOADCFG-NEXT: __os_arm64x_dispatch_call_no_redirect: 0x1158
15+
# LOADCFG-NEXT: __os_arm64x_dispatch_ret: 0x1160
16+
# LOADCFG-NEXT: __os_arm64x_dispatch_call: 0x1168
17+
# LOADCFG-NEXT: __os_arm64x_dispatch_icall: 0x1170
18+
# LOADCFG-NEXT: __os_arm64x_dispatch_icall_cfg: 0x1188
19+
# LOADCFG-NEXT: AlternateEntryPoint: 0x0
20+
# LOADCFG-NEXT: AuxiliaryIAT: 0x0
21+
# LOADCFG-NEXT: GetX64InformationFunctionPointer: 0x1178
22+
# LOADCFG-NEXT: SetX64InformationFunctionPointer: 0x1180
23+
# LOADCFG-NEXT: ExtraRFETable: 0x0
24+
# LOADCFG-NEXT: ExtraRFETableSize: 0x0
25+
# LOADCFG-NEXT: __os_arm64x_dispatch_fptr: 0x1190
26+
# LOADCFG-NEXT: AuxiliaryIATCopy: 0x0
27+
# LOADCFG-NEXT: AuxiliaryDelayloadIAT: 0x0
28+
# LOADCFG-NEXT: AuxiliaryDelayloadIATCopy: 0x0
29+
# LOADCFG-NEXT: HybridImageInfoBitfield: 0x0
30+
# LOADCFG-NEXT: ]
31+
32+
# RUN: llvm-readobj --hex-dump=.test %t.dll | FileCheck --check-prefix=TEST %s
33+
# TEST: 0x180003000 00000000 00000000 00000000
34+
35+
.section .test,"dr"
36+
.rva __arm64x_native_entrypoint
37+
.rva __guard_check_icall_a64n_fptr
38+
.word __hybrid_image_info_bitfield

0 commit comments

Comments
 (0)