Messages in this thread | | | From | Arnaldo Carvalho de Melo <> | Date | Mon, 20 Apr 2020 17:54:24 -0300 | Subject | Re: [RFC PATCH bpf-next 0/6] bpf, printk: add BTF-based type printing |
| |
Em Sat, Apr 18, 2020 at 09:05:36AM -0700, Alexei Starovoitov escreveu: > On Fri, Apr 17, 2020 at 11:42:34AM +0100, Alan Maguire wrote: > > ...gives us: > > > > {{{.next=00000000c7916e9c,.prev=00000000c7916e9c,{.dev=00000000c7916e9c|.dev_scratch=0}}|.rbnode={.__rb_parent_color=0,
> This is unreadable. > I like the choice of C style output, but please format it similar to drgn. Like: > *(struct task_struct *)0xffff889ff8a08000 = { > .thread_info = (struct thread_info){ > .flags = (unsigned long)0, > .status = (u32)0, > }, > .state = (volatile long)1, > .stack = (void *)0xffffc9000c4dc000, > .usage = (refcount_t){ > .refs = (atomic_t){ > .counter = (int)2, > }, > }, > .flags = (unsigned int)4194560, > .ptrace = (unsigned int)0,
> I like Arnaldo's idea as well, but I prefer zeros to be dropped by default. > Just like %d doesn't print leading zeros by default. > "%p0<struct sk_buff>" would print them.
I was thinking about another way to compress the output of a given data structure someone is tracking, having to print it from time to time, which is to store a copy of the struct as you print it and then, when printing it again, print just its pointer, i.e. that:
*(struct task_struct *)0xffff889ff8a08000 = {
Line, then just printing the fields that changed, say just that refcount was bumped, so it first print:
*(struct task_struct *)0xffff889ff8a08000 = { .thread_info = (struct thread_info){ .flags = (unsigned long)0, .status = (u32)0, }, .state = (volatile long)1, .stack = (void *)0xffffc9000c4dc000, .usage = (refcount_t){ .refs = (atomic_t){ .counter = (int)2, }, }, .flags = (unsigned int)4194560, .ptrace = (unsigned int)0,
Then, the next time it would print:
*(struct task_struct *)0xffff889ff8a08000 = { .usage = (refcount_t){ .refs = (atomic_t){ .counter = (int)3, }, }, },
- Arnaldo
| |