diff options
author | 2022-03-23 12:49:30 +0000 | |
---|---|---|
committer | 2022-07-12 13:03:15 +0000 | |
commit | fc067a360d14db5f84fd4b58e0dee6cb04ee759b (patch) | |
tree | a9217edb3a03e3937411407f704ad26e5887fb9a /runtime/stack_map.h | |
parent | 0ae89052f7213701b8b3a782266e84b3d3600dbf (diff) |
Introduce a flag to check if JITed code has instrumentation support
Introduce a new flag to identify if JITed code was compiled with
instrumentation support. We used to check if the runtime is java
debuggable to check for instrumentation support of JITed code. We only
set the java debuggable at runtime init and never changed it after. So
this check was sufficient since we always JIT code with instrumentation
support in debuggable runtimes.
We want to be able to change the runtime to debuggable after the runtime
has started. As a first step, introduce a new flag to explicitly check
if JITed code was compiled with instrumentation support. Use this flag
to check if code needs entry / exit stubs and to check if code is async
deoptimizeable.
Bug: 222479430
Test: art/test.py
Change-Id: Ibcaeab869aa8ce153920a801dcc60988411c775b
Diffstat (limited to 'runtime/stack_map.h')
-rw-r--r-- | runtime/stack_map.h | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/runtime/stack_map.h b/runtime/stack_map.h index 7a13dbd3ac..7876a67381 100644 --- a/runtime/stack_map.h +++ b/runtime/stack_map.h @@ -449,6 +449,10 @@ class CodeInfo { return (*code_info_data & kIsBaseline) != 0; } + ALWAYS_INLINE static bool IsDebuggable(const uint8_t* code_info_data) { + return (*code_info_data & kIsDebuggable) != 0; + } + private: // Scan backward to determine dex register locations at given stack map. void DecodeDexRegisterMap(uint32_t stack_map_index, @@ -495,11 +499,16 @@ class CodeInfo { enum Flags { kHasInlineInfo = 1 << 0, kIsBaseline = 1 << 1, + kIsDebuggable = 1 << 2, }; // The CodeInfo starts with sequence of variable-length bit-encoded integers. + // (Please see kVarintMax for more details about encoding). static constexpr size_t kNumHeaders = 7; - uint32_t flags_ = 0; // Note that the space is limited to three bits. + // Note that the space for flags is limited to three bits. We use a custom encoding where we + // encode the value inline if it is less than kVarintMax. We want to access flags without + // decoding the entire CodeInfo so the value of flags cannot be more than kVarintMax. + uint32_t flags_ = 0; uint32_t code_size_ = 0; // The size of native PC range in bytes. uint32_t packed_frame_size_ = 0; // Frame size in kStackAlignment units. uint32_t core_spill_mask_ = 0; |