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