• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 #include "env.h"
2 #include "base_object-inl.h"
3 #include "handle_wrap.h"
4 #include "util-inl.h"
5 #include "req_wrap.h"
6 #include "v8abbr.h"
7 #include "node_context_data.h"
8 
9 #define NODEDBG_SYMBOL(Name)  nodedbg_ ## Name
10 
11 // nodedbg_offset_CLASS__MEMBER__TYPE: Describes the offset to a class member.
12 #define NODEDBG_OFFSET(Class, Member, Type) \
13     NODEDBG_SYMBOL(offset_ ## Class ## __ ## Member ## __ ## Type)
14 
15 // These are the constants describing Node internal structures. Every constant
16 // should use the format described above.  These constants are declared as
17 // global integers so that they'll be present in the generated node binary. They
18 // also need to be declared outside any namespace to avoid C++ name-mangling.
19 #define NODE_OFFSET_POSTMORTEM_METADATA(V)                                    \
20   V(BaseObject, persistent_handle_, v8_Persistent_v8_Object,                  \
21     BaseObject::persistent_handle_)                                           \
22   V(Environment, handle_wrap_queue_, Environment_HandleWrapQueue,             \
23     Environment::handle_wrap_queue_)                                          \
24   V(Environment, req_wrap_queue_, Environment_ReqWrapQueue,                   \
25     Environment::req_wrap_queue_)                                             \
26   V(HandleWrap, handle_wrap_queue_, ListNode_HandleWrap,                      \
27     HandleWrap::handle_wrap_queue_)                                           \
28   V(Environment_HandleWrapQueue, head_, ListNode_HandleWrap,                  \
29     Environment::HandleWrapQueue::head_)                                      \
30   V(ListNode_HandleWrap, prev_, uintptr_t, ListNode<HandleWrap>::prev_)       \
31   V(ListNode_HandleWrap, next_, uintptr_t, ListNode<HandleWrap>::next_)       \
32   V(Environment_ReqWrapQueue, head_, ListNode_ReqWrapQueue,                   \
33     Environment::ReqWrapQueue::head_)                                         \
34   V(ListNode_ReqWrap, prev_, uintptr_t, ListNode<ReqWrapBase>::prev_)         \
35   V(ListNode_ReqWrap, next_, uintptr_t, ListNode<ReqWrapBase>::next_)
36 
37 extern "C" {
38 int nodedbg_const_ContextEmbedderIndex__kEnvironment__int;
39 uintptr_t nodedbg_offset_ExternalString__data__uintptr_t;
40 uintptr_t nodedbg_offset_ReqWrap__req_wrap_queue___ListNode_ReqWrapQueue;
41 
42 #define V(Class, Member, Type, Accessor)                                      \
43   NODE_EXTERN uintptr_t NODEDBG_OFFSET(Class, Member, Type);
44   NODE_OFFSET_POSTMORTEM_METADATA(V)
45 #undef V
46 }
47 
48 namespace node {
49 
GenDebugSymbols()50 int GenDebugSymbols() {
51   nodedbg_const_ContextEmbedderIndex__kEnvironment__int =
52       ContextEmbedderIndex::kEnvironment;
53 
54   nodedbg_offset_ExternalString__data__uintptr_t = NODE_OFF_EXTSTR_DATA;
55   nodedbg_offset_ReqWrap__req_wrap_queue___ListNode_ReqWrapQueue =
56       OffsetOf<ListNode<ReqWrapBase>, ReqWrap<uv_req_t>>(
57           &ReqWrap<uv_req_t>::req_wrap_queue_);
58 
59   #define V(Class, Member, Type, Accessor)                                    \
60     NODEDBG_OFFSET(Class, Member, Type) = OffsetOf(&Accessor);
61     NODE_OFFSET_POSTMORTEM_METADATA(V)
62   #undef V
63 
64   return 1;
65 }
66 
67 const int debug_symbols_generated = GenDebugSymbols();
68 
69 }  // namespace node
70