This is the mail archive of the gcc@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Difference in DWARF Info generated by GCC 3.4.6 and GCC 4.1.1


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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]