ROSE 0.11.145.141
Rose/BinaryAnalysis/CallingConvention/BasicTypes.h
1#ifndef ROSE_BinaryAnalysis_CallingConvention_BasicTypes_H
2#define ROSE_BinaryAnalysis_CallingConvention_BasicTypes_H
3#include <featureTests.h>
4#ifdef ROSE_ENABLE_BINARY_ANALYSIS
5
6#include <Rose/BinaryAnalysis/InstructionSemantics/BaseSemantics/BasicTypes.h>
7
8#include <Sawyer/Message.h>
9
10#include <vector>
11
12namespace Rose {
13namespace BinaryAnalysis {
14namespace CallingConvention {
15
20
25
32
34enum class StackDirection {
35 GROWS_UP,
37};
38
40enum class StackCleanup {
41 BY_CALLER,
42 BY_CALLEE,
44};
45
46class Allocator;
47
51using AllocatorPtr = std::shared_ptr<Allocator>;
52using AllocatorConstPtr = std::shared_ptr<const Allocator>;
55class Analysis;
56
59
60class Declaration;
61
64
65class Definition;
66
69
71using Dictionary = std::vector<DefinitionPtr>;
72
73class StoragePoolBase;
74
78using StoragePoolBasePtr = std::shared_ptr<StoragePoolBase>;
79using StoragePoolBaseConstPtr = std::shared_ptr<const StoragePoolBase>;
83
87using StoragePoolEnumeratedPtr = std::shared_ptr<StoragePoolEnumerated>;
88using StoragePoolEnumeratedConstPtr = std::shared_ptr<const StoragePoolEnumerated>;
92
96using StoragePoolStackPtr = std::shared_ptr<StoragePoolStack>;
97using StoragePoolStackConstPtr = std::shared_ptr<const StoragePoolStack>;
100class TypePredicate;
101
105using TypePredicatePtr = std::shared_ptr<TypePredicate>;
106using TypePredicateConstPtr = std::shared_ptr<const TypePredicate>;
110// Free functions
112
116
119 size_t argNumber, const InstructionSemantics::BaseSemantics::SValuePtr &value);
120
124
128
133
135std::ostream& operator<<(std::ostream&, const Definition&);
136
138std::ostream& operator<<(std::ostream&, const Analysis&);
139
140} // namespace
141} // namespace
142} // namespace
143
144#endif
145#endif
Information about calling conventions.
Definition Definition.h:30
A storage pool for stack-based argument locations.
Collection of streams.
Definition Message.h:1606
Reference-counting intrusive smart pointer.
std::shared_ptr< TypePredicate > TypePredicatePtr
Shared-ownership pointer to TypePredicate.
std::shared_ptr< const StoragePoolEnumerated > StoragePoolEnumeratedConstPtr
Shared-ownership pointer to StoragePoolEnumerated.
void writeArgument(const InstructionSemantics::BaseSemantics::RiscOperatorsPtr &, const DefinitionPtr &, size_t argNumber, const InstructionSemantics::BaseSemantics::SValuePtr &value)
Write a function argument to a semantic state.
void writeReturnValue(const InstructionSemantics::BaseSemantics::RiscOperatorsPtr &, const DefinitionPtr &, const InstructionSemantics::BaseSemantics::SValuePtr &returnValue)
Write a value to a function return semantic state.
std::shared_ptr< const Allocator > AllocatorConstPtr
Shared-ownership pointer to Allocator.
InstructionSemantics::BaseSemantics::SValuePtr readArgument(const InstructionSemantics::BaseSemantics::RiscOperatorsPtr &, const DefinitionPtr &, size_t argNumber)
Read a function argument from a semantic state.
Sawyer::Message::Facility mlog
Facility for diagnostic output.
void simulateFunctionReturn(const InstructionSemantics::BaseSemantics::RiscOperatorsPtr &, const DefinitionPtr &)
Simulate a function return.
std::shared_ptr< Allocator > AllocatorPtr
Shared-ownership pointer to Allocator.
std::shared_ptr< StoragePoolStack > StoragePoolStackPtr
Shared-ownership pointer to StoragePoolStack.
StackParameterOrder
The order that arguments are pushed onto the stack.
@ RIGHT_TO_LEFT
Stack parameters pushed right to left (C order).
@ UNSPECIFIED
Stack parameter order is unknown or unspecified.
@ LEFT_TO_RIGHT
Stack parameters pushed left to right (Pascal order).
std::shared_ptr< const StoragePoolBase > StoragePoolBaseConstPtr
Shared-ownership pointer to StoragePoolBase.
void initDiagnostics()
Initialize diagnostics.
StackCleanup
Who is responsible for popping stack parameters.
@ BY_CALLEE
The called function pops all stack parameters.
@ BY_CALLER
The caller pops all stack parameters.
std::shared_ptr< const TypePredicate > TypePredicateConstPtr
Shared-ownership pointer to TypePredicate.
std::ostream & operator<<(std::ostream &, const Definition &)
Print a definition.
InstructionSemantics::BaseSemantics::SValuePtr readReturnValue(const InstructionSemantics::BaseSemantics::RiscOperatorsPtr &, const DefinitionPtr &)
Read the return value that a function is returning.
std::shared_ptr< StoragePoolEnumerated > StoragePoolEnumeratedPtr
Shared-ownership pointer to StoragePoolEnumerated.
@ GROWS_DOWN
A push decrements the stack pointer.
@ GROWS_UP
A push increments the stack pointer.
std::vector< DefinitionPtr > Dictionary
An ordered collection of calling convention definitions.
std::shared_ptr< StoragePoolBase > StoragePoolBasePtr
Shared-ownership pointer to StoragePoolBase.
std::shared_ptr< const StoragePoolStack > StoragePoolStackConstPtr
Shared-ownership pointer to StoragePoolStack.
boost::shared_ptr< RiscOperators > RiscOperatorsPtr
Shared-ownership pointer to a RISC operators object.
The ROSE library.