[Dwarf-discuss] Difference in DWARF Info generated by GCC 3.4.6 and GCC 4.1.1

Michael Eager eager at eagercon.com
Mon Apr 16 08:15:43 PDT 2007


Hi Rohit --

Your questions are about how GCC implements DWARF, so it's good
that you also sent it to the GCC mailing list.  That's a better
venue for the discussion that the DWARF mailing list.

You might update your question to tell what target you generating
code for.  Different back-ends generate different DWARF in GCC.

Rohit Arul Raj wrote:
> Hello all,
> 
> I ran a sample program with gcc 3.4.6 and gcc 4.1.1 compiler. I need
> some clarifications regarding the DWARFinfo generated by these 2
> compilers.
> 
> Sample Program:
> 
> #include <stdio.h>
> 
> int fun(const char*, ...);
> 
> /* Variadic function */
> int fun(const char *raj,...)
> {
>   return 9;
> }
> 
> int main()
> {
>   fun("Hello world",3,2);
>   return 0;
> 
> }
> 
> ################# Readelf O/P for 3.4.6 ##############
> 
> <1><e3>: Abbrev Number: 6 (DW_TAG_subprogram)
>      DW_AT_sibling     : <10e>	
>      DW_AT_external    : 1	
>      DW_AT_name        : fun	
>      DW_AT_decl_file   : 7	
>      DW_AT_decl_line   : 7	
>      DW_AT_prototyped  : 1	
>      DW_AT_type        : <4c>	
>      DW_AT_low_pc      : 0	
>      DW_AT_high_pc     : 0x14	
>      DW_AT_frame_base  : 1 byte block: 5e 	(DW_OP_reg14)
> 
>  <2><fe>: Abbrev Number: 7 (DW_TAG_formal_parameter)
>      DW_AT_name        : raj	
>      DW_AT_decl_file   : 7	
>      DW_AT_decl_line   : 6	
>      DW_AT_type        : <a8>	
>      DW_AT_location    : 2 byte block: 91 4 	(DW_OP_fbreg: 4)
> 
> ################# Readelf O/P for 4.1.1 ##############
> 
> 1><103>: Abbrev Number: 6 (DW_TAG_subprogram)
>      DW_AT_sibling     : <12e>	
>      DW_AT_external    : 1	
>      DW_AT_name        : fun	
>      DW_AT_decl_file   : 10	
>      DW_AT_decl_line   : 7	
>      DW_AT_prototyped  : 1	
>      DW_AT_type        : <53>	
>      DW_AT_low_pc      : 0	
>      DW_AT_high_pc     : 0x14	
>      DW_AT_frame_base  : 1 byte block: 5f 	(DW_OP_reg15)
> 
>  <2><11e>: Abbrev Number: 7 (DW_TAG_formal_parameter)
>      DW_AT_name        : raj	
>      DW_AT_decl_file   : 10	
>      DW_AT_decl_line   : 6	
>      DW_AT_type        : <b9>	
>      DW_AT_location    : 2 byte block: 91 0 	(DW_OP_fbreg: 0)
> 
> ###########################################################
> 
> 1. In DIE for fun, with 3.4.6, the frame base is taken in terms of
> Frame Pointer (DW_OP_reg14), where is in 4.1.1, it is taken in terms
> of Stack Pointer (DW_OP_reg15).
> 
> (For my backend, reg-no 14 is Frame Pointer and reg-no 15 is Stack Pointer)
> 
> Is this the expected behavior?
> 
> 2. For the variable, const char *raj, the DIE for 3.4.6 has the
> location mentioned as (fbreg  + 4 [offset] ) whereas for 4.1.1,
> location is mentioned as (fbreg + 0).
> 
> Any specific reason for this behavior in GCC 4.1.1
> 
> Regards,
> Rohit



-- 
Michael Eager	 eager at eagercon.com
1960 Park Blvd., Palo Alto, CA 94306  650-325-8077



More information about the Dwarf-Discuss mailing list