Files
clang-p2996/lldb/source/Utility/AddressableBits.cpp
Jason Molenda d37642b4a2 Simplify address mask setting logic in AddressableBits
I wrote some complicated conditionals for how to handle a partially
specified AddressableBits object in https://reviews.llvm.org/D158041 ,
and how to reuse existing masks if they were set and we had an
unspecified value.

I don't think this logic is the right thing to start
with.  Simplify back to the most straightforward
setting, where only the bits that have been specified
are set in the Process.
2023-08-17 16:22:39 -07:00

52 lines
1.7 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/Target/Process.h"
#include "lldb/lldb-types.h"
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;
}
void AddressableBits::SetHighmemAddressableBits(
uint32_t highmem_addressing_bits) {
m_high_memory_addr_bits = highmem_addressing_bits;
}
void AddressableBits::SetProcessMasks(Process &process) {
if (m_low_memory_addr_bits == 0 && m_high_memory_addr_bits == 0)
return;
if (m_low_memory_addr_bits != 0) {
addr_t low_addr_mask = ~((1ULL << m_low_memory_addr_bits) - 1);
process.SetCodeAddressMask(low_addr_mask);
process.SetDataAddressMask(low_addr_mask);
}
if (m_high_memory_addr_bits != 0) {
addr_t hi_addr_mask = ~((1ULL << m_high_memory_addr_bits) - 1);
process.SetHighmemCodeAddressMask(hi_addr_mask);
process.SetHighmemDataAddressMask(hi_addr_mask);
}
}