OSDN Git Service

dalvik: return positive hash code in Dalvik with Houdini
[android-x86/dalvik.git] / docs / java-constraints.html
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
2
3 <html>
4   <head>
5     <title>Java bytecode constraints</title>
6     <link rel=stylesheet href="java-constraints.css">
7   </head>
8
9   <body>
10     <h1>
11       Bytecode constraints
12     </h1>
13
14     <p>
15       From the point of view of a piece of code written in the Java
16       programming language or targeted in the same way to <code>.class</code>
17       files, the Dalvik VM aims to behave in a way
18       that is fully consistent with the language's definition.
19       That is, the code running in Dalvik will behave the same as it
20       would have running in any other virtual machine. This includes
21       verification failures.
22       The Dx/Dalvik system will check roughly the same
23       constraints that any other VM would, except as noted in the file
24       <a href="verifier.html">verifier.html</a>. The following table briefly
25       lists all Dx/Dalvik verification constraints together their analogs
26       from the book <i>The Java<super>TM</super> Language Specification</i>,
27       second edition. In the numbering scheme, the first three
28       elements refer to the specification chapter, the fourth one to the
29       bullet inside that chapter. The failure mode specifies whether the
30       constraint will fail during the Dx conversion or during verification in
31       the VM itself.
32     </p>
33
34     <h2>
35       Static constraints
36     </h2>
37
38     <p>
39     Static constraints are constraints on individual elements of the bytecode.
40     They usually can be checked without employing control or data-flow analysis
41     techniques.
42     </p>
43
44     <table>
45       <tr>
46         <th>
47           Identifier
48         </th>
49
50         <th>
51           Description
52         </th>
53
54         <th>
55           Spec equivalent
56         </th>
57
58         <th>
59           Failure mode
60         </th>
61       </tr>
62
63       <tr>
64         <td>
65           A1
66         </td>
67
68         <td>
69           The <code>code</code> array must not be empty.
70         </td>
71
72         <td>
73           4.8.1.1
74         </td>
75
76         <td>
77           DX
78         </td>
79       </tr>
80
81       <tr>
82         <td>
83           A2
84         </td>
85
86         <td>
87           The <code>code</code> array must not be larger than 65535 bytes.
88         </td>
89
90         <td>
91           4.8.1.2
92         </td>
93
94         <td>
95           DX
96         </td>
97       </tr>
98
99       <tr>
100         <td>
101           A3
102         </td>
103
104         <td>
105           The first opcode in <code>code</code> array must have index
106           <code>0</code>.
107         </td>
108
109         <td>
110           4.8.1.3
111         </td>
112
113         <td>
114           DX
115         </td>
116       </tr>
117
118       <tr>
119         <td>
120           A4
121         </td>
122
123         <td>
124           The <code>code</code> array must only contain valid opcodes.
125         </td>
126
127         <td>
128           4.8.1.4
129         </td>
130
131         <td>
132           DX
133         </td>
134       </tr>
135
136       <tr>
137         <td>
138           A5
139         </td>
140
141         <td>
142           The index of instruction <code>n+1</code> must equal the index of
143           instruction <code>n</code> plus the length of instruction
144           <code>n</code>, taking into account a possible <code>wide</code>
145           instruction. Opcodes modified by a <code>wide</code> instruction must
146           not be directly reachable.
147         </td>
148
149         <td>
150           4.8.1.5
151         </td>
152
153         <td>
154           DX
155         </td>
156       </tr>
157
158       <tr>
159         <td>
160           A6
161         </td>
162
163         <td>
164           The last instruction in <code>code</code> array must end at index
165           <code>code_length-1</code>.
166         </td>
167
168         <td>
169           4.8.1.6
170         </td>
171
172         <td>
173           DX
174         </td>
175       </tr>
176
177       <tr>
178         <td>
179           A7
180         </td>
181
182         <td>
183           All jump and branch targets must be opcodes within the same method.
184           Opcodes modified by a <code>wide</code> instruction must not be
185           directly reachable via a jump or branch instruction.
186         </td>
187
188         <td>
189           4.8.1.7
190         </td>
191
192         <td>
193           DX
194         </td>
195       </tr>
196
197       <tr>
198         <td>
199           A8
200         </td>
201
202         <td>
203           All targets of a <code>tableswitch</code> instruction must be opcodes
204           within the same method. Upper and lower bounds must be consistent.
205           Opcodes modified by a <code>wide</code> instruction must not be
206           directly reachable via a <code>tableswitch</code> instruction.
207         </td>
208
209         <td>
210           4.8.1.8
211         </td>
212
213         <td>
214           DX
215         </td>
216       </tr>
217
218       <tr>
219         <td>
220           A9
221         </td>
222
223         <td>
224           All targets of a <code>lookupswitch</code> instruction must be opcodes
225           within the same method. Its table must be consistent and sorted
226           low-to-high. Opcodes modified by a <code>wide</code> instruction must
227           not be directly reachable via a <code>lookupswitch</code> instruction.
228         </td>
229
230         <td>
231           4.8.1.9
232         </td>
233
234         <td>
235           DX
236         </td>
237       </tr>
238
239       <tr>
240         <td>
241           A10
242         </td>
243
244         <td>
245           The operands of <code>ldc</code> and <code>ldc_w</code> instructions
246           must be valid indices into the constant pool. The respective entries
247           must be of type <code>CONSTANT_Integer</code>,
248           <code>CONSTANT_Float</code>, or <code>CONSTANT_String</code>.
249         </td>
250
251         <td>
252           4.8.1.10
253         </td>
254
255         <td>
256           DX
257         </td>
258       </tr>
259
260       <tr>
261         <td>
262           A11
263         </td>
264
265         <td>
266           The operands of <code>ldc2_w</code> instructions must be valid indices
267           into the constant pool. The respective entries must be of type
268           <code>CONSTANT_Long</code> or <code>CONSTANT_Double</code>. The
269           subsequent constant pool entry must be valid and remain unused.
270         </td>
271
272         <td>
273           4.8.1.11
274         </td>
275
276         <td>
277           DX
278         </td>
279       </tr>
280
281       <tr>
282         <td>
283           A12
284         </td>
285
286         <td>
287           The Operands of <code>get&lt;kind&gt;</code> and
288           <code>put&lt;kind&gt;</code> instructions must be valid indices into
289           constant pool. The respective entries must be of type
290           <code>CONSTANT_Fieldref</code>.
291         </td>
292
293         <td>
294           4.8.1.12
295         </td>
296
297         <td>
298           DX
299         </td>
300       </tr>
301
302       <tr>
303         <td>
304           A13
305         </td>
306
307         <td>
308           The first two operands of <code>invokevirtual</code>,
309           <code>invokespecial</code>, and <code>invokestatic</code> must form a
310           valid 16-bit index into the constant pool. The respective entries must
311           be of type <code>CONSTANT_Methodref</code>.
312         </td>
313
314         <td>
315           4.8.1.13
316         </td>
317
318         <td>
319           DX
320         </td>
321       </tr>
322
323       <tr>
324         <td>
325           A14
326         </td>
327
328         <td>
329           Methods whose names start with '<' must only be invoked implicitly by
330           the VM, not by class file code. The only exception is the instance
331           initializer, which may be invoked by <code>invokespecial</code>.
332         </td>
333
334         <td>
335           4.8.1.14
336         </td>
337
338         <td>
339           DX
340         </td>
341       </tr>
342
343       <tr>
344         <td>
345           A15
346         </td>
347
348         <td>
349           The first two operands of <code>invokeinterface</code> must form a
350           valid 16-bit index into the constant pool. The entry must be of type
351           <code>CONSTANT_Interface_Methodref</code>. The third operand must
352           specify number of local variables and the fourth operand must always
353           be zero.
354         </td>
355
356         <td>
357           4.8.1.15
358         </td>
359
360         <td>
361           DX
362         </td>
363       </tr>
364
365       <tr>
366         <td>
367           A16
368         </td>
369
370         <td>
371           The operands of <code>instanceof</code>, <code>checkcast</code>,
372           <code>new</code>, and <code>anewarray</code> instructions must
373           be a valid index into the constant pool. The first two operands of
374           <code>multianewarray</code> instruction must form a valid 16-bit index
375           into the constant pool. All respective entries must be of type
376           <code>CONSTANT_Class</code>.
377         </td>
378
379         <td>
380           4.8.1.16
381         </td>
382
383         <td>
384           DX
385         </td>
386       </tr>
387
388      <tr>
389         <td>
390           A17
391         </td>
392
393         <td>
394           The dimensions of an array created by <code>anewarray</code>
395           instructions must be less than <code>256</code>.
396         </td>
397
398         <td>
399           4.8.1.17
400         </td>
401
402         <td>
403           DX
404         </td>
405       </tr>
406
407       <tr>
408         <td>
409           A18
410         </td>
411
412         <td>
413           The <code>new</code> instruction must not reference array classes,
414           interfaces, or abstract classes.
415         </td>
416
417         <td>
418           4.8.1.18
419         </td>
420
421         <td>
422           DX
423         </td>
424       </tr>
425
426       <tr>
427         <td>
428           A19
429         </td>
430
431         <td>
432           The type referenced by a <code>multinewarray</code> instruction must
433           have at least as many dimensions as specified in the instruction. The
434           dimensions operand must not be <code>0</code>
435         </td>
436
437         <td>
438           4.8.1.19
439         </td>
440
441         <td>
442           DX
443         </td>
444       </tr>
445
446       <tr>
447         <td>
448           A20
449         </td>
450
451         <td>
452           The type referenced by a <code>newarray</code> instruction must be a
453           valid, non-reference type.
454         </td>
455
456         <td>
457           4.8.1.20
458         </td>
459
460         <td>
461           DX
462         </td>
463       </tr>
464
465       <tr>
466         <td>
467           A21
468         </td>
469
470         <td>
471           The index operand of instructions explicitly referencing single-width
472           local variables must be non-negative and smaller than
473           <code>max_locals</code>.
474         </td>
475
476         <td>
477           4.8.1.21
478         </td>
479
480         <td>
481           DX
482         </td>
483       </tr>
484
485       <tr>
486         <td>
487           A22
488         </td>
489
490         <td>
491           The index operand of instructions implicitly referencing single-width
492           local variables must be non-negative and smaller than
493           <code>max_locals</code>.
494         </td>
495
496         <td>
497           4.8.1.22
498         </td>
499
500         <td>
501           DX
502         </td>
503       </tr>
504
505       <tr>
506         <td>
507           A23
508         </td>
509
510         <td>
511           The index operand of instructions explicitly referencing double-width
512           local variables must be non-negative and smaller than
513           <code>max_locals-1</code>.
514         </td>
515
516         <td>
517           4.8.1.23
518         </td>
519
520         <td>
521           DX
522         </td>
523       </tr>
524
525       <tr>
526         <td>
527           A24
528         </td>
529
530         <td>
531           The index operand of instructions implicitly referencing double-width
532           local variables must be non-negative and smaller than
533           <code>max_locals-1</code>.
534         </td>
535
536         <td>
537           4.8.1.24
538         </td>
539
540         <td>
541           DX
542         </td>
543       </tr>
544
545       <tr>
546         <td>
547           A25
548         </td>
549
550         <td>
551           The index operand of <code>wide</code> instructions explicitly
552           referencing single-width local variables must be non-negative and
553           smaller than <code>max_locals</code>.
554         </td>
555
556         <td>
557           4.8.1.25
558         </td>
559
560         <td>
561           DX
562         </td>
563       </tr>
564
565       <tr>
566         <td>
567           A26
568         </td>
569
570         <td>
571           The index operand of <code>wide</code> instructions explicitly
572           referencing double-width local variables must be non-negative and
573           smaller than <code>max_locals-1</code>.
574         </td>
575
576         <td>
577           4.8.1.25
578         </td>
579
580         <td>
581           DX
582         </td>
583       </tr>
584     </table>
585
586     <h2>
587       Structural constraints
588     </h2>
589
590     <p>
591     Structural constraints are constraints on relationships between several
592     elements of the bytecode. They usually can't be checked without employing
593     control or data-flow analysis techniques.
594     </p>
595
596     <table>
597       <tr>
598         <th>
599           Identifier
600         </th>
601
602         <th>
603           Description
604         </th>
605
606         <th>
607           Spec equivalent
608         </th>
609
610         <th>
611           Failure mode
612         </th>
613       </tr>
614
615       <tr>
616         <td>
617           B1
618         </td>
619
620         <td>
621           The number and types of arguments (operands and local variables) must
622           always match the instruction.
623         </td>
624
625         <td>
626           4.8.2.1
627         </td>
628
629         <td>
630           DX
631         </td>
632       </tr>
633
634       <tr>
635         <td>
636           B2
637         </td>
638
639         <td>
640           The operand stack must have the same depth for all executions paths
641           leading to an instruction.
642         </td>
643
644         <td>
645           4.8.2.2
646         </td>
647
648         <td>
649           DX
650         </td>
651       </tr>
652
653       <tr>
654         <td>
655           B3
656         </td>
657
658         <td>
659           Local variable pairs must never be broken up.
660         </td>
661
662         <td>
663           4.8.2.3
664         </td>
665
666         <td>
667           DX
668         </td>
669       </tr>
670
671       <tr>
672         <td>
673           B4
674         </td>
675
676         <td>
677           A local variable (or pair) has to be assigned first before it can be
678           read.
679         </td>
680
681         <td>
682           4.8.2.4
683         </td>
684
685         <td>
686           DX
687         </td>
688       </tr>
689
690       <tr>
691         <td>
692           B5
693         </td>
694
695         <td>
696           The operand stack must never grow beyond <code>max_stack</code>.
697         </td>
698
699         <td>
700           4.8.2.5
701         </td>
702
703         <td>
704           DX
705         </td>
706       </tr>
707
708       <tr>
709         <td>
710           B6
711         </td>
712
713         <td>
714           The operand stack must never underflow.
715         </td>
716
717         <td>
718           4.8.2.6
719         </td>
720
721         <td>
722           DX
723         </td>
724       </tr>
725
726       <tr>
727         <td>
728           B7
729         </td>
730
731         <td>
732           An <code>invokespecial</code> instruction must only invoke an instance
733           initializer or a method in the current class or one of its
734           superclasses.
735         </td>
736
737         <td>
738           4.8.2.7
739         </td>
740
741         <td>
742           VM
743         </td>
744       </tr>
745
746       <tr>
747         <td>
748           B8
749         </td>
750
751         <td>
752           An instance initializer must only be invoked on an uninitialized
753           instance residing on the operand stack.
754         </td>
755
756         <td>
757           4.8.2.8
758         </td>
759
760         <td>
761           VM
762         </td>
763       </tr>
764
765       <tr>
766         <td>
767           B9
768         </td>
769
770         <td>
771           Instance methods may only be invoked on and instance fields may only
772           be accessed on already initialized instances.
773         </td>
774
775         <td>
776           4.8.2.9
777         </td>
778
779         <td>
780           VM
781         </td>
782       </tr>
783
784       <tr>
785         <td>
786           B10
787         </td>
788
789         <td>
790            The must be no backwards branches with uninitialized instances on the
791            operand stack or in local variables. There must be no code protected
792            by an exception handler that contains local variables with
793            uninitialized instances.
794         </td>
795
796         <td>
797           4.8.2.10
798         </td>
799
800         <td>
801           DX
802         </td>
803       </tr>
804
805       <tr>
806         <td>
807           B11
808         </td>
809
810         <td>
811            An instance initializer must call another instance initializer (same
812            class or superclass) before any instance members can be accessed.
813            Exceptions are non-inherited instance fields, which can be assigned
814            before calling another initializer, and the <code>Object</code> class
815            in general.
816         </td>
817
818         <td>
819           4.8.2.11
820         </td>
821
822         <td>
823           VM
824         </td>
825       </tr>
826
827       <tr>
828         <td>
829           B12
830         </td>
831
832         <td>
833            All actual method arguments must be assignment-compatible with formal
834            arguments.
835         </td>
836
837         <td>
838           4.8.2.12
839         </td>
840
841         <td>
842           VM
843         </td>
844       </tr>
845
846       <tr>
847         <td>
848           B13
849         </td>
850
851         <td>
852            For each instance method invocation, the actual instance must be
853            assignment-compatible with the class or interface specified in the
854            instruction.
855         </td>
856
857         <td>
858           4.8.2.13
859         </td>
860
861         <td>
862           VM
863         </td>
864       </tr>
865
866       <tr>
867         <td>
868           B14
869         </td>
870
871         <td>
872            A returns instruction must match its method's return type.
873         </td>
874
875         <td>
876           4.8.2.14
877         </td>
878
879         <td>
880           VM
881         </td>
882       </tr>
883
884       <tr>
885         <td>
886           B15
887         </td>
888
889         <td>
890            When accessing protected members of a superclass, the actual type of
891            the instance being accessed must be either the current class or one
892            of its subclasses.
893         </td>
894
895         <td>
896           4.8.2.15
897         </td>
898
899         <td>
900           VM
901         </td>
902       </tr>
903
904      <tr>
905         <td>
906           B16
907         </td>
908
909         <td>
910            The type of a value stored into a static field must be
911            assignment-compatible with or convertible to the field's type.
912         </td>
913
914         <td>
915           4.8.2.16
916         </td>
917
918         <td>
919           VM
920         </td>
921       </tr>
922
923       <tr>
924         <td>
925           B17
926         </td>
927
928         <td>
929            The type of a value stored into a field must be assignment-compatible
930            with or convertible to the field's type.
931         </td>
932
933         <td>
934           4.8.2.17
935         </td>
936
937         <td>
938           VM
939         </td>
940       </tr>
941
942       <tr>
943         <td>
944           B18
945         </td>
946
947         <td>
948            The type of every value stored into an array must be
949            assignment-compatible with the array's component type.
950         </td>
951
952         <td>
953           4.8.2.18
954         </td>
955
956         <td>
957           VM
958         </td>
959       </tr>
960
961       <tr>
962         <td>
963           B19
964         </td>
965
966         <td>
967            The operand of an <code>athrow</code> instruction must be
968            assignment-compatible with <code>java.lang.Throwable</code>.
969         </td>
970
971         <td>
972           4.8.2.19
973         </td>
974
975         <td>
976           VM
977         </td>
978       </tr>
979
980       <tr>
981         <td>
982           B20
983         </td>
984
985         <td>
986            The last reachable instruction of a method must either be a backwards
987            jump or branch, a return, or an <code>athrow</code> instruction. It
988            must not be possible to leave the <code>code</code> array at the
989            bottom.
990         </td>
991
992         <td>
993           4.8.2.20
994         </td>
995
996         <td>
997           VM
998         </td>
999       </tr>
1000
1001       <tr>
1002         <td>
1003           B21
1004         </td>
1005
1006         <td>
1007            Local variable values must not be used as return addresses.
1008         </td>
1009
1010         <td>
1011           4.8.2.21
1012         </td>
1013
1014         <td>
1015           VM
1016         </td>
1017       </tr>
1018
1019       <tr>
1020         <td>
1021           B22
1022         </td>
1023
1024         <td>
1025           There must be a single, uniquely determined return instruction per
1026           subroutine call.
1027         </td>
1028
1029         <td>
1030           4.8.2.22
1031         </td>
1032
1033         <td>
1034           VM
1035         </td>
1036       </tr>
1037
1038       <tr>
1039         <td>
1040           B23
1041         </td>
1042
1043         <td>
1044           Subroutine calls must not be directly or indirectly self-recursive.
1045         </td>
1046
1047         <td>
1048           4.8.2.23
1049         </td>
1050
1051         <td>
1052           DX
1053         </td>
1054       </tr>
1055
1056       <tr>
1057         <td>
1058           B24
1059         </td>
1060
1061         <td>
1062            <code>ReturnAddress</code> instances must not be reused. If a
1063            subroutine returns to a <code>ReturnAddress</code> further up the
1064            stack than where its original call instruction is located, then all
1065            <code>ReturnAddress</code> instances further down the stack must
1066            never be used.
1067         </td>
1068
1069         <td>
1070           4.8.2.24
1071         </td>
1072
1073         <td>
1074           DX
1075         </td>
1076       </tr>
1077
1078     </table>
1079   </body>
1080 </html>