diff options
author | eutarass | 2009-01-27 22:25:37 +0000 |
---|---|---|
committer | eutarass | 2009-01-27 22:25:37 +0000 |
commit | 82f9e1e8c9a9cb5d73185275d284f5ad0288682b (patch) | |
tree | fcf1015da63805e070d22436c6c389bcf5f7bbf6 /plugins/org.eclipse.tm.tcf.debug.ui | |
parent | 05b194c68d1f4af7f38213a688293314a05b7892 (diff) | |
download | org.eclipse.tcf-82f9e1e8c9a9cb5d73185275d284f5ad0288682b.tar.gz org.eclipse.tcf-82f9e1e8c9a9cb5d73185275d284f5ad0288682b.tar.xz org.eclipse.tcf-82f9e1e8c9a9cb5d73185275d284f5ad0288682b.zip |
TCF Agent (Linux): sys call trace is turned off - needs more efficient way to detect memory map changes.
TCF Agent (Linux): implemented lazy reading of DWARF object attributes.
TCF Agent: floating point numbers now supported in expressions.
TCF Test Suite: more expression tests.
Diffstat (limited to 'plugins/org.eclipse.tm.tcf.debug.ui')
2 files changed, 22 insertions, 4 deletions
diff --git a/plugins/org.eclipse.tm.tcf.debug.ui/src/org/eclipse/tm/internal/tcf/debug/ui/model/TCFChildrenSubExpressions.java b/plugins/org.eclipse.tm.tcf.debug.ui/src/org/eclipse/tm/internal/tcf/debug/ui/model/TCFChildrenSubExpressions.java index 0be7e52f1..68966d2a0 100644 --- a/plugins/org.eclipse.tm.tcf.debug.ui/src/org/eclipse/tm/internal/tcf/debug/ui/model/TCFChildrenSubExpressions.java +++ b/plugins/org.eclipse.tm.tcf.debug.ui/src/org/eclipse/tm/internal/tcf/debug/ui/model/TCFChildrenSubExpressions.java @@ -144,10 +144,19 @@ public class TCFChildrenSubExpressions extends TCFChildren { } IExpressions.Value v = value.getData(); if (v != null && !isNull(v.getValue())) { - TCFNodeExpression n = findIndex(0); - if (n == null) n = new TCFNodeExpression(node, null, null, null, 0); - n.setSortPosition(0); - data.put(n.id, n); + TCFDataCache<ISymbols.Symbol> base_type = node.model.getSymbolInfoCache( + type_sym.getExeContextID(), type_sym.getBaseTypeID()); + if (!base_type.validate()) { + base_type.wait(this); + return false; + } + ISymbols.Symbol base_type_sym = base_type.getData(); + if (base_type_sym == null || base_type_sym.getSize() != 0) { + TCFNodeExpression n = findIndex(0); + if (n == null) n = new TCFNodeExpression(node, null, null, null, 0); + n.setSortPosition(0); + data.put(n.id, n); + } } set(null, null, data); return true; diff --git a/plugins/org.eclipse.tm.tcf.debug.ui/src/org/eclipse/tm/internal/tcf/debug/ui/model/TCFNodeExpression.java b/plugins/org.eclipse.tm.tcf.debug.ui/src/org/eclipse/tm/internal/tcf/debug/ui/model/TCFNodeExpression.java index 48f0025fa..9773d41f0 100644 --- a/plugins/org.eclipse.tm.tcf.debug.ui/src/org/eclipse/tm/internal/tcf/debug/ui/model/TCFNodeExpression.java +++ b/plugins/org.eclipse.tm.tcf.debug.ui/src/org/eclipse/tm/internal/tcf/debug/ui/model/TCFNodeExpression.java @@ -301,6 +301,7 @@ public class TCFNodeExpression extends TCFNode implements IElementEditor { } private BigInteger toBigInteger(byte[] data, int offs, int size, boolean big_endian, boolean sign_extension) { + assert offs + size <= data.length; byte[] temp = null; if (sign_extension) { temp = new byte[size]; @@ -494,6 +495,7 @@ public class TCFNodeExpression extends TCFNode implements IElementEditor { private boolean appendArrayValueText(StringBuffer bf, int level, ISymbols.Symbol t, byte[] data, int offs, int size, boolean big_endian, Runnable done) { + assert offs + size <= data.length; TCFDataCache<ISymbols.Symbol> c = model.getSymbolInfoCache(t.getExeContextID(), t.getBaseTypeID()); if (!c.validate()) { c.wait(done); @@ -561,6 +563,10 @@ public class TCFNodeExpression extends TCFNode implements IElementEditor { return false; } ISymbols.Symbol f = s.getData(); + if (f == null || offs + f.getOffset() + f.getSize() > data.length) { + bf.append('?'); + continue; + } bf.append(f.getName()); bf.append('='); if (!appendValueText(bf, level + 1, f, data, offs + f.getOffset(), f.getSize(), big_endian, done)) return false; @@ -828,6 +834,9 @@ public class TCFNodeExpression extends TCFNode implements IElementEditor { IExpressions exps = node.model.getLaunch().getService(IExpressions.class); exps.assign(node.expression.getData().getID(), bf, new IExpressions.DoneAssign() { public void doneAssign(IToken token, Exception error) { + TCFNodeExpression n = node; + while (n.parent instanceof TCFNodeExpression) n = (TCFNodeExpression)n.parent; + n.onSuspended(); if (error != null) { node.model.showMessageBox("Cannot modify element value", error); done(Boolean.FALSE); |