[9] RFR(S): 8071654: disassembler handles embedded OOPs not uniformly
Zoltán Majó
zoltan.majo at oracle.com
Wed Jan 28 15:51:18 UTC 2015
Hi,
please review the following small patch.
Bug: https://bugs.openjdk.java.net/browse/JDK-8071654
Problem: The disassembler has two different ways of handling OOPs
embedded into instructions.
1) Embedded OOPs are printed in hexadecimal within a disassembled
instruction. The comment block following the instruction contains the
name of the OOP's class. For example:
0x00007f52ed58e3e4: mov $0x7f52c4e03d78,%rdi ; {oop(a
'java/lang/Class' = 'java/lang/invoke/MethodHandle')}
2) Embedded OOPs are replaced in the disassembled instruction by the
OOP's class name (this functionality was available only before PermGen
removal, see JDK-8066438 for more details). The comment block following
the disassembled instruction contains the same information *again* (the
name of the OOP's class). For example:
0x01882738: cmp edx, a 'sun/dyn/ToGeneric$A2'; {oop(a
'sun/dyn/ToGeneric$A2')}
(output taken from
https://wikis.oracle.com/display/HotSpotInternals/PrintAssembly)
Whether an OOP is replaced with its class name depends on the external
binutils library. For some types of instructions (e.g., compares, jumps
and calls on x86), binutils indicates to the VM that there are addresses
embedded into the instruction (and then the VM applies Way 1). For some
instructions (e.g., movs on x86), binutils does not indicate to the VM
that the instruction contains an embedded address and the VM applies Way 2.
Solution: This patch proposes that the disassembler handles OOPs in a
single way (Way 1): An embedded OOP's is printed in hexadecimal within
the instruction; the comment following the disassembled instruction
prints the OOP's class. This way both the OOP as raw address and the
OOP's class is available in the disassembly by default.
The patch proposes to not print an OOP's class in
decode_env::print_address() anymore; printing should be done only in
nmethod::print_code_comment_on(). Thenmethod::embeddedOop_at method is
not needed any more and is therefore removed.
Webrev: http://cr.openjdk.java.net/~zmajo/8071654/webrev.00/
Testing: manual testing, built + minimal tests with JPRT on all
supported platforms.
Thank you!
Best regards,
Zoltan
More information about the hotspot-compiler-dev
mailing list