RFR: 6879063: SA should use hsdis for disassembly
Christian Thalinger
christian.thalinger at oracle.com
Mon Aug 27 14:43:58 PDT 2012
On Aug 27, 2012, at 2:07 PM, Yumin Qi <yumin.qi at oracle.com> wrote:
> Hi, all
>
> Can I have you code review of
> 6879063: SA should use hsdis for disassembly
>
> http://cr.openjdk.java.net/~minqi/6879063
>
> The SA has Java based disassemblers for x86 and sparc but amd64. Instead of porting to amd64 we should switch over to using hsdis for it like the JVM does. This requires a new entry point into hsdis, decode_instructions_virtual, which separates the address of the code being disassembled from the buffer containing the code. The existing uses of decode_instructions have been updated to use the new interface and SA Disassembler has Java native methods that call into hsdis and call back up to Java to perform the disassembly. Also changed makefile for hsdis build for both(i386/amd64).
>
> All the old disassembler logic was deleted since it's incompatible with the new disassembly interface. Also deleted are dbx based SA interface and few other dead files.
>
> Tested by dumping full assembly from core files.
>
> Reviewed-by:
> Contributed-by: Tom R (never)
src/share/tools/hsdis/hsdis.c:
Maybe decode_instructions should call decode_instructions_virtual.
agent/src/share/classes/sun/jvm/hotspot/asm/Disassembler.java:
+ String cpu = VM.getVM().getCPU();
+ if (cpu.equals("sparc")) {
+ if (VM.getVM().isLP64()) {
+ libname = "hsdis-sparcv9";
+ options = "v9only";
+ } else {
+ libname = "hsdis-sparc";
+ }
+ } else if (cpu.equals("x86")) {
+ libname = "hsdis-i386";
+ } else if (cpu.equals("amd64")) {
+ libname = "hsdis-amd64";
+ } else if (cpu.equals("ia64")) {
+ libname = "hsdis-ia64";
+ }
Should we use some default libname here like:
libname = "hsdis-" + cpu;
so we cover other architectures too (and only special-case sparc, x86, ...)?
Otherwise it looks good.
-- Chris
>
> Thanks
> Yumin Qi
>
More information about the serviceability-dev
mailing list