| // Copyright (c) 2018, the Dart project authors. Please see the AUTHORS file | |
| // for details. All rights reserved. Use of this source code is governed by a | |
| // BSD-style license that can be found in the LICENSE file. | |
| #ifndef RUNTIME_VM_REVERSE_PC_LOOKUP_CACHE_H_ | |
| #define RUNTIME_VM_REVERSE_PC_LOOKUP_CACHE_H_ | |
| #include "vm/allocation.h" | |
| #include "vm/globals.h" | |
| #include "vm/raw_object.h" | |
| #include "vm/tagged_pointer.h" | |
| namespace dart { | |
| class IsolateGroup; | |
| // This class provides mechanism to find Code and CompressedStackMaps | |
| // objects corresponding to the given PC. | |
| // Can only be used in AOT runtime with bare instructions. | |
| class ReversePc : public AllStatic { | |
| public: | |
| // Looks for Code object corresponding to |pc| in the | |
| // given isolate |group| and vm isolate group. | |
| static CodePtr Lookup(IsolateGroup* group, uword pc, bool is_return_address); | |
| static const UntaggedCompressedStackMaps::Payload* FindStackMap( | |
| IsolateGroup* group, | |
| uword pc, | |
| bool is_return_address, | |
| uword* code_start, | |
| const UntaggedCompressedStackMaps::Payload** global_table); | |
| private: | |
| static const UntaggedCompressedStackMaps::Payload* FindStackMapInGroup( | |
| IsolateGroup* group, | |
| uword pc, | |
| bool is_return_address, | |
| uword* code_start, | |
| const UntaggedCompressedStackMaps::Payload** global_table); | |
| static CodePtr FindCodeInGroup(IsolateGroup* group, | |
| uword pc, | |
| bool is_return_address); | |
| static CodePtr FindCode(IsolateGroup* group, | |
| uword pc, | |
| bool is_return_address); | |
| }; | |
| } // namespace dart | |
| #endif // RUNTIME_VM_REVERSE_PC_LOOKUP_CACHE_H_ |