Em Mon, Nov 23, 2009 at 05:56:15PM -0500, Mike Snitzer escreveu:
> On Mon, Nov 23 2009 at 5:49pm -0500,
> Arnaldo de Melo <acme@xxxxxxxxxx> wrote:
> > Em Mon, Nov 23, 2009 at 05:17:03PM -0500, Mike Snitzer escreveu:
> > > Unfortunately, when I run pahole against lvm2 I'm getting many BRAIN
> > > FART ALERTs on F12 x86_64 (dwarves-1.7-5.x86_64). I had a look at your
> > > OLS 2007 "7 dwarves" paper and figured I'd try your minimalist
> > > swiss_cheese example, this is what I get:
> > > $ pahole swiss_cheese
> > > struct cheese {
> > > char name[17]; /* 0 17 */
> > > short int age; /* 0 2 */
> > > char type; /* 0 1 */
<SNIP>
> > > /* BRAIN FART ALERT! 48 != 17 + 0(holes), diff = 31 */
> > > };
> > You should, I think this is related to some recent elfutils changes that
> > Mark Wieelard warned me about it but I hadn't time yet to act upon, will
> > do so tomorrow, thanks for the report!
> BTW, I did try the latest git version from:
> git://git.kernel.org/pub/scm/linux/kernel/git/acme/pahole.git
> It didn't work either.
Can you try with the attached patch applied against the git repo
version?
Best Regards,
- Arnaldo
diff --git a/dwarf_loader.c b/dwarf_loader.c
index 44605a8..3b58ecb 100644
--- a/dwarf_loader.c
+++ b/dwarf_loader.c
@@ -242,9 +242,23 @@ static Dwarf_Off attr_offset(Dwarf_Die *die, const uint32_t name)
Dwarf_Attribute attr;
Dwarf_Block block;
- if (dwarf_attr(die, name, &attr) != NULL &&
- dwarf_formblock(&attr, &block) == 0)
- return dwarf_expr(block.data, block.length);
+ if (dwarf_attr(die, name, &attr) == NULL)
+ return 0;
+
+ switch (dwarf_whatform(&attr)) {
+ case DW_FORM_data1:
+ case DW_FORM_data2:
+ case DW_FORM_sdata:
+ case DW_FORM_udata: {
+ Dwarf_Word value;
+ if (dwarf_formudata(&attr, &value) == 0)
+ return value;
+ break;
+ }
+ default:
+ if (dwarf_formblock(&attr, &block) == 0)
+ return dwarf_expr(block.data, block.length);
+ }
return 0;
}
[Linux USB Devel]
[Video for Linux]
[Linux Audio Users]
[Photo]
[Yosemite News]
[Yosemite Photos]
[Free Online Dating]
[Linux Kernel]
[Linux SCSI]
[XFree86]