public inbox for gdb@sourceware.org
 help / color / mirror / Atom feed
* [GDB & Fortran]: common block's DWARF representation and "info common" output
@ 2005-07-21  6:47 Wu Zhou
  2005-07-25  5:47 ` Wu Zhou
  2005-07-25  7:02 ` Wu Zhou
  0 siblings, 2 replies; 3+ messages in thread
From: Wu Zhou @ 2005-07-21  6:47 UTC (permalink / raw)
  To: gdb, fortran

Hello all,

I am investigating how GDB work with Fortran and found an odd question: 
GDB's "info common" command won't work with either G77 (I tested with 
3.3.3 and 3.4.3) or Gfortran (I tested with gfortran-4.0).

In section 12.4.3 of GDB manual, it says that

info common [common-name]
    This command prints the values contained in the Fortran COMMON block 
whose name is common-name. With no argument, the names of all COMMON 
blocks visible at current program location are printed. 
    
So I use a short fortran program (source code is attached below)to verify 
whether it works or not.  I found: whenever I issue "info common" command, 
it always reports empty like this:

(gdb) info common 
All COMMON blocks visible at this level:

(gdb) 

source code of common.f:
===========================
        program info_common
        implicit none
          integer :: a,b
          common /group1/ a,b
          a=1
          b=2
          call ShowCommon()
          stop
        end

        subroutine ShowCommon()
        implicit none
          integer :: num1, num2
          common /group1/ num1, num2
          write(*,*) num1, num2
          return
        end
        

Did anybody ever have success experience with this?  Maybe this works well 
with an ancient g77, such as 2.95?  

I try using "readelf -wi common" to see the DWARF information the 
compilers generated.  It seems that g77 treats common block group1 as an 
8-bytes string and gfortran treats it as a two-members structure.  Neither 
conform to DWARF standard, which use DW_TAG_common_block to represent a 
common block.  So the error might due to the fact g77 and gfortran generate
error debuginfo for common block.  Any objection on this?  

Maybe I can open a PR for this.  Please comment.  Thanks in advance!

P.S: I attach the debuginfo the compilers generated and the relative 
section of DWARF standards below for your reference.  

The DWARF information generated by g77:
=======================================
 <1><12b>: Abbrev Number: 6 (DW_TAG_base_type)
     DW_AT_name        : (indirect string, offset: 0x3b): char
     DW_AT_byte_size   : 1
     DW_AT_encoding    : 8      (unsigned char)
 <1><132>: Abbrev Number: 15 (DW_TAG_array_type)
     DW_AT_sibling     : <143>
     DW_AT_type        : <12b>
 <2><13b>: Abbrev Number: 16 (DW_TAG_subrange_type)
     DW_AT_type        : <70>
     DW_AT_lower_bound : 0
     DW_AT_upper_bound : 7
 <1><143>: Abbrev Number: 17 (DW_TAG_variable)
     DW_AT_name        : (indirect string, offset: 0xbb): group1_
     DW_AT_decl_file   : 1
     DW_AT_decl_line   : 3
     DW_AT_type        : <132>
     DW_AT_external    : 1
     DW_AT_location    : 5 byte block: 3 a0 99 4 8      (DW_OP_addr: 80499a0)

The DWARF information generated by gfortran:
=============================================
 <2><9e>: Abbrev Number: 3 (DW_TAG_variable)
     DW_AT_name        : group1
     DW_AT_decl_file   : 1
     DW_AT_decl_line   : 4
     DW_AT_MIPS_linkage_name: group1_
     DW_AT_type        : <e1>
     DW_AT_external    : 1
     DW_AT_location    : 5 byte block: 3 d0 99 4 8      (DW_OP_addr: 80499d0)
 <1><e1>: Abbrev Number: 5 (DW_TAG_structure_type)
     DW_AT_sibling     : <100>
     DW_AT_byte_size   : 8
 <2><e7>: Abbrev Number: 6 (DW_TAG_member)
     DW_AT_name        : a
     DW_AT_decl_file   : 1
     DW_AT_decl_line   : 3
     DW_AT_type        : <100>
     DW_AT_data_member_location: 2 byte block: 23 0     (DW_OP_plus_uconst: 0)
 <2><f3>: Abbrev Number: 6 (DW_TAG_member)
     DW_AT_name        : b
     DW_AT_decl_file   : 1
     DW_AT_decl_line   : 3
     DW_AT_type        : <100>
     DW_AT_data_member_location: 2 byte block: 23 4     (DW_OP_plus_uconst: 4)

What DWARF standard said about common block:
=============================================
A Fortran common block may be described by a debugging information entry 
with the tag DW_TAG_common_block. The common block entry has a DW_AT_name 
attribute whose value is a null-terminated string containing the common 
block name as it appears in the source program. It also has a 
DW_AT_location attribute whose value describes the location of the
beginning of the common block. The common block entry owns debugging 
information entries describing the variables contained within the common 
block.


Regards
- Wu Zhou

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [GDB & Fortran]: common block's DWARF representation and "info common" output
  2005-07-21  6:47 [GDB & Fortran]: common block's DWARF representation and "info common" output Wu Zhou
@ 2005-07-25  5:47 ` Wu Zhou
  2005-07-25  7:02 ` Wu Zhou
  1 sibling, 0 replies; 3+ messages in thread
From: Wu Zhou @ 2005-07-25  5:47 UTC (permalink / raw)
  To: gdb, fortran

Sorry, forget to add the URL.  Here it is:

http://gcc.gnu.org/bugzilla/show_bug.cgi?id=23057

Thanks.

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [GDB & Fortran]: common block's DWARF representation and "info common" output
  2005-07-21  6:47 [GDB & Fortran]: common block's DWARF representation and "info common" output Wu Zhou
  2005-07-25  5:47 ` Wu Zhou
@ 2005-07-25  7:02 ` Wu Zhou
  1 sibling, 0 replies; 3+ messages in thread
From: Wu Zhou @ 2005-07-25  7:02 UTC (permalink / raw)
  To: gdb, fortran

I just opened a GCC PR to track this problem.  Hope it helps resolve this 
problem.

Regards

- Wu Zhou

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2005-07-25  7:02 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2005-07-21  6:47 [GDB & Fortran]: common block's DWARF representation and "info common" output Wu Zhou
2005-07-25  5:47 ` Wu Zhou
2005-07-25  7:02 ` Wu Zhou

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).