diff options
author | 2024-01-05 16:30:56 +0000 | |
---|---|---|
committer | 2024-08-01 14:13:33 +0000 | |
commit | 3ea38e1d3e11417bb7f86a5dcd24187c299dcd73 (patch) | |
tree | 8cc043db0fde48cb70f19b065a2fbb0edb46606f /disassembler/disassembler_arm64.h | |
parent | 0a8d0cd9a4648619fd910964cfe1d6101d881968 (diff) |
Rework exception delivery and deoptimization
Both exception delivery (various methods calling
Thread::QuickDeliverException()) and deoptimization (via
artDeoptimizeImpl) use QuickExceptionHandler to find the target
context and do a long jump to it via
QuickExceptionHandler::DoLongJump. The long jump is done
directly from the C++ code, so the frames of the related C++ method
are still on the stack before the change of the pc. Note that all
those methods are marked as NO_RETURN to reflect that.
This patch changes the approach; instead of having the long jump
directly from the C++ methods related to exceptions and
deoptimization, those methods now only prepare the long jump
context and return. So their callers (mainly .S quick entry points
and stubs) now need to do a long jump explicitly; thus there will
be no C++ frames on the stack before the jump.
This approach makes it possible to support exceptions and
deoptimization in simulator mode; so we don't need to unwind
native (C++ methods' frames) and simulated stacks at the same.
Authors: Artem Serov <artem.serov@linaro.org>,
Chris Jones <christopher.jones@arm.com>
Test: test.py --host --target
Change-Id: I5f90e6b5ba152fc2205728f1e814bbe3d609af9d
Diffstat (limited to 'disassembler/disassembler_arm64.h')
0 files changed, 0 insertions, 0 deletions