Skip to content

Commit 028cef8

Browse files
cjacektru
authored andcommitted
[CodeGen][ARM64EC] Define hybrid_patchable EXP thunk symbol as a function. (llvm#102898)
This is needed for MSVC link.exe to generate redirection metadata for hybrid patchable thunks. (cherry picked from commit d550ada)
1 parent a3b18fc commit 028cef8

File tree

2 files changed

+27
-4
lines changed

2 files changed

+27
-4
lines changed

llvm/lib/Target/AArch64/AArch64AsmPrinter.cpp

+7
Original file line numberDiff line numberDiff line change
@@ -1292,6 +1292,13 @@ void AArch64AsmPrinter::emitGlobalAlias(const Module &M,
12921292
StringRef ExpStr = cast<MDString>(Node->getOperand(0))->getString();
12931293
MCSymbol *ExpSym = MMI->getContext().getOrCreateSymbol(ExpStr);
12941294
MCSymbol *Sym = MMI->getContext().getOrCreateSymbol(GA.getName());
1295+
1296+
OutStreamer->beginCOFFSymbolDef(ExpSym);
1297+
OutStreamer->emitCOFFSymbolStorageClass(COFF::IMAGE_SYM_CLASS_EXTERNAL);
1298+
OutStreamer->emitCOFFSymbolType(COFF::IMAGE_SYM_DTYPE_FUNCTION
1299+
<< COFF::SCT_COMPLEX_TYPE_SHIFT);
1300+
OutStreamer->endCOFFSymbolDef();
1301+
12951302
OutStreamer->beginCOFFSymbolDef(Sym);
12961303
OutStreamer->emitCOFFSymbolStorageClass(COFF::IMAGE_SYM_CLASS_EXTERNAL);
12971304
OutStreamer->emitCOFFSymbolType(COFF::IMAGE_SYM_DTYPE_FUNCTION

llvm/test/CodeGen/AArch64/arm64ec-hybrid-patchable.ll

+20-4
Original file line numberDiff line numberDiff line change
@@ -240,6 +240,10 @@ define dso_local void @caller() nounwind {
240240
; CHECK-NEXT: .section .drectve,"yni"
241241
; CHECK-NEXT: .ascii " /EXPORT:exp"
242242

243+
; CHECK-NEXT: .def "EXP+#func";
244+
; CHECK-NEXT: .scl 2;
245+
; CHECK-NEXT: .type 32;
246+
; CHECK-NEXT: .endef
243247
; CHECK-NEXT: .def func;
244248
; CHECK-NEXT: .scl 2;
245249
; CHECK-NEXT: .type 32;
@@ -252,6 +256,10 @@ define dso_local void @caller() nounwind {
252256
; CHECK-NEXT: .type 32;
253257
; CHECK-NEXT: .endef
254258
; CHECK-NEXT: .set "#func", "#func$hybpatch_thunk"{{$}}
259+
; CHECK-NEXT: .def "EXP+#has_varargs";
260+
; CHECK-NEXT: .scl 2;
261+
; CHECK-NEXT: .type 32;
262+
; CHECK-NEXT: .endef
255263
; CHECK-NEXT: .def has_varargs;
256264
; CHECK-NEXT: .scl 2;
257265
; CHECK-NEXT: .type 32;
@@ -264,6 +272,10 @@ define dso_local void @caller() nounwind {
264272
; CHECK-NEXT: .type 32;
265273
; CHECK-NEXT: .endef
266274
; CHECK-NEXT: .set "#has_varargs", "#has_varargs$hybpatch_thunk"
275+
; CHECK-NEXT: .def "EXP+#has_sret";
276+
; CHECK-NEXT: .scl 2;
277+
; CHECK-NEXT: .type 32;
278+
; CHECK-NEXT: .endef
267279
; CHECK-NEXT: .def has_sret;
268280
; CHECK-NEXT: .scl 2;
269281
; CHECK-NEXT: .type 32;
@@ -276,6 +288,10 @@ define dso_local void @caller() nounwind {
276288
; CHECK-NEXT: .type 32;
277289
; CHECK-NEXT: .endef
278290
; CHECK-NEXT: .set "#has_sret", "#has_sret$hybpatch_thunk"
291+
; CHECK-NEXT: .def "EXP+#exp";
292+
; CHECK-NEXT: .scl 2;
293+
; CHECK-NEXT: .type 32;
294+
; CHECK-NEXT: .endef
279295
; CHECK-NEXT: .def exp;
280296
; CHECK-NEXT: .scl 2;
281297
; CHECK-NEXT: .type 32;
@@ -295,18 +311,18 @@ define dso_local void @caller() nounwind {
295311
; SYM: [78](sec 20)(fl 0x00)(ty 20)(scl 2) (nx 0) 0x00000000 #exp$hybpatch_thunk
296312
; SYM: [110](sec 0)(fl 0x00)(ty 0)(scl 69) (nx 1) 0x00000000 func
297313
; SYM-NEXT: AUX indx 112 srch 3
298-
; SYM-NEXT: [112](sec 0)(fl 0x00)(ty 0)(scl 2) (nx 0) 0x00000000 EXP+#func
314+
; SYM-NEXT: [112](sec 0)(fl 0x00)(ty 20)(scl 2) (nx 0) 0x00000000 EXP+#func
299315
; SYM: [116](sec 0)(fl 0x00)(ty 0)(scl 69) (nx 1) 0x00000000 #func
300316
; SYM-NEXT: AUX indx 53 srch 3
301317
; SYM: [122](sec 0)(fl 0x00)(ty 0)(scl 69) (nx 1) 0x00000000 has_varargs
302318
; SYM-NEXT: AUX indx 124 srch 3
303-
; SYM-NEXT: [124](sec 0)(fl 0x00)(ty 0)(scl 2) (nx 0) 0x00000000 EXP+#has_varargs
319+
; SYM-NEXT: [124](sec 0)(fl 0x00)(ty 20)(scl 2) (nx 0) 0x00000000 EXP+#has_varargs
304320
; SYM-NEXT: [125](sec 0)(fl 0x00)(ty 0)(scl 69) (nx 1) 0x00000000 has_sret
305321
; SYM-NEXT: AUX indx 127 srch 3
306-
; SYM-NEXT: [127](sec 0)(fl 0x00)(ty 0)(scl 2) (nx 0) 0x00000000 EXP+#has_sret
322+
; SYM-NEXT: [127](sec 0)(fl 0x00)(ty 20)(scl 2) (nx 0) 0x00000000 EXP+#has_sret
307323
; SYM-NEXT: [128](sec 0)(fl 0x00)(ty 0)(scl 69) (nx 1) 0x00000000 exp
308324
; SYM-NEXT: AUX indx 130 srch 3
309-
; SYM-NEXT: [130](sec 0)(fl 0x00)(ty 0)(scl 2) (nx 0) 0x00000000 EXP+#exp
325+
; SYM-NEXT: [130](sec 0)(fl 0x00)(ty 20)(scl 2) (nx 0) 0x00000000 EXP+#exp
310326
; SYM-NEXT: [131](sec 0)(fl 0x00)(ty 0)(scl 69) (nx 1) 0x00000000 #has_varargs
311327
; SYM-NEXT: AUX indx 58 srch 3
312328
; SYM-NEXT: [133](sec 0)(fl 0x00)(ty 0)(scl 69) (nx 1) 0x00000000 #has_sret

0 commit comments

Comments
 (0)