[Dwarf-Discuss] Problems understanding attribute DW_AT_location of global variables (Form DW_FORM_BLOCK)
jakub at redhat.com
Mon Apr 4 00:23:13 PDT 2011
On Mon, Apr 04, 2011 at 09:08:12AM +0200, happyfrank3d at web.de wrote:
> <1><275>: Abbrev Number: 12 (DW_TAG_variable)
> <276> DW_AT_name : (indirect string, offset: 0x96): global20
> <27a> DW_AT_decl_file : 1
> <27b> DW_AT_decl_line : 24
> <27c> DW_AT_type : <0x4f>
> <280> DW_AT_external : 1
> <281> DW_AT_location : 5 byte block: 3 4c 0 0 0 (DW_OP_addr: 4c)
> All variables are of type int(4 byte).
> 1. What does the value "5 byte block: 3 0 0 0 0" in this special case mean?
It dumps the content of the block for the DW_AT_location attribute, then
> 2. What does the value "3" stand for?
> 3. Is the virtual address of variable "global01" 0x0000?
Most likely you are looking at ET_REL file, thus the value you are seeing in
the 4 bytes after DW_OP_addr opcode is (for 32-bit REL targets) just addend,
you need to look up the relocation against .debug_info+0x282.
> 4. What does the offset in the section .debug_pubtypes of the global variables mean?
See DWARF 4 standard, 7.19 - the offsets are the relative DIE offsets within
the compilation unit referenced from the preceeding .debug_pubtypes header.
More information about the Dwarf-Discuss