Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authoreutarass2010-10-12 18:58:11 +0000
committereutarass2010-10-12 18:58:11 +0000
commit00221a37f2dbf2a9f05439aed3d9f346dbd5d848 (patch)
treed582493f8acfa8732e3c8c67a592e553ae9098de
parent1e5bcbcf1470b30018aa1f59e9c6a516e84c1029 (diff)
downloadorg.eclipse.tcf-00221a37f2dbf2a9f05439aed3d9f346dbd5d848.tar.gz
org.eclipse.tcf-00221a37f2dbf2a9f05439aed3d9f346dbd5d848.tar.xz
org.eclipse.tcf-00221a37f2dbf2a9f05439aed3d9f346dbd5d848.zip
TCF Debugger diagnostic tests: added tests for Disassembly service
-rw-r--r--plugins/org.eclipse.tm.tcf.core/src/org/eclipse/tm/internal/tcf/services/remote/DisassemblyProxy.java12
-rw-r--r--plugins/org.eclipse.tm.tcf.debug/src/org/eclipse/tm/internal/tcf/debug/tests/TestRCBP1.java54
2 files changed, 66 insertions, 0 deletions
diff --git a/plugins/org.eclipse.tm.tcf.core/src/org/eclipse/tm/internal/tcf/services/remote/DisassemblyProxy.java b/plugins/org.eclipse.tm.tcf.core/src/org/eclipse/tm/internal/tcf/services/remote/DisassemblyProxy.java
index fcd8dbba3..64a0956b7 100644
--- a/plugins/org.eclipse.tm.tcf.core/src/org/eclipse/tm/internal/tcf/services/remote/DisassemblyProxy.java
+++ b/plugins/org.eclipse.tm.tcf.core/src/org/eclipse/tm/internal/tcf/services/remote/DisassemblyProxy.java
@@ -48,6 +48,18 @@ public class DisassemblyProxy implements IDisassembly {
public Map<String,Object>[] getInstruction() {
return instruction;
}
+
+ public String toString() {
+ StringBuffer bf = new StringBuffer();
+ bf.append('[');
+ bf.append(addr.toString());
+ bf.append(' ');
+ bf.append(size);
+ bf.append(' ');
+ for (Map<String,Object> m : instruction) bf.append(m.toString());
+ bf.append(']');
+ return bf.toString();
+ }
}
public DisassemblyProxy(IChannel channel) {
diff --git a/plugins/org.eclipse.tm.tcf.debug/src/org/eclipse/tm/internal/tcf/debug/tests/TestRCBP1.java b/plugins/org.eclipse.tm.tcf.debug/src/org/eclipse/tm/internal/tcf/debug/tests/TestRCBP1.java
index 97989de10..780c5b59f 100644
--- a/plugins/org.eclipse.tm.tcf.debug/src/org/eclipse/tm/internal/tcf/debug/tests/TestRCBP1.java
+++ b/plugins/org.eclipse.tm.tcf.debug/src/org/eclipse/tm/internal/tcf/debug/tests/TestRCBP1.java
@@ -25,11 +25,13 @@ import org.eclipse.tm.tcf.protocol.IToken;
import org.eclipse.tm.tcf.protocol.Protocol;
import org.eclipse.tm.tcf.services.IBreakpoints;
import org.eclipse.tm.tcf.services.IDiagnostics;
+import org.eclipse.tm.tcf.services.IDisassembly;
import org.eclipse.tm.tcf.services.ILineNumbers;
import org.eclipse.tm.tcf.services.IMemory;
import org.eclipse.tm.tcf.services.IRegisters;
import org.eclipse.tm.tcf.services.IRunControl;
import org.eclipse.tm.tcf.services.IDiagnostics.ISymbol;
+import org.eclipse.tm.tcf.services.IDisassembly.IDisassemblyLine;
import org.eclipse.tm.tcf.services.ILineNumbers.CodeArea;
import org.eclipse.tm.tcf.services.IMemory.MemoryContext;
import org.eclipse.tm.tcf.services.IMemory.MemoryError;
@@ -46,9 +48,12 @@ class TestRCBP1 implements ITCFTest, IRunControl.RunControlListener {
private final IRegisters rg;
private final IBreakpoints bp;
private final ILineNumbers ln;
+ private final IDisassembly ds;
private final Map<String,IRunControl.RunControlContext> threads = new HashMap<String,IRunControl.RunControlContext>();
private final Map<String,SuspendedContext> suspended = new HashMap<String,SuspendedContext>();
private final Map<String,SuspendedContext> suspended_prev = new HashMap<String,SuspendedContext>();
+ private final Map<String,IDisassemblyLine[]> disassembly_lines = new HashMap<String,IDisassemblyLine[]>();
+ private final Map<String,Map<String,Object>[]> disassembly_capabilities = new HashMap<String,Map<String,Object>[]>();
private final Set<String> running = new HashSet<String>();
private final Set<IToken> get_state_cmds = new HashSet<IToken>();
private final Map<String,Map<String,IRegisters.RegistersContext>> regs =
@@ -66,6 +71,7 @@ class TestRCBP1 implements ITCFTest, IRunControl.RunControlListener {
private Runnable pending_cancel;
private int bp_cnt = 0;
private boolean done_get_state;
+ private boolean done_disassembly;
private int resume_cnt = 0;
private IToken cancel_test_cmd;
private boolean bp_reset_done;
@@ -155,6 +161,7 @@ class TestRCBP1 implements ITCFTest, IRunControl.RunControlListener {
rg = channel.getRemoteService(IRegisters.class);
bp = channel.getRemoteService(IBreakpoints.class);
ln = channel.getRemoteService(ILineNumbers.class);
+ ds = channel.getRemoteService(IDisassembly.class);
}
public void start() {
@@ -207,6 +214,12 @@ class TestRCBP1 implements ITCFTest, IRunControl.RunControlListener {
getContextState(test_ctx_id);
return;
}
+ if (ds != null && !done_disassembly) {
+ assert get_state_cmds.isEmpty();
+ assert disassembly_lines.isEmpty();
+ getDisassemlyLines();
+ return;
+ }
if (rcbp1_found) {
if (!bp_change_done) {
changeBreakpoints();
@@ -510,6 +523,47 @@ class TestRCBP1 implements ITCFTest, IRunControl.RunControlListener {
runTest();
}
+ private void getDisassemlyLines() {
+ for (final String id : suspended.keySet()) {
+ SuspendedContext sc = suspended.get(id);
+ get_state_cmds.add(ds.getCapabilities(id, new IDisassembly.DoneGetCapabilities() {
+ public void doneGetCapabilities(IToken token, Throwable error, Map<String,Object>[] arr) {
+ get_state_cmds.remove(token);
+ if (error != null) {
+ exit(error);
+ }
+ else {
+ disassembly_capabilities.put(id, arr);
+ if (get_state_cmds.isEmpty()) doneDisassembly();
+ }
+ }
+ }));
+ if (sc.pc == null) continue;
+ BigInteger pc = new BigInteger(sc.pc);
+ get_state_cmds.add(ds.disassemble(id, pc, 1, null, new IDisassembly.DoneDisassemble() {
+ public void doneDisassemble(IToken token, Throwable error, IDisassemblyLine[] arr) {
+ get_state_cmds.remove(token);
+ if (error != null) {
+ exit(error);
+ }
+ else {
+ disassembly_lines.put(id, arr);
+ if (get_state_cmds.isEmpty()) doneDisassembly();
+ }
+ }
+ }));
+ }
+ if (get_state_cmds.isEmpty()) doneDisassembly();
+ }
+
+ private void doneDisassembly() {
+ assert !done_disassembly;
+ assert get_state_cmds.isEmpty();
+ assert suspended.size() == disassembly_lines.size();
+ done_disassembly = true;
+ runTest();
+ }
+
private void changeBreakpoints() {
assert !bp_change_done;
final String bp_id = "TcfTestBP5" + channel_id;

Back to the top