[Dwarf-Discuss] [Query] Address Space resolution in Dwarf

Prerna Saxena prerna at linux.vnet.ibm.com
Thu Jan 22 02:40:58 PST 2009


Hi,
I've been trying to enable the systemtap translator to throw a warning 
when a userspace variable (annotated with "_user") is probed in context 
of a kernel function. ( 
http://sources.redhat.com/bugzilla/show_bug.cgi?id=9775 )

I'm using readelf  to look up the Dwarf location information for the 
parameters of the kernel function "sys_open",
[asmlinkage long sys_open(const char __user *filename, int flags, int 
mode)]

Here's an excerpt of the *.debug_info* section :
<1><944fa4>: Abbrev Number: 73 (DW_TAG_subprogram)
    <944fa5>   DW_AT_external    : 1
    <944fa6>   DW_AT_name        : (indirect string, offset: 0x3b7d0): 
sys_open
    <944faa>   DW_AT_decl_file   : 1
    <944fab>   DW_AT_decl_line   : 1062
    <944fad>   DW_AT_prototyped  : 1
    <944fae>   DW_AT_type        : <0x93965e>
    <944fb2>   DW_AT_low_pc      : 0xc0480c89
    <944fb6>   DW_AT_high_pc     : 0xc0480caf
   * <944fba>   DW_AT_frame_base  : 0xbede4      (location list)*
    <944fbe>   DW_AT_sibling     : <0x945000>
 <2><944fc2>: Abbrev Number: 79 (DW_TAG_formal_parameter)
    <944fc3>   DW_AT_name        : (indirect string, offset: 0x4cf2f): 
filename
    <944fc7>   DW_AT_decl_file   : 1
    <944fc8>   DW_AT_decl_line   : 1061
    <944fca>   DW_AT_type        : <0x939a39>
    <944fce>   DW_AT_location    : 2 byte block: 91 0   (DW_OP_fbreg: 0)
 <2><944fd1>: Abbrev Number: 79 (DW_TAG_formal_parameter)
    <944fd2>   DW_AT_name        : (indirect string, offset: 0xc00f2): flags
    <944fd6>   DW_AT_decl_file   : 1
    <944fd7>   DW_AT_decl_line   : 1061
    <944fd9>   DW_AT_type        : <0x93963a>
    <944fdd>   DW_AT_location    : 2 byte block: 91 4   (DW_OP_fbreg: 4)
 <2><944fe0>: Abbrev Number: 79 (DW_TAG_formal_parameter)
    <944fe1>   DW_AT_name        : (indirect string, offset: 0x9243): mode
    <944fe5>   DW_AT_decl_file   : 1
    <944fe6>   DW_AT_decl_line   : 1061
    <944fe8>   DW_AT_type        : <0x93963a>
    <944fec>   DW_AT_location    : 2 byte block: 91 8   (DW_OP_fbreg: 8)

The location attributes for  all parameters appear on the location list 
[*.debug_loc section*] as follows :

    000bede4     c0480c89     c0480c8a     (DW_OP_breg4: 4)
    000bede4     c0480c8a     c0480c91     (DW_OP_breg4: 8)
    000bede4     c0480c91     c0480caf      (DW_OP_breg5: 8)
    000bede4     <End of list>

How does Dwarf encode that the address specified in the location 
expression for "char  *filename" belongs to user address space ?

-- 
Prerna Saxena

Linux Technology Centre,
IBM Systems and Technology Lab,
Bangalore, India 




More information about the Dwarf-Discuss mailing list