Arnaldo Carvalho de Melo
212b994ab5
strings: Introduce the strings class
...
And make the dwarves use it, so that we can remove duplicate strings in
a multi-CU file (vmlinux anyone?) and have it ready for insertion in a
compressed DWARF format with just the types, or better, CTF or some new
compressed debugging info format.
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2008-10-02 14:34:42 -03:00
Arnaldo Carvalho de Melo
efa997ed40
dwarves: Remove type_emissions fields from cus
...
Now only when one wants to emit this struct is needed.
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2008-10-01 12:47:42 -03:00
Arnaldo Carvalho de Melo
c3f6f8b79f
dwarves_emit: Introduce type_emissions
...
We may want to work on just one object file, not on a multi cu.
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2008-10-01 11:26:51 -03:00
Arnaldo Carvalho de Melo
46d63102eb
[DWARVES]: Fixup usage messages
...
Thanks to Ilpo Järvinen for getting this to my attention.
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2008-01-31 09:30:55 -02:00
Arnaldo Carvalho de Melo
5bc698ab1b
[DUTIL]: Move __unused definition to dutil.h
...
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2007-12-16 14:47:59 -02:00
Arnaldo Carvalho de Melo
ef45383d22
[LIB] lexblock: Show the lexblock low_pc info as offsets from the function where they appear
...
__wsum csum_partial_copy_to_user(const void * src, void * dst, int len, __wsum isum, int * errp);
{ /* low_pc=0xffffffff8128ed37 */
{ /* csum_partial_copy_to_user+0x11 */
long unsigned int flag; // 76
long unsigned int roksum; // 76
current_thread_info(void); /* size=9, low_pc=0xffffffff8128ed4b */ // 76
} /* lexblock size=32 */
{ /* csum_partial_copy_to_user+0x49 */
__u16 val16; // 83
add32_with_carry(unsigned int a,
unsigned int b); /* size=8, low_pc=0xffffffff8128ed83 */ // 84
{ /* csum_partial_copy_to_user+0x54 */
int __pu_err; // 86
} /* lexblock size=5 */
} /* lexblock size=35 */
}/* size: 149 */
/* definitions: 1 */
Signed-off-by: Arnaldo Carvalho de Melo <acme@ghostprotocols.net>
2007-07-31 14:00:44 -03:00
Arnaldo Carvalho de Melo
cf124f1636
[LIB]: Introduce tag__is_struct() for a common idiom
...
And also to get this less, ho-hum, DWARF specific.
Signed-off-by: Arnaldo Carvalho de Melo <acme@ghostprotocols.net>
2007-05-31 01:53:01 -03:00
Arnaldo Carvalho de Melo
48a1d89ec0
[LIB]: Introduce conf_fprintf.no_semicolon
...
To indicate wheter the semicolon should be supressed. Useful for
prototype/function emission, etc.
Also move the struct stats to be inside its body, to simplify tag__fprintf,
that now looks at conf.no_semicolon after calling the tag type specific
__fprintf method.
Signed-off-by: Arnaldo Carvalho de Melo <acme@ghostprotocols.net>
2007-05-31 01:39:44 -03:00
Arnaldo Carvalho de Melo
c0c76ca287
[PDWTAGS]: Use argp, for now just to select if the decl info is to be shown
...
Signed-off-by: Arnaldo Carvalho de Melo <acme@ghostprotocols.net>
2007-05-26 10:29:02 -03:00
Arnaldo Carvalho de Melo
53ede5ee16
[PDWTAGS]: Use conf_fprintf in pdwtags
...
So that it prints struct stats and decl info (file/line number were tags were
declared).
Signed-off-by: Arnaldo Carvalho de Melo <acme@ghostprotocols.net>
2007-05-24 17:19:21 -03:00
Arnaldo Carvalho de Melo
262a5d24ea
[LIB]: Introduce conf_fprintf
...
So that we can go on adding more config knobs without requiring adding new
parameters to lots of functions.
Signed-off-by: Arnaldo Carvalho de Melo <acme@ghostprotocols.net>
2007-04-28 16:13:35 -03:00
Arnaldo Carvalho de Melo
711d96943a
[LIB]: Use a base_offset when printing inner structs
...
That way we can have the offsets from the top level struct. If the user wants
to focus some inner struct, just call the tool again specifying the inner
struct name.
Perhaps this is not so clear, shoot me, erm, no, an example should help. Look
at the member offsets (first column in the comment after each member), before
and after:
before:
acme@filo pahole]$ pahole -C tcp_sock --expand_types examples/net
/* <12a> examples/expand.c:18 */
struct tcp_sock {
struct inet_sock {
struct sock {
int protocol; /* 0 4 */
struct spinlock {
int magic; /* 0 4 */
int counter; /* 4 4 */
} sklock; /* 4 8 */
int b; /* 12 4 */
int c; /* 16 4 */
} sk; /* 0 20 */
long int daddr; /* 20 4 */
} inet; /* 0 24 */
long int cwnd; /* 24 4 */
struct spinlock {
int magic; /* 0 4 */
int counter; /* 4 4 */
} lock; /* 28 8 */
}; /* size: 36, cachelines: 1 */
/* last cacheline: 36 bytes */
After:
acme@filo pahole]$ pahole -C tcp_sock --expand_types examples/net
/* <12a> examples/expand.c:18 */
struct tcp_sock {
struct inet_sock {
struct sock {
int protocol; /* 0 4 */
struct spinlock {
int magic; /* 4 4 */
int counter; /* 8 4 */
} sklock; /* 4 8 */
int b; /* 12 4 */
int c; /* 16 4 */
} sk; /* 0 20 */
long int daddr; /* 20 4 */
} inet; /* 0 24 */
long int cwnd; /* 24 4 */
struct spinlock {
int magic; /* 28 4 */
int counter; /* 32 4 */
} lock; /* 28 8 */
}; /* size: 36, cachelines: 1 */
/* last cacheline: 36 bytes */
Signed-off-by: Arnaldo Carvalho de Melo <acme@ghostprotocols.net>
2007-04-28 10:01:54 -03:00
Arnaldo Carvalho de Melo
f85781d5b9
[LIB]: Allow of not specifying -e
...
cus__loadfl will just insert the -e and pass it up to dwfl_standard_argp.
Signed-off-by: Arnaldo Carvalho de Melo <acme@ghostprotocols.net>
2007-04-24 16:09:34 -03:00
Arnaldo Carvalho de Melo
712c9f76d8
[PDWTAGS]: Use libdwfl
...
Signed-off-by: Arnaldo Carvalho de Melo <acme@ghostprotocols.net>
2007-03-30 13:54:59 -03:00
Arnaldo Carvalho de Melo
c87d8d831a
[ALL]: Emit better diagnostic messages
...
[acme@mica pahole]$ pahole lala
pahole: Permission denied
[acme@mica pahole]$ pahole foo
pahole: No such file or directory
[acme@mica pahole]$ pahole ctracer.c
pahole: couldn't load DWARF info from ctracer.c
[acme@mica pahole]$
Thanks to Matthew Wilcox for noticing how lame it was :-)
Signed-off-by: Arnaldo Carvalho de Melo <acme@ghostprotocols.net>
2007-03-28 12:54:46 -03:00
Arnaldo Carvalho de Melo
d5a0c78a4c
[LIB]: Rename lexblock__print to lexblock__fprintf, for consistency
...
Also make it return the number of bytes printed.
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2007-02-15 11:56:16 -02:00
Arnaldo Carvalho de Melo
70f9135467
[LIB]: Rename tag__print to tag__fprintf, for consistency
...
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2007-02-15 11:40:51 -02:00
Arnaldo Carvalho de Melo
aab506fdcc
[LIB]: Pass a FILE pointer to the __print routines
...
So that in tools like ctracer we can print to a file, most of the tools just
pass stdout, keeping the previous behaviour.
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2007-02-01 13:50:28 -02:00
Arnaldo Carvalho de Melo
2de67fcaf4
[PAHOLE]: Implement type expansion
...
What is in a struct...
[acme@filo pahole]$ pahole net/ipv6/tcp_ipv6.o delayed_work
/* <2bc9> /home/acme/git/linux-2.6/include/linux/workqueue.h:37 */
struct delayed_work {
struct work_struct work; /* 0 16 */
struct timer_list timer; /* 16 24 */
}; /* size: 40, cachelines: 1 */
/* last cacheline: 40 bytes */
[acme@filo pahole]$
Oh, but what if we want to unfold all the structs?
lo pahole]$ pahole --expand_types /home/acme/git/OUTPUT/qemu/linux-2.6/net/ipv6/tcp_ipv6.o delayed_work
/* <2bc9> /home/acme/git/linux-2.6/include/linux/workqueue.h:37 */
struct delayed_work {
struct work_struct {
atomic_long_t data; /* 0 4 */
struct list_head {
struct list_head * next; /* 0 4 */
struct list_head * prev; /* 4 4 */
} entry; /* 4 8 */
work_func_t func; /* 12 4 */
} work; /* 0 16 */
struct timer_list {
struct list_head {
struct list_head * next; /* 0 4 */
struct list_head * prev; /* 4 4 */
} entry; /* 0 8 */
long unsigned int expires; /* 8 4 */
void (*function)(long unsigned int); /* 12 4 */
long unsigned int data; /* 16 4 */
struct tvec_t_base_s * base; /* 20 4 */
} timer; /* 16 24 */
}; /* size: 40, cachelines: 1 */
/* last cacheline: 40 bytes */
[acme@filo pahole]$
Quick hack, as we already had all the needed infrastructure due to anonymous struct
printing inside structs/unions, now for the curious, if you have the kernel-debuginfo
package installed in your FC6 machine:
[acme@filo pahole]$ pahole --expand_types /usr/lib/debug/lib/modules/2.6.19-1.2895.fc6/kernel/net/ipv6/ipv6.ko.debug tcp6_sock
Try struct task_struct too 8-)
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2007-01-29 13:12:23 -02:00
Arnaldo Carvalho de Melo
b5baabcd16
[ALL]: Fixup warnings
...
Using export CFLAGS="-Wall -Wfatal-errors -Wformat=2 -Wsequence-point -Wextra
-Wno-parentheses -g", suggested by Davi Arnault, amazing how cruft piles up
when one is not looking ;)
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2007-01-29 10:42:03 -02:00
Arnaldo Carvalho de Melo
812406d9fb
[LIB]: Use sysconf to get the L1 cacheline size
...
As suggested by Ulrich Drepper.
Signed-off-by: Arnaldo Carvalho de Melo <acme@ghostprotocols.net>
2007-01-18 21:41:25 -02:00
Arnaldo Carvalho de Melo
fab0db03ea
[PDWTAGS]: New tool
...
Pretty prints all of the tags, still needs a bit more work.
Signed-off-by: Arnaldo Carvalho de Melo <acme@ghostprotocols.net>
2007-01-18 21:13:56 -02:00