Patch addresses in LLILF/IIHF pairs on class unload and HCR - #15705
Conversation
|
A bit of an explanation/proof of concept for patching. For class unload, the class address is patched over with a -1 value. In the nocompressedrefs case, the 64 class pointer is placed in a In the default compressed refs case, the class pointer is guaranteed to fit into 32 bits, so only an For HCR, I could not come up with a unit test where the class address changes on reload. However, when stepping through the compensate function in As a sidenote, there might be room for improvement in HCR by skipping patching altogether when the class address doesn't change. |
|
@Spencer-Comin Is this ready for review or there are some changes needed to be added on ? Also I see that on x86 and Z, we check if the Size is 4 and check the instructions if it is what you generated, can you verify if eclipse-omr/omr#6596 (comment) is actually an issue? |
|
I've marked this as draft while I investigate to see how we can avoid the bug @r30shah brought up in eclipse-omr/omr#6596 (comment) |
1084fd9 to
96e3a96
Compare
r30shah
left a comment
There was a problem hiding this comment.
@Spencer-Comin can you also run the sanity test on P and X (Reason being it touches the routines that are used by other code-gens as well.) Just for sanity, we should run the test on other platforms. Overall change looks good to me, besides that odd comment regarding to tab.
LLILF/IIHF pairs can be used to hold 64 bit address constants in two 32 bit immediate fields. This commit adds logic to HCR and class unloading compensate functions to patch the split constants. Signed-off-by: Spencer Comin <spencer.comin@ibm.com>
96e3a96 to
974844e
Compare
|
Passed sanity test on P, X, and Z |
|
jenkins test sanity xlinux,zlinux JDK17 |
|
The x86 sanity.functional cmdLineTester_criu_jitPostRestore failure is not related to this PR: #17367 |
With eclipse-omr/omr#6596,
LLILF/IIHFpairs can be used to hold 64 bit address constants in two 32 bit immediate fields. This commit adds logic to HCR and class unloading compensate functions to patch the split constants.Also, in the case of 32 bit compressed class pointers stored in
LLILF(without a followingIIHF) the opcode is changed toLGFIwhen patched on class unload, so that the -1 patched over the address immediate is sign-extended rather than zero-extended.