diff options
author | Eugene Tarassov | 2014-03-11 16:57:07 +0000 |
---|---|---|
committer | Eugene Tarassov | 2014-03-11 16:57:07 +0000 |
commit | ec7617f25922402c02cee9709a7f257ebde39ff9 (patch) | |
tree | 80c232eecc047ac09019496f864246302c9e6ba6 /plugins | |
parent | 65b2100d10a605cac0616a7b1848d58592611783 (diff) | |
download | org.eclipse.tcf-ec7617f25922402c02cee9709a7f257ebde39ff9.tar.gz org.eclipse.tcf-ec7617f25922402c02cee9709a7f257ebde39ff9.tar.xz org.eclipse.tcf-ec7617f25922402c02cee9709a7f257ebde39ff9.zip |
TCF Debugger: better presentation of register bit fields in the Registers view
Diffstat (limited to 'plugins')
-rw-r--r-- | plugins/org.eclipse.tcf.debug.ui/src/org/eclipse/tcf/internal/debug/ui/model/TCFNodeRegister.java | 36 |
1 files changed, 29 insertions, 7 deletions
diff --git a/plugins/org.eclipse.tcf.debug.ui/src/org/eclipse/tcf/internal/debug/ui/model/TCFNodeRegister.java b/plugins/org.eclipse.tcf.debug.ui/src/org/eclipse/tcf/internal/debug/ui/model/TCFNodeRegister.java index 7da527767..2f02f5866 100644 --- a/plugins/org.eclipse.tcf.debug.ui/src/org/eclipse/tcf/internal/debug/ui/model/TCFNodeRegister.java +++ b/plugins/org.eclipse.tcf.debug.ui/src/org/eclipse/tcf/internal/debug/ui/model/TCFNodeRegister.java @@ -286,18 +286,38 @@ public class TCFNodeRegister extends TCFNode implements IElementEditor, IWatchIn } if (ctx != null) { int l = bf.length(); + int[] bits = ctx.getBitNumbers(); BigInteger addr = JSON.toBigInteger(ctx.getMemoryAddress()); + if (bits != null && addr == null && parent instanceof TCFNodeRegister) { + if (!((TCFNodeRegister)parent).context.validate(done)) return false; + IRegisters.RegistersContext parent_ctx = ((TCFNodeRegister)parent).context.getData(); + if (parent_ctx != null) addr = JSON.toBigInteger(parent_ctx.getMemoryAddress()); + } if (addr != null) { bf.append("Address: ", SWT.BOLD); bf.append("0x", StyledStringBuffer.MONOSPACED); bf.append(addr.toString(16), StyledStringBuffer.MONOSPACED); } - BigInteger size = JSON.toBigInteger(ctx.getSize()); - if (size != null && size.compareTo(BigInteger.ZERO) > 0) { - if (l < bf.length()) bf.append(", "); - bf.append("Size: ", SWT.BOLD); - bf.append(size.toString(10), StyledStringBuffer.MONOSPACED); - bf.append(size.compareTo(BigInteger.ONE) == 0 ? " byte" : " bytes"); + if (bits != null) { + if (bits.length > 0) { + if (l < bf.length()) bf.append(", "); + bf.append("Bits: ", SWT.BOLD); + bf.append("["); + for (int i = bits.length; i > 0; i--) { + if (i != bits.length) bf.append(","); + bf.append(bits[i - 1]); + } + bf.append("]"); + } + } + else { + BigInteger size = JSON.toBigInteger(ctx.getSize()); + if (size != null && size.compareTo(BigInteger.ZERO) > 0) { + if (l < bf.length()) bf.append(", "); + bf.append("Size: ", SWT.BOLD); + bf.append(size.toString(10), StyledStringBuffer.MONOSPACED); + bf.append(size.compareTo(BigInteger.ONE) == 0 ? " byte" : " bytes"); + } } if (ctx.isReadable()) { if (l < bf.length()) bf.append(", "); @@ -503,10 +523,12 @@ public class TCFNodeRegister extends TCFNode implements IElementEditor, IWatchIn private String toNumberString(int radix) { IRegisters.RegistersContext ctx = context.getData(); byte[] data = value.getData(); + int[] bits = ctx.getBitNumbers(); if (ctx == null || data == null) return "N/A"; if (radix == 2) { StringBuffer bf = new StringBuffer(); int i = data.length * 8; + if (bits != null) i = bits.length; while (i > 0) { if (i % 4 == 0 && bf.length() > 0) bf.append(','); i--; @@ -532,7 +554,7 @@ public class TCFNodeRegister extends TCFNode implements IElementEditor, IWatchIn if (!s.startsWith("0")) s = "0" + s; break; case 16: - if (s.length() < data.length * 2) { + if (s.length() < (bits == null ? data.length * 2 : (bits.length + 3) / 4)) { StringBuffer bf = new StringBuffer(); while (bf.length() + s.length() < data.length * 2) bf.append('0'); bf.append(s); |