xref: /freebsd/contrib/llvm-project/lldb/include/lldb/Utility/AddressableBits.h (revision 62987288060ff68c817b7056815aa9fb8ba8ecd7)
1 //===-- AddressableBits.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_UTILITY_ADDRESSABLEBITS_H
10 #define LLDB_UTILITY_ADDRESSABLEBITS_H
11 
12 #include "lldb/lldb-forward.h"
13 #include "lldb/lldb-public.h"
14 
15 #include <cstdint>
16 
17 namespace lldb_private {
18 
19 /// \class AddressableBits AddressableBits.h "lldb/Core/AddressableBits.h"
20 /// A class which holds the metadata from a remote stub/corefile note
21 /// about how many bits are used for addressing on this target.
22 ///
23 class AddressableBits {
24 public:
AddressableBits()25   AddressableBits() : m_low_memory_addr_bits(0), m_high_memory_addr_bits(0) {}
26 
27   /// When a single value is available for the number of bits.
28   void SetAddressableBits(uint32_t addressing_bits);
29 
30   /// When we have separate values for low memory addresses and high memory
31   /// addresses.
32   void SetAddressableBits(uint32_t lowmem_addressing_bits,
33                           uint32_t highmem_addressing_bits);
34 
35   void SetLowmemAddressableBits(uint32_t lowmem_addressing_bits);
36 
37   uint32_t GetLowmemAddressableBits() const;
38 
39   void SetHighmemAddressableBits(uint32_t highmem_addressing_bits);
40 
41   uint32_t GetHighmemAddressableBits() const;
42 
43   static lldb::addr_t AddressableBitToMask(uint32_t addressable_bits);
44 
45 private:
46   uint32_t m_low_memory_addr_bits;
47   uint32_t m_high_memory_addr_bits;
48 };
49 
50 } // namespace lldb_private
51 
52 #endif // LLDB_UTILITY_ADDRESSABLEBITS_H
53