import sys
import lldb

def stop_if_called_from_a(frame, bp_loc, dict):

    thread = frame.GetThread()
    process = thread.GetProcess()
    target = process.GetTarget()
    dbg = target.GetDebugger()

    # Perform synchronous interaction with the debugger.
    old_async = dbg.GetAsync()
    dbg.SetAsync(True)

    # We check the call frames in order to stop only when the immediate caller
    # of the leaf function c() is a().  If it's not the right caller, we ask the
    # command interpreter to continue execution.

    should_stop = True
    if thread.GetNumFrames() >= 2:

        if (thread.frames[0].function.name == 'c' and thread.frames[1].function.name == 'a'):
            should_stop = True
        else:
            process.Continue()
            should_stop = False

    dbg.SetAsync(old_async)
    return should_stop


