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<kind></code> and 288 <code>put<kind></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> 1081