1 # Print given Fiber state
2 # arg0 folly::fibers::Fiber*
3 define print_folly_fiber_state
4 set $fiber = (folly::fibers::Fiber*)$arg0
5 if $fiber->state_ == folly::fibers::Fiber::INVALID
8 if $fiber->state_ == folly::fibers::Fiber::NOT_STARTED
11 if $fiber->state_ == folly::fibers::Fiber::READY_TO_RUN
14 if $fiber->state_ == folly::fibers::Fiber::RUNNING
17 if $fiber->state_ == folly::fibers::Fiber::AWAITING
20 if $fiber->state_ == folly::fibers::Fiber::AWAITING_IMMEDIATE
21 printf "Awaiting immediate"
23 if $fiber->state_ == folly::fibers::Fiber::YIELDED
29 # arg0 folly::fibers::Fiber*
30 define print_folly_fiber
31 set $fiber = (folly::fibers::Fiber*)$arg0
32 printf " (folly::fibers::Fiber*)%p\n\n", $fiber
35 print_folly_fiber_state $fiber
38 if $fiber->state_ != folly::fibers::Fiber::INVALID && \
39 $fiber->state_ != folly::fibers::Fiber::NOT_STARTED && \
40 $fiber->state_ != folly::fibers::Fiber::RUNNING
41 printf " Backtrace:\n"
42 set $frameptr = ((uint64_t*)$fiber->fiberImpl_.fiberContext_)[6]
45 printf " #%d at %p in ", $k, *((void**)($frameptr+8))
47 info symbol *((void**)($frameptr+8))
48 set $frameptr = *((void**)($frameptr))
53 # Print given FiberManager
54 # arg0 folly::fibers::FiberManager*
55 define print_folly_fiber_manager
56 set $fiberManager = (folly::fibers::FiberManager*)$arg0
58 printf " (folly::fibers::FiberManager*)%p\n\n", $fiberManager
59 printf " Fibers active: %d\n", $fiberManager->fibersActive_
60 printf " Fibers allocated: %d\n", $fiberManager->fibersAllocated_
61 printf " Fibers pool size: %d\n", $fiberManager->fibersPoolSize_
62 printf " Active fiber: (folly::fibers::Fiber*)%p\n", \
63 $fiberManager->activeFiber_
64 printf " Current fiber: (folly::fibers::Fiber*)%p\n", \
65 $fiberManager->currentFiber_
67 set $all_fibers = &($fiberManager->allFibers_.data_.root_plus_size_.m_header)
68 set $fiber_hook = $all_fibers->next_
69 printf "\n Active fibers:\n"
70 while $fiber_hook != $all_fibers
71 set $fiber = (folly::fibers::Fiber*) \
72 ((int64_t)$fiber_hook - \
73 (int64_t)&folly::fibers::Fiber::globalListHook_)
74 if $fiber->state_ != folly::fibers::Fiber::INVALID
75 printf " (folly::fibers::Fiber*)%p State: ", $fiber
76 print_folly_fiber_state $fiber
79 set $fiber_hook = $fiber_hook->next_
83 # Print global FiberManager map
84 define print_folly_fiber_manager_map
85 set $global_cache=*(('folly::fibers::(anonymous namespace)::GlobalCache'**) \
86 &'folly::fibers::(anonymous namespace)::GlobalCache::instance()::ret')
87 printf " Global FiberManager map has %d entries.\n", \
88 $global_cache->map_->_M_h->_M_element_count
90 set $item = $global_cache->map_->_M_h->_M_before_begin._M_nxt
92 set $evb = ((folly::EventBase**)$item)[1]
93 set $fiberManager = ((folly::fibers::FiberManager**)$item)[2]
94 printf " (folly::EventBase*)%p -> (folly::fibers::FiberManager*)%p\n", \
97 set $item = $item->_M_nxt