diff --git a/debug/org.eclipse.cdt.debug.core/ChangeLog b/debug/org.eclipse.cdt.debug.core/ChangeLog index e8b6564dd69..e74bf76678f 100644 --- a/debug/org.eclipse.cdt.debug.core/ChangeLog +++ b/debug/org.eclipse.cdt.debug.core/ChangeLog @@ -1,3 +1,9 @@ +2002-10-10 Mikhail Khodjaiants + * CSourceManager.java: Implementing the disassembly mode. + * DisassemblyManager.java: Implementing the disassembly mode. + * DisassemblyStorage.java: Implementing the disassembly mode. + * CDebugUtils.java: Added the 'toHexAddressString' method. + 2002-10-10 Alain Magloire * ICDISourceManager.java: Changing the getInstructions() diff --git a/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/CDebugUtils.java b/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/CDebugUtils.java index c1fb2595e09..f185fc21414 100644 --- a/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/CDebugUtils.java +++ b/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/CDebugUtils.java @@ -64,4 +64,17 @@ public class CDebugUtils } } } + + public static String toHexAddressString( long address ) + { + String addressString = Long.toHexString( address ); + StringBuffer sb = new StringBuffer( 10 ); + sb.append( "0x" ); + for ( int i = 0; i < 8 - addressString.length(); ++i ) + { + sb.append( '0' ); + } + sb.append( addressString ); + return sb.toString(); + } } diff --git a/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/DisassemblyStorage.java b/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/DisassemblyStorage.java index f5d79f1f7ea..f5049bb13ec 100644 --- a/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/DisassemblyStorage.java +++ b/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/DisassemblyStorage.java @@ -62,6 +62,13 @@ public class DisassemblyStorage implements IDisassemblyStorage */ public int getLineNumber( long address ) { + for ( int i = 0; i < fInstructions.length; ++i ) + { + if ( fInstructions[i].getAdress() == address ) + { + return i + 1; + } + } return 0; } @@ -139,7 +146,7 @@ public class DisassemblyStorage implements IDisassemblyStorage StringBuffer lines = new StringBuffer(); for ( int i = 0; i < fInstructions.length; ++i ) { - lines.append( fInstructions[i].toString() ); + lines.append( getInstructionString( fInstructions[i] ) ); } fInputStream = new ByteArrayInputStream( lines.toString().getBytes() ); } @@ -158,6 +165,22 @@ public class DisassemblyStorage implements IDisassemblyStorage StringBuffer sb = new StringBuffer(); if ( instruction != null ) { + sb .append( CDebugUtils.toHexAddressString( instruction.getAdress() ) ); + sb.append( ' ' ); + if ( instruction.getFuntionName() != null && instruction.getFuntionName().length() > 0 ) + { + sb.append( '<' ); + sb.append( instruction.getFuntionName() ); + if ( instruction.getOffset() != 0 ) + { + sb.append( '+' ); + sb.append( instruction.getOffset() ); + } + sb.append( ">:" ); + sb.append( '\t' ); + } + sb.append( instruction.getInstruction() ); + sb.append( '\n' ); } return sb.toString(); } diff --git a/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/sourcelookup/CSourceManager.java b/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/sourcelookup/CSourceManager.java index 21e0163dd11..b23331d1d4f 100644 --- a/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/sourcelookup/CSourceManager.java +++ b/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/sourcelookup/CSourceManager.java @@ -52,6 +52,10 @@ public class CSourceManager implements ICSourceLocator, ISourceMode, IAdaptable return frameInfo.getFrameLineNumber(); } } + if ( getRealMode() == ISourceMode.MODE_DISASSEMBLY && getDisassemblyManager() != null ) + { + return getDisassemblyManager().getLineNumber( frameInfo ); + } return 0; } diff --git a/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/sourcelookup/DisassemblyManager.java b/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/sourcelookup/DisassemblyManager.java index 5d3364a33bb..62649f0e78d 100644 --- a/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/sourcelookup/DisassemblyManager.java +++ b/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/sourcelookup/DisassemblyManager.java @@ -118,7 +118,7 @@ public class DisassemblyManager { try { - instructions = sm.getInstructions( "0x" + Long.toHexString( address ), "0x" + Long.toHexString( address + DISASSEMBLY_BLOCK_SIZE ) ); + instructions = sm.getInstructions( address, address + DISASSEMBLY_BLOCK_SIZE ); } catch( CDIException e ) {