blob: 9d3c4349df69e9702f9b79b24314b12ddc6c513c [file] [log] [blame]
The Android Open Source Projectf6c38712009-03-03 19:28:47 -08001<!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>
Carl Shapirode750892010-06-08 16:37:12 -070033
The Android Open Source Projectf6c38712009-03-03 19:28:47 -080034 <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>
Carl Shapirode750892010-06-08 16:37:12 -070043
The Android Open Source Projectf6c38712009-03-03 19:28:47 -080044 <table>
45 <tr>
46 <th>
47 Identifier
48 </th>
Carl Shapirode750892010-06-08 16:37:12 -070049
The Android Open Source Projectf6c38712009-03-03 19:28:47 -080050 <th>
51 Description
52 </th>
Carl Shapirode750892010-06-08 16:37:12 -070053
The Android Open Source Projectf6c38712009-03-03 19:28:47 -080054 <th>
55 Spec equivalent
56 </th>
Carl Shapirode750892010-06-08 16:37:12 -070057
The Android Open Source Projectf6c38712009-03-03 19:28:47 -080058 <th>
59 Failure mode
60 </th>
61 </tr>
Carl Shapirode750892010-06-08 16:37:12 -070062
The Android Open Source Projectf6c38712009-03-03 19:28:47 -080063 <tr>
64 <td>
65 A1
66 </td>
Carl Shapirode750892010-06-08 16:37:12 -070067
The Android Open Source Projectf6c38712009-03-03 19:28:47 -080068 <td>
Carl Shapirode750892010-06-08 16:37:12 -070069 The <code>code</code> array must not be empty.
The Android Open Source Projectf6c38712009-03-03 19:28:47 -080070 </td>
Carl Shapirode750892010-06-08 16:37:12 -070071
The Android Open Source Projectf6c38712009-03-03 19:28:47 -080072 <td>
73 4.8.1.1
74 </td>
Carl Shapirode750892010-06-08 16:37:12 -070075
The Android Open Source Projectf6c38712009-03-03 19:28:47 -080076 <td>
77 DX
78 </td>
79 </tr>
Carl Shapirode750892010-06-08 16:37:12 -070080
The Android Open Source Projectf6c38712009-03-03 19:28:47 -080081 <tr>
82 <td>
83 A2
84 </td>
Carl Shapirode750892010-06-08 16:37:12 -070085
The Android Open Source Projectf6c38712009-03-03 19:28:47 -080086 <td>
Carl Shapirode750892010-06-08 16:37:12 -070087 The <code>code</code> array must not be larger than 65535 bytes.
The Android Open Source Projectf6c38712009-03-03 19:28:47 -080088 </td>
Carl Shapirode750892010-06-08 16:37:12 -070089
The Android Open Source Projectf6c38712009-03-03 19:28:47 -080090 <td>
91 4.8.1.2
92 </td>
Carl Shapirode750892010-06-08 16:37:12 -070093
The Android Open Source Projectf6c38712009-03-03 19:28:47 -080094 <td>
95 DX
96 </td>
97 </tr>
Carl Shapirode750892010-06-08 16:37:12 -070098
The Android Open Source Projectf6c38712009-03-03 19:28:47 -080099 <tr>
100 <td>
101 A3
102 </td>
Carl Shapirode750892010-06-08 16:37:12 -0700103
The Android Open Source Projectf6c38712009-03-03 19:28:47 -0800104 <td>
105 The first opcode in <code>code</code> array must have index
106 <code>0</code>.
107 </td>
Carl Shapirode750892010-06-08 16:37:12 -0700108
The Android Open Source Projectf6c38712009-03-03 19:28:47 -0800109 <td>
110 4.8.1.3
111 </td>
Carl Shapirode750892010-06-08 16:37:12 -0700112
The Android Open Source Projectf6c38712009-03-03 19:28:47 -0800113 <td>
114 DX
115 </td>
116 </tr>
Carl Shapirode750892010-06-08 16:37:12 -0700117
The Android Open Source Projectf6c38712009-03-03 19:28:47 -0800118 <tr>
119 <td>
120 A4
121 </td>
Carl Shapirode750892010-06-08 16:37:12 -0700122
The Android Open Source Projectf6c38712009-03-03 19:28:47 -0800123 <td>
124 The <code>code</code> array must only contain valid opcodes.
125 </td>
Carl Shapirode750892010-06-08 16:37:12 -0700126
The Android Open Source Projectf6c38712009-03-03 19:28:47 -0800127 <td>
128 4.8.1.4
129 </td>
Carl Shapirode750892010-06-08 16:37:12 -0700130
The Android Open Source Projectf6c38712009-03-03 19:28:47 -0800131 <td>
132 DX
133 </td>
134 </tr>
Carl Shapirode750892010-06-08 16:37:12 -0700135
The Android Open Source Projectf6c38712009-03-03 19:28:47 -0800136 <tr>
137 <td>
138 A5
139 </td>
Carl Shapirode750892010-06-08 16:37:12 -0700140
The Android Open Source Projectf6c38712009-03-03 19:28:47 -0800141 <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
Carl Shapirode750892010-06-08 16:37:12 -0700146 not be directly reachable.
The Android Open Source Projectf6c38712009-03-03 19:28:47 -0800147 </td>
Carl Shapirode750892010-06-08 16:37:12 -0700148
The Android Open Source Projectf6c38712009-03-03 19:28:47 -0800149 <td>
150 4.8.1.5
151 </td>
Carl Shapirode750892010-06-08 16:37:12 -0700152
The Android Open Source Projectf6c38712009-03-03 19:28:47 -0800153 <td>
154 DX
155 </td>
156 </tr>
Carl Shapirode750892010-06-08 16:37:12 -0700157
The Android Open Source Projectf6c38712009-03-03 19:28:47 -0800158 <tr>
159 <td>
160 A6
161 </td>
Carl Shapirode750892010-06-08 16:37:12 -0700162
The Android Open Source Projectf6c38712009-03-03 19:28:47 -0800163 <td>
164 The last instruction in <code>code</code> array must end at index
Carl Shapirode750892010-06-08 16:37:12 -0700165 <code>code_length-1</code>.
The Android Open Source Projectf6c38712009-03-03 19:28:47 -0800166 </td>
Carl Shapirode750892010-06-08 16:37:12 -0700167
The Android Open Source Projectf6c38712009-03-03 19:28:47 -0800168 <td>
169 4.8.1.6
170 </td>
Carl Shapirode750892010-06-08 16:37:12 -0700171
The Android Open Source Projectf6c38712009-03-03 19:28:47 -0800172 <td>
173 DX
174 </td>
175 </tr>
Carl Shapirode750892010-06-08 16:37:12 -0700176
The Android Open Source Projectf6c38712009-03-03 19:28:47 -0800177 <tr>
178 <td>
179 A7
180 </td>
Carl Shapirode750892010-06-08 16:37:12 -0700181
The Android Open Source Projectf6c38712009-03-03 19:28:47 -0800182 <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
Carl Shapirode750892010-06-08 16:37:12 -0700185 directly reachable via a jump or branch instruction.
The Android Open Source Projectf6c38712009-03-03 19:28:47 -0800186 </td>
Carl Shapirode750892010-06-08 16:37:12 -0700187
The Android Open Source Projectf6c38712009-03-03 19:28:47 -0800188 <td>
189 4.8.1.7
190 </td>
Carl Shapirode750892010-06-08 16:37:12 -0700191
The Android Open Source Projectf6c38712009-03-03 19:28:47 -0800192 <td>
193 DX
194 </td>
195 </tr>
Carl Shapirode750892010-06-08 16:37:12 -0700196
The Android Open Source Projectf6c38712009-03-03 19:28:47 -0800197 <tr>
198 <td>
199 A8
200 </td>
Carl Shapirode750892010-06-08 16:37:12 -0700201
The Android Open Source Projectf6c38712009-03-03 19:28:47 -0800202 <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
Carl Shapirode750892010-06-08 16:37:12 -0700206 directly reachable via a <code>tableswitch</code> instruction.
The Android Open Source Projectf6c38712009-03-03 19:28:47 -0800207 </td>
Carl Shapirode750892010-06-08 16:37:12 -0700208
The Android Open Source Projectf6c38712009-03-03 19:28:47 -0800209 <td>
210 4.8.1.8
211 </td>
Carl Shapirode750892010-06-08 16:37:12 -0700212
The Android Open Source Projectf6c38712009-03-03 19:28:47 -0800213 <td>
214 DX
215 </td>
216 </tr>
Carl Shapirode750892010-06-08 16:37:12 -0700217
The Android Open Source Projectf6c38712009-03-03 19:28:47 -0800218 <tr>
219 <td>
220 A9
221 </td>
Carl Shapirode750892010-06-08 16:37:12 -0700222
The Android Open Source Projectf6c38712009-03-03 19:28:47 -0800223 <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
Carl Shapirode750892010-06-08 16:37:12 -0700227 not be directly reachable via a <code>lookupswitch</code> instruction.
The Android Open Source Projectf6c38712009-03-03 19:28:47 -0800228 </td>
Carl Shapirode750892010-06-08 16:37:12 -0700229
The Android Open Source Projectf6c38712009-03-03 19:28:47 -0800230 <td>
231 4.8.1.9
232 </td>
Carl Shapirode750892010-06-08 16:37:12 -0700233
The Android Open Source Projectf6c38712009-03-03 19:28:47 -0800234 <td>
235 DX
236 </td>
237 </tr>
Carl Shapirode750892010-06-08 16:37:12 -0700238
The Android Open Source Projectf6c38712009-03-03 19:28:47 -0800239 <tr>
240 <td>
241 A10
242 </td>
Carl Shapirode750892010-06-08 16:37:12 -0700243
The Android Open Source Projectf6c38712009-03-03 19:28:47 -0800244 <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>,
Carl Shapirode750892010-06-08 16:37:12 -0700248 <code>CONSTANT_Float</code>, or <code>CONSTANT_String</code>.
The Android Open Source Projectf6c38712009-03-03 19:28:47 -0800249 </td>
Carl Shapirode750892010-06-08 16:37:12 -0700250
The Android Open Source Projectf6c38712009-03-03 19:28:47 -0800251 <td>
252 4.8.1.10
253 </td>
Carl Shapirode750892010-06-08 16:37:12 -0700254
The Android Open Source Projectf6c38712009-03-03 19:28:47 -0800255 <td>
256 DX
257 </td>
258 </tr>
Carl Shapirode750892010-06-08 16:37:12 -0700259
The Android Open Source Projectf6c38712009-03-03 19:28:47 -0800260 <tr>
261 <td>
262 A11
263 </td>
Carl Shapirode750892010-06-08 16:37:12 -0700264
The Android Open Source Projectf6c38712009-03-03 19:28:47 -0800265 <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>
Carl Shapirode750892010-06-08 16:37:12 -0700271
The Android Open Source Projectf6c38712009-03-03 19:28:47 -0800272 <td>
273 4.8.1.11
274 </td>
Carl Shapirode750892010-06-08 16:37:12 -0700275
The Android Open Source Projectf6c38712009-03-03 19:28:47 -0800276 <td>
277 DX
278 </td>
279 </tr>
Carl Shapirode750892010-06-08 16:37:12 -0700280
The Android Open Source Projectf6c38712009-03-03 19:28:47 -0800281 <tr>
282 <td>
283 A12
284 </td>
Carl Shapirode750892010-06-08 16:37:12 -0700285
The Android Open Source Projectf6c38712009-03-03 19:28:47 -0800286 <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>
Carl Shapirode750892010-06-08 16:37:12 -0700292
The Android Open Source Projectf6c38712009-03-03 19:28:47 -0800293 <td>
294 4.8.1.12
295 </td>
Carl Shapirode750892010-06-08 16:37:12 -0700296
The Android Open Source Projectf6c38712009-03-03 19:28:47 -0800297 <td>
298 DX
299 </td>
300 </tr>
Carl Shapirode750892010-06-08 16:37:12 -0700301
The Android Open Source Projectf6c38712009-03-03 19:28:47 -0800302 <tr>
303 <td>
304 A13
305 </td>
Carl Shapirode750892010-06-08 16:37:12 -0700306
The Android Open Source Projectf6c38712009-03-03 19:28:47 -0800307 <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>
Carl Shapirode750892010-06-08 16:37:12 -0700313
The Android Open Source Projectf6c38712009-03-03 19:28:47 -0800314 <td>
315 4.8.1.13
316 </td>
Carl Shapirode750892010-06-08 16:37:12 -0700317
The Android Open Source Projectf6c38712009-03-03 19:28:47 -0800318 <td>
319 DX
320 </td>
321 </tr>
Carl Shapirode750892010-06-08 16:37:12 -0700322
The Android Open Source Projectf6c38712009-03-03 19:28:47 -0800323 <tr>
324 <td>
325 A14
326 </td>
Carl Shapirode750892010-06-08 16:37:12 -0700327
The Android Open Source Projectf6c38712009-03-03 19:28:47 -0800328 <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>
Carl Shapirode750892010-06-08 16:37:12 -0700333
The Android Open Source Projectf6c38712009-03-03 19:28:47 -0800334 <td>
335 4.8.1.14
336 </td>
Carl Shapirode750892010-06-08 16:37:12 -0700337
The Android Open Source Projectf6c38712009-03-03 19:28:47 -0800338 <td>
339 DX
340 </td>
341 </tr>
Carl Shapirode750892010-06-08 16:37:12 -0700342
The Android Open Source Projectf6c38712009-03-03 19:28:47 -0800343 <tr>
344 <td>
345 A15
346 </td>
Carl Shapirode750892010-06-08 16:37:12 -0700347
The Android Open Source Projectf6c38712009-03-03 19:28:47 -0800348 <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>
Carl Shapirode750892010-06-08 16:37:12 -0700355
The Android Open Source Projectf6c38712009-03-03 19:28:47 -0800356 <td>
357 4.8.1.15
358 </td>
Carl Shapirode750892010-06-08 16:37:12 -0700359
The Android Open Source Projectf6c38712009-03-03 19:28:47 -0800360 <td>
361 DX
362 </td>
363 </tr>
Carl Shapirode750892010-06-08 16:37:12 -0700364
The Android Open Source Projectf6c38712009-03-03 19:28:47 -0800365 <tr>
366 <td>
367 A16
368 </td>
Carl Shapirode750892010-06-08 16:37:12 -0700369
The Android Open Source Projectf6c38712009-03-03 19:28:47 -0800370 <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>
Carl Shapirode750892010-06-08 16:37:12 -0700378
The Android Open Source Projectf6c38712009-03-03 19:28:47 -0800379 <td>
380 4.8.1.16
381 </td>
Carl Shapirode750892010-06-08 16:37:12 -0700382
The Android Open Source Projectf6c38712009-03-03 19:28:47 -0800383 <td>
384 DX
385 </td>
386 </tr>
Carl Shapirode750892010-06-08 16:37:12 -0700387
The Android Open Source Projectf6c38712009-03-03 19:28:47 -0800388 <tr>
389 <td>
390 A17
391 </td>
Carl Shapirode750892010-06-08 16:37:12 -0700392
The Android Open Source Projectf6c38712009-03-03 19:28:47 -0800393 <td>
394 The dimensions of an array created by <code>anewarray</code>
395 instructions must be less than <code>256</code>.
396 </td>
Carl Shapirode750892010-06-08 16:37:12 -0700397
The Android Open Source Projectf6c38712009-03-03 19:28:47 -0800398 <td>
399 4.8.1.17
400 </td>
Carl Shapirode750892010-06-08 16:37:12 -0700401
The Android Open Source Projectf6c38712009-03-03 19:28:47 -0800402 <td>
403 DX
404 </td>
405 </tr>
Carl Shapirode750892010-06-08 16:37:12 -0700406
The Android Open Source Projectf6c38712009-03-03 19:28:47 -0800407 <tr>
408 <td>
409 A18
410 </td>
Carl Shapirode750892010-06-08 16:37:12 -0700411
The Android Open Source Projectf6c38712009-03-03 19:28:47 -0800412 <td>
413 The <code>new</code> instruction must not reference array classes,
414 interfaces, or abstract classes.
415 </td>
Carl Shapirode750892010-06-08 16:37:12 -0700416
The Android Open Source Projectf6c38712009-03-03 19:28:47 -0800417 <td>
418 4.8.1.18
419 </td>
Carl Shapirode750892010-06-08 16:37:12 -0700420
The Android Open Source Projectf6c38712009-03-03 19:28:47 -0800421 <td>
422 DX
423 </td>
424 </tr>
Carl Shapirode750892010-06-08 16:37:12 -0700425
The Android Open Source Projectf6c38712009-03-03 19:28:47 -0800426 <tr>
427 <td>
428 A19
429 </td>
Carl Shapirode750892010-06-08 16:37:12 -0700430
The Android Open Source Projectf6c38712009-03-03 19:28:47 -0800431 <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
Carl Shapirode750892010-06-08 16:37:12 -0700434 dimensions operand must not be <code>0</code>
The Android Open Source Projectf6c38712009-03-03 19:28:47 -0800435 </td>
Carl Shapirode750892010-06-08 16:37:12 -0700436
The Android Open Source Projectf6c38712009-03-03 19:28:47 -0800437 <td>
438 4.8.1.19
439 </td>
Carl Shapirode750892010-06-08 16:37:12 -0700440
The Android Open Source Projectf6c38712009-03-03 19:28:47 -0800441 <td>
442 DX
443 </td>
444 </tr>
Carl Shapirode750892010-06-08 16:37:12 -0700445
The Android Open Source Projectf6c38712009-03-03 19:28:47 -0800446 <tr>
447 <td>
448 A20
449 </td>
Carl Shapirode750892010-06-08 16:37:12 -0700450
The Android Open Source Projectf6c38712009-03-03 19:28:47 -0800451 <td>
452 The type referenced by a <code>newarray</code> instruction must be a
453 valid, non-reference type.
454 </td>
Carl Shapirode750892010-06-08 16:37:12 -0700455
The Android Open Source Projectf6c38712009-03-03 19:28:47 -0800456 <td>
457 4.8.1.20
458 </td>
Carl Shapirode750892010-06-08 16:37:12 -0700459
The Android Open Source Projectf6c38712009-03-03 19:28:47 -0800460 <td>
461 DX
462 </td>
463 </tr>
Carl Shapirode750892010-06-08 16:37:12 -0700464
The Android Open Source Projectf6c38712009-03-03 19:28:47 -0800465 <tr>
466 <td>
467 A21
468 </td>
Carl Shapirode750892010-06-08 16:37:12 -0700469
The Android Open Source Projectf6c38712009-03-03 19:28:47 -0800470 <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>
Carl Shapirode750892010-06-08 16:37:12 -0700475
The Android Open Source Projectf6c38712009-03-03 19:28:47 -0800476 <td>
477 4.8.1.21
478 </td>
Carl Shapirode750892010-06-08 16:37:12 -0700479
The Android Open Source Projectf6c38712009-03-03 19:28:47 -0800480 <td>
481 DX
482 </td>
483 </tr>
Carl Shapirode750892010-06-08 16:37:12 -0700484
The Android Open Source Projectf6c38712009-03-03 19:28:47 -0800485 <tr>
486 <td>
487 A22
488 </td>
Carl Shapirode750892010-06-08 16:37:12 -0700489
The Android Open Source Projectf6c38712009-03-03 19:28:47 -0800490 <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>
Carl Shapirode750892010-06-08 16:37:12 -0700495
The Android Open Source Projectf6c38712009-03-03 19:28:47 -0800496 <td>
497 4.8.1.22
498 </td>
Carl Shapirode750892010-06-08 16:37:12 -0700499
The Android Open Source Projectf6c38712009-03-03 19:28:47 -0800500 <td>
501 DX
502 </td>
503 </tr>
Carl Shapirode750892010-06-08 16:37:12 -0700504
The Android Open Source Projectf6c38712009-03-03 19:28:47 -0800505 <tr>
506 <td>
507 A23
508 </td>
Carl Shapirode750892010-06-08 16:37:12 -0700509
The Android Open Source Projectf6c38712009-03-03 19:28:47 -0800510 <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>
Carl Shapirode750892010-06-08 16:37:12 -0700515
The Android Open Source Projectf6c38712009-03-03 19:28:47 -0800516 <td>
517 4.8.1.23
518 </td>
Carl Shapirode750892010-06-08 16:37:12 -0700519
The Android Open Source Projectf6c38712009-03-03 19:28:47 -0800520 <td>
521 DX
522 </td>
523 </tr>
Carl Shapirode750892010-06-08 16:37:12 -0700524
The Android Open Source Projectf6c38712009-03-03 19:28:47 -0800525 <tr>
526 <td>
527 A24
528 </td>
Carl Shapirode750892010-06-08 16:37:12 -0700529
The Android Open Source Projectf6c38712009-03-03 19:28:47 -0800530 <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>
Carl Shapirode750892010-06-08 16:37:12 -0700535
The Android Open Source Projectf6c38712009-03-03 19:28:47 -0800536 <td>
537 4.8.1.24
538 </td>
Carl Shapirode750892010-06-08 16:37:12 -0700539
The Android Open Source Projectf6c38712009-03-03 19:28:47 -0800540 <td>
541 DX
542 </td>
543 </tr>
Carl Shapirode750892010-06-08 16:37:12 -0700544
The Android Open Source Projectf6c38712009-03-03 19:28:47 -0800545 <tr>
546 <td>
547 A25
548 </td>
Carl Shapirode750892010-06-08 16:37:12 -0700549
The Android Open Source Projectf6c38712009-03-03 19:28:47 -0800550 <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>
Carl Shapirode750892010-06-08 16:37:12 -0700555
The Android Open Source Projectf6c38712009-03-03 19:28:47 -0800556 <td>
557 4.8.1.25
558 </td>
Carl Shapirode750892010-06-08 16:37:12 -0700559
The Android Open Source Projectf6c38712009-03-03 19:28:47 -0800560 <td>
561 DX
562 </td>
563 </tr>
Carl Shapirode750892010-06-08 16:37:12 -0700564
The Android Open Source Projectf6c38712009-03-03 19:28:47 -0800565 <tr>
566 <td>
567 A26
568 </td>
Carl Shapirode750892010-06-08 16:37:12 -0700569
The Android Open Source Projectf6c38712009-03-03 19:28:47 -0800570 <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>
Carl Shapirode750892010-06-08 16:37:12 -0700575
The Android Open Source Projectf6c38712009-03-03 19:28:47 -0800576 <td>
577 4.8.1.25
578 </td>
Carl Shapirode750892010-06-08 16:37:12 -0700579
The Android Open Source Projectf6c38712009-03-03 19:28:47 -0800580 <td>
581 DX
582 </td>
583 </tr>
584 </table>
Carl Shapirode750892010-06-08 16:37:12 -0700585
The Android Open Source Projectf6c38712009-03-03 19:28:47 -0800586 <h2>
587 Structural constraints
588 </h2>
Carl Shapirode750892010-06-08 16:37:12 -0700589
The Android Open Source Projectf6c38712009-03-03 19:28:47 -0800590 <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>
Carl Shapirode750892010-06-08 16:37:12 -0700601
The Android Open Source Projectf6c38712009-03-03 19:28:47 -0800602 <th>
603 Description
604 </th>
Carl Shapirode750892010-06-08 16:37:12 -0700605
The Android Open Source Projectf6c38712009-03-03 19:28:47 -0800606 <th>
607 Spec equivalent
608 </th>
Carl Shapirode750892010-06-08 16:37:12 -0700609
The Android Open Source Projectf6c38712009-03-03 19:28:47 -0800610 <th>
611 Failure mode
612 </th>
613 </tr>
Carl Shapirode750892010-06-08 16:37:12 -0700614
The Android Open Source Projectf6c38712009-03-03 19:28:47 -0800615 <tr>
616 <td>
617 B1
618 </td>
Carl Shapirode750892010-06-08 16:37:12 -0700619
The Android Open Source Projectf6c38712009-03-03 19:28:47 -0800620 <td>
621 The number and types of arguments (operands and local variables) must
622 always match the instruction.
623 </td>
Carl Shapirode750892010-06-08 16:37:12 -0700624
The Android Open Source Projectf6c38712009-03-03 19:28:47 -0800625 <td>
626 4.8.2.1
627 </td>
Carl Shapirode750892010-06-08 16:37:12 -0700628
The Android Open Source Projectf6c38712009-03-03 19:28:47 -0800629 <td>
630 DX
631 </td>
632 </tr>
Carl Shapirode750892010-06-08 16:37:12 -0700633
The Android Open Source Projectf6c38712009-03-03 19:28:47 -0800634 <tr>
635 <td>
636 B2
637 </td>
Carl Shapirode750892010-06-08 16:37:12 -0700638
The Android Open Source Projectf6c38712009-03-03 19:28:47 -0800639 <td>
640 The operand stack must have the same depth for all executions paths
Carl Shapirode750892010-06-08 16:37:12 -0700641 leading to an instruction.
The Android Open Source Projectf6c38712009-03-03 19:28:47 -0800642 </td>
Carl Shapirode750892010-06-08 16:37:12 -0700643
The Android Open Source Projectf6c38712009-03-03 19:28:47 -0800644 <td>
645 4.8.2.2
646 </td>
Carl Shapirode750892010-06-08 16:37:12 -0700647
The Android Open Source Projectf6c38712009-03-03 19:28:47 -0800648 <td>
649 DX
650 </td>
651 </tr>
Carl Shapirode750892010-06-08 16:37:12 -0700652
The Android Open Source Projectf6c38712009-03-03 19:28:47 -0800653 <tr>
654 <td>
655 B3
656 </td>
Carl Shapirode750892010-06-08 16:37:12 -0700657
The Android Open Source Projectf6c38712009-03-03 19:28:47 -0800658 <td>
Carl Shapirode750892010-06-08 16:37:12 -0700659 Local variable pairs must never be broken up.
The Android Open Source Projectf6c38712009-03-03 19:28:47 -0800660 </td>
Carl Shapirode750892010-06-08 16:37:12 -0700661
The Android Open Source Projectf6c38712009-03-03 19:28:47 -0800662 <td>
663 4.8.2.3
664 </td>
Carl Shapirode750892010-06-08 16:37:12 -0700665
The Android Open Source Projectf6c38712009-03-03 19:28:47 -0800666 <td>
667 DX
668 </td>
669 </tr>
Carl Shapirode750892010-06-08 16:37:12 -0700670
The Android Open Source Projectf6c38712009-03-03 19:28:47 -0800671 <tr>
672 <td>
673 B4
674 </td>
Carl Shapirode750892010-06-08 16:37:12 -0700675
The Android Open Source Projectf6c38712009-03-03 19:28:47 -0800676 <td>
677 A local variable (or pair) has to be assigned first before it can be
678 read.
679 </td>
Carl Shapirode750892010-06-08 16:37:12 -0700680
The Android Open Source Projectf6c38712009-03-03 19:28:47 -0800681 <td>
682 4.8.2.4
683 </td>
Carl Shapirode750892010-06-08 16:37:12 -0700684
The Android Open Source Projectf6c38712009-03-03 19:28:47 -0800685 <td>
686 DX
687 </td>
688 </tr>
Carl Shapirode750892010-06-08 16:37:12 -0700689
The Android Open Source Projectf6c38712009-03-03 19:28:47 -0800690 <tr>
691 <td>
692 B5
693 </td>
Carl Shapirode750892010-06-08 16:37:12 -0700694
The Android Open Source Projectf6c38712009-03-03 19:28:47 -0800695 <td>
Carl Shapirode750892010-06-08 16:37:12 -0700696 The operand stack must never grow beyond <code>max_stack</code>.
The Android Open Source Projectf6c38712009-03-03 19:28:47 -0800697 </td>
Carl Shapirode750892010-06-08 16:37:12 -0700698
The Android Open Source Projectf6c38712009-03-03 19:28:47 -0800699 <td>
700 4.8.2.5
701 </td>
Carl Shapirode750892010-06-08 16:37:12 -0700702
The Android Open Source Projectf6c38712009-03-03 19:28:47 -0800703 <td>
704 DX
705 </td>
706 </tr>
Carl Shapirode750892010-06-08 16:37:12 -0700707
The Android Open Source Projectf6c38712009-03-03 19:28:47 -0800708 <tr>
709 <td>
710 B6
711 </td>
Carl Shapirode750892010-06-08 16:37:12 -0700712
The Android Open Source Projectf6c38712009-03-03 19:28:47 -0800713 <td>
Carl Shapirode750892010-06-08 16:37:12 -0700714 The operand stack must never underflow.
The Android Open Source Projectf6c38712009-03-03 19:28:47 -0800715 </td>
Carl Shapirode750892010-06-08 16:37:12 -0700716
The Android Open Source Projectf6c38712009-03-03 19:28:47 -0800717 <td>
718 4.8.2.6
719 </td>
Carl Shapirode750892010-06-08 16:37:12 -0700720
The Android Open Source Projectf6c38712009-03-03 19:28:47 -0800721 <td>
722 DX
723 </td>
724 </tr>
Carl Shapirode750892010-06-08 16:37:12 -0700725
The Android Open Source Projectf6c38712009-03-03 19:28:47 -0800726 <tr>
727 <td>
728 B7
729 </td>
Carl Shapirode750892010-06-08 16:37:12 -0700730
The Android Open Source Projectf6c38712009-03-03 19:28:47 -0800731 <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
Carl Shapirode750892010-06-08 16:37:12 -0700734 superclasses.
The Android Open Source Projectf6c38712009-03-03 19:28:47 -0800735 </td>
Carl Shapirode750892010-06-08 16:37:12 -0700736
The Android Open Source Projectf6c38712009-03-03 19:28:47 -0800737 <td>
738 4.8.2.7
739 </td>
Carl Shapirode750892010-06-08 16:37:12 -0700740
The Android Open Source Projectf6c38712009-03-03 19:28:47 -0800741 <td>
742 VM
743 </td>
744 </tr>
Carl Shapirode750892010-06-08 16:37:12 -0700745
The Android Open Source Projectf6c38712009-03-03 19:28:47 -0800746 <tr>
747 <td>
748 B8
749 </td>
Carl Shapirode750892010-06-08 16:37:12 -0700750
The Android Open Source Projectf6c38712009-03-03 19:28:47 -0800751 <td>
752 An instance initializer must only be invoked on an uninitialized
Carl Shapirode750892010-06-08 16:37:12 -0700753 instance residing on the operand stack.
The Android Open Source Projectf6c38712009-03-03 19:28:47 -0800754 </td>
Carl Shapirode750892010-06-08 16:37:12 -0700755
The Android Open Source Projectf6c38712009-03-03 19:28:47 -0800756 <td>
757 4.8.2.8
758 </td>
Carl Shapirode750892010-06-08 16:37:12 -0700759
The Android Open Source Projectf6c38712009-03-03 19:28:47 -0800760 <td>
761 VM
762 </td>
763 </tr>
Carl Shapirode750892010-06-08 16:37:12 -0700764
The Android Open Source Projectf6c38712009-03-03 19:28:47 -0800765 <tr>
766 <td>
767 B9
768 </td>
Carl Shapirode750892010-06-08 16:37:12 -0700769
The Android Open Source Projectf6c38712009-03-03 19:28:47 -0800770 <td>
771 Instance methods may only be invoked on and instance fields may only
Carl Shapirode750892010-06-08 16:37:12 -0700772 be accessed on already initialized instances.
The Android Open Source Projectf6c38712009-03-03 19:28:47 -0800773 </td>
Carl Shapirode750892010-06-08 16:37:12 -0700774
The Android Open Source Projectf6c38712009-03-03 19:28:47 -0800775 <td>
776 4.8.2.9
777 </td>
Carl Shapirode750892010-06-08 16:37:12 -0700778
The Android Open Source Projectf6c38712009-03-03 19:28:47 -0800779 <td>
780 VM
781 </td>
782 </tr>
Carl Shapirode750892010-06-08 16:37:12 -0700783
The Android Open Source Projectf6c38712009-03-03 19:28:47 -0800784 <tr>
785 <td>
786 B10
787 </td>
Carl Shapirode750892010-06-08 16:37:12 -0700788
The Android Open Source Projectf6c38712009-03-03 19:28:47 -0800789 <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>
Carl Shapirode750892010-06-08 16:37:12 -0700795
The Android Open Source Projectf6c38712009-03-03 19:28:47 -0800796 <td>
797 4.8.2.10
798 </td>
Carl Shapirode750892010-06-08 16:37:12 -0700799
The Android Open Source Projectf6c38712009-03-03 19:28:47 -0800800 <td>
801 DX
802 </td>
803 </tr>
Carl Shapirode750892010-06-08 16:37:12 -0700804
The Android Open Source Projectf6c38712009-03-03 19:28:47 -0800805 <tr>
806 <td>
807 B11
808 </td>
Carl Shapirode750892010-06-08 16:37:12 -0700809
The Android Open Source Projectf6c38712009-03-03 19:28:47 -0800810 <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
Carl Shapirode750892010-06-08 16:37:12 -0700815 in general.
The Android Open Source Projectf6c38712009-03-03 19:28:47 -0800816 </td>
Carl Shapirode750892010-06-08 16:37:12 -0700817
The Android Open Source Projectf6c38712009-03-03 19:28:47 -0800818 <td>
819 4.8.2.11
820 </td>
Carl Shapirode750892010-06-08 16:37:12 -0700821
The Android Open Source Projectf6c38712009-03-03 19:28:47 -0800822 <td>
823 VM
824 </td>
825 </tr>
Carl Shapirode750892010-06-08 16:37:12 -0700826
The Android Open Source Projectf6c38712009-03-03 19:28:47 -0800827 <tr>
828 <td>
829 B12
830 </td>
Carl Shapirode750892010-06-08 16:37:12 -0700831
The Android Open Source Projectf6c38712009-03-03 19:28:47 -0800832 <td>
833 All actual method arguments must be assignment-compatible with formal
Carl Shapirode750892010-06-08 16:37:12 -0700834 arguments.
The Android Open Source Projectf6c38712009-03-03 19:28:47 -0800835 </td>
Carl Shapirode750892010-06-08 16:37:12 -0700836
The Android Open Source Projectf6c38712009-03-03 19:28:47 -0800837 <td>
838 4.8.2.12
839 </td>
Carl Shapirode750892010-06-08 16:37:12 -0700840
The Android Open Source Projectf6c38712009-03-03 19:28:47 -0800841 <td>
842 VM
843 </td>
844 </tr>
Carl Shapirode750892010-06-08 16:37:12 -0700845
The Android Open Source Projectf6c38712009-03-03 19:28:47 -0800846 <tr>
847 <td>
848 B13
849 </td>
Carl Shapirode750892010-06-08 16:37:12 -0700850
The Android Open Source Projectf6c38712009-03-03 19:28:47 -0800851 <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>
Carl Shapirode750892010-06-08 16:37:12 -0700856
The Android Open Source Projectf6c38712009-03-03 19:28:47 -0800857 <td>
858 4.8.2.13
859 </td>
Carl Shapirode750892010-06-08 16:37:12 -0700860
The Android Open Source Projectf6c38712009-03-03 19:28:47 -0800861 <td>
862 VM
863 </td>
864 </tr>
Carl Shapirode750892010-06-08 16:37:12 -0700865
The Android Open Source Projectf6c38712009-03-03 19:28:47 -0800866 <tr>
867 <td>
868 B14
869 </td>
Carl Shapirode750892010-06-08 16:37:12 -0700870
The Android Open Source Projectf6c38712009-03-03 19:28:47 -0800871 <td>
Carl Shapirode750892010-06-08 16:37:12 -0700872 A returns instruction must match its method's return type.
The Android Open Source Projectf6c38712009-03-03 19:28:47 -0800873 </td>
Carl Shapirode750892010-06-08 16:37:12 -0700874
The Android Open Source Projectf6c38712009-03-03 19:28:47 -0800875 <td>
876 4.8.2.14
877 </td>
Carl Shapirode750892010-06-08 16:37:12 -0700878
The Android Open Source Projectf6c38712009-03-03 19:28:47 -0800879 <td>
880 VM
881 </td>
882 </tr>
Carl Shapirode750892010-06-08 16:37:12 -0700883
The Android Open Source Projectf6c38712009-03-03 19:28:47 -0800884 <tr>
885 <td>
886 B15
887 </td>
Carl Shapirode750892010-06-08 16:37:12 -0700888
The Android Open Source Projectf6c38712009-03-03 19:28:47 -0800889 <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>
Carl Shapirode750892010-06-08 16:37:12 -0700894
The Android Open Source Projectf6c38712009-03-03 19:28:47 -0800895 <td>
896 4.8.2.15
897 </td>
Carl Shapirode750892010-06-08 16:37:12 -0700898
The Android Open Source Projectf6c38712009-03-03 19:28:47 -0800899 <td>
900 VM
901 </td>
902 </tr>
Carl Shapirode750892010-06-08 16:37:12 -0700903
The Android Open Source Projectf6c38712009-03-03 19:28:47 -0800904 <tr>
905 <td>
906 B16
907 </td>
Carl Shapirode750892010-06-08 16:37:12 -0700908
The Android Open Source Projectf6c38712009-03-03 19:28:47 -0800909 <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>
Carl Shapirode750892010-06-08 16:37:12 -0700913
The Android Open Source Projectf6c38712009-03-03 19:28:47 -0800914 <td>
915 4.8.2.16
916 </td>
Carl Shapirode750892010-06-08 16:37:12 -0700917
The Android Open Source Projectf6c38712009-03-03 19:28:47 -0800918 <td>
919 VM
920 </td>
921 </tr>
Carl Shapirode750892010-06-08 16:37:12 -0700922
The Android Open Source Projectf6c38712009-03-03 19:28:47 -0800923 <tr>
924 <td>
925 B17
926 </td>
Carl Shapirode750892010-06-08 16:37:12 -0700927
The Android Open Source Projectf6c38712009-03-03 19:28:47 -0800928 <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>
Carl Shapirode750892010-06-08 16:37:12 -0700932
The Android Open Source Projectf6c38712009-03-03 19:28:47 -0800933 <td>
934 4.8.2.17
935 </td>
Carl Shapirode750892010-06-08 16:37:12 -0700936
The Android Open Source Projectf6c38712009-03-03 19:28:47 -0800937 <td>
938 VM
939 </td>
940 </tr>
Carl Shapirode750892010-06-08 16:37:12 -0700941
The Android Open Source Projectf6c38712009-03-03 19:28:47 -0800942 <tr>
943 <td>
944 B18
945 </td>
Carl Shapirode750892010-06-08 16:37:12 -0700946
The Android Open Source Projectf6c38712009-03-03 19:28:47 -0800947 <td>
948 The type of every value stored into an array must be
949 assignment-compatible with the array's component type.
950 </td>
Carl Shapirode750892010-06-08 16:37:12 -0700951
The Android Open Source Projectf6c38712009-03-03 19:28:47 -0800952 <td>
953 4.8.2.18
954 </td>
Carl Shapirode750892010-06-08 16:37:12 -0700955
The Android Open Source Projectf6c38712009-03-03 19:28:47 -0800956 <td>
957 VM
958 </td>
959 </tr>
Carl Shapirode750892010-06-08 16:37:12 -0700960
The Android Open Source Projectf6c38712009-03-03 19:28:47 -0800961 <tr>
962 <td>
963 B19
964 </td>
Carl Shapirode750892010-06-08 16:37:12 -0700965
The Android Open Source Projectf6c38712009-03-03 19:28:47 -0800966 <td>
967 The operand of an <code>athrow</code> instruction must be
Carl Shapirode750892010-06-08 16:37:12 -0700968 assignment-compatible with <code>java.lang.Throwable</code>.
The Android Open Source Projectf6c38712009-03-03 19:28:47 -0800969 </td>
Carl Shapirode750892010-06-08 16:37:12 -0700970
The Android Open Source Projectf6c38712009-03-03 19:28:47 -0800971 <td>
972 4.8.2.19
973 </td>
Carl Shapirode750892010-06-08 16:37:12 -0700974
The Android Open Source Projectf6c38712009-03-03 19:28:47 -0800975 <td>
976 VM
977 </td>
978 </tr>
Carl Shapirode750892010-06-08 16:37:12 -0700979
The Android Open Source Projectf6c38712009-03-03 19:28:47 -0800980 <tr>
981 <td>
982 B20
983 </td>
Carl Shapirode750892010-06-08 16:37:12 -0700984
The Android Open Source Projectf6c38712009-03-03 19:28:47 -0800985 <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>
Carl Shapirode750892010-06-08 16:37:12 -0700991
The Android Open Source Projectf6c38712009-03-03 19:28:47 -0800992 <td>
993 4.8.2.20
994 </td>
Carl Shapirode750892010-06-08 16:37:12 -0700995
The Android Open Source Projectf6c38712009-03-03 19:28:47 -0800996 <td>
997 VM
998 </td>
999 </tr>
Carl Shapirode750892010-06-08 16:37:12 -07001000
The Android Open Source Projectf6c38712009-03-03 19:28:47 -08001001 <tr>
1002 <td>
1003 B21
1004 </td>
Carl Shapirode750892010-06-08 16:37:12 -07001005
The Android Open Source Projectf6c38712009-03-03 19:28:47 -08001006 <td>
1007 Local variable values must not be used as return addresses.
1008 </td>
Carl Shapirode750892010-06-08 16:37:12 -07001009
The Android Open Source Projectf6c38712009-03-03 19:28:47 -08001010 <td>
1011 4.8.2.21
1012 </td>
Carl Shapirode750892010-06-08 16:37:12 -07001013
The Android Open Source Projectf6c38712009-03-03 19:28:47 -08001014 <td>
1015 VM
1016 </td>
1017 </tr>
Carl Shapirode750892010-06-08 16:37:12 -07001018
The Android Open Source Projectf6c38712009-03-03 19:28:47 -08001019 <tr>
1020 <td>
1021 B22
1022 </td>
Carl Shapirode750892010-06-08 16:37:12 -07001023
The Android Open Source Projectf6c38712009-03-03 19:28:47 -08001024 <td>
1025 There must be a single, uniquely determined return instruction per
1026 subroutine call.
1027 </td>
Carl Shapirode750892010-06-08 16:37:12 -07001028
The Android Open Source Projectf6c38712009-03-03 19:28:47 -08001029 <td>
1030 4.8.2.22
1031 </td>
Carl Shapirode750892010-06-08 16:37:12 -07001032
The Android Open Source Projectf6c38712009-03-03 19:28:47 -08001033 <td>
1034 VM
1035 </td>
1036 </tr>
Carl Shapirode750892010-06-08 16:37:12 -07001037
The Android Open Source Projectf6c38712009-03-03 19:28:47 -08001038 <tr>
1039 <td>
1040 B23
1041 </td>
Carl Shapirode750892010-06-08 16:37:12 -07001042
The Android Open Source Projectf6c38712009-03-03 19:28:47 -08001043 <td>
1044 Subroutine calls must not be directly or indirectly self-recursive.
1045 </td>
Carl Shapirode750892010-06-08 16:37:12 -07001046
The Android Open Source Projectf6c38712009-03-03 19:28:47 -08001047 <td>
1048 4.8.2.23
1049 </td>
Carl Shapirode750892010-06-08 16:37:12 -07001050
The Android Open Source Projectf6c38712009-03-03 19:28:47 -08001051 <td>
1052 DX
1053 </td>
1054 </tr>
Carl Shapirode750892010-06-08 16:37:12 -07001055
The Android Open Source Projectf6c38712009-03-03 19:28:47 -08001056 <tr>
1057 <td>
1058 B24
1059 </td>
Carl Shapirode750892010-06-08 16:37:12 -07001060
The Android Open Source Projectf6c38712009-03-03 19:28:47 -08001061 <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>
Carl Shapirode750892010-06-08 16:37:12 -07001068
The Android Open Source Projectf6c38712009-03-03 19:28:47 -08001069 <td>
1070 4.8.2.24
1071 </td>
Carl Shapirode750892010-06-08 16:37:12 -07001072
The Android Open Source Projectf6c38712009-03-03 19:28:47 -08001073 <td>
1074 DX
1075 </td>
1076 </tr>
Carl Shapirode750892010-06-08 16:37:12 -07001077
The Android Open Source Projectf6c38712009-03-03 19:28:47 -08001078 </table>
1079 </body>
1080</html>