RFR: CODETOOLS-7902316: jdis ignores exception_table entries and uses a wrong format for iinc_w instruction
Leonid Kuskov
Leonid.Kuskov at Oracle.com
Tue Sep 11 20:40:13 UTC 2018
Bug: https://bugs.openjdk.java.net/browse/CODETOOLS-7902316
Webrev: http://cr.openjdk.java.net/~lkuskov/7902316/webrev.00
Trivial fix for "an 'iinc_w 263;' is produced, with the second iinc
argument missing.":
--- a/src/org/openjdk/asmtools/jdis/CodeData.java Thu May 17
13:34:08 2018 -0700
+++ b/src/org/openjdk/asmtools/jdis/CodeData.java Tue Sep 11
13:08:21 2018 -0700
@@ -422,7 +422,7 @@
mnem = opcode2.parsekey();
}
out.print(mnem + " " + getUShort(pc + 2));
- if (opcode2 == Opcode.opc_iinc) {
+ if (opcode2 == Opcode.opc_iinc_w) {
out.print(", " + getShort(pc + 4));
return 6;
}
The fix for "Also, two 'endtry' and 'catch' are missing after this iinc_w.":
asmtools loses start_pc/end_pc item/handler_pc if it exceeds Short.MAX_VALUE
--- a/src/org/openjdk/asmtools/jdis/TrapData.java Thu May 17
13:34:08 2018 -0700
+++ b/src/org/openjdk/asmtools/jdis/TrapData.java Tue Sep 11
13:08:21 2018 -0700
class TrapData {
- short start_pc, end_pc, handler_pc, catch_cpx;
int num;
+ // exception_table
+ int start_pc, // u2
+ end_pc, // u2
+ handler_pc, // u2
+ catch_cpx; // u2
+
public TrapData(DataInputStream in, int num) throws IOException {
this.num = num;
- start_pc = in.readShort();
- end_pc = in.readShort();
- handler_pc = in.readShort();
- catch_cpx = in.readShort();
+ start_pc = in.readUnsignedShort();
+ end_pc = in.readUnsignedShort();
+ handler_pc = in.readUnsignedShort();
+ catch_cpx = in.readUnsignedShort();
Thanks,
Leonid
More information about the code-tools-dev
mailing list