1- // Copyright 2015-2022 Carnegie Mellon University. See LICENSE file for terms.
1+ // Copyright 2015-2024 Carnegie Mellon University. See LICENSE file for terms.
22
33#ifndef Pharos_State_H
44#define Pharos_State_H
77#include " misc.hpp"
88
99namespace pharos {
10+ #if PHAROS_ROSE_ADDRESS_SPACE_HACK
11+ #define PHAROS_ROSE_ADDRESSS_SPACE (name ) Semantics2::BaseSemantics::AddressSpacePtr
12+ #else
13+ #define PHAROS_ROSE_ADDRESSS_SPACE (name ) name
14+ #endif
1015
1116// Renames of standard ROSE typdefs.
1217using BaseRegisterState = Semantics2::BaseSemantics::RegisterState;
1318using BaseRegisterStatePtr = Semantics2::BaseSemantics::RegisterStatePtr;
19+ using BaseRegisterAddressSpacePtr = PHAROS_ROSE_ADDRESSS_SPACE(BaseRegisterStatePtr);
1420using BaseState = Semantics2::BaseSemantics::State;
1521using BaseStatePtr = Semantics2::BaseSemantics::StatePtr;
1622using BaseRiscOperators = Semantics2::BaseSemantics::RiscOperators;
1723using BaseRiscOperatorsPtr = Semantics2::BaseSemantics::RiscOperatorsPtr;
1824using BaseMemoryState = Semantics2::BaseSemantics::MemoryState;
1925using BaseMemoryStatePtr = Semantics2::BaseSemantics::MemoryStatePtr;
26+ using BaseMemoryAddressSpacePtr = PHAROS_ROSE_ADDRESSS_SPACE(BaseMemoryStatePtr);
2027using MemoryCell = Semantics2::BaseSemantics::MemoryCell;
2128using MemoryCellPtr = Semantics2::BaseSemantics::MemoryCellPtr;
2229using BaseMemoryCellMap = Semantics2::BaseSemantics::MemoryCellMap;
@@ -119,7 +126,7 @@ class SymbolicRegisterState: public RegisterStateGeneric {
119126 return instance (SymbolicValue::promote (proto), rd);
120127 }
121128
122- virtual BaseRegisterStatePtr clone () const override {
129+ virtual BaseRegisterAddressSpacePtr clone () const override {
123130 STRACE << " SymbolicRegisterState::clone()" << LEND;
124131 return SymbolicRegisterStatePtr (new SymbolicRegisterState (*this ));
125132 }
@@ -238,7 +245,7 @@ class SymbolicMemoryMapState: public BaseMemoryCellMap {
238245 return saddr->get_hash ();
239246 }
240247
241- virtual BaseMemoryStatePtr clone () const override {
248+ virtual BaseMemoryAddressSpacePtr clone () const override {
242249 STRACE << " SymbolicMemoryMapState::clone()" << LEND;
243250 return BaseMemoryStatePtr (new SymbolicMemoryMapState (*this ));
244251 }
@@ -248,7 +255,7 @@ class SymbolicMemoryMapState: public BaseMemoryCellMap {
248255 return SymbolicMemoryMapStatePtr (new SymbolicMemoryMapState (*this ));
249256 }
250257
251- virtual bool merge (const BaseMemoryStatePtr & other_,
258+ virtual bool merge (const BaseMemoryAddressSpacePtr & other_,
252259 BaseRiscOperators* addrOps,
253260 BaseRiscOperators* valOps) override ;
254261
@@ -334,7 +341,7 @@ class SymbolicMemoryListState: public BaseMemoryCellList {
334341 return instance (addr_, val_);
335342 }
336343
337- virtual BaseMemoryStatePtr clone () const override {
344+ virtual BaseMemoryAddressSpacePtr clone () const override {
338345 STRACE << " SymbolicMemoryListState::clone()" << LEND;
339346 return BaseMemoryStatePtr (new SymbolicMemoryListState (*this ));
340347 }
@@ -597,7 +604,12 @@ class SymbolicState: public BaseState {
597604 }
598605
599606 private:
600- bool merge (const BaseStatePtr &other, BaseRiscOperators *ops) override ;
607+ #if PHAROS_ROSE_ADDRESS_SPACE_HACK
608+ bool merge (const BaseStatePtr &other,
609+ BaseRiscOperators *addrOps, BaseRiscOperators *valOps) override ;
610+ #else
611+ bool merge (const BaseStatePtr &other, BaseRiscOperators *addrOps) override ;
612+ #endif
601613
602614 public:
603615 bool merge (const BaseStatePtr &other, BaseRiscOperators *ops, const SymbolicValuePtr & cond);
0 commit comments