From patchwork Thu Aug 25 17:06:26 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jan Kratochvil X-Patchwork-Id: 14937 Received: (qmail 27294 invoked by alias); 25 Aug 2016 17:06:36 -0000 Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org Delivered-To: mailing list gdb-patches@sourceware.org Received: (qmail 27285 invoked by uid 89); 25 Aug 2016 17:06:36 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-2.1 required=5.0 tests=BAYES_00, RP_MATCHES_RCVD, SPF_HELO_PASS autolearn=ham version=3.3.2 spammy=$60, $265, 0x14, 0x11 X-HELO: mx1.redhat.com Received: from mx1.redhat.com (HELO mx1.redhat.com) (209.132.183.28) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Thu, 25 Aug 2016 17:06:32 +0000 Received: from int-mx14.intmail.prod.int.phx2.redhat.com (int-mx14.intmail.prod.int.phx2.redhat.com [10.5.11.27]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 7EBEC81229; Thu, 25 Aug 2016 17:06:31 +0000 (UTC) Received: from host1.jankratochvil.net (ovpn-116-34.ams2.redhat.com [10.36.116.34]) by int-mx14.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id u7PH6QWk025940 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=NO); Thu, 25 Aug 2016 13:06:29 -0400 Date: Thu, 25 Aug 2016 19:06:26 +0200 From: Jan Kratochvil To: Bernhard Heckel Cc: "Weinmann, Christoph T" , gdb-patches@sourceware.org Subject: Re: [V4 00/21] Fortran dynamic array support Message-ID: <20160825170626.GA29717@host1.jankratochvil.net> References: <88072818E0A3D742B2B1AF16BBEC65A7263E6F2E@IRSMSX107.ger.corp.intel.com> <20160715091352.GA8059@host1.jankratochvil.net> <88072818E0A3D742B2B1AF16BBEC65A7263E8FD9@IRSMSX107.ger.corp.intel.com> <20160716151310.GA14331@host1.jankratochvil.net> <20160716151837.GA797@host1.jankratochvil.net> <88072818E0A3D742B2B1AF16BBEC65A7263F0988@IRSMSX107.ger.corp.intel.com> <20160816135920.GA26624@host1.jankratochvil.net> <57B6D831.4080605@intel.com> <20160821170346.GA21909@host1.jankratochvil.net> <57BC50D1.4020102@intel.com> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <57BC50D1.4020102@intel.com> User-Agent: Mutt/1.6.2 (2016-07-01) X-IsSubscribed: yes On Tue, 23 Aug 2016 15:34:09 +0200, Bernhard Heckel wrote: > created a branch with all stride patches. users/bheckel/fortran-strides 2c392d41a3f2e38deeb9db5b7a93ca45682bbe3b > I don't see regression on RH7.1, gcc 4.8.3-9 I see a regression for 32-bit targets (x86_64-m32 or native i686) on Fedora 24 (gcc-gfortran-6.1.1-3.fc24.x86_64). I do not see the regression on CentOS-7.2 (x86_64-m32). print pvla^M value requires 4294967288 bytes, which is more than max-value-size^M (gdb) FAIL: gdb.fortran/vla-stride.exp: print single-element I have attached a fix. It is because: <115> DW_AT_lower_bound : 4 byte block: 97 23 10 6 (DW_OP_push_object_address; DW_OP_plus_uconst: 16; DW_OP_deref) <11a> DW_AT_upper_bound : 4 byte block: 97 23 14 6 (DW_OP_push_object_address; DW_OP_plus_uconst: 20; DW_OP_deref) <11f> DW_AT_byte_stride : 6 byte block: 97 23 c 6 34 1e (DW_OP_push_object_address; DW_OP_plus_uconst: 12; DW_OP_deref; DW_OP_lit4; DW_OP_mul) DW_AT_lower_bound == 1 DW_AT_upper_bound == 1 DW_AT_byte_stride == (-2) * 4 == -8 I am not sure if gfortran is really wrong or not but a stride does not make sense for me for a single row array. Attaching also gdb.fortran/vla-stride.f90 from your branch built with gcc-gfortran-6.1.1-3.fc24.x86_64 on Fedora 24 x86_64 in -m32 mode. Besides that I see on all archs -FAIL: gdb.pascal/arrays.exp: Print dynamic array of string +FAIL: gdb.pascal/arrays.exp: Print dynamic array of string (GDB internal error) but that testcase is only in Fedora and the Pascal (fpc) support has been not well maintained so far so I am OK with that. Thanks, Jan .file "vla-stride.f90" .text .Ltext0: .section .rodata .align 4 .LC0: .string "Integer overflow when calculating the amount of memory to allocate" .LC1: .string "vla" .align 4 .LC2: .string "Attempting to allocate already allocated variable '%s'" .align 4 .LC3: .string "At line 20 of file gdb.fortran/vla-stride.f90" .align 4 .LC4: .string "Allocation would exceed memory limit" .text .type MAIN__, @function MAIN__: .LFB0: .file 1 "gdb.fortran/vla-stride.f90" # gdb.fortran/vla-stride.f90:16 .loc 1 16 0 .cfi_startproc # BLOCK 2 seq:0 # PRED: ENTRY (FALLTHRU) pushl %ebp .cfi_def_cfa_offset 8 .cfi_offset 5, -8 movl %esp, %ebp .cfi_def_cfa_register 5 pushl %edi pushl %esi pushl %ebx subl $60, %esp .cfi_offset 7, -12 .cfi_offset 6, -16 .cfi_offset 3, -20 # gdb.fortran/vla-stride.f90:17 .loc 1 17 0 movl $0, -72(%ebp) .LBB2: # gdb.fortran/vla-stride.f90:20 .loc 1 20 0 movl $0, %eax testl %eax, %eax # SUCC: 3 (FALLTHRU) 4 je .L2 # BLOCK 3 seq:1 # PRED: 2 (FALLTHRU) # gdb.fortran/vla-stride.f90:20 .loc 1 20 0 is_stmt 0 discriminator 1 subl $12, %esp pushl $.LC0 # SUCC: call _gfortran_runtime_error # BLOCK 4 seq:2 # PRED: 2 .L2: # gdb.fortran/vla-stride.f90:20 .loc 1 20 0 discriminator 2 movl -72(%ebp), %eax testl %eax, %eax # SUCC: 5 (FALLTHRU) 6 je .L3 # BLOCK 5 seq:3 # PRED: 4 (FALLTHRU) # gdb.fortran/vla-stride.f90:20 .loc 1 20 0 discriminator 3 subl $4, %esp pushl $.LC1 pushl $.LC2 pushl $.LC3 # SUCC: call _gfortran_runtime_error_at # BLOCK 6 seq:4 # PRED: 4 .L3: # gdb.fortran/vla-stride.f90:20 .loc 1 20 0 discriminator 4 subl $12, %esp pushl $40 call malloc addl $16, %esp movl %eax, -72(%ebp) movl -72(%ebp), %eax testl %eax, %eax # SUCC: 7 (FALLTHRU) 8 jne .L4 # BLOCK 7 seq:5 # PRED: 6 (FALLTHRU) # gdb.fortran/vla-stride.f90:20 .loc 1 20 0 discriminator 5 subl $12, %esp pushl $.LC4 # SUCC: call _gfortran_os_error # BLOCK 8 seq:6 # PRED: 6 .L4: # gdb.fortran/vla-stride.f90:20 .loc 1 20 0 discriminator 6 movl $265, -64(%ebp) movl $1, -56(%ebp) movl $10, -52(%ebp) movl $1, -60(%ebp) movl $-1, -68(%ebp) .LBB3: # gdb.fortran/vla-stride.f90:21 .loc 1 21 0 is_stmt 1 discriminator 6 movl -72(%ebp), %edx movl -68(%ebp), %esi movl -56(%ebp), %ebx .LBB4: .LBB5: movl -72(%ebp), %eax testl %eax, %eax sete %al movzbl %al, %eax testl %eax, %eax # SUCC: 10 9 (FALLTHRU) jne .L5 # BLOCK 9 seq:7 # PRED: 8 (FALLTHRU) # gdb.fortran/vla-stride.f90:21 .loc 1 21 0 is_stmt 0 discriminator 2 movl -56(%ebp), %ecx leal 9(%ecx), %edi movl -52(%ebp), %ecx cmpl %ecx, %edi # SUCC: 10 (FALLTHRU) 18 je .L6 # BLOCK 10 seq:8 # PRED: 8 9 (FALLTHRU) .L5: # gdb.fortran/vla-stride.f90:21 .loc 1 21 0 discriminator 3 testl %eax, %eax # SUCC: 11 (FALLTHRU) 12 je .L7 # BLOCK 11 seq:9 # PRED: 10 (FALLTHRU) # gdb.fortran/vla-stride.f90:21 .loc 1 21 0 discriminator 4 movl $0, %eax # SUCC: 13 [100.0%] jmp .L8 # BLOCK 12 seq:10 # PRED: 10 .L7: # gdb.fortran/vla-stride.f90:21 .loc 1 21 0 discriminator 5 movl -52(%ebp), %edx movl -56(%ebp), %eax subl %eax, %edx movl %edx, %eax addl $1, %eax movl $0, %edx testl %eax, %eax # SUCC: 13 (FALLTHRU) cmovs %edx, %eax # BLOCK 13 seq:11 # PRED: 12 (FALLTHRU) 11 [100.0%] .L8: # gdb.fortran/vla-stride.f90:21 .loc 1 21 0 discriminator 7 cmpl $10, %eax setne %al movzbl %al, %eax movl $1, -56(%ebp) movl $10, -52(%ebp) movl $1, -60(%ebp) movl -56(%ebp), %edx negl %edx movl %edx, -68(%ebp) movl -68(%ebp), %esi movl -56(%ebp), %ebx movl -72(%ebp), %edx testl %edx, %edx # SUCC: 14 (FALLTHRU) 15 jne .L9 # BLOCK 14 seq:12 # PRED: 13 (FALLTHRU) # gdb.fortran/vla-stride.f90:21 .loc 1 21 0 discriminator 8 subl $12, %esp pushl $40 call malloc addl $16, %esp movl %eax, -72(%ebp) movl $265, -64(%ebp) # SUCC: 17 [100.0%] jmp .L10 # BLOCK 15 seq:13 # PRED: 13 .L9: # gdb.fortran/vla-stride.f90:21 .loc 1 21 0 discriminator 9 testl %eax, %eax # SUCC: 16 (FALLTHRU) 17 je .L10 # BLOCK 16 seq:14 # PRED: 15 (FALLTHRU) # gdb.fortran/vla-stride.f90:21 .loc 1 21 0 discriminator 11 movl -72(%ebp), %eax subl $8, %esp pushl $40 pushl %eax call realloc addl $16, %esp # SUCC: 17 (FALLTHRU) movl %eax, -72(%ebp) # BLOCK 17 seq:15 # PRED: 16 (FALLTHRU) 15 14 [100.0%] .L10: # SUCC: 18 (FALLTHRU) # gdb.fortran/vla-stride.f90:21 .loc 1 21 0 discriminator 13 movl -72(%ebp), %edx # BLOCK 18 seq:16 # PRED: 9 17 (FALLTHRU) .L6: .LBE5: # SUCC: 19 (FALLTHRU) # gdb.fortran/vla-stride.f90:21 .loc 1 21 0 discriminator 14 movl $0, %eax # BLOCK 19 seq:17 # PRED: 18 (FALLTHRU) 20 [100.0%] .L12: # gdb.fortran/vla-stride.f90:21 .loc 1 21 0 discriminator 17 cmpl $9, %eax # SUCC: 21 20 (FALLTHRU) jg .L11 # BLOCK 20 seq:18 # PRED: 19 (FALLTHRU) # gdb.fortran/vla-stride.f90:21 .loc 1 21 0 discriminator 16 leal (%eax,%ebx), %ecx leal (%ecx,%esi), %edi movl A.1.3368(,%eax,4), %ecx movl %ecx, (%edx,%edi,4) addl $1, %eax # SUCC: 19 [100.0%] jmp .L12 # BLOCK 21 seq:19 # PRED: 19 .L11: .LBE4: .LBE3: # gdb.fortran/vla-stride.f90:23 .loc 1 23 0 is_stmt 1 movl $265, -40(%ebp) movl $1, -32(%ebp) movl $10, -28(%ebp) movl $-1, -36(%ebp) movl -72(%ebp), %eax movl -56(%ebp), %edx movl $10, %ecx subl %edx, %ecx movl %ecx, %edx sall $2, %edx addl %edx, %eax movl %eax, -48(%ebp) movl $1, -44(%ebp) .LBB6: # gdb.fortran/vla-stride.f90:24 .loc 1 24 0 movl $265, -40(%ebp) movl -36(%ebp), %eax movl $1, -32(%ebp) movl $10, -28(%ebp) movl %eax, %edx negl %edx movl %edx, -36(%ebp) movl -48(%ebp), %edx movl -32(%ebp), %ecx movl $10, %ebx subl %ecx, %ebx movl %ebx, %ecx imull %eax, %ecx sall $2, %ecx addl %ecx, %edx movl %edx, -48(%ebp) movl %eax, -44(%ebp) .LBE6: # gdb.fortran/vla-stride.f90:25 .loc 1 25 0 movl $265, -40(%ebp) movl $1, -32(%ebp) movl $5, -28(%ebp) movl $2, -36(%ebp) movl -72(%ebp), %eax movl -56(%ebp), %edx movl $1, %ecx subl %edx, %ecx movl %ecx, %edx sall $2, %edx addl %edx, %eax movl %eax, -48(%ebp) movl $-2, -44(%ebp) # gdb.fortran/vla-stride.f90:26 .loc 1 26 0 movl $265, -40(%ebp) movl $1, -32(%ebp) movl $1, -28(%ebp) movl $-2, -36(%ebp) movl -72(%ebp), %eax movl -56(%ebp), %edx movl $5, %ecx subl %edx, %ecx movl %ecx, %edx sall $2, %edx addl %edx, %eax movl %eax, -48(%ebp) movl $2, -44(%ebp) # gdb.fortran/vla-stride.f90:28 .loc 1 28 0 movl $0, -48(%ebp) .LBE2: # gdb.fortran/vla-stride.f90:29 .loc 1 29 0 nop leal -12(%ebp), %esp popl %ebx .cfi_restore 3 popl %esi .cfi_restore 6 popl %edi .cfi_restore 7 popl %ebp .cfi_restore 5 .cfi_def_cfa 4, 4 # SUCC: EXIT [100.0%] ret .cfi_endproc .LFE0: .size MAIN__, .-MAIN__ .globl main .type main, @function main: .LFB1: # gdb.fortran/vla-stride.f90:29 .loc 1 29 0 .cfi_startproc # BLOCK 2 seq:0 # PRED: ENTRY (FALLTHRU) leal 4(%esp), %ecx .cfi_def_cfa 1, 0 andl $-16, %esp pushl -4(%ecx) pushl %ebp .cfi_escape 0x10,0x5,0x2,0x75,0 movl %esp, %ebp pushl %ecx .cfi_escape 0xf,0x3,0x75,0x7c,0x6 subl $4, %esp movl %ecx, %eax # gdb.fortran/vla-stride.f90:29 .loc 1 29 0 subl $8, %esp pushl 4(%eax) pushl (%eax) call _gfortran_set_args addl $16, %esp subl $8, %esp pushl $options.3.3382 pushl $9 call _gfortran_set_options addl $16, %esp call MAIN__ movl $0, %eax movl -4(%ebp), %ecx .cfi_def_cfa 1, 0 leave .cfi_restore 5 leal -4(%ecx), %esp .cfi_def_cfa 4, 4 # SUCC: EXIT [100.0%] ret .cfi_endproc .LFE1: .size main, .-main .section .rodata .align 32 .type A.1.3368, @object .size A.1.3368, 40 A.1.3368: .long 1 .long 2 .long 3 .long 4 .long 5 .long 6 .long 7 .long 8 .long 9 .long 10 .align 32 .type options.3.3382, @object .size options.3.3382, 36 options.3.3382: .long 68 .long 1023 .long 0 .long 0 .long 1 .long 1 .long 0 .long 0 .long 31 .text .Letext0: .section .debug_info,"",@progbits .Ldebug_info0: .long 0x128 # Length of Compilation Unit Info .value 0x4 # DWARF version number .long .Ldebug_abbrev0 # Offset Into Abbrev. Section .byte 0x4 # Pointer Size (in bytes) .uleb128 0x1 # (DIE (0xb) DW_TAG_compile_unit) .long .LASF5 # DW_AT_producer: "GNU Fortran2008 6.1.1 20160621 (Red Hat 6.1.1-3) -m32 -mtune=generic -march=i686 -g -fintrinsic-modules-path /usr/lib/gcc/x86_64-redhat-linux/6.1.1/32/finclude" .byte 0xe # DW_AT_language .byte 0x2 # DW_AT_identifier_case .long .LASF6 # DW_AT_name: "gdb.fortran/vla-stride.f90" .long .LASF7 # DW_AT_comp_dir: "/home/jkratoch/redhat/gdb-clean/gdb/testsuite" .long .Ltext0 # DW_AT_low_pc .long .Letext0-.Ltext0 # DW_AT_high_pc .long .Ldebug_line0 # DW_AT_stmt_list .uleb128 0x2 # (DIE (0x26) DW_TAG_base_type) .byte 0x4 # DW_AT_byte_size .byte 0x5 # DW_AT_encoding .long .LASF2 # DW_AT_name: "integer(kind=4)" .uleb128 0x3 # (DIE (0x2d) DW_TAG_const_type) .long 0x26 # DW_AT_type .uleb128 0x4 # (DIE (0x32) DW_TAG_subprogram) # DW_AT_external .long .LASF8 # DW_AT_name: "main" .byte 0x1 # DW_AT_decl_file (gdb.fortran/vla-stride.f90) .byte 0x1d # DW_AT_decl_line .long 0x26 # DW_AT_type .long .LFB1 # DW_AT_low_pc .long .LFE1-.LFB1 # DW_AT_high_pc .uleb128 0x1 # DW_AT_frame_base .byte 0x9c # DW_OP_call_frame_cfa # DW_AT_GNU_all_tail_call_sites .long 0x69 # DW_AT_sibling .uleb128 0x5 # (DIE (0x4b) DW_TAG_formal_parameter) .long .LASF0 # DW_AT_name: "argc" .byte 0x1 # DW_AT_decl_file (gdb.fortran/vla-stride.f90) .byte 0x1d # DW_AT_decl_line .long 0x2d # DW_AT_type .uleb128 0x2 # DW_AT_location .byte 0x91 # DW_OP_fbreg .sleb128 0 .uleb128 0x5 # (DIE (0x59) DW_TAG_formal_parameter) .long .LASF1 # DW_AT_name: "argv" .byte 0x1 # DW_AT_decl_file (gdb.fortran/vla-stride.f90) .byte 0x1d # DW_AT_decl_line .long 0x69 # DW_AT_type .uleb128 0x3 # DW_AT_location .byte 0x91 # DW_OP_fbreg .sleb128 4 .byte 0x6 # DW_OP_deref .byte 0 # end of children of DIE 0x32 .uleb128 0x6 # (DIE (0x69) DW_TAG_pointer_type) .byte 0x4 # DW_AT_byte_size .long 0x6f # DW_AT_type .uleb128 0x2 # (DIE (0x6f) DW_TAG_base_type) .byte 0x1 # DW_AT_byte_size .byte 0x8 # DW_AT_encoding .long .LASF3 # DW_AT_name: "character(kind=1)" .uleb128 0x7 # (DIE (0x76) DW_TAG_subprogram) .long .LASF9 # DW_AT_name: "vla_stride" .byte 0x1 # DW_AT_decl_file (gdb.fortran/vla-stride.f90) .byte 0x10 # DW_AT_decl_line # DW_AT_main_subprogram .byte 0x2 # DW_AT_calling_convention .long .LFB0 # DW_AT_low_pc .long .LFE0-.LFB0 # DW_AT_high_pc .uleb128 0x1 # DW_AT_frame_base .byte 0x9c # DW_OP_call_frame_cfa # DW_AT_GNU_all_tail_call_sites .long 0xe7 # DW_AT_sibling .uleb128 0x8 # (DIE (0x8c) DW_TAG_variable) .ascii "i\0" # DW_AT_name .byte 0x1 # DW_AT_decl_file (gdb.fortran/vla-stride.f90) .byte 0x15 # DW_AT_decl_line .long 0x26 # DW_AT_type .uleb128 0x9 # (DIE (0x95) DW_TAG_variable) .long .LASF4 # DW_AT_name: "pvla" .byte 0x1 # DW_AT_decl_file (gdb.fortran/vla-stride.f90) .byte 0x12 # DW_AT_decl_line .long 0xe7 # DW_AT_type .uleb128 0x2 # DW_AT_location .byte 0x91 # DW_OP_fbreg .sleb128 -56 .uleb128 0xa # (DIE (0xa3) DW_TAG_variable) .ascii "vla\0" # DW_AT_name .byte 0x1 # DW_AT_decl_file (gdb.fortran/vla-stride.f90) .byte 0x11 # DW_AT_decl_line .long 0x10b # DW_AT_type .uleb128 0x3 # DW_AT_location .byte 0x91 # DW_OP_fbreg .sleb128 -80 .uleb128 0xb # (DIE (0xb2) DW_TAG_lexical_block) .long .LBB2 # DW_AT_low_pc .long .LBE2-.LBB2 # DW_AT_high_pc .uleb128 0xc # (DIE (0xbb) DW_TAG_lexical_block) .long .LBB3 # DW_AT_low_pc .long .LBE3-.LBB3 # DW_AT_high_pc .long 0xdc # DW_AT_sibling .uleb128 0xb # (DIE (0xc8) DW_TAG_lexical_block) .long .LBB4 # DW_AT_low_pc .long .LBE4-.LBB4 # DW_AT_high_pc .uleb128 0xd # (DIE (0xd1) DW_TAG_lexical_block) .long .LBB5 # DW_AT_low_pc .long .LBE5-.LBB5 # DW_AT_high_pc .byte 0 # end of children of DIE 0xc8 .byte 0 # end of children of DIE 0xbb .uleb128 0xd # (DIE (0xdc) DW_TAG_lexical_block) .long .LBB6 # DW_AT_low_pc .long .LBE6-.LBB6 # DW_AT_high_pc .byte 0 # end of children of DIE 0xb2 .byte 0 # end of children of DIE 0x76 .uleb128 0xe # (DIE (0xe7) DW_TAG_array_type) .uleb128 0x2 # DW_AT_data_location .byte 0x97 # DW_OP_push_object_address .byte 0x6 # DW_OP_deref .uleb128 0x4 # DW_AT_associated .byte 0x97 # DW_OP_push_object_address .byte 0x6 # DW_OP_deref .byte 0x30 # DW_OP_lit0 .byte 0x2e # DW_OP_ne .long 0x26 # DW_AT_type .long 0x10b # DW_AT_sibling .uleb128 0xf # (DIE (0xf8) DW_TAG_subrange_type) .uleb128 0x4 # DW_AT_lower_bound .byte 0x97 # DW_OP_push_object_address .byte 0x23 # DW_OP_plus_uconst .uleb128 0x10 .byte 0x6 # DW_OP_deref .uleb128 0x4 # DW_AT_upper_bound .byte 0x97 # DW_OP_push_object_address .byte 0x23 # DW_OP_plus_uconst .uleb128 0x14 .byte 0x6 # DW_OP_deref .uleb128 0x6 # DW_AT_byte_stride .byte 0x97 # DW_OP_push_object_address .byte 0x23 # DW_OP_plus_uconst .uleb128 0xc .byte 0x6 # DW_OP_deref .byte 0x34 # DW_OP_lit4 .byte 0x1e # DW_OP_mul .byte 0 # end of children of DIE 0xe7 .uleb128 0x10 # (DIE (0x10b) DW_TAG_array_type) .uleb128 0x2 # DW_AT_data_location .byte 0x97 # DW_OP_push_object_address .byte 0x6 # DW_OP_deref .uleb128 0x4 # DW_AT_allocated .byte 0x97 # DW_OP_push_object_address .byte 0x6 # DW_OP_deref .byte 0x30 # DW_OP_lit0 .byte 0x2e # DW_OP_ne .long 0x26 # DW_AT_type .uleb128 0xf # (DIE (0x118) DW_TAG_subrange_type) .uleb128 0x4 # DW_AT_lower_bound .byte 0x97 # DW_OP_push_object_address .byte 0x23 # DW_OP_plus_uconst .uleb128 0x10 .byte 0x6 # DW_OP_deref .uleb128 0x4 # DW_AT_upper_bound .byte 0x97 # DW_OP_push_object_address .byte 0x23 # DW_OP_plus_uconst .uleb128 0x14 .byte 0x6 # DW_OP_deref .uleb128 0x6 # DW_AT_byte_stride .byte 0x97 # DW_OP_push_object_address .byte 0x23 # DW_OP_plus_uconst .uleb128 0xc .byte 0x6 # DW_OP_deref .byte 0x34 # DW_OP_lit4 .byte 0x1e # DW_OP_mul .byte 0 # end of children of DIE 0x10b .byte 0 # end of children of DIE 0xb .section .debug_abbrev,"",@progbits .Ldebug_abbrev0: .uleb128 0x1 # (abbrev code) .uleb128 0x11 # (TAG: DW_TAG_compile_unit) .byte 0x1 # DW_children_yes .uleb128 0x25 # (DW_AT_producer) .uleb128 0xe # (DW_FORM_strp) .uleb128 0x13 # (DW_AT_language) .uleb128 0xb # (DW_FORM_data1) .uleb128 0x42 # (DW_AT_identifier_case) .uleb128 0xb # (DW_FORM_data1) .uleb128 0x3 # (DW_AT_name) .uleb128 0xe # (DW_FORM_strp) .uleb128 0x1b # (DW_AT_comp_dir) .uleb128 0xe # (DW_FORM_strp) .uleb128 0x11 # (DW_AT_low_pc) .uleb128 0x1 # (DW_FORM_addr) .uleb128 0x12 # (DW_AT_high_pc) .uleb128 0x6 # (DW_FORM_data4) .uleb128 0x10 # (DW_AT_stmt_list) .uleb128 0x17 # (DW_FORM_sec_offset) .byte 0 .byte 0 .uleb128 0x2 # (abbrev code) .uleb128 0x24 # (TAG: DW_TAG_base_type) .byte 0 # DW_children_no .uleb128 0xb # (DW_AT_byte_size) .uleb128 0xb # (DW_FORM_data1) .uleb128 0x3e # (DW_AT_encoding) .uleb128 0xb # (DW_FORM_data1) .uleb128 0x3 # (DW_AT_name) .uleb128 0xe # (DW_FORM_strp) .byte 0 .byte 0 .uleb128 0x3 # (abbrev code) .uleb128 0x26 # (TAG: DW_TAG_const_type) .byte 0 # DW_children_no .uleb128 0x49 # (DW_AT_type) .uleb128 0x13 # (DW_FORM_ref4) .byte 0 .byte 0 .uleb128 0x4 # (abbrev code) .uleb128 0x2e # (TAG: DW_TAG_subprogram) .byte 0x1 # DW_children_yes .uleb128 0x3f # (DW_AT_external) .uleb128 0x19 # (DW_FORM_flag_present) .uleb128 0x3 # (DW_AT_name) .uleb128 0xe # (DW_FORM_strp) .uleb128 0x3a # (DW_AT_decl_file) .uleb128 0xb # (DW_FORM_data1) .uleb128 0x3b # (DW_AT_decl_line) .uleb128 0xb # (DW_FORM_data1) .uleb128 0x49 # (DW_AT_type) .uleb128 0x13 # (DW_FORM_ref4) .uleb128 0x11 # (DW_AT_low_pc) .uleb128 0x1 # (DW_FORM_addr) .uleb128 0x12 # (DW_AT_high_pc) .uleb128 0x6 # (DW_FORM_data4) .uleb128 0x40 # (DW_AT_frame_base) .uleb128 0x18 # (DW_FORM_exprloc) .uleb128 0x2116 # (DW_AT_GNU_all_tail_call_sites) .uleb128 0x19 # (DW_FORM_flag_present) .uleb128 0x1 # (DW_AT_sibling) .uleb128 0x13 # (DW_FORM_ref4) .byte 0 .byte 0 .uleb128 0x5 # (abbrev code) .uleb128 0x5 # (TAG: DW_TAG_formal_parameter) .byte 0 # DW_children_no .uleb128 0x3 # (DW_AT_name) .uleb128 0xe # (DW_FORM_strp) .uleb128 0x3a # (DW_AT_decl_file) .uleb128 0xb # (DW_FORM_data1) .uleb128 0x3b # (DW_AT_decl_line) .uleb128 0xb # (DW_FORM_data1) .uleb128 0x49 # (DW_AT_type) .uleb128 0x13 # (DW_FORM_ref4) .uleb128 0x2 # (DW_AT_location) .uleb128 0x18 # (DW_FORM_exprloc) .byte 0 .byte 0 .uleb128 0x6 # (abbrev code) .uleb128 0xf # (TAG: DW_TAG_pointer_type) .byte 0 # DW_children_no .uleb128 0xb # (DW_AT_byte_size) .uleb128 0xb # (DW_FORM_data1) .uleb128 0x49 # (DW_AT_type) .uleb128 0x13 # (DW_FORM_ref4) .byte 0 .byte 0 .uleb128 0x7 # (abbrev code) .uleb128 0x2e # (TAG: DW_TAG_subprogram) .byte 0x1 # DW_children_yes .uleb128 0x3 # (DW_AT_name) .uleb128 0xe # (DW_FORM_strp) .uleb128 0x3a # (DW_AT_decl_file) .uleb128 0xb # (DW_FORM_data1) .uleb128 0x3b # (DW_AT_decl_line) .uleb128 0xb # (DW_FORM_data1) .uleb128 0x6a # (DW_AT_main_subprogram) .uleb128 0x19 # (DW_FORM_flag_present) .uleb128 0x36 # (DW_AT_calling_convention) .uleb128 0xb # (DW_FORM_data1) .uleb128 0x11 # (DW_AT_low_pc) .uleb128 0x1 # (DW_FORM_addr) .uleb128 0x12 # (DW_AT_high_pc) .uleb128 0x6 # (DW_FORM_data4) .uleb128 0x40 # (DW_AT_frame_base) .uleb128 0x18 # (DW_FORM_exprloc) .uleb128 0x2116 # (DW_AT_GNU_all_tail_call_sites) .uleb128 0x19 # (DW_FORM_flag_present) .uleb128 0x1 # (DW_AT_sibling) .uleb128 0x13 # (DW_FORM_ref4) .byte 0 .byte 0 .uleb128 0x8 # (abbrev code) .uleb128 0x34 # (TAG: DW_TAG_variable) .byte 0 # DW_children_no .uleb128 0x3 # (DW_AT_name) .uleb128 0x8 # (DW_FORM_string) .uleb128 0x3a # (DW_AT_decl_file) .uleb128 0xb # (DW_FORM_data1) .uleb128 0x3b # (DW_AT_decl_line) .uleb128 0xb # (DW_FORM_data1) .uleb128 0x49 # (DW_AT_type) .uleb128 0x13 # (DW_FORM_ref4) .byte 0 .byte 0 .uleb128 0x9 # (abbrev code) .uleb128 0x34 # (TAG: DW_TAG_variable) .byte 0 # DW_children_no .uleb128 0x3 # (DW_AT_name) .uleb128 0xe # (DW_FORM_strp) .uleb128 0x3a # (DW_AT_decl_file) .uleb128 0xb # (DW_FORM_data1) .uleb128 0x3b # (DW_AT_decl_line) .uleb128 0xb # (DW_FORM_data1) .uleb128 0x49 # (DW_AT_type) .uleb128 0x13 # (DW_FORM_ref4) .uleb128 0x2 # (DW_AT_location) .uleb128 0x18 # (DW_FORM_exprloc) .byte 0 .byte 0 .uleb128 0xa # (abbrev code) .uleb128 0x34 # (TAG: DW_TAG_variable) .byte 0 # DW_children_no .uleb128 0x3 # (DW_AT_name) .uleb128 0x8 # (DW_FORM_string) .uleb128 0x3a # (DW_AT_decl_file) .uleb128 0xb # (DW_FORM_data1) .uleb128 0x3b # (DW_AT_decl_line) .uleb128 0xb # (DW_FORM_data1) .uleb128 0x49 # (DW_AT_type) .uleb128 0x13 # (DW_FORM_ref4) .uleb128 0x2 # (DW_AT_location) .uleb128 0x18 # (DW_FORM_exprloc) .byte 0 .byte 0 .uleb128 0xb # (abbrev code) .uleb128 0xb # (TAG: DW_TAG_lexical_block) .byte 0x1 # DW_children_yes .uleb128 0x11 # (DW_AT_low_pc) .uleb128 0x1 # (DW_FORM_addr) .uleb128 0x12 # (DW_AT_high_pc) .uleb128 0x6 # (DW_FORM_data4) .byte 0 .byte 0 .uleb128 0xc # (abbrev code) .uleb128 0xb # (TAG: DW_TAG_lexical_block) .byte 0x1 # DW_children_yes .uleb128 0x11 # (DW_AT_low_pc) .uleb128 0x1 # (DW_FORM_addr) .uleb128 0x12 # (DW_AT_high_pc) .uleb128 0x6 # (DW_FORM_data4) .uleb128 0x1 # (DW_AT_sibling) .uleb128 0x13 # (DW_FORM_ref4) .byte 0 .byte 0 .uleb128 0xd # (abbrev code) .uleb128 0xb # (TAG: DW_TAG_lexical_block) .byte 0 # DW_children_no .uleb128 0x11 # (DW_AT_low_pc) .uleb128 0x1 # (DW_FORM_addr) .uleb128 0x12 # (DW_AT_high_pc) .uleb128 0x6 # (DW_FORM_data4) .byte 0 .byte 0 .uleb128 0xe # (abbrev code) .uleb128 0x1 # (TAG: DW_TAG_array_type) .byte 0x1 # DW_children_yes .uleb128 0x50 # (DW_AT_data_location) .uleb128 0x18 # (DW_FORM_exprloc) .uleb128 0x4f # (DW_AT_associated) .uleb128 0x18 # (DW_FORM_exprloc) .uleb128 0x49 # (DW_AT_type) .uleb128 0x13 # (DW_FORM_ref4) .uleb128 0x1 # (DW_AT_sibling) .uleb128 0x13 # (DW_FORM_ref4) .byte 0 .byte 0 .uleb128 0xf # (abbrev code) .uleb128 0x21 # (TAG: DW_TAG_subrange_type) .byte 0 # DW_children_no .uleb128 0x22 # (DW_AT_lower_bound) .uleb128 0x18 # (DW_FORM_exprloc) .uleb128 0x2f # (DW_AT_upper_bound) .uleb128 0x18 # (DW_FORM_exprloc) .uleb128 0x51 # (DW_AT_byte_stride) .uleb128 0x18 # (DW_FORM_exprloc) .byte 0 .byte 0 .uleb128 0x10 # (abbrev code) .uleb128 0x1 # (TAG: DW_TAG_array_type) .byte 0x1 # DW_children_yes .uleb128 0x50 # (DW_AT_data_location) .uleb128 0x18 # (DW_FORM_exprloc) .uleb128 0x4e # (DW_AT_allocated) .uleb128 0x18 # (DW_FORM_exprloc) .uleb128 0x49 # (DW_AT_type) .uleb128 0x13 # (DW_FORM_ref4) .byte 0 .byte 0 .byte 0 .section .debug_aranges,"",@progbits .long 0x1c # Length of Address Ranges Info .value 0x2 # DWARF Version .long .Ldebug_info0 # Offset of Compilation Unit Info .byte 0x4 # Size of Address .byte 0 # Size of Segment Descriptor .value 0 # Pad to 8 byte boundary .value 0 .long .Ltext0 # Address .long .Letext0-.Ltext0 # Length .long 0 .long 0 .section .debug_line,"",@progbits .Ldebug_line0: .section .debug_str,"MS",@progbits,1 .LASF7: .string "/home/jkratoch/redhat/gdb-clean/gdb/testsuite" .LASF3: .string "character(kind=1)" .LASF0: .string "argc" .LASF9: .string "vla_stride" .LASF2: .string "integer(kind=4)" .LASF5: .string "GNU Fortran2008 6.1.1 20160621 (Red Hat 6.1.1-3) -m32 -mtune=generic -march=i686 -g -fintrinsic-modules-path /usr/lib/gcc/x86_64-redhat-linux/6.1.1/32/finclude" .LASF8: .string "main" .LASF4: .string "pvla" .LASF6: .string "gdb.fortran/vla-stride.f90" .LASF1: .string "argv" .ident "GCC: (GNU) 6.1.1 20160621 (Red Hat 6.1.1-3)" .section .note.GNU-stack,"",@progbits diff --git a/gdb/gdbtypes.c b/gdb/gdbtypes.c index 88801ac..1fbf69a 100644 --- a/gdb/gdbtypes.c +++ b/gdb/gdbtypes.c @@ -1103,10 +1103,12 @@ create_array_type_with_stride (struct type *result_type, if (high_bound < low_bound) TYPE_LENGTH (result_type) = 0; else if (byte_stride > 0) - TYPE_LENGTH (result_type) = byte_stride * (high_bound - low_bound + 1); + TYPE_LENGTH (result_type) = (byte_stride * (high_bound - low_bound) + + TYPE_LENGTH (element_type)); else if (bit_stride > 0) TYPE_LENGTH (result_type) = - (bit_stride * (high_bound - low_bound + 1) + 7) / 8; + ((bit_stride * (high_bound - low_bound) + 7) / 8 + + TYPE_LENGTH (element_type)); else TYPE_LENGTH (result_type) = TYPE_LENGTH (element_type) * (high_bound - low_bound + 1);