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