1 //===-- MemoryTagManagerAArch64MTE.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_PROCESS_UTILITY_MEMORYTAGMANAGERAARCH64MTE_H 10 #define LLDB_SOURCE_PLUGINS_PROCESS_UTILITY_MEMORYTAGMANAGERAARCH64MTE_H 11 12 #include "lldb/Target/MemoryTagManager.h" 13 14 namespace lldb_private { 15 16 class MemoryTagManagerAArch64MTE : public MemoryTagManager { 17 public: 18 // This enum is supposed to be shared for all of AArch64 but until 19 // there are more tag types than MTE, it will live here. 20 enum MTETagTypes { 21 eMTE_logical = 0, 22 eMTE_allocation = 1, 23 }; 24 25 lldb::addr_t GetGranuleSize() const override; 26 int32_t GetAllocationTagType() const override; 27 size_t GetTagSizeInBytes() const override; 28 29 lldb::addr_t GetLogicalTag(lldb::addr_t addr) const override; 30 lldb::addr_t RemoveTagBits(lldb::addr_t addr) const override; 31 ptrdiff_t AddressDiff(lldb::addr_t addr1, lldb::addr_t addr2) const override; 32 33 TagRange ExpandToGranule(TagRange range) const override; 34 35 llvm::Expected<TagRange> MakeTaggedRange( 36 lldb::addr_t addr, lldb::addr_t end_addr, 37 const lldb_private::MemoryRegionInfos &memory_regions) const override; 38 39 llvm::Expected<std::vector<TagRange>> MakeTaggedRanges( 40 lldb::addr_t addr, lldb::addr_t end_addr, 41 const lldb_private::MemoryRegionInfos &memory_regions) const override; 42 43 llvm::Expected<std::vector<lldb::addr_t>> 44 UnpackTagsData(const std::vector<uint8_t> &tags, 45 size_t granules = 0) const override; 46 47 llvm::Expected<std::vector<uint8_t>> 48 PackTags(const std::vector<lldb::addr_t> &tags) const override; 49 50 llvm::Expected<std::vector<lldb::addr_t>> 51 RepeatTagsForRange(const std::vector<lldb::addr_t> &tags, 52 TagRange range) const override; 53 }; 54 55 } // namespace lldb_private 56 57 #endif // LLDB_SOURCE_PLUGINS_PROCESS_UTILITY_MEMORYTAGMANAGERAARCH64MTE_H 58