Issues with dwarf APIs
Frank Ch. Eigler
fche@elastic.org
Tue Jun 2 13:02:00 GMT 2009
Hi -
> [...]
> 2. dwarf_getlocation_addr(&Dwarf_attribute, addr, &expr,len,1)
> addr: Is current Program counter with in the function boundaries ,
> [...]
> case 2: Is failing even when Dwarf_location Tab is present in the dwarf
> [...]
> In function die for pseries_dedicated_idle_sleep (in ppc64)
> readelf -wi vmlinux reads:
> -------------------------------------
> <2><385581>: Abbrev Number: 96 (DW_TAG_variable)
> 1520738 <385582> DW_AT_name : cpu
> 1520739 <385586> DW_AT_decl_file : 1
> 1520740 <385587> DW_AT_decl_line : 484
> 1520741 <385589> DW_AT_type : <0x378b77>
> 1520742 <38558d> DW_AT_location : 0x5f804 (location list)
> [...]
Check out the location list contents (0x5f804). Most likely the
address you supplied to dwarf_getlocation_addr is not within the range
of addresses that were encoded. This could mean that the variable is
only partially in scope, or that at that particular moment (PC value),
it had no easily encoded location.
Be sure you're using the right PC. If you're doing backtracing, your
PC value will only rarely happen to be the entry address of a
function; more frequently it will be in the middle (at a function call
site).
- FChE
More information about the Systemtap
mailing list