1 /* 2 * Copyright (C) 2007 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package com.android.dexgen.dex.file; 18 19 /** 20 * Constants for the dex debug info state machine format. 21 */ 22 public interface DebugInfoConstants { 23 24 /* 25 * normal opcodes 26 */ 27 28 /** 29 * Terminates a debug info sequence for a method.<p> 30 * Args: none 31 * 32 */ 33 static final int DBG_END_SEQUENCE = 0x00; 34 35 /** 36 * Advances the program counter/address register without emitting 37 * a positions entry.<p> 38 * 39 * Args: 40 * <ol> 41 * <li>Unsigned LEB128 — amount to advance pc by 42 * </ol> 43 */ 44 static final int DBG_ADVANCE_PC = 0x01; 45 46 /** 47 * Advances the line register without emitting 48 * a positions entry.<p> 49 * 50 * Args: 51 * <ol> 52 * <li>Signed LEB128 — amount to change line register by. 53 * </ol> 54 */ 55 static final int DBG_ADVANCE_LINE = 0x02; 56 57 /** 58 * Introduces a local variable at the current address.<p> 59 * 60 * Args: 61 * <ol> 62 * <li>Unsigned LEB128 — register that will contain local. 63 * <li>Unsigned LEB128 — string index (shifted by 1) of local name. 64 * <li>Unsigned LEB128 — type index (shifted by 1) of type. 65 * </ol> 66 */ 67 static final int DBG_START_LOCAL = 0x03; 68 69 /** 70 * Introduces a local variable at the current address with a type 71 * signature specified.<p> 72 * 73 * Args: 74 * <ol> 75 * <li>Unsigned LEB128 — register that will contain local. 76 * <li>Unsigned LEB128 — string index (shifted by 1) of local name. 77 * <li>Unsigned LEB128 — type index (shifted by 1) of type. 78 * <li>Unsigned LEB128 — string index (shifted by 1) of 79 * type signature. 80 * </ol> 81 */ 82 static final int DBG_START_LOCAL_EXTENDED = 0x04; 83 84 /** 85 * Marks a currently-live local variable as out of scope at the 86 * current address.<p> 87 * 88 * Args: 89 * <ol> 90 * <li>Unsigned LEB128 — register that contained local 91 * </ol> 92 */ 93 static final int DBG_END_LOCAL = 0x05; 94 95 /** 96 * Re-introduces a local variable at the current address. The name 97 * and type are the same as the last local that was live in the specified 98 * register.<p> 99 * 100 * Args: 101 * <ol> 102 * <li>Unsigned LEB128 — register to re-start. 103 * </ol> 104 */ 105 static final int DBG_RESTART_LOCAL = 0x06; 106 107 108 /** 109 * Sets the "prologue_end" state machine register, indicating that the 110 * next position entry that is added should be considered the end of 111 * a method prologue (an appropriate place for a method breakpoint).<p> 112 * 113 * The prologue_end register is cleared by any special 114 * ({@code >= OPCODE_BASE}) opcode. 115 */ 116 static final int DBG_SET_PROLOGUE_END = 0x07; 117 118 /** 119 * Sets the "epilogue_begin" state machine register, indicating that the 120 * next position entry that is added should be considered the beginning of 121 * a method epilogue (an appropriate place to suspend execution before 122 * method exit).<p> 123 * 124 * The epilogue_begin register is cleared by any special 125 * ({@code >= OPCODE_BASE}) opcode. 126 */ 127 static final int DBG_SET_EPILOGUE_BEGIN = 0x08; 128 129 /** 130 * Sets the current file that that line numbers refer to. All subsequent 131 * line number entries make reference to this source file name, instead 132 * of the default name specified in code_item. 133 * 134 * Args: 135 * <ol> 136 * <li>Unsigned LEB128 — string index (shifted by 1) of source 137 * file name. 138 * </ol> 139 */ 140 static final int DBG_SET_FILE = 0x09; 141 142 /* IF YOU ADD A NEW OPCODE, increase OPCODE_BASE */ 143 144 /* 145 * "special opcode" configuration, essentially what's found in 146 * the line number program header in DWARFv3, Section 6.2.4 147 */ 148 149 /** the smallest value a special opcode can take */ 150 static final int DBG_FIRST_SPECIAL = 0x0a; 151 static final int DBG_LINE_BASE = -4; 152 static final int DBG_LINE_RANGE = 15; 153 // MIN_INSN_LENGTH is always 1 154 } 155