Skip to main content

[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
>



Back to the top