Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authoreutarass2009-01-27 22:25:37 +0000
committereutarass2009-01-27 22:25:37 +0000
commit82f9e1e8c9a9cb5d73185275d284f5ad0288682b (patch)
treefcf1015da63805e070d22436c6c389bcf5f7bbf6 /plugins/org.eclipse.tm.tcf.debug.ui
parent05b194c68d1f4af7f38213a688293314a05b7892 (diff)
downloadorg.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')
-rw-r--r--plugins/org.eclipse.tm.tcf.debug.ui/src/org/eclipse/tm/internal/tcf/debug/ui/model/TCFChildrenSubExpressions.java17
-rw-r--r--plugins/org.eclipse.tm.tcf.debug.ui/src/org/eclipse/tm/internal/tcf/debug/ui/model/TCFNodeExpression.java9
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);

Back to the top