Blame SOURCES/gdb-rhbz795424-bitpos-25of25.patch

689258
From FEDORA_PATCHES Mon Sep 17 00:00:00 2001
689258
From: Fedora GDB patches <invalid@email.com>
689258
Date: Fri, 27 Oct 2017 21:07:50 +0200
689258
Subject: gdb-rhbz795424-bitpos-25of25.patch
689258
689258
;; Fix `GDB cannot access struct member whose offset is larger than 256MB'
689258
;; (RH BZ 795424).
689258
;;=push
689258
689258
http://sourceware.org/ml/gdb-patches/2012-08/msg00562.html
689258
689258
--MP_/90J7bck2fqDySEX9JkZtaqL
689258
Content-Type: text/plain; charset=US-ASCII
689258
Content-Transfer-Encoding: 7bit
689258
Content-Disposition: inline
689258
689258
Hi,
689258
689258
Range bounds for a gdb type can have LONGEST values for low and high
689258
bounds. Fortran range bounds functions however use only int. The larger
689258
ranges don't compile by default on gcc, but it is possible to override
689258
the check in the compiler by using -fno-range-check. As a result, this
689258
check is necessary so that we don't print junk in case of an overflow.
689258
689258
Attached patch does this expansion and also includes a test case that
689258
verifies that the problem is fixed. I have also verified on x86_64 that
689258
this patch does not cause any regressions.
689258
689258
Regards,
689258
Siddhesh
689258
689258
gdb/ChangeLog:
689258
689258
	* f-lang.h (f77_get_upperbound): Return LONGEST.
689258
	(f77_get_lowerbound): Likewise.
689258
	* f-typeprint.c (f_type_print_varspec_suffix): Expand
689258
	UPPER_BOUND and LOWER_BOUND to LONGEST.  Use plongest to format
689258
	print them.
689258
	(f_type_print_base): Expand UPPER_BOUND to LONGEST.  Use
689258
	plongest to format print it.
689258
	* f-valprint.c (f77_get_lowerbound): Return LONGEST.
689258
	(f77_get_upperbound): Likewise.
689258
	(f77_get_dynamic_length_of_aggregate): Expand UPPER_BOUND,
689258
	LOWER_BOUND to LONGEST.
689258
	(f77_create_arrayprint_offset_tbl): Likewise.
689258
689258
testsuite/ChangeLog:
689258
689258
	* gdb.fortran/array-bounds.exp: New test case.
689258
	* gdb.fortran/array-bounds.f: New test case.
689258
689258
--MP_/90J7bck2fqDySEX9JkZtaqL
689258
Content-Type: text/x-patch
689258
Content-Transfer-Encoding: 7bit
689258
Content-Disposition: attachment; filename=f77-bounds.patch
689258
689258
diff --git a/gdb/f-lang.h b/gdb/f-lang.h
689258
--- a/gdb/f-lang.h
689258
+++ b/gdb/f-lang.h
689258
@@ -47,9 +47,9 @@ struct common_block
689258
   struct symbol *contents[1];
689258
 };
689258
 
689258
-extern int f77_get_upperbound (struct type *);
689258
+extern LONGEST f77_get_upperbound (struct type *);
689258
 
689258
-extern int f77_get_lowerbound (struct type *);
689258
+extern LONGEST f77_get_lowerbound (struct type *);
689258
 
689258
 extern void f77_get_dynamic_array_length (struct type *);
689258
 
689258
diff --git a/gdb/f-typeprint.c b/gdb/f-typeprint.c
689258
--- a/gdb/f-typeprint.c
689258
+++ b/gdb/f-typeprint.c
689258
@@ -149,7 +149,7 @@ f_type_print_varspec_suffix (struct type *type, struct ui_file *stream,
689258
 			     int show, int passed_a_ptr, int demangled_args,
689258
 			     int arrayprint_recurse_level, int print_rank_only)
689258
 {
689258
-  int upper_bound, lower_bound;
689258
+  LONGEST upper_bound, lower_bound;
689258
 
689258
   /* No static variables are permitted as an error call may occur during
689258
      execution of this function.  */
689258
@@ -196,7 +196,7 @@ f_type_print_varspec_suffix (struct type *type, struct ui_file *stream,
689258
 	{
689258
 	  lower_bound = f77_get_lowerbound (type);
689258
 	  if (lower_bound != 1)	/* Not the default.  */
689258
-	    fprintf_filtered (stream, "%d:", lower_bound);
689258
+	    fprintf_filtered (stream, "%s:", plongest (lower_bound));
689258
 
689258
 	  /* Make sure that, if we have an assumed size array, we
689258
 	       print out a warning and print the upperbound as '*'.  */
689258
@@ -206,7 +206,7 @@ f_type_print_varspec_suffix (struct type *type, struct ui_file *stream,
689258
 	  else
689258
 	    {
689258
 	      upper_bound = f77_get_upperbound (type);
689258
-	      fprintf_filtered (stream, "%d", upper_bound);
689258
+	      fprintf_filtered (stream, "%s", plongest (upper_bound));
689258
 	    }
689258
 	}
689258
 
689258
@@ -278,7 +278,7 @@ void
689258
 f_type_print_base (struct type *type, struct ui_file *stream, int show,
689258
 		   int level)
689258
 {
689258
-  int upper_bound;
689258
+  LONGEST upper_bound;
689258
   int index;
689258
 
689258
   QUIT;
689258
@@ -370,7 +370,7 @@ f_type_print_base (struct type *type, struct ui_file *stream, int show,
689258
       else
689258
 	{
689258
 	  upper_bound = f77_get_upperbound (type);
689258
-	  fprintf_filtered (stream, "character*%d", upper_bound);
689258
+	  fprintf_filtered (stream, "character*%s", plongest (upper_bound));
689258
 	}
689258
       break;
689258
 
689258
diff --git a/gdb/f-valprint.c b/gdb/f-valprint.c
689258
--- a/gdb/f-valprint.c
689258
+++ b/gdb/f-valprint.c
689258
@@ -41,7 +41,7 @@ LONGEST f77_array_offset_tbl[MAX_FORTRAN_DIMS + 1][2];
689258
 /* Array which holds offsets to be applied to get a row's elements
689258
    for a given array.  Array also holds the size of each subarray.  */
689258
 
689258
-int
689258
+LONGEST
689258
 f77_get_lowerbound (struct type *type)
689258
 {
689258
   if (TYPE_ARRAY_LOWER_BOUND_IS_UNDEFINED (type))
689258
@@ -50,7 +50,7 @@ f77_get_lowerbound (struct type *type)
689258
   return TYPE_ARRAY_LOWER_BOUND_VALUE (type);
689258
 }
689258
 
689258
-int
689258
+LONGEST
689258
 f77_get_upperbound (struct type *type)
689258
 {
689258
   if (TYPE_ARRAY_UPPER_BOUND_IS_UNDEFINED (type))