[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