ROSE 0.11.145.229
ConcreteLocation.h
1#ifndef ROSE_BinaryAnalysis_ConcreteLocation_H
2#define ROSE_BinaryAnalysis_ConcreteLocation_H
3#include <featureTests.h>
4#ifdef ROSE_ENABLE_BINARY_ANALYSIS
5
6#include <Rose/BinaryAnalysis/BasicTypes.h>
7#include <Rose/BinaryAnalysis/RegisterDescriptor.h>
8#include <Rose/Location.h>
9
10#ifdef ROSE_ENABLE_BOOST_SERIALIZATION
11#include <boost/serialization/access.hpp>
12#endif
13
14#include <ostream>
15#include <Sawyer/Optional.h>
16#include <string>
17
18namespace Rose {
19namespace BinaryAnalysis {
20
30public:
38
39private:
42 RegisterDictionaryPtr regdict_;
43
44#ifdef ROSE_ENABLE_BOOST_SERIALIZATION
45 friend class boost::serialization::access;
46 template<class S> void serialize(S&, unsigned);
47#endif
48
49public:
55 virtual ~ConcreteLocation();
56
59 ConcreteLocation& operator=(const ConcreteLocation&);
60
74 explicit ConcreteLocation(rose_addr_t);
75
87 static ConcreteLocation parse(const std::string&);
88
89 // Inherited methods
90 virtual bool isValid() const override;
91 virtual std::string toString() const override;
92 virtual void print(std::ostream&) const override;
93 virtual std::string printableName() const override;
94 virtual bool isEqual(const Location&) const override;
95 virtual bool operator<(const Location&) const override;
96 virtual bool operator<=(const Location&) const override;
97 virtual bool operator>(const Location&) const override;
98 virtual bool operator>=(const Location&) const override;
99
104 void print(std::ostream&, const RegisterDictionaryPtr&) const;
105
110 int compare(const ConcreteLocation&) const;
111
113 Type type() const;
114
129
134 rose_addr_t address() const;
135
140 int64_t offset() const;
141};
142
143} // namespace
144} // namespace
145
146#endif
147#endif
int compare(const ConcreteLocation &) const
Compare two concrete locations.
RegisterDictionaryPtr registerDictionary() const
Property: Register dictionary.
Type type() const
Type of location.
virtual void print(std::ostream &) const override
Output location to a stream.
ConcreteLocation()
Default constructor.
void print(std::ostream &, const RegisterDictionaryPtr &) const
Print using the specified register dictionary.
virtual std::string toString() const override
Convert location to string.
ConcreteLocation(const ConcreteLocation &)
Copy constructor.
virtual bool isEqual(const Location &) const override
Equality and inequality.
void registerDictionary(const RegisterDictionaryPtr &)
Property: Register dictionary.
ConcreteLocation(RegisterDescriptor, const RegisterDictionaryPtr &)
Register location.
@ NO_LOCATION
Used by default-constructed locations.
@ REGISTER
Parameter is in a register.
@ RELATIVE
Parameter in memory relative to a register.
@ ABSOLUTE
Parameter is at a fixed memory address.
virtual bool isValid() const override
Test whether this object is valid.
RegisterDescriptor reg() const
Register part of the location.
ConcreteLocation(RegisterDescriptor, int64_t offset, const RegisterDictionaryPtr &)
Register and offset location.
rose_addr_t address() const
Address part of the location.
ConcreteLocation(RegisterDescriptor)
Register location.
ConcreteLocation(rose_addr_t)
Address location.
int64_t offset() const
Offset part of the location.
static ConcreteLocation parse(const std::string &)
Parse a concrete location from a string.
ConcreteLocation(RegisterDescriptor, int64_t offset)
Register and offset location.
virtual std::string printableName() const override
Convert location to escaped, parsable string.
Describes (part of) a physical CPU register.
Base class for location types.
Definition Location.h:23
Holds a value or nothing.
Definition Optional.h:56
The ROSE library.