llvm-project/lldb/source/Utility/AddressableBits.cpp
Alex Langford 10b0e35537
[lldb] Invert relationship between Process and AddressableBits (#85858)
AddressableBits is in the Utility module of LLDB. It currently directly
refers to Process, which is from the Target LLDB module. This is a
layering violation which concretely means that it is impossible to link
anything that uses Utility without it also using Target as well. This is
generally not an issue for LLDB (since everything is built together) but
it may make it difficult to write unit tests for AddressableBits later
on.
2024-03-20 10:46:06 -07:00

52 lines
1.6 KiB
C++

//===-- AddressableBits.cpp -----------------------------------------------===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
#include "lldb/Utility/AddressableBits.h"
#include "lldb/lldb-types.h"
#include <cassert>
using namespace lldb;
using namespace lldb_private;
void AddressableBits::SetAddressableBits(uint32_t addressing_bits) {
m_low_memory_addr_bits = m_high_memory_addr_bits = addressing_bits;
}
void AddressableBits::SetAddressableBits(uint32_t lowmem_addressing_bits,
uint32_t highmem_addressing_bits) {
m_low_memory_addr_bits = lowmem_addressing_bits;
m_high_memory_addr_bits = highmem_addressing_bits;
}
void AddressableBits::SetLowmemAddressableBits(
uint32_t lowmem_addressing_bits) {
m_low_memory_addr_bits = lowmem_addressing_bits;
}
uint32_t AddressableBits::GetLowmemAddressableBits() const {
return m_low_memory_addr_bits;
}
void AddressableBits::SetHighmemAddressableBits(
uint32_t highmem_addressing_bits) {
m_high_memory_addr_bits = highmem_addressing_bits;
}
uint32_t AddressableBits::GetHighmemAddressableBits() const {
return m_high_memory_addr_bits;
}
addr_t AddressableBits::AddressableBitToMask(uint32_t addressable_bits) {
assert(addressable_bits <= sizeof(addr_t) * 8);
if (addressable_bits == 64)
return 0; // all bits used for addressing
else
return ~((1ULL << addressable_bits) - 1);
}