P4C
The P4 Compiler
Loading...
Searching...
No Matches
lib/concolic.h
1/*
2 * SPDX-FileCopyrightText: 2022 The P4 Language Consortium
3 *
4 * SPDX-License-Identifier: Apache-2.0
5 */
6
7#ifndef BACKENDS_P4TOOLS_MODULES_TESTGEN_LIB_CONCOLIC_H_
8#define BACKENDS_P4TOOLS_MODULES_TESTGEN_LIB_CONCOLIC_H_
9
10#include <sys/types.h>
11
12#include <functional>
13#include <list>
14#include <tuple>
15#include <utility>
16#include <variant>
17#include <vector>
18
19#include "backends/p4tools/common/lib/model.h"
20#include "ir/ir.h"
21#include "ir/vector.h"
22#include "ir/visitor.h"
23#include "lib/cstring.h"
24#include "lib/ordered_map.h"
25
26#include "backends/p4tools/modules/testgen/lib/execution_state.h"
27
28namespace P4::P4Tools::P4Testgen {
29
35using ConcolicVariableMap =
36 ordered_map<std::variant<IR::ConcolicVariable, const IR::Expression *>, const IR::Expression *>;
37
39class ConcolicMethodImpls {
40 private:
41 using MethodImpl = std::function<void(
42 cstring concolicMethodName, const IR::ConcolicVariable *var, const ExecutionState &state,
43 const Model &evaluatedModel, ConcolicVariableMap *resolvedConcolicVariables)>;
44
46 impls;
47
48 static bool matches(const std::vector<cstring> &paramNames,
49 const IR::Vector<IR::Argument> *args);
50
51 public:
52 using ImplList = std::list<std::tuple<cstring, std::vector<cstring>, MethodImpl>>;
53
54 explicit ConcolicMethodImpls(const ImplList &implList);
55
56 bool exec(cstring concolicMethodName, const IR::ConcolicVariable *var,
57 const ExecutionState &state, const Model &evaluatedModel,
58 ConcolicVariableMap *resolvedConcolicVariables) const;
59
60 void add(const ImplList &implList);
61};
62
63class ConcolicResolver : public Inspector {
64 public:
65 explicit ConcolicResolver(const Model &evaluatedModel, const ExecutionState &state,
66 const ConcolicMethodImpls &concolicMethodImpls);
67
68 ConcolicResolver(const Model &evaluatedModel, const ExecutionState &state,
69 const ConcolicMethodImpls &concolicMethodImpls,
70 ConcolicVariableMap resolvedConcolicVariables);
71
72 const ConcolicVariableMap *getResolvedConcolicVariables() const;
73
74 private:
75 bool preorder(const IR::ConcolicVariable *var) override;
76
78 const ExecutionState &state;
79
81 const Model &evaluatedModel;
82
85 ConcolicVariableMap resolvedConcolicVariables;
86
89 const ConcolicMethodImpls &concolicMethodImpls;
90};
91
92class Concolic {
93 public:
94 static const ConcolicMethodImpls::ImplList *getCoreConcolicMethodImpls();
95};
96
97} // namespace P4::P4Tools::P4Testgen
98
99#endif /* BACKENDS_P4TOOLS_MODULES_TESTGEN_LIB_CONCOLIC_H_ */
Definition ir/vector.h:59
Definition backends/p4tools/common/lib/model.h:24
Definition lib/concolic.h:92
Encapsulates a set of concolic method implementations.
Definition lib/concolic.h:39
Represents state of execution after having reached a program point.
Definition execution_state.h:40
Definition cstring.h:85
Definition ordered_map.h:32