diff options
author | The Android Open Source Project <initial-contribution@android.com> | 2009-03-03 18:28:14 -0800 |
---|---|---|
committer | The Android Open Source Project <initial-contribution@android.com> | 2009-03-03 18:28:14 -0800 |
commit | f72d5de56a522ac3be03873bdde26f23a5eeeb3c (patch) | |
tree | 4b825dc642cb6eb9a060e54bf8d69288fbee4904 /docs/dalvik-constraints.html | |
parent | 31e30105703263782efd450d356cd67ea01af3b7 (diff) | |
download | android_dalvik-f72d5de56a522ac3be03873bdde26f23a5eeeb3c.tar.gz android_dalvik-f72d5de56a522ac3be03873bdde26f23a5eeeb3c.tar.bz2 android_dalvik-f72d5de56a522ac3be03873bdde26f23a5eeeb3c.zip |
auto import from //depot/cupcake/@135843
Diffstat (limited to 'docs/dalvik-constraints.html')
-rw-r--r-- | docs/dalvik-constraints.html | 897 |
1 files changed, 0 insertions, 897 deletions
diff --git a/docs/dalvik-constraints.html b/docs/dalvik-constraints.html deleted file mode 100644 index 105225a7b..000000000 --- a/docs/dalvik-constraints.html +++ /dev/null @@ -1,897 +0,0 @@ -<!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>code> - instruction must not be used if the same - <code>new-instance</code>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> |