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