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

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