1 | //===-- ArchitectureAArch64.h -----------------------------------*- C++ -*-===// |
2 | // |
3 | // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. |
4 | // See https://llvm.org/LICENSE.txt for license information. |
5 | // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception |
6 | // |
7 | //===----------------------------------------------------------------------===// |
8 | |
9 | #ifndef LLDB_SOURCE_PLUGINS_ARCHITECTURE_AARCH64_ARCHITECTUREAARCH64_H |
10 | #define LLDB_SOURCE_PLUGINS_ARCHITECTURE_AARCH64_ARCHITECTUREAARCH64_H |
11 | |
12 | #include "Plugins/Process/Utility/MemoryTagManagerAArch64MTE.h" |
13 | #include "lldb/Core/Architecture.h" |
14 | |
15 | namespace lldb_private { |
16 | |
17 | class ArchitectureAArch64 : public Architecture { |
18 | public: |
19 | static llvm::StringRef GetPluginNameStatic() { return "aarch64" ; } |
20 | static void Initialize(); |
21 | static void Terminate(); |
22 | |
23 | llvm::StringRef GetPluginName() override { return GetPluginNameStatic(); } |
24 | |
25 | void OverrideStopInfo(Thread &thread) const override {} |
26 | |
27 | const MemoryTagManager *GetMemoryTagManager() const override { |
28 | return &m_memory_tag_manager; |
29 | } |
30 | |
31 | bool |
32 | RegisterWriteCausesReconfigure(const llvm::StringRef name) const override { |
33 | // lldb treats svg as read only, so only vg can be written. This results in |
34 | // the SVE registers changing size. |
35 | return name == "vg" ; |
36 | } |
37 | |
38 | bool (DynamicRegisterInfo ®_info, |
39 | DataExtractor ®_data, |
40 | RegisterContext ®_context) const override; |
41 | |
42 | private: |
43 | static std::unique_ptr<Architecture> Create(const ArchSpec &arch); |
44 | ArchitectureAArch64() = default; |
45 | MemoryTagManagerAArch64MTE m_memory_tag_manager; |
46 | }; |
47 | |
48 | } // namespace lldb_private |
49 | |
50 | #endif // LLDB_SOURCE_PLUGINS_ARCHITECTURE_AARCH64_ARCHITECTUREAARCH64_H |
51 | |