[lld] [LLD][COFF] Add support for ARM64EC import call thunks. (PR #107931)
Nikita Popov via llvm-commits
llvm-commits at lists.llvm.org
Thu Sep 12 05:57:48 PDT 2024
nikic wrote:
The test is failing on s390x with this output:
```
******************** TEST 'lld :: COFF/arm64ec-import.test' FAILED ********************
Exit Code: 1
Command Output (stderr):
--
RUN: at line 2: split-file /builddir/build/BUILD/llvm-project-8625eb0b87c86d3ef42a365d7593eed664b379e8/lld/test/COFF/arm64ec-import.test /builddir/build/BUILD/llvm-project-8625eb0b87c86d3ef42a365d7593eed664b379e8/llvm/redhat-linux-build/tools/lld/test/COFF/Output/arm64ec-import.test.tmp.dir && cd /builddir/build/BUILD/llvm-project-8625eb0b87c86d3ef42a365d7593eed664b379e8/llvm/redhat-linux-build/tools/lld/test/COFF/Output/arm64ec-import.test.tmp.dir
+ split-file /builddir/build/BUILD/llvm-project-8625eb0b87c86d3ef42a365d7593eed664b379e8/lld/test/COFF/arm64ec-import.test /builddir/build/BUILD/llvm-project-8625eb0b87c86d3ef42a365d7593eed664b379e8/llvm/redhat-linux-build/tools/lld/test/COFF/Output/arm64ec-import.test.tmp.dir
+ cd /builddir/build/BUILD/llvm-project-8625eb0b87c86d3ef42a365d7593eed664b379e8/llvm/redhat-linux-build/tools/lld/test/COFF/Output/arm64ec-import.test.tmp.dir
RUN: at line 4: /builddir/build/BUILD/llvm-project-8625eb0b87c86d3ef42a365d7593eed664b379e8/llvm/redhat-linux-build/bin/llvm-mc -filetype=obj -triple=arm64ec-windows test.s -o test.obj
+ /builddir/build/BUILD/llvm-project-8625eb0b87c86d3ef42a365d7593eed664b379e8/llvm/redhat-linux-build/bin/llvm-mc -filetype=obj -triple=arm64ec-windows test.s -o test.obj
RUN: at line 5: /builddir/build/BUILD/llvm-project-8625eb0b87c86d3ef42a365d7593eed664b379e8/llvm/redhat-linux-build/bin/llvm-mc -filetype=obj -triple=arm64ec-windows icall.s -o icall.obj
+ /builddir/build/BUILD/llvm-project-8625eb0b87c86d3ef42a365d7593eed664b379e8/llvm/redhat-linux-build/bin/llvm-mc -filetype=obj -triple=arm64ec-windows icall.s -o icall.obj
RUN: at line 6: /builddir/build/BUILD/llvm-project-8625eb0b87c86d3ef42a365d7593eed664b379e8/llvm/redhat-linux-build/bin/llvm-mc -filetype=obj -triple=arm64ec-windows hybmp.s -o hybmp.obj
+ /builddir/build/BUILD/llvm-project-8625eb0b87c86d3ef42a365d7593eed664b379e8/llvm/redhat-linux-build/bin/llvm-mc -filetype=obj -triple=arm64ec-windows hybmp.s -o hybmp.obj
RUN: at line 7: /builddir/build/BUILD/llvm-project-8625eb0b87c86d3ef42a365d7593eed664b379e8/llvm/redhat-linux-build/bin/llvm-mc -filetype=obj -triple=arm64ec-windows /builddir/build/BUILD/llvm-project-8625eb0b87c86d3ef42a365d7593eed664b379e8/lld/test/COFF/Inputs/loadconfig-arm64ec.s -o loadconfig-arm64ec.obj
+ /builddir/build/BUILD/llvm-project-8625eb0b87c86d3ef42a365d7593eed664b379e8/llvm/redhat-linux-build/bin/llvm-mc -filetype=obj -triple=arm64ec-windows /builddir/build/BUILD/llvm-project-8625eb0b87c86d3ef42a365d7593eed664b379e8/lld/test/COFF/Inputs/loadconfig-arm64ec.s -o loadconfig-arm64ec.obj
RUN: at line 8: llvm-lib -machine:arm64ec -def:test.def -out:test-arm64ec.lib
+ llvm-lib -machine:arm64ec -def:test.def -out:test-arm64ec.lib
RUN: at line 9: llvm-lib -machine:arm64ec -def:test2.def -out:test2-arm64ec.lib
+ llvm-lib -machine:arm64ec -def:test2.def -out:test2-arm64ec.lib
RUN: at line 10: llvm-lib -machine:x64 -def:test.def -out:test-x86_64.lib
+ llvm-lib -machine:x64 -def:test.def -out:test-x86_64.lib
RUN: at line 13: /builddir/build/BUILD/llvm-project-8625eb0b87c86d3ef42a365d7593eed664b379e8/llvm/redhat-linux-build/bin/lld-link -machine:arm64ec -dll -noentry -out:out.dll loadconfig-arm64ec.obj icall.obj hybmp.obj test.obj test-arm64ec.lib test2-arm64ec.lib
+ /builddir/build/BUILD/llvm-project-8625eb0b87c86d3ef42a365d7593eed664b379e8/llvm/redhat-linux-build/bin/lld-link -machine:arm64ec -dll -noentry -out:out.dll loadconfig-arm64ec.obj icall.obj hybmp.obj test.obj test-arm64ec.lib test2-arm64ec.lib
RUN: at line 17: /builddir/build/BUILD/llvm-project-8625eb0b87c86d3ef42a365d7593eed664b379e8/llvm/redhat-linux-build/bin/lld-link -machine:arm64ec -dll -noentry -out:out2.dll loadconfig-arm64ec.obj icall.obj hybmp.obj test.obj test-x86_64.lib test2-arm64ec.lib
+ /builddir/build/BUILD/llvm-project-8625eb0b87c86d3ef42a365d7593eed664b379e8/llvm/redhat-linux-build/bin/lld-link -machine:arm64ec -dll -noentry -out:out2.dll loadconfig-arm64ec.obj icall.obj hybmp.obj test.obj test-x86_64.lib test2-arm64ec.lib
RUN: at line 20: /builddir/build/BUILD/llvm-project-8625eb0b87c86d3ef42a365d7593eed664b379e8/llvm/redhat-linux-build/bin/llvm-readobj --coff-imports out.dll | /builddir/build/BUILD/llvm-project-8625eb0b87c86d3ef42a365d7593eed664b379e8/llvm/redhat-linux-build/bin/FileCheck --check-prefix=IMPORTS /builddir/build/BUILD/llvm-project-8625eb0b87c86d3ef42a365d7593eed664b379e8/lld/test/COFF/arm64ec-import.test
+ /builddir/build/BUILD/llvm-project-8625eb0b87c86d3ef42a365d7593eed664b379e8/llvm/redhat-linux-build/bin/llvm-readobj --coff-imports out.dll
+ /builddir/build/BUILD/llvm-project-8625eb0b87c86d3ef42a365d7593eed664b379e8/llvm/redhat-linux-build/bin/FileCheck --check-prefix=IMPORTS /builddir/build/BUILD/llvm-project-8625eb0b87c86d3ef42a365d7593eed664b379e8/lld/test/COFF/arm64ec-import.test
RUN: at line 21: /builddir/build/BUILD/llvm-project-8625eb0b87c86d3ef42a365d7593eed664b379e8/llvm/redhat-linux-build/bin/llvm-readobj --coff-imports out2.dll | /builddir/build/BUILD/llvm-project-8625eb0b87c86d3ef42a365d7593eed664b379e8/llvm/redhat-linux-build/bin/FileCheck --check-prefix=IMPORTS /builddir/build/BUILD/llvm-project-8625eb0b87c86d3ef42a365d7593eed664b379e8/lld/test/COFF/arm64ec-import.test
+ /builddir/build/BUILD/llvm-project-8625eb0b87c86d3ef42a365d7593eed664b379e8/llvm/redhat-linux-build/bin/llvm-readobj --coff-imports out2.dll
+ /builddir/build/BUILD/llvm-project-8625eb0b87c86d3ef42a365d7593eed664b379e8/llvm/redhat-linux-build/bin/FileCheck --check-prefix=IMPORTS /builddir/build/BUILD/llvm-project-8625eb0b87c86d3ef42a365d7593eed664b379e8/lld/test/COFF/arm64ec-import.test
RUN: at line 37: /builddir/build/BUILD/llvm-project-8625eb0b87c86d3ef42a365d7593eed664b379e8/llvm/redhat-linux-build/bin/llvm-objdump -d out.dll | /builddir/build/BUILD/llvm-project-8625eb0b87c86d3ef42a365d7593eed664b379e8/llvm/redhat-linux-build/bin/FileCheck --check-prefix=DISASM /builddir/build/BUILD/llvm-project-8625eb0b87c86d3ef42a365d7593eed664b379e8/lld/test/COFF/arm64ec-import.test
+ /builddir/build/BUILD/llvm-project-8625eb0b87c86d3ef42a365d7593eed664b379e8/llvm/redhat-linux-build/bin/llvm-objdump -d out.dll
+ /builddir/build/BUILD/llvm-project-8625eb0b87c86d3ef42a365d7593eed664b379e8/llvm/redhat-linux-build/bin/FileCheck --check-prefix=DISASM /builddir/build/BUILD/llvm-project-8625eb0b87c86d3ef42a365d7593eed664b379e8/lld/test/COFF/arm64ec-import.test
/builddir/build/BUILD/llvm-project-8625eb0b87c86d3ef42a365d7593eed664b379e8/lld/test/COFF/arm64ec-import.test:42:14: error: DISASM-NEXT: expected string not found in input
DISASM-NEXT: 180001008: d000000b adrp x11, 0x180003000
^
<stdin>:8:24: note: scanning from here
180001004: d65f03c0 ret
^
<stdin>:9:1: note: possible intended match here
180001008: 4b000010 sub w16, w0, w0
^
Input file: <stdin>
Check file: /builddir/build/BUILD/llvm-project-8625eb0b87c86d3ef42a365d7593eed664b379e8/lld/test/COFF/arm64ec-import.test
-dump-input=help explains the following input dump.
Input was:
<<<<<<
1:
2: out.dll: file format coff-arm64ec
3:
4: Disassembly of section .text:
5:
6: 0000000180001000 <.text>:
7: 180001000: 52800000 mov w0, #0x0 // =0
8: 180001004: d65f03c0 ret
next:42'0 X error: no match found
9: 180001008: 4b000010 sub w16, w0, w0
next:42'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
next:42'1 ? possible intended match
10: 18000100c: 6b0150f9 subs w25, w7, w1, lsl #20
next:42'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
11: 180001010: 0a000010 and w16, w0, w0
next:42'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
12: 180001014: 4a021091 eor w17, w4, w2, lsl #4
next:42'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
13: 180001018: 03fffffe <unknown>
next:42'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
14: 18000101c: 4b000010 sub w16, w0, w0
next:42'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
.
.
.
>>>>>>
--
```
I expect the issue is that you're assuming a little-endian host -- the data in importThunkARM64EC should probably be specified using bytes instead of int32_t?
https://github.com/llvm/llvm-project/pull/107931
More information about the llvm-commits
mailing list