John,

I haven't considered new JVM work with old hsdis. Will change disassemble.cpp to check:

first decode_instructions_virtual exists, use it. If not, next check if decode_instructions exists, then use it.
As you expected, it will look like

/ new hsdis -> decode_instructions -> decode_instructions_virtual
   old VM
                 \  old hsdis  -> decode_instructions

                    /  new hsdis -> decode_instructions_virtual
   new VM
                    \  old hsdis ->   decode_instructions

Thanks
Yumin

On 10/29/2012 9:57 AM, John Rose wrote:
On Oct 25, 2012, at 1:16 PM, Yumin Qi wrote:

 To John's question, it doesn't require changes to disassembler.cpp:

 new version ---> decode_instructions_virtual
 old version   ---> decode_instructions ---> decode_instructions_virtual

 tested with b01 (JDK8) with new hsdis-i386.so.

I think we are aiming to make all four combinations work: {old JVM , new JVM} x { old hsdis , new hsdis }.

For this to work, there must be "tolerance" in both the JVM and hsdis for old code. That's why I was looking for a change to disassembler.cpp, so that old hsdis modules will still work.

In particular, the older builds of hsdis won't work properly unless the new JVM looks for the old hsdis entry point (if it fails to find the new hsdis entry point, of course).

Basically, I am expecting that if the new JVM fails to find hsdis`decode_instructions_virtual, it will look for hsdis`decode_instructions instead, and will call that latter function with the (fewer) arguments that it expected.

Am I missing something here?

— John

Reply via email to