File: stop_hook.py

package info (click to toggle)
llvm-toolchain-20 1%3A20.1.8-1~exp1
  • links: PTS, VCS
  • area: main
  • in suites: experimental
  • size: 2,111,388 kB
  • sloc: cpp: 7,438,767; ansic: 1,393,871; asm: 1,012,926; python: 241,728; f90: 86,635; objc: 75,411; lisp: 42,144; pascal: 17,286; sh: 10,027; ml: 5,082; perl: 4,730; awk: 3,523; makefile: 3,349; javascript: 2,251; xml: 892; fortran: 672
file content (35 lines) | stat: -rw-r--r-- 1,550 bytes parent folder | download | duplicates (16)
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
import lldb
import time

class StopHook:
    # These dictionaries are used to pass data back to the test case.
    # Since these are global, we need to know which test run is which.
    # The test passes a key in the extra_args, we use that as the key
    # for these dictionaries, and then the test can fetch out the right
    # one.
    counter = {}
    non_stops = {}
    def __init__(self, target, extra_args, dict):
        self.target = target
        self.regs = {}
        self.instance = extra_args.GetValueForKey("instance").GetStringValue(100)
        StopHook.counter[self.instance] = 0
        StopHook.non_stops[self.instance] = 0
        
    def handle_stop(self, exe_ctx, stream):
        import time
        # All this stop hook does is sleep a bit and count.  There was a bug
        # where we were sending the secondary listener events when the
        # private state thread's DoOnRemoval completed, rather than when
        # the primary public process Listener consumes the event.  That
        # became really clear when a stop hook artificially delayed the
        # delivery of the primary listener's event - since IT had to come
        # after the stop hook ran.
        time.sleep(0.5)
        StopHook.counter[self.instance] += 1
        # When we were sending events too early, one symptom was the stop
        # event would get triggered before the state had been changed.
        # Watch for that here.
        if exe_ctx.process.GetState() != lldb.eStateStopped:
            StopHook.non_stops[self.instance] += 1