diff -urp ltrace-0.5/elf.c ltrace-0.5-pm/elf.c
--- ltrace-0.5/elf.c 2006-08-23 17:45:47.000000000 +0200
+++ ltrace-0.5-pm/elf.c 2006-08-23 17:47:58.000000000 +0200
@@ -342,12 +342,18 @@ static GElf_Addr opd2addr(struct ltelf *
if (!lte->opd)
return (GElf_Addr) (long) addr;
+#ifdef __ia64__
+ /* XXX: On Itaniums, gelf seems to return function address
+ instead of address of function descriptor. */
+ ret_val = (GElf_Addr)addr;
+#else
base = (long)lte->opd->d_buf;
offset = (long)addr - (long)lte->opd_addr;
if (offset > lte->opd_size)
error(EXIT_FAILURE, 0, "static plt not in .opd");
ret_val = (GElf_Addr) * (long *)(base + offset);
+#endif
return ret_val;
}
Only in ltrace-0.5-pm: elf.c~