RFR: 8253757: Add LLVM-based backend for hsdis
Andrew Haley
aph at openjdk.java.net
Mon Oct 18 09:13:48 UTC 2021
On Wed, 13 Oct 2021 00:00:22 GMT, Magnus Ihse Bursie <ihse at openjdk.org> wrote:
> This patch expands the newly added system for hsdis backends to include LLVM.
>
> The actual code in hsdis-llvm.cpp is based heavily on the work by @luhenry, as published in the never integrated PR https://github.com/openjdk/jdk/pull/392. (I have basically just ripped out the binutils-based part of it.)
>
> Unfortunately I have not been able to make this work properly on Windows. With some additional flags I made it compile without complaints, but it caused hotspot to segfault in `LoadLibrary` (!) in `os::dll_load` when I tried to load the library. This is somewhat ironic, since the initial implementation was created by Ludovic for the very purpose of using it on Windows.
>
> The lack of Windows support in this patch does not mean it is impossible to get it to work, just that I need to co-operate with someone who has more experience of compiling LLVM on Windows, and/or are more eager to get this combination to work.
On 10/16/21 09:13, Magnus Ihse Bursie wrote:
> @theRealAph We should not push broken code, and we should not break the existing build of hsdis. I fully agree with this. I will not push this patch until all reviewers are happy, so you don't need to worry about that. :)
>
> My initial plan was to get the unix platforms working in this push, and tackle Windows later on, but it seems now that it's better to keep this PR around for a bit longer instead, and fold Windows support into it as well. (Which means I'll wait for Monica to return and being able to test and help out.)
>
> I need to understand better why things are failing for you. Can you describe a reproducer?
Sure. Create a .hotspot_compiler file containing
print java.lang.String::checkIndex
then
./build/macosx-aarch64-server-fastdebug/jdk/bin/java -XX:+PrintAssembly -version
GNU disassembly of java.lang.String::isLatin1 prints in full, ending thusly
[Exception Handler]
0x000000010a72c340: mov x19, #0xdead // #57005
; {no_reloc}
0x000000010a72c344: mov x2, #0xa // #10
0x000000010a72c348: mov x4, #0xdead // #57005
0x000000010a72c34c: mov x5, #0xdead // #57005
0x000000010a72c350: adrp x8, 0x000000010a1c3000 ; {runtime_call handle_exception_from_callee Runtime1 stub}
0x000000010a72c354: add x8, x8, #0x1c0
0x000000010a72c358: blr x8
0x000000010a72c35c: dcps1 #0xdeae
0x000000010a72c360: .inst 0x0995f68e ; undefined
0x000000010a72c364: udf #1
[Deopt Handler Code]
0x000000010a72c368: adr x30, 0x000000010a72c368
0x000000010a72c36c: adrp x8, 0x000000010a26c000 ; {runtime_call DeoptimizationBlob}
0x000000010a72c370: add x8, x8, #0xbc0
0x000000010a72c374: br x8
--------------------------------------------------------------------------------
LLVM disassembly dies at
[Exception Handler]
0x000000010672c340: mov x19, #0xdead ; {no_reloc}
0x000000010672c344: mov x2, #0xa
0x000000010672c348: mov x4, #0xdead
0x000000010672c34c: mov x5, #0xdead
0x000000010672c350: adrp x8, #-5672960 ; {runtime_call handle_exception_from_callee Runtime1 stub}
0x000000010672c354: add x8, x8, #0x1c0
0x000000010672c358: blr x8
0x000000010672c35c: dcps1 #0xdeae
0x000000010672c360: --------------------------------------------------------------------------------
This is llvm 12.0.1 from homebrew.
-------------
PR: https://git.openjdk.java.net/jdk/pull/5920
More information about the hotspot-compiler-dev
mailing list