xref: /xnu-11417.101.15/tools/lldbmacros/workload.py (revision e3723e1f17661b24996789d8afc084c0c3303b26)
1*e3723e1fSApple OSS Distributionsfrom xnu import *
2*e3723e1fSApple OSS Distributions
3*e3723e1fSApple OSS Distributions@lldb_type_summary(['workload_config_entry_t *'])
4*e3723e1fSApple OSS Distributions@header("{0: <20s} {1: <40s} {2: <18s} {3: <18s}".format("workload", "id", "default phase", "phases"))
5*e3723e1fSApple OSS Distributionsdef GetWorkloadConfigSummary(workload):
6*e3723e1fSApple OSS Distributions    """ Summarizes workload_config_entry structure
7*e3723e1fSApple OSS Distributions        params: workload: value - value object representing workload_config_entry
8*e3723e1fSApple OSS Distributions        returns: str - summary of the workload object
9*e3723e1fSApple OSS Distributions    """
10*e3723e1fSApple OSS Distributions    format_string = '{0: <#020x} {1: <40s} {2: <#018x} {2: <#018x}'
11*e3723e1fSApple OSS Distributions    return format_string.format(workload, str(workload.wce_id), workload.wce_default, workload.wce_phases)
12*e3723e1fSApple OSS Distributions
13*e3723e1fSApple OSS Distributions
14*e3723e1fSApple OSS Distributions@lldb_type_summary(['workload_phase_entry_t *'])
15*e3723e1fSApple OSS Distributions@header("{0: <20s} {1: <25s} {2: <10s} {3: <10s} {4: <10s} {5: <20s}".format("phase", "id", "flags", "cflags", "tflags", "criticality offset"))
16*e3723e1fSApple OSS Distributionsdef GetWorkloadPhaseSummary(phase):
17*e3723e1fSApple OSS Distributions    """ Summarizes workload_phase_entry structure
18*e3723e1fSApple OSS Distributions        params: phase: value - value object representing workload_phase_entry
19*e3723e1fSApple OSS Distributions        returns: str - summary of the workload phase object
20*e3723e1fSApple OSS Distributions    """
21*e3723e1fSApple OSS Distributions
22*e3723e1fSApple OSS Distributions    format_string = '{0: <#020x} {1: <25s} {2: <#010x} {3: <#010x} {4: <#010x} {4: <20d} '
23*e3723e1fSApple OSS Distributions    return format_string.format(phase, str(phase.wpe_phase), phase.wpe_config.wc_flags, phase.wpe_config.wc_create_flags, phase.wpe_config.wc_thread_group_flags, phase.wpe_config.wc_criticality_offset)
24*e3723e1fSApple OSS Distributions
25*e3723e1fSApple OSS Distributions# Macro: showallworkloadconfig
26*e3723e1fSApple OSS Distributions
27*e3723e1fSApple OSS Distributions@lldb_command('showallworkloadconfig')
28*e3723e1fSApple OSS Distributionsdef ShowAllWorkloadConfig(cmd_args=None, cmd_options={}):
29*e3723e1fSApple OSS Distributions    """  Routine to print the all workload configurations.
30*e3723e1fSApple OSS Distributions         Usage: showallworkloadconfig
31*e3723e1fSApple OSS Distributions    """
32*e3723e1fSApple OSS Distributions
33*e3723e1fSApple OSS Distributions    print(GetWorkloadConfigSummary.header)
34*e3723e1fSApple OSS Distributions    table = kern.globals.workload_config_boot.wlcc_hashtbl
35*e3723e1fSApple OSS Distributions    mask = kern.globals.workload_config_boot.wlcc_hash_mask
36*e3723e1fSApple OSS Distributions
37*e3723e1fSApple OSS Distributions    if table != 0:
38*e3723e1fSApple OSS Distributions        for i in range(mask + 1):
39*e3723e1fSApple OSS Distributions            for entry in IterateListEntry(table[i], 'wce_link'):
40*e3723e1fSApple OSS Distributions                print(GetWorkloadConfigSummary(entry))
41*e3723e1fSApple OSS Distributions
42*e3723e1fSApple OSS Distributions# EndMacro: showallworkloadconfig
43*e3723e1fSApple OSS Distributions
44*e3723e1fSApple OSS Distributions
45*e3723e1fSApple OSS Distributions# Macro: showworkloadconfig
46*e3723e1fSApple OSS Distributions
47*e3723e1fSApple OSS Distributions@lldb_command('showworkloadconfig', 'F:')
48*e3723e1fSApple OSS Distributionsdef ShowWorkloadConfig(cmd_args=None, cmd_options={}):
49*e3723e1fSApple OSS Distributions    """  Routine to print a summary listing of given workload config
50*e3723e1fSApple OSS Distributions         Usage: showworkloadconfig <address of workload config>
51*e3723e1fSApple OSS Distributions         or   : showworkloadconfig -F <workload config id>
52*e3723e1fSApple OSS Distributions    """
53*e3723e1fSApple OSS Distributions
54*e3723e1fSApple OSS Distributions    if "-F" in cmd_options:
55*e3723e1fSApple OSS Distributions        print(GetWorkloadConfigSummary.header)
56*e3723e1fSApple OSS Distributions        table = kern.globals.workload_config_boot.wlcc_hashtbl
57*e3723e1fSApple OSS Distributions        mask = kern.globals.workload_config_boot.wlcc_hash_mask
58*e3723e1fSApple OSS Distributions
59*e3723e1fSApple OSS Distributions        if table != 0:
60*e3723e1fSApple OSS Distributions            for i in range(mask + 1):
61*e3723e1fSApple OSS Distributions                for entry in IterateListEntry(table[i], 'wce_link'):
62*e3723e1fSApple OSS Distributions                    if cmd_options['-F'] == str(entry.wce_id):
63*e3723e1fSApple OSS Distributions                        print(GetWorkloadConfigSummary(entry))
64*e3723e1fSApple OSS Distributions                        return
65*e3723e1fSApple OSS Distributions    else:
66*e3723e1fSApple OSS Distributions        if cmd_args is None or len(cmd_args) == 0:
67*e3723e1fSApple OSS Distributions            raise ArgumentError("Invalid arguments passed.")
68*e3723e1fSApple OSS Distributions        entry = kern.GetValueFromAddress(cmd_args[0], 'workload_config_entry_t *')
69*e3723e1fSApple OSS Distributions        print(GetWorkloadConfigSummary.header)
70*e3723e1fSApple OSS Distributions        print(GetWorkloadConfigSummary(entry))
71*e3723e1fSApple OSS Distributions
72*e3723e1fSApple OSS Distributions# EndMacro: showworkloadconfig
73*e3723e1fSApple OSS Distributions
74*e3723e1fSApple OSS Distributions
75*e3723e1fSApple OSS Distributions# Macro: showworkloadconfigphases
76*e3723e1fSApple OSS Distributions
77*e3723e1fSApple OSS Distributions@lldb_command('showworkloadconfigphases')
78*e3723e1fSApple OSS Distributionsdef ShowWorkloadConfigPhases(cmd_args=None, cmd_options={}):
79*e3723e1fSApple OSS Distributions    """  Routine to print the workload configuration phases of the specified workload config.
80*e3723e1fSApple OSS Distributions         Usage: showworkloadconfigphases <workload config>
81*e3723e1fSApple OSS Distributions    """
82*e3723e1fSApple OSS Distributions
83*e3723e1fSApple OSS Distributions    if cmd_args is None or len(cmd_args) == 0:
84*e3723e1fSApple OSS Distributions        raise ArgumentError("Invalid arguments passed.")
85*e3723e1fSApple OSS Distributions
86*e3723e1fSApple OSS Distributions    print(GetWorkloadPhaseSummary.header)
87*e3723e1fSApple OSS Distributions
88*e3723e1fSApple OSS Distributions    entry = kern.GetValueFromAddress(cmd_args[0], 'workload_config_entry_t *')
89*e3723e1fSApple OSS Distributions    for phase in IterateListEntry(entry.wce_phases, 'wpe_link'):
90*e3723e1fSApple OSS Distributions            print(GetWorkloadPhaseSummary(phase))
91*e3723e1fSApple OSS Distributions
92*e3723e1fSApple OSS Distributions# EndMacro: showworkloadconfigphases
93*e3723e1fSApple OSS Distributions
94