diff options
author | Eugene Tarassov | 2015-04-17 20:27:29 +0000 |
---|---|---|
committer | Eugene Tarassov | 2015-04-17 20:27:29 +0000 |
commit | df8b5472db1628957b6356dcea5786beaaede391 (patch) | |
tree | e90b8b4a762b75cec5167a68a626e064bf22a782 /plugins/org.eclipse.tcf.debug.ui | |
parent | e947105edbd02ea5f463a3c3f465fa44cee789b3 (diff) | |
download | org.eclipse.tcf-df8b5472db1628957b6356dcea5786beaaede391.tar.gz org.eclipse.tcf-df8b5472db1628957b6356dcea5786beaaede391.tar.xz org.eclipse.tcf-df8b5472db1628957b6356dcea5786beaaede391.zip |
TCF Core: Symbols service: new symbol attribute: BitStride
Diffstat (limited to 'plugins/org.eclipse.tcf.debug.ui')
-rw-r--r-- | plugins/org.eclipse.tcf.debug.ui/src/org/eclipse/tcf/internal/debug/ui/model/TCFNodeExpression.java | 22 |
1 files changed, 19 insertions, 3 deletions
diff --git a/plugins/org.eclipse.tcf.debug.ui/src/org/eclipse/tcf/internal/debug/ui/model/TCFNodeExpression.java b/plugins/org.eclipse.tcf.debug.ui/src/org/eclipse/tcf/internal/debug/ui/model/TCFNodeExpression.java index adb0cec4b..ab318bee6 100644 --- a/plugins/org.eclipse.tcf.debug.ui/src/org/eclipse/tcf/internal/debug/ui/model/TCFNodeExpression.java +++ b/plugins/org.eclipse.tcf.debug.ui/src/org/eclipse/tcf/internal/debug/ui/model/TCFNodeExpression.java @@ -1481,17 +1481,33 @@ public class TCFNodeExpression extends TCFNode implements IElementEditor, ICastT byte[] data, int offs, int size, boolean big_endian, Runnable done) { assert offs + size <= data.length; int length = type.getLength(); + Number stride = type.getBitStride(); bf.append('['); if (length > 0) { - int elem_size = size / length; for (int n = 0; n < length; n++) { if (n >= 100) { bf.append("..."); break; } if (n > 0) bf.append(", "); - if (!appendValueText(bf, level + 1, type.getBaseTypeID(), null, - data, offs + n * elem_size, elem_size, big_endian, done)) return false; + if (stride != null) { + int bits = stride.intValue(); + byte[] buf = new byte[(bits + 7) / 8]; + for (int i = 0; i < bits; i++) { + int j = n * bits + i; + int k = j / 8; + if (k < size && offs + k < data.length && (data[offs + k] & (1 << (j % 8))) != 0) { + buf[i / 8] |= 1 << (i % 8); + } + } + if (!appendValueText(bf, level + 1, type.getBaseTypeID(), null, + buf, 0, buf.length, big_endian, done)) return false; + } + else { + int elem_size = size / length; + if (!appendValueText(bf, level + 1, type.getBaseTypeID(), null, + data, offs + n * elem_size, elem_size, big_endian, done)) return false; + } } } bf.append(']'); |