Hi Sukadev, On Tue, 2014-05-06 at 16:32 -0700, Sukadev Bhattiprolu wrote: > But I am not sure how to extend the code to work with PC value that points > to, say __random(), in glibc. > > I have these installed: > > glibc-common-2.18-11.fc20.ppc64p7 > glibc-2.18-11.fc20.ppc64p7 > glibc-headers-2.18-11.fc20.ppc64p7 > glibc-debuginfo-common-2.18-11.fc20.ppc64p7 > glibc-devel-2.18-11.fc20.ppc64p7 > glibc-debuginfo-2.18-11.fc20.ppc64p7 > > $ objdump -D /usr/lib64/libc-2.18.so > > .... > 00000080a7be3bf0 <.__random>: > 80a7be3bf0: 7c 08 02 a6 mflr r0 > 80a7be3bf4: fb e1 ff f8 std r31,-8(r1) > 80a7be3bf8: 60 00 00 00 nop > 80a7be3bfc: 39 00 00 01 li r8,1 > 80a7be3c00: 3b e2 9a f0 addi r31,r2,-25872 > 80a7be3c04: 39 40 00 00 li r10,0 > 80a7be3c08: f8 01 00 10 std r0,16(r1) > 80a7be3c0c: f8 21 ff 71 stdu r1,-144(r1) > 80a7be3c10: 7d 20 f8 29 lwarx r9,0,r31,1 > 80a7be3c14: 7c 09 50 00 cmpw r9,r10 > 80a7be3c18: 40 82 00 0c bne 80a7be3c24 <.__random+0x34> > 80a7be3c1c: 7d 00 f9 2d stwcx. r8,0,r31 > >>>> 80a7be3c20: 40 c2 ff f0 bne- 80a7be3c10 <.__random+0x20> > .... > > $ ./crc5 80a7be3c20 80a7be3c20 /usr/lib64/libc-2.18.so > Error dwarf_cfi_addrframe(): : no matching address range > Error with addr 0x80a7be3c20 > > $ ./crc5 80a7be3c20 80a7be3c20 /usr/lib/debug/lib64/libc.so.6.debug > Error dwfl_addrmodule: no error > Error with addr 0x80a7be3c20 > > Pls find the code attached. Appreciate any comments on how to extend it > to work with split debug info files. The first invocation should work (it will find the separate debug info file that matches itself through dwfl_standard_find_debuginfo). You find the .debug_frame CFI through dwfl_module_dwarf_cfi and then lookup the address using dwarf_cfi_addrframe. The .debug_frame apparently exists but doesn't contain the requested address. You should then try to find it through the .eh_frame CFI using dwfl_module_eh_cfi (or just swap the dwfl_module_dwarf_cfi and dwfl_module_eh_cfi calls since on fedora the .eh_frame should always be complete because GCC uses -fasynchronous-unwind-tables by default). Cheers, Mark