|
|
4416f5 |
From FEDORA_PATCHES Mon Sep 17 00:00:00 2001
|
|
|
4416f5 |
From: Keith Seitz <keiths@redhat.com>
|
|
|
4416f5 |
Date: Thu, 10 Jun 2021 11:08:25 -0700
|
|
|
4416f5 |
Subject: gdb-testsuite26997-fix-array-slices-m32.patch
|
|
|
4416f5 |
|
|
|
4416f5 |
;; Backport "Fix gdb.fortran/array-slices.exp with -m32"
|
|
|
4416f5 |
;; (Tom de Vres)
|
|
|
4416f5 |
|
|
|
4416f5 |
commit 10f92414d6d4a5f8eb8cbb2bf39ca86c1f9c1da5
|
|
|
4416f5 |
Author: Tom de Vries <tdevries@suse.de>
|
|
|
4416f5 |
Date: Fri Jan 15 12:14:45 2021 +0100
|
|
|
4416f5 |
|
|
|
4416f5 |
[gdb/testsuite] Fix gdb.fortran/array-slices.exp with -m32
|
|
|
4416f5 |
|
|
|
4416f5 |
When running test-case gdb.fortran/array-slices.exp with target board
|
|
|
4416f5 |
unix/-m32, we run into:
|
|
|
4416f5 |
...
|
|
|
4416f5 |
(gdb) print /x &array4d^M
|
|
|
4416f5 |
$69 = 0xffffb620^M
|
|
|
4416f5 |
(gdb) print /x (&array4d) + sizeof (array4d)^M
|
|
|
4416f5 |
$70 = 0x95c620^M
|
|
|
4416f5 |
(gdb) FAIL: gdb.fortran/array-slices.exp: repack=on: test 9: check sizes match
|
|
|
4416f5 |
...
|
|
|
4416f5 |
The expressions calculate the start and end of an array, but the calculation
|
|
|
4416f5 |
of the end expression has an unexpected result (given that it lies before the
|
|
|
4416f5 |
start of the array). By printing "sizeof (array4d)" as a separate
|
|
|
4416f5 |
expression:
|
|
|
4416f5 |
...
|
|
|
4416f5 |
(gdb) print /x sizeof (array4d)
|
|
|
4416f5 |
$1 = 0xc40
|
|
|
4416f5 |
...
|
|
|
4416f5 |
it becomes clear we expected to get 0xffffb620 + 0xc40 == 0xffffc260 instead.
|
|
|
4416f5 |
|
|
|
4416f5 |
The problem is that using the '&' returns a pointer type:
|
|
|
4416f5 |
...
|
|
|
4416f5 |
(gdb) p &array4d
|
|
|
4416f5 |
$5 = (PTR TO -> ( integer(kind=4) (-3:3,7:10,-3:3,-10:-7) )) 0xffffbe00
|
|
|
4416f5 |
...
|
|
|
4416f5 |
which has the consequence that the addition is done as pointer arithmetic.
|
|
|
4416f5 |
|
|
|
4416f5 |
Fix this by using the result of "print /x &array4d" instead of &array4d in the
|
|
|
4416f5 |
addition.
|
|
|
4416f5 |
|
|
|
4416f5 |
Tested on x86_64-linux.
|
|
|
4416f5 |
|
|
|
4416f5 |
gdb/testsuite/ChangeLog:
|
|
|
4416f5 |
|
|
|
4416f5 |
2021-01-15 Tom de Vries <tdevries@suse.de>
|
|
|
4416f5 |
|
|
|
4416f5 |
PR testsuite/26997
|
|
|
4416f5 |
* gdb.fortran/array-slices.exp (run_test): Avoid pointer arithmetic
|
|
|
4416f5 |
when adding sizeof.
|
|
|
4416f5 |
|
|
|
4416f5 |
diff --git a/gdb/testsuite/gdb.fortran/array-slices.exp b/gdb/testsuite/gdb.fortran/array-slices.exp
|
|
|
4416f5 |
--- a/gdb/testsuite/gdb.fortran/array-slices.exp
|
|
|
4416f5 |
+++ b/gdb/testsuite/gdb.fortran/array-slices.exp
|
|
|
4416f5 |
@@ -208,8 +208,9 @@ proc run_test { repack } {
|
|
|
4416f5 |
set start_addr [get_hexadecimal_valueof "&${full_var_name}" \
|
|
|
4416f5 |
"start unknown"]
|
|
|
4416f5 |
set end_addr [get_hexadecimal_valueof \
|
|
|
4416f5 |
- "(&${full_var_name}) + sizeof (${full_var_name})" \
|
|
|
4416f5 |
- "end unknown"]
|
|
|
4416f5 |
+ "$start_addr + sizeof (${full_var_name})" \
|
|
|
4416f5 |
+ "end unknown" \
|
|
|
4416f5 |
+ "get end address of ${full_var_name}"]
|
|
|
4416f5 |
|
|
|
4416f5 |
# The Fortran compiler can choose to either send a descriptor that
|
|
|
4416f5 |
# describes the array slice to the subroutine, or it can repack the
|