debugSectionOffset = offsetWriter.getPosition(); DebugWriter<StringKey, TypeKey> debugWriter = new DebugWriter<StringKey, TypeKey>(stringSection, typeSection, offsetWriter);
debugWriter.reset(startingLineNumber);
case DebugItemType.START_LOCAL: { StartLocal startLocal = (StartLocal)debugItem; writer.writeStartLocal(startLocal.getCodeAddress(), startLocal.getRegister(), startLocal.getName(), writer.writeEndLocal(endLocal.getCodeAddress(), endLocal.getRegister()); break; writer.writeRestartLocal(restartLocal.getCodeAddress(), restartLocal.getRegister()); break; writer.writePrologueEnd(debugItem.getCodeAddress()); break; writer.writeEpilogueBegin(debugItem.getCodeAddress()); break; writer.writeLineNumber(lineNumber.getCodeAddress(), lineNumber.getLineNumber()); break; writer.writeSetSourceFile(setSourceFile.getCodeAddress(), setSourceFile.getSourceFile());
public void writeLineNumber(int codeAddress, int lineNumber) throws IOException { int lineDelta = lineNumber - currentLine; int addressDelta = codeAddress - currentAddress; if (addressDelta < 0) { throw new ExceptionWithContext("debug info items must have non-decreasing code addresses"); } if (lineDelta < -4 || lineDelta > 10) { writeAdvanceLine(lineNumber); lineDelta = 0; } // no else is intentional here. we might need to advance the PC as well as the line if ((lineDelta < 2 && addressDelta > 16) || (lineDelta > 1 && addressDelta > 15)) { writeAdvancePC(codeAddress); addressDelta = 0; } // we need to emit the special opcode even if both lineDelta and addressDelta are 0, otherwise a positions // entry isn't generated writeSpecialOpcode(lineDelta, addressDelta); }
public void writePrologueEnd(int codeAddress) throws IOException { writeAdvancePC(codeAddress); writer.write(DebugItemType.PROLOGUE_END); }
public void writeLineNumber(int codeAddress, int lineNumber) throws IOException { int lineDelta = lineNumber - currentLine; int addressDelta = codeAddress - currentAddress; if (addressDelta < 0) { throw new ExceptionWithContext("debug info items must have non-decreasing code addresses"); } if (lineDelta < -4 || lineDelta > 10) { writeAdvanceLine(lineNumber); lineDelta = 0; } // no else is intentional here. we might need to advance the PC as well as the line if ((lineDelta < 2 && addressDelta > 16) || (lineDelta > 1 && addressDelta > 15)) { writeAdvancePC(codeAddress); addressDelta = 0; } // we need to emit the special opcode even if both lineDelta and addressDelta are 0, otherwise a positions // entry isn't generated writeSpecialOpcode(lineDelta, addressDelta); }
public void writePrologueEnd(int codeAddress) throws IOException { writeAdvancePC(codeAddress); writer.write(DebugItemType.PROLOGUE_END); }
case DebugItemType.START_LOCAL: { StartLocal startLocal = (StartLocal)debugItem; writer.writeStartLocal(startLocal.getCodeAddress(), startLocal.getRegister(), startLocal.getName(), writer.writeEndLocal(endLocal.getCodeAddress(), endLocal.getRegister()); break; writer.writeRestartLocal(restartLocal.getCodeAddress(), restartLocal.getRegister()); break; writer.writePrologueEnd(debugItem.getCodeAddress()); break; writer.writeEpilogueBegin(debugItem.getCodeAddress()); break; writer.writeLineNumber(lineNumber.getCodeAddress(), lineNumber.getLineNumber()); break; writer.writeSetSourceFile(setSourceFile.getCodeAddress(), setSourceFile.getSourceFile());
public void writeLineNumber(int codeAddress, int lineNumber) throws IOException { int lineDelta = lineNumber - currentLine; int addressDelta = codeAddress - currentAddress; if (addressDelta < 0) { throw new ExceptionWithContext("debug info items must have non-decreasing code addresses"); } if (lineDelta < -4 || lineDelta > 10) { writeAdvanceLine(lineNumber); lineDelta = 0; } // no else is intentional here. we might need to advance the PC as well as the line if ((lineDelta < 2 && addressDelta > 16) || (lineDelta > 1 && addressDelta > 15)) { writeAdvancePC(codeAddress); addressDelta = 0; } // we need to emit the special opcode even if both lineDelta and addressDelta are 0, otherwise a positions // entry isn't generated writeSpecialOpcode(lineDelta, addressDelta); }
public void writeEpilogueBegin(int codeAddress) throws IOException { writeAdvancePC(codeAddress); writer.write(DebugItemType.EPILOGUE_BEGIN); }
debugWriter.reset(startingLineNumber);
debugSectionOffset = offsetWriter.getPosition(); DebugWriter<StringKey, TypeKey> debugWriter = new DebugWriter<StringKey, TypeKey>(stringSection, typeSection, offsetWriter);
case DebugItemType.START_LOCAL: { StartLocal startLocal = (StartLocal)debugItem; writer.writeStartLocal(startLocal.getCodeAddress(), startLocal.getRegister(), startLocal.getName(), writer.writeEndLocal(endLocal.getCodeAddress(), endLocal.getRegister()); break; writer.writeRestartLocal(restartLocal.getCodeAddress(), restartLocal.getRegister()); break; writer.writePrologueEnd(debugItem.getCodeAddress()); break; writer.writeEpilogueBegin(debugItem.getCodeAddress()); break; writer.writeLineNumber(lineNumber.getCodeAddress(), lineNumber.getLineNumber()); break; writer.writeSetSourceFile(setSourceFile.getCodeAddress(), setSourceFile.getSourceFile());
public void writeEpilogueBegin(int codeAddress) throws IOException { writeAdvancePC(codeAddress); writer.write(DebugItemType.EPILOGUE_BEGIN); }
debugWriter.reset(startingLineNumber);
debugSectionOffset = offsetWriter.getPosition(); DebugWriter<StringKey, TypeKey> debugWriter = new DebugWriter<StringKey, TypeKey>(stringSection, typeSection, offsetWriter);
case DebugItemType.START_LOCAL: { StartLocal startLocal = (StartLocal)debugItem; writer.writeStartLocal(startLocal.getCodeAddress(), startLocal.getRegister(), checkStringReference(startLocal.getNameReference()), writer.writeEndLocal(endLocal.getCodeAddress(), endLocal.getRegister()); break; writer.writeRestartLocal(restartLocal.getCodeAddress(), restartLocal.getRegister()); break; writer.writePrologueEnd(debugItem.getCodeAddress()); break; writer.writeEpilogueBegin(debugItem.getCodeAddress()); break; writer.writeLineNumber(lineNumber.getCodeAddress(), lineNumber.getLineNumber()); break; writer.writeSetSourceFile(setSourceFile.getCodeAddress(), checkStringReference(setSourceFile.getSourceFileReference()));
public void writeEpilogueBegin(int codeAddress) throws IOException { writeAdvancePC(codeAddress); writer.write(DebugItemType.EPILOGUE_BEGIN); }
case DebugItemType.START_LOCAL: { StartLocal startLocal = (StartLocal)debugItem; writer.writeStartLocal(startLocal.getCodeAddress(), startLocal.getRegister(), checkStringReference(startLocal.getNameReference()), writer.writeEndLocal(endLocal.getCodeAddress(), endLocal.getRegister()); break; writer.writeRestartLocal(restartLocal.getCodeAddress(), restartLocal.getRegister()); break; writer.writePrologueEnd(debugItem.getCodeAddress()); break; writer.writeEpilogueBegin(debugItem.getCodeAddress()); break; writer.writeLineNumber(lineNumber.getCodeAddress(), lineNumber.getLineNumber()); break; writer.writeSetSourceFile(setSourceFile.getCodeAddress(), checkStringReference(setSourceFile.getSourceFileReference())); break;
public void writePrologueEnd(int codeAddress) throws IOException { writeAdvancePC(codeAddress); writer.write(DebugItemType.PROLOGUE_END); }