diff options
author | Evgeny Astigeevich <evgeny.astigeevich@linaro.org> | 2019-09-09 14:52:12 +0100 |
---|---|---|
committer | Evgeny Astigeevich <evgeny.astigeevich@linaro.org> | 2019-10-10 13:06:08 +0100 |
commit | 98416bf06592493ee6fde039af5eaa5efab73acc (patch) | |
tree | a0052ec5364ce1068639a9b7d7355683eb691371 /libnativeloader/library_namespaces.cpp | |
parent | 63b0c26aae3e7237166dd781eb7a15fbc7c091c2 (diff) |
Fix uses of MaybeRecordImplicitNullCheck without special scopes
MaybeRecordImplicitNullCheck is a function which uses
CodeGenerator::RecordPcInfo() and requires an exact PC. However for ARM32/ARM64,
when CodeGenerator::RecordPcInfo() is used without VIXL special scopes (EmissionCheckScope,
ExactAssemblyScope) there is no guarantee of an exact PC. Without the special scopes VIXL might
emit veneer/literal pools affecting a PC.
The ARM32 code generator has uses of MaybeRecordImplicitNullCheck without the
special scopes.
This CL fixes missing special scopes in the ARM32/ARM64 code generators.
It also changes API to prevent such cases:
1. A variant of CodeGenerator::RecordPcInfo with native_pc as a
parameter is added. The old variant (where Assembler::CodePosition is used) is
kept and documented that Assembler::CodePosition is target-dependent and
might be imprecise.
2. CodeGenerator::MaybeRecordImplicitNullCheck is made virtual. Checks
are added to ARM32/ARM64 code generators that
MaybeRecordImplicitNullCheck is invoked within VIXL special scopes.
Test: test.py --host --optimizing --jit --gtest
Test: test.py --target --optimizing --jit
Test: run-gtests.sh
Change-Id: Ic66c16e7bdf4751cbc19a9de05846fba005b7f55
Diffstat (limited to 'libnativeloader/library_namespaces.cpp')
0 files changed, 0 insertions, 0 deletions