-
-
Notifications
You must be signed in to change notification settings - Fork 102
Expand file tree
/
Copy pathnode.cc
More file actions
76 lines (61 loc) · 2.02 KB
/
node.cc
File metadata and controls
76 lines (61 loc) · 2.02 KB
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
70
71
72
73
74
75
76
#include "node.h"
namespace llnode {
namespace node {
addr_t BaseObject::Persistent(Error& err) {
lldb::SBError sberr;
addr_t persistent_ptr = raw_ + node_->base_object()->kPersistentHandleOffset;
addr_t persistent =
node_->process().ReadPointerFromMemory(persistent_ptr, sberr);
if (sberr.Fail()) {
err = Error::Failure("Failed to load persistent handle");
return 0;
}
return persistent;
}
addr_t BaseObject::Object(Error& err) {
lldb::SBError sberr;
addr_t persistent = Persistent(err);
addr_t obj = node_->process().ReadPointerFromMemory(persistent, sberr);
if (sberr.Fail()) {
err = Error::Failure("Failed to load object from persistent handle");
return 0;
}
return obj;
}
HandleWrap HandleWrap::GetItemFromList(Node* node, addr_t list_node_addr) {
return HandleWrap(node,
list_node_addr - node->handle_wrap()->kListNodeOffset);
}
ReqWrap ReqWrap::GetItemFromList(Node* node, addr_t list_node_addr) {
return ReqWrap(node, list_node_addr - node->req_wrap()->kListNodeOffset);
}
Environment Environment::GetCurrent(Node* node, Error& err) {
addr_t envAddr = node->env()->kCurrentEnvironment;
if (envAddr == 0) {
err = Error::Failure("Couldn't get node's Environment");
}
return Environment(node, envAddr);
}
HandleWrapQueue Environment::handle_wrap_queue() const {
return HandleWrapQueue(node_, raw_ + node_->env()->kHandleWrapQueueOffset,
node_->handle_wrap_queue());
}
ReqWrapQueue Environment::req_wrap_queue() const {
return ReqWrapQueue(node_, raw_ + node_->env()->kReqWrapQueueOffset,
node_->req_wrap_queue());
}
void Node::Load(SBTarget target) {
// Reload process anyway
process_ = target.GetProcess();
// No need to reload
if (target_ == target) return;
target_ = target;
env.Assign(target);
req_wrap_queue.Assign(target);
req_wrap.Assign(target);
handle_wrap_queue.Assign(target);
handle_wrap.Assign(target);
base_object.Assign(target);
}
} // namespace node
} // namespace llnode