upload android base code part3
This commit is contained in:
parent
71b83c22f1
commit
b9e30e05b1
15122 changed files with 2089659 additions and 0 deletions
897
android/dalvik/docs/dalvik-constraints.html
Normal file
897
android/dalvik/docs/dalvik-constraints.html
Normal file
|
@ -0,0 +1,897 @@
|
|||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
||||
|
||||
<html>
|
||||
<head>
|
||||
<title>Dalvik bytecode constraints</title>
|
||||
<link rel=stylesheet href="dalvik-constraints.css">
|
||||
</head>
|
||||
|
||||
<body>
|
||||
|
||||
<h1>Dalvik bytecode constraints</h1>
|
||||
|
||||
<!--
|
||||
<h1>General integrity constraints</h1>
|
||||
|
||||
<table>
|
||||
<tr>
|
||||
<th>
|
||||
Identifier
|
||||
</th>
|
||||
|
||||
<th>
|
||||
Description
|
||||
</th>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td>
|
||||
A1
|
||||
</td>
|
||||
|
||||
<td>
|
||||
The magic number of the DEX file must be "dex\n035\0".
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td>
|
||||
A1
|
||||
</td>
|
||||
|
||||
<td>
|
||||
The checksum must be an Adler-32 checksum of the whole file contents
|
||||
except magic and checksum field.
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
|
||||
The signature must be a SHA-1 hash of the whole file contents except magic,
|
||||
checksum, and signature.
|
||||
|
||||
The file_size must match the actual file size in bytes.
|
||||
|
||||
The header_size must have the value 0x70.
|
||||
|
||||
The endian_tag must have either the value ENDIAN_CONSTANT or
|
||||
REVERSE_ENDIAN_CONSTANT.
|
||||
|
||||
For each of the link, string_ids, type_ids, proto_ids, field_ids, method_ids, class_defs
|
||||
and data sections, the offset and size fields must be either both zero or both
|
||||
non-zero. In the latter case, the offset must be four-byte-aligned.
|
||||
|
||||
All offset fields in the header except map_off must be four-byte-aligned.
|
||||
|
||||
The map_off field must be either zero or point into the data section. In the
|
||||
latter case, the data section must exist.
|
||||
|
||||
None of the link, string_ids, type_ids, proto_ids, field_ids, method_ids, class_defs
|
||||
and data sections must overlap each other or the header.
|
||||
|
||||
If a map exists, then each map entry must have a valid type. Each type may
|
||||
appear at most once.
|
||||
|
||||
If a map exists, then each map entry must have a nonzero offset and size. The
|
||||
offset must point into the corresponding section of the file (i.e. a
|
||||
string_id_item must point into the string_ids section) and the explicit or
|
||||
implicit size of the item must match the actual contents and size of the
|
||||
section.
|
||||
|
||||
If a map exists, then the offset of map entry n+1 must be greater or equal to
|
||||
the offset of map entry n plus then size of map entry n. This implies
|
||||
non-overlapping entries and low-to-high ordering.
|
||||
|
||||
The following types of entries must have an offset that is
|
||||
four-byte-aligned: string_id_item, type_id_item, proto_id_item, field_id_item,
|
||||
method_id_item, class_def_item, type_list, code_item,
|
||||
annotations_directory_item.
|
||||
|
||||
For each string_id_item, the string_data_off field must contain a valid
|
||||
reference into the data section. For the referenced string_data_item, the data
|
||||
field must contain a valid MUTF-8 string, and the utf16_size must match the
|
||||
decoded length of the string.
|
||||
|
||||
For each type_id_item, the desciptor_idx field must contain a valid reference
|
||||
into the string_ids list. The referenced string must be a valid type descriptor.
|
||||
|
||||
For each proto_id_item, the shorty_idx field must contain a valid reference
|
||||
into the string_ids list. The referenced string must be a valid shorty descriptor.
|
||||
Also, the return_type_idx field must be a valid index into the type_ids section,
|
||||
and the parameters_off field must be either zero or a valid offset pointing
|
||||
into the data section. If nonzero, the parameter list must not contain any void
|
||||
entries.
|
||||
|
||||
For each field_id_item, both the class_idx and type_idx fields must be a valid
|
||||
indices into the
|
||||
type_ids list. The entry referenced by class_idx must be a non-array reference type.
|
||||
In addition, the name_idx field must be a valid reference into the string_ids
|
||||
section, and the contents of the referenced entry must conform to the MemberName
|
||||
specification.
|
||||
|
||||
For each method_id_item, the class_idx field must be a valid index into the
|
||||
type_ids section, and the
|
||||
referenced entry must be a non-array reference type. The proto_id field must
|
||||
be a valid reference into the proto_ids list. The name_idx field must be a
|
||||
valid reference into the string_ids
|
||||
section, and the contents of the referenced entry must conform to the MemberName
|
||||
specification.
|
||||
|
||||
For each class_def_item, ...
|
||||
|
||||
For each field_id_item, the class_idx field must be a valid index into the
|
||||
type_ids list. The referenced entry must be a non-array reference type.
|
||||
|
||||
...
|
||||
|
||||
-->
|
||||
|
||||
<h2>
|
||||
Static constraints
|
||||
</h2>
|
||||
|
||||
<p>
|
||||
Static constraints are constraints on individual elements of the bytecode.
|
||||
They usually can be checked without employing control or data-flow analysis
|
||||
techniques.
|
||||
</p>
|
||||
|
||||
<table>
|
||||
<tr>
|
||||
<th>
|
||||
Identifier
|
||||
</th>
|
||||
|
||||
<th>
|
||||
Description
|
||||
</th>
|
||||
|
||||
<th>
|
||||
Spec equivalent
|
||||
</th>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td>
|
||||
A1
|
||||
</td>
|
||||
|
||||
<td>
|
||||
The <code>insns</code> array must not be empty.
|
||||
</td>
|
||||
|
||||
<td>
|
||||
4.8.1.1
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td>
|
||||
A2
|
||||
</td>
|
||||
|
||||
<td>
|
||||
The first opcode in the <code>insns</code> array must have index zero.
|
||||
</td>
|
||||
|
||||
<td>
|
||||
4.8.1.3
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td>
|
||||
A3
|
||||
</td>
|
||||
|
||||
<td>
|
||||
The <code>insns</code> array must only contain valid Dalvik opcodes.
|
||||
</td>
|
||||
|
||||
<td>
|
||||
4.8.1.4
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td>
|
||||
A4
|
||||
</td>
|
||||
|
||||
<td>
|
||||
The index of instruction <code>n+1</code> must equal the index of
|
||||
instruction <code>n</code> plus the length of instruction
|
||||
<code>n</code>, taking into account possible operands.
|
||||
</td>
|
||||
|
||||
<td>
|
||||
4.8.1.5
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td>
|
||||
A5
|
||||
</td>
|
||||
|
||||
<td>
|
||||
The last instruction in the <code>insns</code> array must end at index
|
||||
<code>insns_size-1</code>.
|
||||
</td>
|
||||
|
||||
<td>
|
||||
4.8.1.6
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td>
|
||||
A6
|
||||
</td>
|
||||
|
||||
<td>
|
||||
All <code>goto</code> and <code>if-<kind></code> targets must
|
||||
be opcodes within in the same method.
|
||||
</td>
|
||||
|
||||
<td>
|
||||
4.8.1.7
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td>
|
||||
A7
|
||||
</td>
|
||||
|
||||
<td>
|
||||
All targets of a <code>packed-switch</code> instruction must be
|
||||
opcodes within in the same method. The size and the list of targets
|
||||
must be consistent.
|
||||
</td>
|
||||
|
||||
<td>
|
||||
4.8.1.8
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td>
|
||||
A8
|
||||
</td>
|
||||
|
||||
<td>
|
||||
All targets of a <code>sparse-switch</code> instruction must be
|
||||
opcodes within in the same method. The corresponding table must be
|
||||
consistent and sorted low-to-high.
|
||||
</td>
|
||||
|
||||
<td>
|
||||
4.8.1.9
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td>
|
||||
A9
|
||||
</td>
|
||||
|
||||
<td>
|
||||
The <code>B</code> operand of the <code>const-string</code> and
|
||||
<code>const-string/jumbo</code> instructions must be a valid index
|
||||
into the string constant pool.
|
||||
</td>
|
||||
|
||||
<td>
|
||||
4.8.1.10
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td>
|
||||
A10
|
||||
</td>
|
||||
|
||||
<td>
|
||||
The <code>C</code> operand of the <code>iget<kind></code> and
|
||||
<code>iput<kind></code> instructions must be a valid index into
|
||||
the field constant pool. The referenced entry must represent an
|
||||
instance field.
|
||||
</td>
|
||||
|
||||
<td>
|
||||
4.8.1.12
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td>
|
||||
A11
|
||||
</td>
|
||||
|
||||
<td>
|
||||
The <code>C</code> operand of the <code>sget<kind></code> and
|
||||
<code>sput<kind></code> instructions must be a valid index into
|
||||
the field constant pool. The referenced entry must represent a static
|
||||
field.
|
||||
</td>
|
||||
|
||||
<td>
|
||||
4.8.1.12
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td>
|
||||
A12
|
||||
</td>
|
||||
|
||||
<td>
|
||||
The <code>C</code> operand of the <code>invoke-virtual</code>,
|
||||
<code>invoke-super</code>, <code<invoke-direct</code> and
|
||||
<code>invoke-static</code> instructions must be a valid index into the
|
||||
method constant pool. In all cases, the referenced
|
||||
<code>method_id</code> must belong to a class (not an interface).
|
||||
</td>
|
||||
|
||||
<td>
|
||||
4.8.1.13
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td>
|
||||
A13
|
||||
</td>
|
||||
|
||||
<td>
|
||||
The <code>B</code> operand of the <code>invoke-virtual/range</code>,
|
||||
<code>invoke-super/range</code>, <code>invoke-direct/range</code>, and
|
||||
<code>invoke-static/range</code> instructions must be a valid index
|
||||
into the method constant pool. In all cases, the referenced
|
||||
<code>method_id</code> must belong to a class (not an interface).
|
||||
</td>
|
||||
|
||||
<td>
|
||||
4.8.1.13
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td>
|
||||
A14
|
||||
</td>
|
||||
|
||||
<td>
|
||||
A method the name of which starts with a '<' must only be invoked
|
||||
implicitly by the VM, not by code originating from a Dex file. The
|
||||
only exception is the instance initializer, which may be invoked by
|
||||
<code>invoke-direct</code>.
|
||||
</td>
|
||||
|
||||
<td>
|
||||
4.8.1.14
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td>
|
||||
A15
|
||||
</td>
|
||||
|
||||
<td>
|
||||
The <code>C</code> operand of the <code>invoke-interface</code>
|
||||
instruction must be a valid index into the method constant pool. The
|
||||
referenced <code>method_id</code> must belong to an interface (not a
|
||||
class).
|
||||
</td>
|
||||
|
||||
<td>
|
||||
4.8.1.15
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td>
|
||||
A16
|
||||
</td>
|
||||
|
||||
<td>
|
||||
The <code>B</code> operand of the <code>invoke-interface/range</code>
|
||||
instruction must be a valid index into the method constant pool.
|
||||
The referenced <code>method_id</code> must belong to an interface (not
|
||||
a class).
|
||||
</td>
|
||||
|
||||
<td>
|
||||
4.8.1.15
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td>
|
||||
A17
|
||||
</td>
|
||||
|
||||
<td>
|
||||
The <code>B</code> operand of the <code>const-class</code>,
|
||||
<code>check-cast</code>, <code>new-instance</code>, and
|
||||
<code>filled-new-array/range</code> instructions must be a valid index
|
||||
into the type constant pool.
|
||||
</td>
|
||||
|
||||
<td>
|
||||
4.8.1.16
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td>
|
||||
A18
|
||||
</td>
|
||||
|
||||
<td>
|
||||
The <code>C</code> operand of the <code>instance-of</code>,
|
||||
<code>new-array</code>, and <code>filled-new-array</code>
|
||||
instructions must be a valid index into the type constant pool.
|
||||
</td>
|
||||
|
||||
<td>
|
||||
4.8.1.16
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td>
|
||||
A19
|
||||
</td>
|
||||
|
||||
<td>
|
||||
The dimensions of an array created by a <code>new-array</code>
|
||||
instruction must be less than <code>256</code>.
|
||||
</td>
|
||||
|
||||
<td>
|
||||
4.8.1.17
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td>
|
||||
A20
|
||||
</td>
|
||||
|
||||
<td>
|
||||
The <code>new</code> instruction must not refer to array classes,
|
||||
interfaces, or abstract classes.
|
||||
</td>
|
||||
|
||||
<td>
|
||||
4.8.1.18
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td>
|
||||
A21
|
||||
</td>
|
||||
|
||||
<td>
|
||||
The type referred to by a <code>new-array</code> instruction must be
|
||||
a valid, non-reference type.
|
||||
</td>
|
||||
|
||||
<td>
|
||||
4.8.1.20
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td>
|
||||
A22
|
||||
</td>
|
||||
|
||||
<td>
|
||||
All registers referred to by an instruction in a single-width
|
||||
(non-pair) fashion must be valid for the current method. That is,
|
||||
their indices must be non-negative and smaller than
|
||||
<code>registers_size</code>.
|
||||
</td>
|
||||
|
||||
<td>
|
||||
4.8.1.21
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td>
|
||||
A23
|
||||
</td>
|
||||
|
||||
<td>
|
||||
All registers referred to by an instruction in a double-width (pair)
|
||||
fashion must be valid for the current method. That is, their indices
|
||||
must be non-negative and smaller than <code>registers_size-1</code>.
|
||||
</td>
|
||||
|
||||
<td>
|
||||
4.8.1.23
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
<h2>
|
||||
Structural constraints
|
||||
</h2>
|
||||
|
||||
<p>
|
||||
Structural constraints are constraints on relationships between several
|
||||
elements of the bytecode. They usually can't be checked without employing
|
||||
control or data-flow analysis techniques.
|
||||
</p>
|
||||
|
||||
<table>
|
||||
<tr>
|
||||
<th>
|
||||
Identifier
|
||||
</th>
|
||||
|
||||
<th>
|
||||
Description
|
||||
</th>
|
||||
|
||||
<th>
|
||||
Spec equivalent
|
||||
</th>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td>
|
||||
B1
|
||||
</td>
|
||||
|
||||
<td>
|
||||
The number and types of arguments (registers and immediate values)
|
||||
must always match the instruction.
|
||||
</td>
|
||||
|
||||
<td>
|
||||
4.8.2.1
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td>
|
||||
B2
|
||||
</td>
|
||||
|
||||
<td>
|
||||
Register pairs must never be broken up.
|
||||
</td>
|
||||
|
||||
<td>
|
||||
4.8.2.3
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td>
|
||||
B3
|
||||
</td>
|
||||
|
||||
<td>
|
||||
A register (or pair) has to be assigned first before it can be
|
||||
read.
|
||||
</td>
|
||||
|
||||
<td>
|
||||
4.8.2.4
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td>
|
||||
B4
|
||||
</td>
|
||||
|
||||
<td>
|
||||
An <code>invoke-direct</code> instruction must only invoke an instance
|
||||
initializer or a method in the current class or one of its
|
||||
superclasses.
|
||||
</td>
|
||||
|
||||
<td>
|
||||
4.8.2.7
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td>
|
||||
B5
|
||||
</td>
|
||||
|
||||
<td>
|
||||
An instance initializer must only be invoked on an uninitialized
|
||||
instance.
|
||||
</td>
|
||||
|
||||
<td>
|
||||
4.8.2.8
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td>
|
||||
B6
|
||||
</td>
|
||||
|
||||
<td>
|
||||
Instance methods may only be invoked on and instance fields may only
|
||||
be accessed on already initialized instances.
|
||||
</td>
|
||||
|
||||
<td>
|
||||
4.8.2.9
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td>
|
||||
B7
|
||||
</td>
|
||||
|
||||
<td>
|
||||
A register which holds the result of a <code>new-instance</code>
|
||||
instruction must not be used if the same
|
||||
<code>new-instance</code> instruction is again executed before
|
||||
the instance is initialized.
|
||||
</td>
|
||||
|
||||
<td>
|
||||
4.8.2.10
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td>
|
||||
B8
|
||||
</td>
|
||||
|
||||
<td>
|
||||
An instance initializer must call another instance initializer (same
|
||||
class or superclass) before any instance members can be accessed.
|
||||
Exceptions are non-inherited instance fields, which can be assigned
|
||||
before calling another initializer, and the <code>Object</code> class
|
||||
in general.
|
||||
</td>
|
||||
|
||||
<td>
|
||||
4.8.2.11
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td>
|
||||
B9
|
||||
</td>
|
||||
|
||||
<td>
|
||||
All actual method arguments must be assignment-compatible with their
|
||||
respective formal arguments.
|
||||
</td>
|
||||
|
||||
<td>
|
||||
4.8.2.12
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td>
|
||||
B10
|
||||
</td>
|
||||
|
||||
<td>
|
||||
For each instance method invocation, the actual instance must be
|
||||
assignment-compatible with the class or interface specified in the
|
||||
instruction.
|
||||
</td>
|
||||
|
||||
<td>
|
||||
4.8.2.13
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td>
|
||||
B11
|
||||
</td>
|
||||
|
||||
<td>
|
||||
A <code>return<kind></code> instruction must match its
|
||||
method's return type.
|
||||
</td>
|
||||
|
||||
<td>
|
||||
4.8.2.14
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td>
|
||||
B12
|
||||
</td>
|
||||
|
||||
<td>
|
||||
When accessing protected members of a superclass, the actual type of
|
||||
the instance being accessed must be either the current class or one
|
||||
of its subclasses.
|
||||
</td>
|
||||
|
||||
<td>
|
||||
4.8.2.15
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td>
|
||||
B13
|
||||
</td>
|
||||
|
||||
<td>
|
||||
The type of a value stored into a static field must be
|
||||
assignment-compatible with or convertible to the field's type.
|
||||
</td>
|
||||
|
||||
<td>
|
||||
4.8.2.16
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td>
|
||||
B14
|
||||
</td>
|
||||
|
||||
<td>
|
||||
The type of a value stored into a field must be assignment-compatible
|
||||
with or convertible to the field's type.
|
||||
</td>
|
||||
|
||||
<td>
|
||||
4.8.2.17
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td>
|
||||
B15
|
||||
</td>
|
||||
|
||||
<td>
|
||||
The type of every value stored into an array must be
|
||||
assignment-compatible with the array's component type.
|
||||
</td>
|
||||
|
||||
<td>
|
||||
4.8.2.18
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td>
|
||||
B16
|
||||
</td>
|
||||
|
||||
<td>
|
||||
The <code>A</code> operand of a <code>throw</code> instruction must
|
||||
be assignment-compatible with <code>java.lang.Throwable</code>.
|
||||
</td>
|
||||
|
||||
<td>
|
||||
4.8.2.19
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td>
|
||||
B17
|
||||
</td>
|
||||
|
||||
<td>
|
||||
The last reachable instruction of a method must either be a backwards
|
||||
<code>goto</code> or branch, a <code>return</code>, or a
|
||||
<code>throw</code> instruction. It must not be possible to leave the
|
||||
<code>insns</code> array at the bottom.
|
||||
</td>
|
||||
|
||||
<td>
|
||||
4.8.2.20
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td>
|
||||
B18
|
||||
</td>
|
||||
|
||||
<td>
|
||||
The unassigned half of a former register pair may not be read (is
|
||||
considered invalid) until it has been re-assigned by some other
|
||||
instruction.
|
||||
</td>
|
||||
|
||||
<td>
|
||||
4.8.2.3, 4.8.2.4
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td>
|
||||
B19
|
||||
</td>
|
||||
|
||||
<td>
|
||||
A <code>move-result<kind></code> instruction must be immediately
|
||||
preceded (in the <code>insns</code> array) by an
|
||||
<code>invoke-<kind></code> instruction. The only exception is
|
||||
the <code>move-result-object</code> instruction, which may also be
|
||||
preceded by a <code>filled-new-array</code> instruction.
|
||||
</td>
|
||||
|
||||
<td>
|
||||
-
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td>
|
||||
B20
|
||||
</td>
|
||||
|
||||
<td>
|
||||
A <code>move-result<kind></code> instruction must be immediately
|
||||
preceded (in actual control flow) by a matching
|
||||
<code>return-<kind></code> instruction (it must not be jumped
|
||||
to). The only exception is the <code>move-result-object</code>
|
||||
instruction, which may also be preceded by a
|
||||
<code>filled-new-array</code> instruction.
|
||||
</td>
|
||||
|
||||
<td>
|
||||
-
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td>
|
||||
B21
|
||||
</td>
|
||||
|
||||
<td>
|
||||
A <code>move-exception</code> instruction must only appear as the
|
||||
first instruction in an exception handler.
|
||||
</td>
|
||||
|
||||
<td>
|
||||
-
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td>
|
||||
B22
|
||||
</td>
|
||||
|
||||
<td>
|
||||
The <code>packed-switch-data</code>, <code>sparse-switch-data</code>,
|
||||
and <code>fill-array-data</code> pseudo-instructions must not be
|
||||
reachable by control flow.
|
||||
</td>
|
||||
|
||||
<td>
|
||||
-
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
</body>
|
||||
</html>
|
Loading…
Add table
Add a link
Reference in a new issue