aboutsummaryrefslogtreecommitdiff
path: root/lld/test
diff options
context:
space:
mode:
authorJacek Caban <jacek@codeweavers.com>2024-05-21 13:33:53 +0200
committerGitHub <noreply@github.com>2024-05-21 13:33:53 +0200
commit5693678cae86ac433aa8bd9ed3920c8c93b5817b (patch)
treeec2a010c476c4a8d96c4adf63871df4ee1339cd8 /lld/test
parent18e7bcbae12bc2e2cf9888844a0b3f12075f508c (diff)
downloadllvm-5693678cae86ac433aa8bd9ed3920c8c93b5817b.zip
llvm-5693678cae86ac433aa8bd9ed3920c8c93b5817b.tar.gz
llvm-5693678cae86ac433aa8bd9ed3920c8c93b5817b.tar.bz2
[LLD][COFF] Demangle ARM64EC export names. (#87068)
Diffstat (limited to 'lld/test')
-rw-r--r--lld/test/COFF/arm64ec-exports.s121
1 files changed, 121 insertions, 0 deletions
diff --git a/lld/test/COFF/arm64ec-exports.s b/lld/test/COFF/arm64ec-exports.s
new file mode 100644
index 0000000..a48211e
--- /dev/null
+++ b/lld/test/COFF/arm64ec-exports.s
@@ -0,0 +1,121 @@
+; REQUIRES: aarch64
+; RUN: split-file %s %t.dir && cd %t.dir
+
+; RUN: llvm-mc -filetype=obj -triple=arm64ec-windows test.s -o test.obj
+; RUN: llvm-mc -filetype=obj -triple=arm64ec-windows drectve.s -o drectve.obj
+; RUN: llvm-mc -filetype=obj -triple=arm64ec-windows %S/Inputs/loadconfig-arm64ec.s -o loadconfig-arm64ec.obj
+
+; Check various forms of export directive and make sure that function export name is demangled.
+
+; RUN: lld-link -out:out.dll test.obj loadconfig-arm64ec.obj -dll -noentry -machine:arm64ec \
+; RUN: -export:unmangled_func '-export:#mangled_func' '-export:#exportas_func,EXPORTAS,exportas_func' \
+; RUN: '-export:?cxx_func@@$$hYAHXZ' -export:data_sym,DATA '-export:#mangled_data_sym,DATA'
+
+
+; RUN: llvm-readobj --coff-exports out.dll | FileCheck --check-prefix=EXP %s
+; EXP: Export {
+; EXP-NEXT: Ordinal: 1
+; EXP-NEXT: Name: #mangled_data_sym
+; EXP-NEXT: RVA: 0x3000
+; EXP-NEXT: }
+; EXP-NEXT: Export {
+; EXP-NEXT: Ordinal: 2
+; EXP-NEXT: Name: ?cxx_func@@YAHXZ
+; EXP-NEXT: RVA: 0x1018
+; EXP-NEXT: }
+; EXP-NEXT: Export {
+; EXP-NEXT: Ordinal: 3
+; EXP-NEXT: Name: data_sym
+; EXP-NEXT: RVA: 0x3004
+; EXP-NEXT: }
+; EXP-NEXT: Export {
+; EXP-NEXT: Ordinal: 4
+; EXP-NEXT: Name: exportas_func
+; EXP-NEXT: RVA: 0x1010
+; EXP-NEXT: }
+; EXP-NEXT: Export {
+; EXP-NEXT: Ordinal: 5
+; EXP-NEXT: Name: mangled_func
+; EXP-NEXT: RVA: 0x1008
+; EXP-NEXT: }
+; EXP-NEXT: Export {
+; EXP-NEXT: Ordinal: 6
+; EXP-NEXT: Name: unmangled_func
+; EXP-NEXT: RVA: 0x1000
+; EXP-NEXT: }
+
+; RUN: llvm-nm --print-armap out.lib | FileCheck --check-prefix=IMPLIB %s
+; IMPLIB: Archive EC map
+; IMPLIB-NEXT: #exportas_func in out
+; IMPLIB-NEXT: #mangled_func in out
+; IMPLIB-NEXT: #unmangled_func in out
+; IMPLIB-NEXT: ?cxx_func@@$$hYAHXZ in out
+; IMPLIB-NEXT: ?cxx_func@@YAHXZ in out
+; IMPLIB-NEXT: __IMPORT_DESCRIPTOR_out{{.*}} in out
+; IMPLIB-NEXT: __NULL_IMPORT_DESCRIPTOR in out
+; IMPLIB-NEXT: __imp_?cxx_func@@YAHXZ in out
+; IMPLIB-NEXT: __imp_aux_?cxx_func@@YAHXZ in out
+; IMPLIB-NEXT: __imp_aux_exportas_func in out
+; IMPLIB-NEXT: __imp_aux_mangled_func in out
+; IMPLIB-NEXT: __imp_aux_unmangled_func in out
+; IMPLIB-NEXT: __imp_data_sym in out
+; IMPLIB-NEXT: __imp_exportas_func in out
+; IMPLIB-NEXT: __imp_mangled_data_sym in out
+; IMPLIB-NEXT: __imp_mangled_func in out
+; IMPLIB-NEXT: __imp_unmangled_func in out
+; IMPLIB-NEXT: exportas_func in out
+; IMPLIB-NEXT: mangled_func in out
+; IMPLIB-NEXT: unmangled_func in out
+; IMPLIB-NEXT: out{{.*}}_NULL_THUNK_DATA in out
+
+
+; Check that using .drectve section has the same effect.
+
+; RUN: lld-link -out:out2.dll test.obj loadconfig-arm64ec.obj -dll -noentry -machine:arm64ec drectve.obj
+; RUN: llvm-readobj --coff-exports out2.dll | FileCheck --check-prefix=EXP %s
+; RUN: llvm-nm --print-armap out2.lib | FileCheck --check-prefix=IMPLIB %s
+
+#--- test.s
+ .text
+ .globl unmangled_func
+ .p2align 2, 0x0
+unmangled_func:
+ mov w0, #1
+ ret
+
+ .globl "#mangled_func"
+ .p2align 2, 0x0
+"#mangled_func":
+ mov w0, #2
+ ret
+
+ .globl "#exportas_func"
+ .p2align 2, 0x0
+"#exportas_func":
+ mov w0, #3
+ ret
+
+ .globl "?cxx_func@@$$hYAHXZ"
+ .p2align 2, 0x0
+"?cxx_func@@$$hYAHXZ":
+ mov w0, #4
+ ret
+
+ .data
+ .globl "#mangled_data_sym"
+ .p2align 2, 0x0
+"#mangled_data_sym":
+ .word 0x01010101
+ .globl data_sym
+ .p2align 2, 0x0
+data_sym:
+ .word 0x01010101
+
+#--- drectve.s
+ .section .drectve, "yn"
+ .ascii " -export:unmangled_func"
+ .ascii " -export:#mangled_func"
+ .ascii " -export:#exportas_func,EXPORTAS,exportas_func"
+ .ascii " -export:?cxx_func@@$$hYAHXZ"
+ .ascii " -export:data_sym,DATA"
+ .ascii " -export:#mangled_data_sym,DATA"