
A name for BLOCK DATA in Fortran is optional. If no name has been assigned, GDB crashes during read-in of DWARF when BLOCK DATA is represented via DW_TAG_module. BLOCK DATA is used for one-time initialization of non-pointer variables in named common blocks. As of now there is no issue when gfortran is used as DW_TAG_module is not emitted. However, with Intel ifort the nameless DW_TAG_module is present and has the following form: ... <1><dd>: Abbrev Number: 7 (DW_TAG_module) <de> DW_AT_decl_line : 46 <df> DW_AT_decl_file : 1 <e0> DW_AT_description : (indirect string, offset: 0x110): block data <e4> DW_AT_high_pc : 0x402bb7 <ec> DW_AT_low_pc : 0x402bb7 ... The missing name leads to a crash in add_partial_symbol, during length calculation. gdb/ChangeLog: 2019-06-11 Bernhard Heckel <bernhard.heckel@intel.com> * dwarf2read.c (add_partial_symbol): Skip nameless modules. gdb/testsuite/Changelog: 2019-06-11 Bernhard Heckel <bernhard.heckel@intel.com> * gdb.fortran/block-data.f: New. * gdb.fortran/block-data.exp: New.
56 lines
1.6 KiB
Fortran
56 lines
1.6 KiB
Fortran
! Copyright 2016-2019 Free Software Foundation, Inc.
|
|
!
|
|
! This program is free software; you can redistribute it and/or modify
|
|
! it under the terms of the GNU General Public License as published by
|
|
! the Free Software Foundation; either version 3 of the License, or
|
|
! (at your option) any later version.
|
|
!
|
|
! This program is distributed in the hope that it will be useful,
|
|
! but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
! GNU General Public License for more details.
|
|
!
|
|
! You should have received a copy of the GNU General Public License
|
|
! along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
!
|
|
! Check that GDB can handle block data with no global name.
|
|
!
|
|
! MAIN
|
|
PROGRAM bdata
|
|
DOUBLE PRECISION doub1, doub2
|
|
CHARACTER*6 char1, char2
|
|
|
|
COMMON /BLK1/ doub1, char1
|
|
COMMON /BLK2/ doub2, char2
|
|
|
|
doub1 = 11.111
|
|
doub2 = 22.222
|
|
char1 = 'ABCDEF'
|
|
char2 = 'GHIJKL'
|
|
CALL sub_block_data ! BP_BEFORE_SUB
|
|
STOP
|
|
END
|
|
|
|
! BLOCK DATA
|
|
BLOCK DATA
|
|
|
|
DOUBLE PRECISION doub1, doub2
|
|
CHARACTER*6 char1, char2
|
|
|
|
COMMON /BLK1/ doub1, char1
|
|
COMMON /BLK2/ doub2, char2
|
|
DATA doub1, doub2 /1.111, 2.222/
|
|
DATA char1, char2 /'abcdef', 'ghijkl'/
|
|
END
|
|
|
|
! SUBROUTINE
|
|
SUBROUTINE sub_block_data
|
|
|
|
DOUBLE PRECISION doub1, doub2
|
|
CHARACTER*6 char1, char2
|
|
|
|
COMMON /BLK1/ doub1, char1
|
|
COMMON /BLK2/ doub2, char2
|
|
|
|
char1 = char2; ! BP_SUB
|
|
END
|