1
- // Copyright 2015-2022 Carnegie Mellon University. See LICENSE file for terms.
1
+ // Copyright 2015-2024 Carnegie Mellon University. See LICENSE file for terms.
2
2
3
3
#ifndef Pharos_State_H
4
4
#define Pharos_State_H
7
7
#include " misc.hpp"
8
8
9
9
namespace 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
10
15
11
16
// Renames of standard ROSE typdefs.
12
17
using BaseRegisterState = Semantics2::BaseSemantics::RegisterState;
13
18
using BaseRegisterStatePtr = Semantics2::BaseSemantics::RegisterStatePtr;
19
+ using BaseRegisterAddressSpacePtr = PHAROS_ROSE_ADDRESSS_SPACE(BaseRegisterStatePtr);
14
20
using BaseState = Semantics2::BaseSemantics::State;
15
21
using BaseStatePtr = Semantics2::BaseSemantics::StatePtr;
16
22
using BaseRiscOperators = Semantics2::BaseSemantics::RiscOperators;
17
23
using BaseRiscOperatorsPtr = Semantics2::BaseSemantics::RiscOperatorsPtr;
18
24
using BaseMemoryState = Semantics2::BaseSemantics::MemoryState;
19
25
using BaseMemoryStatePtr = Semantics2::BaseSemantics::MemoryStatePtr;
26
+ using BaseMemoryAddressSpacePtr = PHAROS_ROSE_ADDRESSS_SPACE(BaseMemoryStatePtr);
20
27
using MemoryCell = Semantics2::BaseSemantics::MemoryCell;
21
28
using MemoryCellPtr = Semantics2::BaseSemantics::MemoryCellPtr;
22
29
using BaseMemoryCellMap = Semantics2::BaseSemantics::MemoryCellMap;
@@ -119,7 +126,7 @@ class SymbolicRegisterState: public RegisterStateGeneric {
119
126
return instance (SymbolicValue::promote (proto), rd);
120
127
}
121
128
122
- virtual BaseRegisterStatePtr clone () const override {
129
+ virtual BaseRegisterAddressSpacePtr clone () const override {
123
130
STRACE << " SymbolicRegisterState::clone()" << LEND;
124
131
return SymbolicRegisterStatePtr (new SymbolicRegisterState (*this ));
125
132
}
@@ -238,7 +245,7 @@ class SymbolicMemoryMapState: public BaseMemoryCellMap {
238
245
return saddr->get_hash ();
239
246
}
240
247
241
- virtual BaseMemoryStatePtr clone () const override {
248
+ virtual BaseMemoryAddressSpacePtr clone () const override {
242
249
STRACE << " SymbolicMemoryMapState::clone()" << LEND;
243
250
return BaseMemoryStatePtr (new SymbolicMemoryMapState (*this ));
244
251
}
@@ -248,7 +255,7 @@ class SymbolicMemoryMapState: public BaseMemoryCellMap {
248
255
return SymbolicMemoryMapStatePtr (new SymbolicMemoryMapState (*this ));
249
256
}
250
257
251
- virtual bool merge (const BaseMemoryStatePtr & other_,
258
+ virtual bool merge (const BaseMemoryAddressSpacePtr & other_,
252
259
BaseRiscOperators* addrOps,
253
260
BaseRiscOperators* valOps) override ;
254
261
@@ -334,7 +341,7 @@ class SymbolicMemoryListState: public BaseMemoryCellList {
334
341
return instance (addr_, val_);
335
342
}
336
343
337
- virtual BaseMemoryStatePtr clone () const override {
344
+ virtual BaseMemoryAddressSpacePtr clone () const override {
338
345
STRACE << " SymbolicMemoryListState::clone()" << LEND;
339
346
return BaseMemoryStatePtr (new SymbolicMemoryListState (*this ));
340
347
}
@@ -597,7 +604,12 @@ class SymbolicState: public BaseState {
597
604
}
598
605
599
606
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
601
613
602
614
public:
603
615
bool merge (const BaseStatePtr &other, BaseRiscOperators *ops, const SymbolicValuePtr & cond);
0 commit comments