1*f6217f89SApple OSS Distributionsfrom memory import IterateZPerCPU 2*f6217f89SApple OSS Distributionsfrom xnu import ( 3*f6217f89SApple OSS Distributions LazyTarget, value, ArgumentError, 4*f6217f89SApple OSS Distributions lldb_command, lldb_type_summary, header 5*f6217f89SApple OSS Distributions) 6*f6217f89SApple OSS Distributions 7*f6217f89SApple OSS Distributions 8*f6217f89SApple OSS Distributions@lldb_type_summary(['scalable_counter_t']) 9*f6217f89SApple OSS Distributions@header("Counter Value\n-------------") 10*f6217f89SApple OSS Distributionsdef GetSimpleCounter(counter): 11*f6217f89SApple OSS Distributions """ Prints out the value of a percpu counter 12*f6217f89SApple OSS Distributions params: counter: value - value object representing counter 13*f6217f89SApple OSS Distributions returns: str - THe value of the counter as a string. 14*f6217f89SApple OSS Distributions """ 15*f6217f89SApple OSS Distributions val = 0 16*f6217f89SApple OSS Distributions for v in IterateZPerCPU(counter): 17*f6217f89SApple OSS Distributions val += v 18*f6217f89SApple OSS Distributions return str(val) 19*f6217f89SApple OSS Distributions 20*f6217f89SApple OSS Distributions@lldb_command('showcounter') 21*f6217f89SApple OSS Distributionsdef ShowSimpleCounter(cmd_args=None): 22*f6217f89SApple OSS Distributions """ Show the value of a percpu counter. 23*f6217f89SApple OSS Distributions Usage: showcounter <address of counter> 24*f6217f89SApple OSS Distributions """ 25*f6217f89SApple OSS Distributions if cmd_args is None or len(cmd_args) == 0: 26*f6217f89SApple OSS Distributions raise ArgumentError("Please specify the address of the " 27*f6217f89SApple OSS Distributions "counter you want to read.") 28*f6217f89SApple OSS Distributions 29*f6217f89SApple OSS Distributions val = LazyTarget.GetTarget().chkCreateValueFromExpression( 30*f6217f89SApple OSS Distributions 'value', f"(scalable_counter_t){cmd_args[0]}") 31*f6217f89SApple OSS Distributions print(GetSimpleCounter(value(val))) 32