[
Date Prev][
Date Next][
Thread Prev][
Thread Next][
Date Index][
Thread Index]
[
List Home]
Re: [cdt-patch] 1.0.1 Assembly View Fixups
|
Applied.
Thanks,
Mikhail Khodjaiants
----- Original Message -----
From: "Chris Songer" <songer@xxxxxxxxxxxxx>
To: <cdt-patch@xxxxxxxxxxx>
Sent: Wednesday, March 26, 2003 8:47 PM
Subject: [cdt-patch] 1.0.1 Assembly View Fixups
>
> Hi,
>
> We had some issues with the assembly view. In particular, \t would show up
> as \t rather than whitespace and arguments for the assembly were not lined
> up in a smooth fashion making it hard to read.
>
> The following patch, derived from 1.0.1, fixes these issues.
>
> Thanks!
> -Chris
>
> diff -r -u
>
xide_compare/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/core/cdi/m
odel/ICDIInstruction.java
>
xide/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/core/cdi/model/ICD
IInstruction.java
> ---
>
xide_compare/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/core/cdi/m
odel/ICDIInstruction.java
> Wed Mar 26 17:38:45 2003
> +++
>
xide/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/core/cdi/model/ICD
IInstruction.java
> Wed Mar 26 17:38:56 2003
> @@ -31,6 +31,16 @@
> String getInstruction();
>
> /**
> + * @return the opcode
> + */
> + String getOpcode();
> +
> + /**
> + * @return any arguments to the opcode
> + */
> + String getArgs();
> +
> + /**
> * Returns the instruction's offset.
> *
> * @return the offset of this machine instruction
> diff -r -u
>
xide_compare/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/c
ore/DisassemblyStorage.java
>
xide/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/Disa
ssemblyStorage.java
> ---
>
xide_compare/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/c
ore/DisassemblyStorage.java
> Wed Mar 26 17:38:45 2003
> +++
>
xide/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/Disa
ssemblyStorage.java
> Wed Mar 26 17:38:56 2003
> @@ -146,6 +146,7 @@
> {
> StringBuffer lines = new StringBuffer();
> int maxFunctionName = 0;
> + int maxOpcodeLength = 0;
> long maxOffset = 0;
> for ( int i = 0; i < fInstructions.length; ++i )
> {
> @@ -153,15 +154,21 @@
> {
> maxFunctionName = fInstructions[i].getFuntionName().length();
> }
> +
> + String opcode = fInstructions[i].getOpcode();
> + if( opcode.length() > maxOpcodeLength )
> + maxOpcodeLength = opcode.length();
> +
> if ( fInstructions[i].getOffset() > maxOffset )
> {
> maxOffset = fInstructions[i].getOffset();
> }
> }
> - int instrPos = calculateInstructionPosition( maxFunctionName,
maxOffset );
> + int instrPos = calculateInstructionPosition( maxFunctionName,
maxOffset );
> + int argPosition = instrPos + maxOpcodeLength + 1;
> for ( int i = 0; i < fInstructions.length; ++i )
> {
> - lines.append( getInstructionString( fInstructions[i], instrPos ) );
> + lines.append( getInstructionString( fInstructions[i], instrPos,
> argPosition ) );
> }
> fInputStream = new ByteArrayInputStream( lines.toString().getBytes() );
> }
> @@ -175,9 +182,11 @@
> }
> }
>
> - private String getInstructionString( ICDIInstruction instruction, int
> instrPosition )
> + private String getInstructionString( ICDIInstruction instruction, int
> instrPosition,
> + int argPosition )
> {
> - char[] spaces= new char[instrPosition];
> + int worstCaseSpace = Math.max( instrPosition, argPosition );
> + char[] spaces= new char[worstCaseSpace];
> Arrays.fill( spaces, ' ' );
> StringBuffer sb = new StringBuffer();
> if ( instruction != null )
> @@ -196,7 +205,9 @@
> sb.append( ">:" );
> sb.append( spaces, 0, instrPosition - sb.length() );
> }
> - sb.append( instruction.getInstruction() );
> + sb.append( instruction.getOpcode() );
> + sb.append( spaces, 0, argPosition - sb.length() );
> + sb.append( instruction.getArgs() );
> sb.append( '\n' );
> }
> return sb.toString();
> diff -r -u
>
xide_compare/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core
/cdi/Instruction.java
>
xide/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/Ins
truction.java
> ---
>
xide_compare/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core
/cdi/Instruction.java
> Wed Mar 26 17:38:45 2003
> +++
>
xide/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/Ins
truction.java
> Wed Mar 26 17:38:56 2003
> @@ -38,7 +38,21 @@
> public String getInstruction() {
> return asm.getInstruction();
> }
> -
> +
> + /**
> + * @see org.eclipse.cdt.debug.core.cdi.model.ICDIInstruction#getOpcode()
> + */
> + public String getOpcode() {
> + return asm.getOpcode();
> + }
> +
> + /**
> + * @see org.eclipse.cdt.debug.core.cdi.model.ICDIInstruction#getOpcode()
> + */
> + public String getArgs() {
> + return asm.getArgs();
> + }
> +
> /**
> * @see org.eclipse.cdt.debug.core.cdi.model.ICDIInstruction#getOffset()
> */
> diff -r -u
>
xide_compare/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core
/output/MIAsm.java
>
xide/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/output/
MIAsm.java
> ---
>
xide_compare/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core
/output/MIAsm.java
> Wed Mar 26 17:38:45 2003
> +++
>
xide/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/output/
MIAsm.java
> Wed Mar 26 17:38:56 2003
> @@ -12,7 +12,8 @@
> long address;
> String function = "";
> long offset;
> - String instruction = "";
> + String opcode = "";
> + String args = "";
>
> public MIAsm (MITuple tuple) {
> parse(tuple);
> @@ -31,7 +32,15 @@
> }
>
> public String getInstruction() {
> - return instruction;
> + return opcode + " " + args;
> + }
> +
> + public String getOpcode() {
> + return opcode;
> + }
> +
> + public String getArgs() {
> + return args;
> }
>
> public String toString() {
> @@ -40,7 +49,7 @@
> buffer.append("address=\"" + Long.toHexString(address) +"\"");
> buffer.append(",func-name=\"" + function + "\"");
> buffer.append(",offset=\"").append(offset).append('"');
> - buffer.append(",inst=\"" + instruction + "\"");
> + buffer.append(",inst=\"" + getInstruction() + "\"");
> buffer.append('}');
> return buffer.toString();
> }
> @@ -69,7 +78,30 @@
> } catch (NumberFormatException e) {
> }
> } else if (var.equals("inst")) {
> - instruction = str;
> + /* for the instruction, we do not want the C string but the
> + translated string since the only thing we are doing is
> + displaying it. */
> + str = ((MIConst)value).getString();
> +
> + char chars[] = str.toCharArray();
> + int index = 0;
> +
> + // count the non-whitespace characters.
> + while( (index < chars.length) && (chars[index] > '\u0020'))
> + index++;
> +
> + // guard all whitespace
> + if( index < chars.length )
> + opcode = str.substring( 0, index );
> +
> + // skip any whitespace characters
> + while( index < chars.length &&
> + chars[index] >= '\u0000' && chars[index] <= '\u0020')
> + index++;
> +
> + // guard no argument
> + if( index < chars.length )
> + args = str.substring( index );
> }
> }
> }
>
> _______________________________________________
> cdt-patch mailing list
> cdt-patch@xxxxxxxxxxx
> http://dev.eclipse.org/mailman/listinfo/cdt-patch
>