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
17package com.android.dx.dex.file;
18
19/**
20 * Constants for the dex debug info state machine format.
21 */
22public 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 &mdash; 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 &mdash; 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 &mdash; register that will contain local.
63     * <li>Unsigned LEB128 &mdash; string index (shifted by 1) of local name.
64     * <li>Unsigned LEB128 &mdash; 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 &mdash; register that will contain local.
76     * <li>Unsigned LEB128 &mdash; string index (shifted by 1) of local name.
77     * <li>Unsigned LEB128 &mdash; type index (shifted by 1) of type.
78     * <li>Unsigned LEB128 &mdash; 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 &mdash; 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 &mdash; 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 &mdash; 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