diff options
author | eutarass | 2011-04-07 17:20:13 +0000 |
---|---|---|
committer | eutarass | 2011-04-07 17:20:13 +0000 |
commit | a18b27f4b86ff27f4156b3d93495502652234fd4 (patch) | |
tree | 5632d122c774398b9578c88ff5506bcc253bd78e /plugins/org.eclipse.tm.tcf.debug.ui/src/org/eclipse | |
parent | 05032ef4b2b106b4d1e7408e88ca5008c6a25a49 (diff) | |
download | org.eclipse.tcf-a18b27f4b86ff27f4156b3d93495502652234fd4.tar.gz org.eclipse.tcf-a18b27f4b86ff27f4156b3d93495502652234fd4.tar.xz org.eclipse.tcf-a18b27f4b86ff27f4156b3d93495502652234fd4.zip |
Improved support for register variables:
1. New property for symbols and expression values: Register - register ID if the symbol or the value represents register variable.
2. Register name is shown in details pane of Variables and Expressions views.
3. Changing register variable value now works as expected.
Diffstat (limited to 'plugins/org.eclipse.tm.tcf.debug.ui/src/org/eclipse')
-rw-r--r-- | plugins/org.eclipse.tm.tcf.debug.ui/src/org/eclipse/tm/internal/tcf/debug/ui/model/TCFNodeExpression.java | 56 |
1 files changed, 56 insertions, 0 deletions
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 0cc552838..58c26709c 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 @@ -11,6 +11,8 @@ package org.eclipse.tm.internal.tcf.debug.ui.model; import java.math.BigInteger; +import java.util.LinkedList; +import java.util.Map; import org.eclipse.debug.core.DebugPlugin; import org.eclipse.debug.core.IExpressionManager; @@ -36,6 +38,7 @@ import org.eclipse.tm.tcf.protocol.IToken; import org.eclipse.tm.tcf.protocol.Protocol; import org.eclipse.tm.tcf.services.IExpressions; import org.eclipse.tm.tcf.services.IMemory; +import org.eclipse.tm.tcf.services.IRegisters; import org.eclipse.tm.tcf.services.IMemory.MemoryError; import org.eclipse.tm.tcf.services.ISymbols; import org.eclipse.tm.tcf.util.TCFDataCache; @@ -1047,6 +1050,51 @@ public class TCFNodeExpression extends TCFNode implements IElementEditor, ICastT return true; } + private String getRegisterName(String reg_id, Runnable done) { + String name = reg_id; + TCFDataCache<?> pending = null; + TCFNodeRegister reg_node = null; + LinkedList<TCFChildren> queue = new LinkedList<TCFChildren>(); + TCFNode n = parent; + while (n != null) { + if (n instanceof TCFNodeStackFrame) { + queue.add(((TCFNodeStackFrame)n).getRegisters()); + } + if (n instanceof TCFNodeExecContext) { + queue.add(((TCFNodeExecContext)n).getRegisters()); + break; + } + n = n.parent; + } + while (!queue.isEmpty()) { + TCFChildren reg_list = queue.removeFirst(); + if (!reg_list.validate()) { + pending = reg_list; + } + else { + Map<String,TCFNode> reg_map = reg_list.getData(); + if (reg_map != null) { + reg_node = (TCFNodeRegister)reg_map.get(reg_id); + if (reg_node != null) break; + for (TCFNode node : reg_map.values()) { + queue.add(((TCFNodeRegister)node).getChildren()); + } + } + } + } + if (pending != null) { + pending.wait(done); + return null; + } + if (reg_node != null) { + TCFDataCache<IRegisters.RegistersContext> reg_ctx_cache = reg_node.getContext(); + if (!reg_ctx_cache.validate(done)) return null; + IRegisters.RegistersContext reg_ctx_data = reg_ctx_cache.getData(); + if (reg_ctx_data != null && reg_ctx_data.getName() != null) name = reg_ctx_data.getName(); + } + return name; + } + String getDetailText(Runnable done) { if (!expression.validate(done)) return null; if (!value.validate(done)) return null; @@ -1062,6 +1110,14 @@ public class TCFNodeExpression extends TCFNode implements IElementEditor, ICastT if (!appendValueText(bf, 0, v.getTypeID(), data, 0, data.length, big_endian, done)) return null; } + String reg_id = v.getRegisterID(); + if (reg_id != null) { + String nm = getRegisterName(reg_id, done); + if (nm == null) return null; + bf.append("Register: "); + bf.append(nm); + bf.append('\n'); + } } } return bf.toString(); |