diff --git a/debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/Instruction.java b/debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/Instruction.java new file mode 100644 index 00000000000..d1cf61791df --- /dev/null +++ b/debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/Instruction.java @@ -0,0 +1,44 @@ +package org.eclipse.cdt.debug.mi.core.cdi; + +import org.eclipse.cdt.debug.core.cdi.model.ICDIInstruction; +import org.eclipse.cdt.debug.mi.core.output.MIAsm; + +/** + */ +public class Instruction extends CObject implements ICDIInstruction { + + MIAsm asm; + + public Instruction(CTarget target, MIAsm a) { + super(target); + asm = a; + } + /** + * @see org.eclipse.cdt.debug.core.cdi.model.ICDIInstruction#getAdress() + */ + public long getAdress() { + return asm.getAddress(); + } + + /** + * @see org.eclipse.cdt.debug.core.cdi.model.ICDIInstruction#getFuntionName() + */ + public String getFuntionName() { + return asm.getFunction(); + } + + /** + * @see org.eclipse.cdt.debug.core.cdi.model.ICDIInstruction#getInstruction() + */ + public String getInstruction() { + return asm.getInstruction(); + } + + /** + * @see org.eclipse.cdt.debug.core.cdi.model.ICDIInstruction#getOffset() + */ + public long getOffset() { + return asm.getOffset(); + } + +} diff --git a/debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/SourceManager.java b/debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/SourceManager.java index f26442fc7a0..63c06c95d12 100644 --- a/debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/SourceManager.java +++ b/debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/SourceManager.java @@ -9,14 +9,18 @@ import java.io.File; import org.eclipse.cdt.debug.core.cdi.CDIException; import org.eclipse.cdt.debug.core.cdi.ICDISourceManager; +import org.eclipse.cdt.debug.core.cdi.model.ICDIInstruction; import org.eclipse.cdt.debug.mi.core.MIException; import org.eclipse.cdt.debug.mi.core.MISession; import org.eclipse.cdt.debug.mi.core.command.CommandFactory; +import org.eclipse.cdt.debug.mi.core.command.MIDataDisassemble; import org.eclipse.cdt.debug.mi.core.command.MIEnvironmentDirectory; import org.eclipse.cdt.debug.mi.core.command.MIGDBSetAutoSolib; import org.eclipse.cdt.debug.mi.core.command.MIGDBSetSolibSearchPath; import org.eclipse.cdt.debug.mi.core.command.MIGDBShowDirectories; import org.eclipse.cdt.debug.mi.core.command.MIGDBShowSolibSearchPath; +import org.eclipse.cdt.debug.mi.core.output.MIAsm; +import org.eclipse.cdt.debug.mi.core.output.MIDataDisassembleInfo; import org.eclipse.cdt.debug.mi.core.output.MIGDBShowDirectoriesInfo; import org.eclipse.cdt.debug.mi.core.output.MIGDBShowSolibSearchPathInfo; @@ -116,4 +120,53 @@ public class SourceManager extends SessionObject implements ICDISourceManager { } } + /** + * @see org.eclipse.cdt.debug.core.cdi.ICDISourceManager#getInstructions(String, int, int) + */ + public ICDIInstruction[] getInstructions(String filename, int linenum, int lines) throws CDIException { + MISession mi = getCSession().getMISession(); + CommandFactory factory = mi.getCommandFactory(); + MIDataDisassemble dis = factory.createMIDataDisassemble(filename, linenum, lines, false); + try { + mi.postCommand(dis); + MIDataDisassembleInfo info = dis.getMIDataDisassembleInfo(); + MIAsm[] asm = info.getMIAsms(); + Instruction[] instructions = new Instruction[asm.length]; + for (int i = 0; i < instructions.length; i++) { + instructions[i] = new Instruction(getCSession().getCTarget(), asm[i]); + } + return instructions; + } catch (MIException e) { + throw new CDIException(e.getMessage()); + } + } + + /** + * @see org.eclipse.cdt.debug.core.cdi.ICDISourceManager#getInstructions(String, int) + */ + public ICDIInstruction[] getInstructions(String filename, int linenum) throws CDIException { + return getInstructions(filename, linenum, -1); + } + + /** + * @see org.eclipse.cdt.debug.core.cdi.ICDISourceManager#getInstructions(String, String) + */ + public ICDIInstruction[] getInstructions(String sa, String ea) throws CDIException { + MISession mi = getCSession().getMISession(); + CommandFactory factory = mi.getCommandFactory(); + MIDataDisassemble dis = factory.createMIDataDisassemble(sa, ea, false); + try { + mi.postCommand(dis); + MIDataDisassembleInfo info = dis.getMIDataDisassembleInfo(); + MIAsm[] asm = info.getMIAsms(); + Instruction[] instructions = new Instruction[asm.length]; + for (int i = 0; i < instructions.length; i++) { + instructions[i] = new Instruction(getCSession().getCTarget(), asm[i]); + } + return instructions; + } catch (MIException e) { + throw new CDIException(e.getMessage()); + } + } + }