/*******************************************************************************
* Copyright (c) 2010, 2011 Wind River Systems, Inc. and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Wind River Systems - initial API and implementation
* Freescale Semiconductor - refactoring
*******************************************************************************/
package org.eclipse.cdt.debug.internal.ui.disassembly.dsf;
import java.math.BigInteger;
import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.jface.text.Position;
/**
* This is the main interface that connects the DSF Disassembly view to CDI and
* DSF backends. This interface is obtained through IAdaptable. A new instance
* is provided every time the adapter is requested. The caller must invoke
* {@link #dispose()} when it has no further use for the instance.
*
* @noimplement This interface is not intended to be implemented by clients.
* Clients should extend {@link AbstractDisassemblyBackend}.
*/
public interface IDisassemblyBackend {
/**
* Used to return muliple results from
* {@link IDisassemblyBackend#setDebugContext(IAdaptable)}
*/
public class SetDebugContextResult {
/**
* The ID of the session associated with the context
*/
public String sessionId;
/**
* Whether the context changed to another execution context (the parent
* elements of a thread, typically a process)
*/
public boolean contextChanged;
}
/**
* Called after instantiation
* @param callback
*/
void init(IDisassemblyPartCallback callback);
/**
* Indicates whether this backend support the provided debug context,
*
* @param context
* the debug context
* @return true if it is supported. Caller should invoke
* {@link #setDebugContext(IAdaptable)} with [context] only after
* first checking with this method
*/
boolean supportsDebugContext(IAdaptable context);
/**
* @return whether the backend has a debug context
*/
boolean hasDebugContext();
/**
* Called by the view when there has been a change to the active debug
* context. Should be called only if
* {@link #supportsDebugContext(IAdaptable)} first returns true.
*
* @param context
* the active debug context; must not be null
* @return information about the new context
*/
SetDebugContextResult setDebugContext(IAdaptable context);
/**
* Clear any knowledge of the current debug context.
*/
void clearDebugContext();
/**
* The implementation should end up calling DisassemblyPart.gotoFrame() if
* targetFrame > 0, or DisassemblyPart.gotoPC() otherwise.
*
* @param targetFrame
* the frame level to retrieve. Level 0 is the topmost frame
* (where the PC is)
*/
void retrieveFrameAddress(int targetFrame);
/**
* Get the frame of the current context
*
* @return the frame's level; 0 is the topmost frame (i.e., where the PC
* is). -1 if no frame context has been set.
*/
int getFrameLevel();
/**
* Indicates whether the current context is suspended.
*/
boolean isSuspended();
/**
* Indicates whether the current context is a frame.
*/
boolean hasFrameContext();
/**
* Returns the file associated with the current frame context, or null if
* the current context is not a frame or if the frame has no file
* association.
*/
String getFrameFile();
/**
* Returns the line number associated with the current frame context, or -1
* if current context is not a frame or if the frame has no file and line
* association.
*/
int getFrameLine();
/**
* Retrieves disassembly based on either (a) start and end address range, or
* (b) file, line number, and line count. If the caller specifies both sets
* of information, the implementation should honor (b) and ignore (a).
*
* @param startAddress
* @param endAddress
* @param file
* @param lineNumber
* @param lines
* @param mixed
* @param showSymbols
* @param showDisassembly
* @param linesHint
*/
void retrieveDisassembly(BigInteger startAddress, BigInteger endAddress, String file, int lineNumber, int lines, boolean mixed, boolean showSymbols, boolean showDisassembly, int linesHint);
Object insertSource(Position pos, BigInteger address, final String file, int lineNumber);
void gotoSymbol(String symbol);
/**
* Retrieves disassembly of the code generated by a source file, starting at
* the first line. Caller specifies the maximum number of disassembly lines
* that should result and a maximum address.
*
* @param file
* @param lines
* @param endAddress
* @param mixed
* @param showSymbols
* @param showDisassembly
*/
void retrieveDisassembly(String file, int lines, BigInteger endAddress, boolean mixed, boolean showSymbols, boolean showDisassembly);
/**
* Evaluate an expression for text hover
*
* @param expression
* the expression to be evaluated
* @return the result, or "" if it doesn't resolve, for whatever reason
*/
String evaluateExpression(String expression);
/**
* Evaluate a register for text hover
*
* @param register The register to be evaluated
* @return The result, or "" if it doesn't resolve, for whatever reason
* @since 7.2
*/
String evaluateRegister(String register);
/**
* Evaluate a position for text hover
*
* @param pos Disassembly position to evaluate.
* @param ident The string found at the given position.
* @return the result, or "" if it doesn't resolve, for whatever reason
* @since 7.2
*/
String getHoverInfoData(AddressRangePosition pos, String ident);
/**
* Called when the Disassembly view has no further use for this backend.
*/
void dispose();
}