mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-09-10 03:53:21 +02:00
Bug 357612 - [disassembly] Missing register tool-tips
This commit is contained in:
parent
1f97137969
commit
9fe6dfee8e
6 changed files with 91 additions and 36 deletions
|
@ -2,7 +2,7 @@ Manifest-Version: 1.0
|
|||
Bundle-ManifestVersion: 2
|
||||
Bundle-Name: %pluginName
|
||||
Bundle-SymbolicName: org.eclipse.cdt.debug.ui; singleton:=true
|
||||
Bundle-Version: 7.1.0.qualifier
|
||||
Bundle-Version: 7.2.0.qualifier
|
||||
Bundle-Activator: org.eclipse.cdt.debug.ui.CDebugUIPlugin
|
||||
Bundle-Vendor: %providerName
|
||||
Bundle-Localization: plugin
|
||||
|
|
|
@ -11,7 +11,7 @@
|
|||
<relativePath>../../pom.xml</relativePath>
|
||||
</parent>
|
||||
|
||||
<version>7.1.0-SNAPSHOT</version>
|
||||
<version>7.2.0-SNAPSHOT</version>
|
||||
<artifactId>org.eclipse.cdt.debug.ui</artifactId>
|
||||
<packaging>eclipse-plugin</packaging>
|
||||
</project>
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*******************************************************************************
|
||||
* Copyright (c) 2010 Wind River Systems, Inc. and others.
|
||||
* Copyright (c) 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
|
||||
|
@ -29,7 +29,7 @@ public abstract class AbstractDisassemblyBackend implements IDisassemblyBackend
|
|||
/**
|
||||
* Evaluate the expression to an address. This might be the address of a symbol or
|
||||
* the value of the numeric evaluation depending on the type of the expression.
|
||||
*
|
||||
*
|
||||
* @param expression the expression
|
||||
* @param suppressError <code>true</code> to suppress error dialogs
|
||||
* @return the address or <code>null</code> if the expression could not be evaluated
|
||||
|
@ -37,4 +37,13 @@ public abstract class AbstractDisassemblyBackend implements IDisassemblyBackend
|
|||
*/
|
||||
public abstract BigInteger evaluateAddressExpression(String expression, boolean suppressError);
|
||||
|
||||
|
||||
public String evaluateRegister(String register) {
|
||||
return null;
|
||||
}
|
||||
|
||||
public String getHoverInfoData(AddressRangePosition pos, String ident) {
|
||||
return null;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*******************************************************************************
|
||||
* Copyright (c) 2010 Wind River Systems, Inc. and others.
|
||||
* 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
|
||||
|
@ -21,8 +21,8 @@ import org.eclipse.jface.text.Position;
|
|||
* 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.
|
||||
*
|
||||
* @noimplement This interface is not intended to be implemented by clients.
|
||||
* Clients should extend {@link AbstractDisassemblyBackend}.
|
||||
*/
|
||||
public interface IDisassemblyBackend {
|
||||
|
@ -43,16 +43,16 @@ public interface IDisassemblyBackend {
|
|||
*/
|
||||
public boolean contextChanged;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Called after instantiation
|
||||
* 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
|
||||
|
@ -60,7 +60,7 @@ public interface IDisassemblyBackend {
|
|||
* first checking with this method
|
||||
*/
|
||||
boolean supportsDebugContext(IAdaptable context);
|
||||
|
||||
|
||||
/**
|
||||
* @return whether the backend has a debug context
|
||||
*/
|
||||
|
@ -70,7 +70,7 @@ public interface IDisassemblyBackend {
|
|||
* 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
|
||||
|
@ -84,8 +84,8 @@ public interface IDisassemblyBackend {
|
|||
|
||||
/**
|
||||
* The implementation should end up calling DisassemblyPart.gotoFrame() if
|
||||
* targetFrame > 0, or DisassemblyPart.gotoPC() otherwise.
|
||||
*
|
||||
* targetFrame > 0, or DisassemblyPart.gotoPC() otherwise.
|
||||
*
|
||||
* @param targetFrame
|
||||
* the frame level to retrieve. Level 0 is the topmost frame
|
||||
* (where the PC is)
|
||||
|
@ -94,7 +94,7 @@ public interface IDisassemblyBackend {
|
|||
|
||||
/**
|
||||
* 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.
|
||||
*/
|
||||
|
@ -104,7 +104,7 @@ public interface IDisassemblyBackend {
|
|||
* Indicates whether the current context is suspended.
|
||||
*/
|
||||
boolean isSuspended();
|
||||
|
||||
|
||||
/**
|
||||
* Indicates whether the current context is a frame.
|
||||
*/
|
||||
|
@ -128,7 +128,7 @@ public interface IDisassemblyBackend {
|
|||
* 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
|
||||
|
@ -149,7 +149,7 @@ public interface IDisassemblyBackend {
|
|||
* 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
|
||||
|
@ -161,13 +161,32 @@ public interface IDisassemblyBackend {
|
|||
|
||||
/**
|
||||
* 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.
|
||||
*/
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*******************************************************************************
|
||||
* Copyright (c) 2007, 2010 Wind River Systems and others.
|
||||
* Copyright (c) 2007, 2011 Wind River Systems 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
|
||||
|
@ -3020,6 +3020,26 @@ public abstract class DisassemblyPart extends WorkbenchPart implements IDisassem
|
|||
return fFile2Storage.get(file);
|
||||
}
|
||||
|
||||
/**
|
||||
* A pass through to process the text to populate into a text hover.
|
||||
*/
|
||||
public String getHoverInfoData(AddressRangePosition pos, String ident) {
|
||||
if (fBackend != null ) {
|
||||
return fBackend.getHoverInfoData(pos, ident);
|
||||
}
|
||||
return ""; //$NON-NLS-1$
|
||||
}
|
||||
|
||||
/**
|
||||
* A passthru from the text hover code to the backend.
|
||||
*/
|
||||
public String evaluateRegister(String register) {
|
||||
if (fBackend != null) {
|
||||
return fBackend.evaluateRegister(register);
|
||||
}
|
||||
return ""; //$NON-NLS-1$
|
||||
}
|
||||
|
||||
/**
|
||||
* A passthru from the text hover code to the backend.
|
||||
*/
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*******************************************************************************
|
||||
* Copyright (c) 2007, 2010 Wind River Systems and others.
|
||||
* Copyright (c) 2007, 2011 Wind River Systems 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
|
||||
|
@ -58,21 +58,29 @@ public class DisassemblyTextHover implements ITextHover {
|
|||
String ident = doc.get(offset, hoverRegion.getLength());
|
||||
String value = null;
|
||||
pos = doc.getModelPosition(offset);
|
||||
if (pos instanceof SourcePosition) {
|
||||
value = evaluateExpression(ident);
|
||||
} else if (pos instanceof LabelPosition) {
|
||||
value = evaluateExpression(ident);
|
||||
} else if (pos instanceof DisassemblyPosition) {
|
||||
// first, try to evaluate as register
|
||||
value = evaluateRegister(ident);
|
||||
if (value == null) {
|
||||
// if this fails, try expression
|
||||
|
||||
value = fDisassemblyPart.getHoverInfoData(pos, ident);
|
||||
|
||||
// If returns null (or empty string), not implemented or something went wrong.
|
||||
if (value == null || value.length() == 0) {
|
||||
if (pos instanceof SourcePosition) {
|
||||
value = evaluateExpression(ident);
|
||||
} else if (pos instanceof LabelPosition) {
|
||||
value = evaluateExpression(ident);
|
||||
} else if (pos instanceof DisassemblyPosition) {
|
||||
// first, try to evaluate as register
|
||||
value = evaluateRegister(ident);
|
||||
if (value == null) {
|
||||
// if this fails, try expression
|
||||
value = evaluateExpression(ident);
|
||||
}
|
||||
}
|
||||
if (value != null) {
|
||||
return ident + " = " + value; //$NON-NLS-1$
|
||||
}
|
||||
}
|
||||
if (value != null) {
|
||||
return ident + " = " + value; //$NON-NLS-1$
|
||||
}
|
||||
else
|
||||
return value;
|
||||
} catch (BadLocationException e) {
|
||||
if (DsfUIPlugin.getDefault().isDebugging()) {
|
||||
DsfUIPlugin.getDefault().getLog().log(new Status(IStatus.ERROR, DsfUIPlugin.PLUGIN_ID, "Internal Error", e)); //$NON-NLS-1$
|
||||
|
@ -87,8 +95,7 @@ public class DisassemblyTextHover implements ITextHover {
|
|||
* @return register value or <code>null</code>
|
||||
*/
|
||||
private String evaluateRegister(String register) {
|
||||
// TLETODO [disassembly] evaluate register
|
||||
return null;
|
||||
return fDisassemblyPart.evaluateRegister(register);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
Loading…
Add table
Reference in a new issue