-
Notifications
You must be signed in to change notification settings - Fork 119
/
unwind.h
69 lines (50 loc) · 1.89 KB
/
unwind.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
/*
Copyright 2021 Google LLC
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
https ://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
#ifndef UNWIND_H
#define UNWIND_H
class TinyInst;
class ModuleInfo;
class UnwindData {
public:
virtual ~UnwindData() = default;
};
class UnwindGenerator {
public:
UnwindGenerator(TinyInst& tinyinst) : tinyinst_(tinyinst) {}
virtual ~UnwindGenerator() = default;
virtual void Init(int argc, char **argv) {}
virtual void OnModuleInstrumented(ModuleInfo* module) { }
virtual void OnModuleUninstrumented(ModuleInfo* module) { }
virtual size_t MaybeRedirectExecution(ModuleInfo* module, size_t IP) {
return IP;
}
virtual void OnBasicBlockStart(ModuleInfo* module,
size_t original_address,
size_t translated_address)
{ }
virtual void OnInstruction(ModuleInfo* module,
size_t original_address,
size_t translated_address)
{ }
virtual void OnBasicBlockEnd(ModuleInfo* module,
size_t original_address,
size_t translated_address)
{ }
virtual void OnModuleLoaded(void *module, char *module_name) { }
virtual void OnReturnAddress(ModuleInfo *module, size_t original_address, size_t translated_address) { }
virtual bool HandleBreakpoint(ModuleInfo* module, void *address) { return false; }
virtual bool Is64BitOnly() { return false; }
protected:
TinyInst& tinyinst_;
};
#endif // UNWIND_H