Any time there is a possiblity that execution flow will leave
the mterp environment and transition either to an alternate
interpreter or compiled code, we need to export the cached copy of
the current Dalvik PC. One path out related to on-stack-replacement
was missed in both x86 and x86_64 versions of mterp (other targets
are OK).
Note that there is an outstanding feature request to add support
to catch missing EXPORT_PCs (Bug:
26572899), though as envisioned
it would not have caught this one.
Bug:
28249238
(cherry picked from commit
963758dbfbbbc95bbfa82d5e02258d9fd481a459)
Change-Id: I3936509665636c0b77580dda12520a82ee814fa5
* not-taken path. All Dalvik not-taken conditional branch offsets are 2.
*/
.L_check_not_taken_osr:
+ EXPORT_PC
movl rSELF, %eax
movl %eax, OUT_ARG0(%esp)
leal OFF_FP_SHADOWFRAME(rFP), %ecx
* not-taken path. All Dalvik not-taken conditional branch offsets are 2.
*/
.L_check_not_taken_osr:
+ EXPORT_PC
movq rSELF, OUT_ARG0
leaq OFF_FP_SHADOWFRAME(rFP), OUT_ARG1
movl $2, OUT_32_ARG2
* not-taken path. All Dalvik not-taken conditional branch offsets are 2.
*/
.L_check_not_taken_osr:
+ EXPORT_PC
movl rSELF, %eax
movl %eax, OUT_ARG0(%esp)
leal OFF_FP_SHADOWFRAME(rFP), %ecx
* not-taken path. All Dalvik not-taken conditional branch offsets are 2.
*/
.L_check_not_taken_osr:
+ EXPORT_PC
movq rSELF, OUT_ARG0
leaq OFF_FP_SHADOWFRAME(rFP), OUT_ARG1
movl $$2, OUT_32_ARG2