Mercurial > hg > truffle
diff graal/com.oracle.max.asmdis/src/com/sun/max/asm/dis/x86/X86Disassembler.java @ 4142:bc8527f3071c
Adjust code base to new level of warnings.
author | Thomas Wuerthinger <thomas.wuerthinger@oracle.com> |
---|---|
date | Sun, 18 Dec 2011 05:24:06 +0100 |
parents | e233f5660da4 |
children |
line wrap: on
line diff
--- a/graal/com.oracle.max.asmdis/src/com/sun/max/asm/dis/x86/X86Disassembler.java Sun Dec 18 05:23:52 2011 +0100 +++ b/graal/com.oracle.max.asmdis/src/com/sun/max/asm/dis/x86/X86Disassembler.java Sun Dec 18 05:24:06 2011 +0100 @@ -162,15 +162,11 @@ byteValue = stream.read(); } while (byteValue >= 0); - if (TRACE && !justSkip) { - System.out.println("Scanned header: " + header); - } - return justSkip ? null : header; } private List<Argument> scanArguments(BufferedInputStream stream, X86Template template, X86InstructionHeader header, byte modRMByte, byte sibByte) throws IOException { - final List<Argument> arguments = new ArrayList<Argument>(); + final List<Argument> arguments = new ArrayList<>(); final byte rexByte = (header.rexPrefix != null) ? header.rexPrefix.byteValue() : 0; for (X86Parameter parameter : template.parameters()) { int value = 0; @@ -249,7 +245,7 @@ return arguments; } - private int getModVariantParameterIndex(X86Template template, byte modRMByte, byte sibByte) { + private static int getModVariantParameterIndex(X86Template template, byte modRMByte, byte sibByte) { if (template.modCase() == X86TemplateContext.ModCase.MOD_0 && X86Field.MOD.extract(modRMByte) != X86TemplateContext.ModCase.MOD_0.value()) { switch (template.rmCase()) { case NORMAL: { @@ -357,7 +353,7 @@ // Remove the mod variant argument final Argument modVariantArgument = arguments.get(modVariantParameterIndex); - final List<Argument> result = new ArrayList<Argument>(); + final List<Argument> result = new ArrayList<>(); for (Argument argument : arguments) { if (modVariantArgument != argument) { result.add(argument); @@ -367,19 +363,14 @@ } if (!(Utils.indexOfIdentical(arguments, null) != -1)) { byte[] bytes; - if (true) { - final Assembler assembler = createAssembler(currentPosition); - try { - assembly.assemble(assembler, template, arguments); - } catch (AssemblyException e) { - // try the next template - continue; - } - bytes = assembler.toByteArray(); - } else { // TODO: does not work yet - final X86TemplateAssembler templateAssembler = new X86TemplateAssembler(template, addressWidth()); - bytes = templateAssembler.assemble(arguments); + final Assembler assembler = createAssembler(currentPosition); + try { + assembly.assemble(assembler, template, arguments); + } catch (AssemblyException e) { + // try the next template + continue; } + bytes = assembler.toByteArray(); if (bytes != null) { stream.reset(); if (Streams.startsWith(stream, bytes)) { @@ -416,17 +407,15 @@ return disassembledInstruction; } } - if (INLINE_INVALID_INSTRUCTIONS_AS_BYTES) { - stream.reset(); - final int size = 1; - final byte[] data = new byte[size]; - Streams.readFully(stream, data); - final InlineData inlineData = new InlineData(currentPosition, data); - final DisassembledData disassembledData = createDisassembledDataObjects(inlineData).iterator().next(); - currentPosition += size; - return disassembledData; - } - throw new AssemblyException("unknown instruction"); + + stream.reset(); + final int size = 1; + final byte[] data = new byte[size]; + Streams.readFully(stream, data); + final InlineData inlineData = new InlineData(currentPosition, data); + final DisassembledData disassembledData = createDisassembledDataObjects(inlineData).iterator().next(); + currentPosition += size; + return disassembledData; } /** @@ -444,11 +433,9 @@ } private static final int MORE_THAN_ANY_INSTRUCTION_LENGTH = 100; - private static final boolean INLINE_INVALID_INSTRUCTIONS_AS_BYTES = true; - @Override public List<DisassembledObject> scanOne0(BufferedInputStream stream) throws IOException, AssemblyException { - final List<DisassembledObject> disassembledObjects = new ArrayList<DisassembledObject>(); + final List<DisassembledObject> disassembledObjects = new ArrayList<>(); stream.mark(MORE_THAN_ANY_INSTRUCTION_LENGTH); final X86InstructionHeader header = scanInstructionHeader(stream, false); if (header == null) { @@ -460,8 +447,8 @@ @Override public List<DisassembledObject> scan0(BufferedInputStream stream) throws IOException, AssemblyException { - final SortedSet<Integer> knownGoodCodePositions = new TreeSet<Integer>(); - final List<DisassembledObject> result = new ArrayList<DisassembledObject>(); + final SortedSet<Integer> knownGoodCodePositions = new TreeSet<>(); + final List<DisassembledObject> result = new ArrayList<>(); boolean processingKnownValidCode = true; while (true) { @@ -518,7 +505,7 @@ } } - private boolean isRelativeJumpForward(DisassembledInstruction instruction) { + private static boolean isRelativeJumpForward(DisassembledInstruction instruction) { return instruction.template().internalName().equals("jmp") && // check if this is a jump instruction... instruction.arguments().size() == 1 && // that accepts one operand... ((Utils.first(instruction.arguments()) instanceof Immediate32Argument && // which is a relative offset... @@ -539,11 +526,11 @@ @Override public String operandsToString(DisassembledInstruction di, AddressMapper addressMapper) { - final LinkedList<X86Operand> operandQueue = new LinkedList<X86Operand>(); + final LinkedList<X86Operand> operandQueue = new LinkedList<>(); for (Operand operand : di.template().operands()) { operandQueue.add((X86Operand) operand); } - final LinkedList<Argument> argumentQueue = new LinkedList<Argument>(di.arguments()); + final LinkedList<Argument> argumentQueue = new LinkedList<>(di.arguments()); String result = ""; String separator = ""; while (!operandQueue.isEmpty()) { @@ -562,7 +549,7 @@ return Strings.padLengthWithSpaces(mnemonic(di), 8) + s; } - private String getSibIndexAndScale(Queue<X86Operand> operands, Queue<Argument> arguments) { + private static String getSibIndexAndScale(Queue<X86Operand> operands, Queue<Argument> arguments) { X86Parameter parameter = (X86Parameter) operands.remove(); assert parameter.place() == ParameterPlace.SIB_INDEX || parameter.place() == ParameterPlace.SIB_INDEX_REXX; final String result = arguments.remove().disassembledValue(); @@ -575,7 +562,7 @@ return result + " * " + scale.disassembledValue(); } - private String addition(Argument argument, String space) { + private static String addition(Argument argument, String space) { assert argument instanceof ImmediateArgument; final long value = argument.asLong(); final String s = Long.toString(value); @@ -585,7 +572,7 @@ return "-" + space + s.substring(1); } - private String getOperand(DisassembledInstruction di, Queue<X86Operand> operands, Queue<Argument> arguments, AddressMapper addressMapper) { + private static String getOperand(DisassembledInstruction di, Queue<X86Operand> operands, Queue<Argument> arguments, AddressMapper addressMapper) { final X86Operand operand = operands.remove(); if (operand instanceof ImplicitOperand) { final ImplicitOperand implicitOperand = (ImplicitOperand) operand;