Skip to content

Commit

Permalink
Put cache types in separate header
Browse files Browse the repository at this point in the history
This makes them easier to keep synchronized.
  • Loading branch information
hainest committed Apr 22, 2024
1 parent 58b8db8 commit ac71ea1
Show file tree
Hide file tree
Showing 3 changed files with 18 additions and 19 deletions.
1 change: 1 addition & 0 deletions common/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,7 @@ set(_private_headers
src/lprintf.h
src/lru_cache.h
src/MappedFile.h
src/registers/MachRegisterCache.h
src/NodeIterator.h
src/ntHeaders.h
src/parseauxv.h
Expand Down
15 changes: 5 additions & 10 deletions common/src/dyn_regs.C
Original file line number Diff line number Diff line change
Expand Up @@ -28,18 +28,13 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/

#include "registers/MachRegister.h"
#include "registers/MachRegisterCache.h"

#include <unordered_map>
#include <map>
#include <vector>
#include <string>

namespace Dyninst {
namespace Dyninst { namespace registers {
// These are used in MachRegister.C
std::unordered_map<signed int, std::string> names;
std::map<Dyninst::Architecture, std::vector<Dyninst::MachRegister>> all_regs;
}
name_cache names;
register_cache all_regs;
}}

//clang-format: off
#define DYN_DEFINE_REGS
Expand Down
21 changes: 12 additions & 9 deletions common/src/registers/MachRegister.C
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
#include "common/h/registers/MachRegister.h"
#include "registers/MachRegisterCache.h"
#include "debug_common.h"
#include "dyn_regs.h"
#include "external/rose/amdgpuInstructionEnum.h"
Expand All @@ -15,19 +16,21 @@ namespace {
const std::string invalid_reg_name{"<INVALID_REG>"};
}

namespace Dyninst {

namespace Dyninst { namespace registers {
// These are defined in dyn_regs.C to ensure global constructor initialization ordering
extern std::unordered_map<signed int, std::string> names;
extern std::map<Dyninst::Architecture, std::vector<Dyninst::MachRegister>> all_regs;
extern name_cache names;
extern register_cache all_regs;
}}

namespace Dyninst {

MachRegister::MachRegister() : reg(0) {}

MachRegister::MachRegister(signed int r) : reg(r) {}

MachRegister::MachRegister(signed int r, std::string n) : MachRegister(r) {
names.emplace(r, std::move(n));
all_regs[getArchitecture()].push_back(*this);
registers::names.emplace(r, std::move(n));
registers::all_regs[getArchitecture()].push_back(*this);
}

unsigned int MachRegister::regClass() const { return reg & 0x00ff0000; }
Expand Down Expand Up @@ -114,8 +117,8 @@ namespace Dyninst {
bool MachRegister::isValid() const { return (reg != InvalidReg.reg); }

std::string const& MachRegister::name() const {
auto iter = names.find(reg);
if(iter != names.end()) {
auto iter = registers::names.find(reg);
if(iter != registers::names.end()) {
return iter->second;
}
common_parsing_printf("No MachRegister found with value %x\n", static_cast<unsigned int>(reg));
Expand Down Expand Up @@ -2638,6 +2641,6 @@ namespace Dyninst {
}

std::vector<MachRegister> const& MachRegister::getAllRegistersForArch(Dyninst::Architecture arch) {
return all_regs[arch];
return registers::all_regs[arch];
}
}

0 comments on commit ac71ea1

Please sign in to comment.