Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEugene Tarassov2015-04-17 20:27:29 +0000
committerEugene Tarassov2015-04-17 20:27:29 +0000
commitdf8b5472db1628957b6356dcea5786beaaede391 (patch)
treee90b8b4a762b75cec5167a68a626e064bf22a782 /plugins/org.eclipse.tcf.debug.ui
parente947105edbd02ea5f463a3c3f465fa44cee789b3 (diff)
downloadorg.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.java22
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(']');

Back to the top