Patchwork [1/2] Allow really large fortran array bounds: TYPE_LENGTH to ULONGEST

login
register
mail settings
Submitter Keith Seitz
Date March 15, 2019, 8:25 p.m.
Message ID <20190315202550.9741-1-keiths@redhat.com>
Download mbox | patch
Permalink /patch/31865/
State New
Headers show

Comments

Keith Seitz - March 15, 2019, 8:25 p.m.
This series is revisit of Siddhesh Poyarekar's patch from back in
2012. The last status on the patch is in the following gdb-patches
thread:

  https://sourceware.org/ml/gdb-patches/2012-08/msg00562.html

It appears that Tom approved the patch, but Jan had some issues
with a compiler error that made the test fail on -m32 test runs.
He wrote up a hand-tweaked .S file to deal with it. Siddesh said
he would update tests. Then nothing.

Siddesh and Jan have both moved on since.

The patch originally required a large precursor patch to work.
I have whittled this down to/rewritten the bare minimum, and this
first patch is the result, changing the type of TYPE_LENGTH
to ULONGEST from unsigned int.

The majority of the changes involve changing printf format
strings to use %s and pulongest instead of %d.

gdb/ChangeLog:

	* ada-lang.c (ada_template_to_fixed_record_type_1): Use
	%s/pulongest for TYPE_LENGTH instead of %d in format
	strings.
	* ada-typerint.c (ada_print_type): Likewise.
	* amd64-windows-tdep.c (amd64_windows_store_arg_in_reg): Likewise.
	* compile/compile-c-support.c (generate_register_struct): Likewise.
	* gdbtypes.c (recursive_dump_type): Likewise.
	* gdbtypes.h (struct type) <length>: Change type to ULONGEST.
	* m2-typeprint.c (m2_array):  Use %s/pulongest for TYPE_LENGTH
	instead of %d in format strings.
	* riscv-tdep.c (riscv_type_alignment): Cast second argument
	to std::min to ULONGEST.
	* symmisc.c (print_symbol): Use %s/pulongest for TYPE_LENGTH
	instead of %d in format strings.
	* tracepoint.c (info_scope_command): Likewise.
	* typeprint.c (print_offset_data::update)
	(print_offset_data::finish): Likewise.
	* xtensa-tdep.c (xtensa_store_return_value)
	(xtensa_push_dummy_call): Likewise.
---
 gdb/ada-lang.c                  | 8 ++++----
 gdb/ada-typeprint.c             | 7 ++++---
 gdb/amd64-windows-tdep.c        | 2 +-
 gdb/compile/compile-c-support.c | 4 ++--
 gdb/gdbtypes.c                  | 2 +-
 gdb/gdbtypes.h                  | 2 +-
 gdb/m2-typeprint.c              | 6 +++---
 gdb/riscv-tdep.c                | 2 +-
 gdb/symmisc.c                   | 4 ++--
 gdb/tracepoint.c                | 7 +++++--
 gdb/typeprint.c                 | 7 ++++---
 gdb/xtensa-tdep.c               | 8 ++++----
 12 files changed, 32 insertions(+), 27 deletions(-)
Andrew Burgess - March 21, 2019, 10:38 p.m.
* Keith Seitz <keiths@redhat.com> [2019-03-15 13:25:49 -0700]:

> This series is revisit of Siddhesh Poyarekar's patch from back in
> 2012. The last status on the patch is in the following gdb-patches
> thread:
> 
>   https://sourceware.org/ml/gdb-patches/2012-08/msg00562.html
> 
> It appears that Tom approved the patch, but Jan had some issues
> with a compiler error that made the test fail on -m32 test runs.
> He wrote up a hand-tweaked .S file to deal with it. Siddesh said
> he would update tests. Then nothing.
> 
> Siddesh and Jan have both moved on since.
> 
> The patch originally required a large precursor patch to work.
> I have whittled this down to/rewritten the bare minimum, and this
> first patch is the result, changing the type of TYPE_LENGTH
> to ULONGEST from unsigned int.
> 
> The majority of the changes involve changing printf format
> strings to use %s and pulongest instead of %d.
> 
> gdb/ChangeLog:
> 
> 	* ada-lang.c (ada_template_to_fixed_record_type_1): Use
> 	%s/pulongest for TYPE_LENGTH instead of %d in format
> 	strings.
> 	* ada-typerint.c (ada_print_type): Likewise.
> 	* amd64-windows-tdep.c (amd64_windows_store_arg_in_reg): Likewise.
> 	* compile/compile-c-support.c (generate_register_struct): Likewise.
> 	* gdbtypes.c (recursive_dump_type): Likewise.
> 	* gdbtypes.h (struct type) <length>: Change type to ULONGEST.
> 	* m2-typeprint.c (m2_array):  Use %s/pulongest for TYPE_LENGTH
> 	instead of %d in format strings.
> 	* riscv-tdep.c (riscv_type_alignment): Cast second argument
> 	to std::min to ULONGEST.
> 	* symmisc.c (print_symbol): Use %s/pulongest for TYPE_LENGTH
> 	instead of %d in format strings.
> 	* tracepoint.c (info_scope_command): Likewise.
> 	* typeprint.c (print_offset_data::update)
> 	(print_offset_data::finish): Likewise.
> 	* xtensa-tdep.c (xtensa_store_return_value)
> 	(xtensa_push_dummy_call): Likewise.

I took a look through and all of these changes seem reasonable.  You
might want to wait a few more days to see if there's any additional
feedback from anyone else, but otherwise I think this could be merged.

Thanks,
Andrew





> ---
>  gdb/ada-lang.c                  | 8 ++++----
>  gdb/ada-typeprint.c             | 7 ++++---
>  gdb/amd64-windows-tdep.c        | 2 +-
>  gdb/compile/compile-c-support.c | 4 ++--
>  gdb/gdbtypes.c                  | 2 +-
>  gdb/gdbtypes.h                  | 2 +-
>  gdb/m2-typeprint.c              | 6 +++---
>  gdb/riscv-tdep.c                | 2 +-
>  gdb/symmisc.c                   | 4 ++--
>  gdb/tracepoint.c                | 7 +++++--
>  gdb/typeprint.c                 | 7 ++++---
>  gdb/xtensa-tdep.c               | 8 ++++----
>  12 files changed, 32 insertions(+), 27 deletions(-)
> 
> diff --git a/gdb/ada-lang.c b/gdb/ada-lang.c
> index a6fadc846e..37b0cb4b83 100644
> --- a/gdb/ada-lang.c
> +++ b/gdb/ada-lang.c
> @@ -8497,11 +8497,11 @@ ada_template_to_fixed_record_type_1 (struct type *type,
>    if (TYPE_LENGTH (type) <= 0)
>      {
>        if (TYPE_NAME (rtype))
> -	warning (_("Invalid type size for `%s' detected: %d."),
> -		 TYPE_NAME (rtype), TYPE_LENGTH (type));
> +	warning (_("Invalid type size for `%s' detected: %s."),
> +		 TYPE_NAME (rtype), pulongest (TYPE_LENGTH (type)));
>        else
> -	warning (_("Invalid type size for <unnamed> detected: %d."),
> -		 TYPE_LENGTH (type));
> +	warning (_("Invalid type size for <unnamed> detected: %s."),
> +		 pulongest (TYPE_LENGTH (type)));
>      }
>    else
>      {
> diff --git a/gdb/ada-typeprint.c b/gdb/ada-typeprint.c
> index 8c42e8140d..efcd14bedc 100644
> --- a/gdb/ada-typeprint.c
> +++ b/gdb/ada-typeprint.c
> @@ -895,8 +895,8 @@ ada_print_type (struct type *type0, const char *varstring,
>  	    const char *name = ada_type_name (type);
>  
>  	    if (!ada_is_range_type_name (name))
> -	      fprintf_filtered (stream, _("<%d-byte integer>"),
> -				TYPE_LENGTH (type));
> +	      fprintf_filtered (stream, _("<%s-byte integer>"),
> +				pulongest (TYPE_LENGTH (type)));
>  	    else
>  	      {
>  		fprintf_filtered (stream, "range ");
> @@ -917,7 +917,8 @@ ada_print_type (struct type *type0, const char *varstring,
>  	  }
>  	break;
>        case TYPE_CODE_FLT:
> -	fprintf_filtered (stream, _("<%d-byte float>"), TYPE_LENGTH (type));
> +	fprintf_filtered (stream, _("<%s-byte float>"),
> +			  pulongest (TYPE_LENGTH (type)));
>  	break;
>        case TYPE_CODE_ENUM:
>  	if (show < 0)
> diff --git a/gdb/amd64-windows-tdep.c b/gdb/amd64-windows-tdep.c
> index 65c05c645a..922da9e48b 100644
> --- a/gdb/amd64-windows-tdep.c
> +++ b/gdb/amd64-windows-tdep.c
> @@ -144,7 +144,7 @@ amd64_windows_store_arg_in_reg (struct regcache *regcache,
>  
>    gdb_assert (TYPE_LENGTH (type) <= 8);
>    memset (buf, 0, sizeof buf);
> -  memcpy (buf, valbuf, std::min (TYPE_LENGTH (type), (unsigned int) 8));
> +  memcpy (buf, valbuf, std::min (TYPE_LENGTH (type), (ULONGEST) 8));
>    regcache->cooked_write (regno, buf);
>  }
>  
> diff --git a/gdb/compile/compile-c-support.c b/gdb/compile/compile-c-support.c
> index 3d2913cd14..d1947da657 100644
> --- a/gdb/compile/compile-c-support.c
> +++ b/gdb/compile/compile-c-support.c
> @@ -270,11 +270,11 @@ generate_register_struct (struct ui_file *stream, struct gdbarch *gdbarch,
>  
>  	      default:
>  		fprintf_unfiltered (stream,
> -				    "  unsigned char %s[%d]"
> +				    "  unsigned char %s[%s]"
>  				    " __attribute__((__aligned__("
>  				    "__BIGGEST_ALIGNMENT__)))",
>  				    regname.c_str (),
> -				    TYPE_LENGTH (regtype));
> +				    pulongest (TYPE_LENGTH (regtype)));
>  	      }
>  	    fputs_unfiltered (";\n", stream);
>  	  }
> diff --git a/gdb/gdbtypes.c b/gdb/gdbtypes.c
> index 09284ef259..0fac740d0d 100644
> --- a/gdb/gdbtypes.c
> +++ b/gdb/gdbtypes.c
> @@ -4607,7 +4607,7 @@ recursive_dump_type (struct type *type, int spaces)
>        break;
>      }
>    puts_filtered ("\n");
> -  printfi_filtered (spaces, "length %d\n", TYPE_LENGTH (type));
> +  printfi_filtered (spaces, "length %s\n", pulongest (TYPE_LENGTH (type)));
>    if (TYPE_OBJFILE_OWNED (type))
>      {
>        printfi_filtered (spaces, "objfile ");
> diff --git a/gdb/gdbtypes.h b/gdb/gdbtypes.h
> index a6d4f64e9b..7795143ba0 100644
> --- a/gdb/gdbtypes.h
> +++ b/gdb/gdbtypes.h
> @@ -859,7 +859,7 @@ struct type
>       type_length_units function should be used in order to get the length
>       expressed in target addressable memory units.  */
>  
> -  unsigned int length;
> +  ULONGEST length;
>  
>    /* * Core type, shared by a group of qualified types.  */
>  
> diff --git a/gdb/m2-typeprint.c b/gdb/m2-typeprint.c
> index 754fb657af..dae07d1c53 100644
> --- a/gdb/m2-typeprint.c
> +++ b/gdb/m2-typeprint.c
> @@ -234,9 +234,9 @@ static void m2_array (struct type *type, struct ui_file *stream,
>  	  m2_print_bounds (TYPE_INDEX_TYPE (type), stream, show, -1, 1);
>  	}
>        else
> -	fprintf_filtered (stream, "%d",
> -			  (TYPE_LENGTH (type)
> -			   / TYPE_LENGTH (TYPE_TARGET_TYPE (type))));
> +	fputs_filtered (pulongest ((TYPE_LENGTH (type)
> +				    / TYPE_LENGTH (TYPE_TARGET_TYPE (type)))),
> +			stream);
>      }
>    fprintf_filtered (stream, "] OF ");
>    m2_print_type (TYPE_TARGET_TYPE (type), "", stream, show, level, flags);
> diff --git a/gdb/riscv-tdep.c b/gdb/riscv-tdep.c
> index 8a996f32d3..ff5f36e762 100644
> --- a/gdb/riscv-tdep.c
> +++ b/gdb/riscv-tdep.c
> @@ -1645,7 +1645,7 @@ riscv_type_alignment (struct type *t)
>  
>      case TYPE_CODE_ARRAY:
>        if (TYPE_VECTOR (t))
> -	return std::min (TYPE_LENGTH (t), (unsigned) BIGGEST_ALIGNMENT);
> +	return std::min (TYPE_LENGTH (t), (ULONGEST) BIGGEST_ALIGNMENT);
>        /* FALLTHROUGH */
>  
>      case TYPE_CODE_COMPLEX:
> diff --git a/gdb/symmisc.c b/gdb/symmisc.c
> index cb0b5a52e4..6ce799009a 100644
> --- a/gdb/symmisc.c
> +++ b/gdb/symmisc.c
> @@ -587,8 +587,8 @@ print_symbol (struct gdbarch *gdbarch, struct symbol *symbol,
>  	    unsigned i;
>  	    struct type *type = check_typedef (SYMBOL_TYPE (symbol));
>  
> -	    fprintf_filtered (outfile, "const %u hex bytes:",
> -			      TYPE_LENGTH (type));
> +	    fprintf_filtered (outfile, "const %s hex bytes:",
> +			      pulongest (TYPE_LENGTH (type)));
>  	    for (i = 0; i < TYPE_LENGTH (type); i++)
>  	      fprintf_filtered (outfile, " %02x",
>  				(unsigned) SYMBOL_VALUE_BYTES (symbol)[i]);
> diff --git a/gdb/tracepoint.c b/gdb/tracepoint.c
> index 8cdda7aeed..c7585c6783 100644
> --- a/gdb/tracepoint.c
> +++ b/gdb/tracepoint.c
> @@ -2636,8 +2636,11 @@ info_scope_command (const char *args_in, int from_tty)
>  		}
>  	    }
>  	  if (SYMBOL_TYPE (sym))
> -	    printf_filtered (", length %d.\n",
> -			     TYPE_LENGTH (check_typedef (SYMBOL_TYPE (sym))));
> +	    {
> +	      struct type *t = check_typedef (SYMBOL_TYPE (sym));
> +
> +	      printf_filtered (", length %s.\n", pulongest (TYPE_LENGTH (t)));
> +	    }
>  	}
>        if (BLOCK_FUNCTION (block))
>  	break;
> diff --git a/gdb/typeprint.c b/gdb/typeprint.c
> index 114725bc69..0a93a831b8 100644
> --- a/gdb/typeprint.c
> +++ b/gdb/typeprint.c
> @@ -120,7 +120,8 @@ print_offset_data::update (struct type *type, unsigned int field_idx,
>      {
>        /* Since union fields don't have the concept of offsets, we just
>  	 print their sizes.  */
> -      fprintf_filtered (stream, "/*              %4u */", TYPE_LENGTH (ftype));
> +      fprintf_filtered (stream, "/*              %4s */",
> +			pulongest (TYPE_LENGTH (ftype)));
>        return;
>      }
>  
> @@ -183,8 +184,8 @@ print_offset_data::finish (struct type *type, int level,
>  
>    fputs_filtered ("\n", stream);
>    print_spaces_filtered (level + 4 + print_offset_data::indentation, stream);
> -  fprintf_filtered (stream, "/* total size (bytes): %4u */\n",
> -		    TYPE_LENGTH (type));
> +  fprintf_filtered (stream, "/* total size (bytes): %4s */\n",
> +		    pulongest (TYPE_LENGTH (type)));
>  }
>  
>  
> diff --git a/gdb/xtensa-tdep.c b/gdb/xtensa-tdep.c
> index fcec9961ee..efa0bcb1dc 100644
> --- a/gdb/xtensa-tdep.c
> +++ b/gdb/xtensa-tdep.c
> @@ -1615,8 +1615,8 @@ xtensa_store_return_value (struct type *type,
>  
>        if (len > (callsize > 8 ? 8 : 16))
>  	internal_error (__FILE__, __LINE__,
> -			_("unimplemented for this length: %d"),
> -			TYPE_LENGTH (type));
> +			_("unimplemented for this length: %s"),
> +			pulongest (TYPE_LENGTH (type)));
>        areg = arreg_number (gdbarch,
>  			   gdbarch_tdep (gdbarch)->a0_base + 2 + callsize, wb);
>  
> @@ -1723,9 +1723,9 @@ xtensa_push_dummy_call (struct gdbarch *gdbarch,
>          {
>  	  struct value *arg = args[i];
>  	  struct type *arg_type = check_typedef (value_type (arg));
> -	  fprintf_unfiltered (gdb_stdlog, "%2d: %s %3d ", i,
> +	  fprintf_unfiltered (gdb_stdlog, "%2d: %s %3s ", i,
>  			      host_address_to_string (arg),
> -			      TYPE_LENGTH (arg_type));
> +			      pulongest (TYPE_LENGTH (arg_type)));
>  	  switch (TYPE_CODE (arg_type))
>  	    {
>  	    case TYPE_CODE_INT:
> -- 
> 2.20.1
>
Kevin Buettner - March 24, 2019, 10:44 p.m.
On Fri, 15 Mar 2019 13:25:49 -0700
Keith Seitz <keiths@redhat.com> wrote:

> This series is revisit of Siddhesh Poyarekar's patch from back in
> 2012. The last status on the patch is in the following gdb-patches
> thread:
> 
>   https://sourceware.org/ml/gdb-patches/2012-08/msg00562.html
> 
> It appears that Tom approved the patch, but Jan had some issues
> with a compiler error that made the test fail on -m32 test runs.
> He wrote up a hand-tweaked .S file to deal with it. Siddesh said
> he would update tests. Then nothing.
> 
> Siddesh and Jan have both moved on since.
> 
> The patch originally required a large precursor patch to work.
> I have whittled this down to/rewritten the bare minimum, and this
> first patch is the result, changing the type of TYPE_LENGTH
> to ULONGEST from unsigned int.
> 
> The majority of the changes involve changing printf format
> strings to use %s and pulongest instead of %d.
> 
> gdb/ChangeLog:
> 
> 	* ada-lang.c (ada_template_to_fixed_record_type_1): Use
> 	%s/pulongest for TYPE_LENGTH instead of %d in format
> 	strings.
> 	* ada-typerint.c (ada_print_type): Likewise.
> 	* amd64-windows-tdep.c (amd64_windows_store_arg_in_reg): Likewise.
> 	* compile/compile-c-support.c (generate_register_struct): Likewise.
> 	* gdbtypes.c (recursive_dump_type): Likewise.
> 	* gdbtypes.h (struct type) <length>: Change type to ULONGEST.
> 	* m2-typeprint.c (m2_array):  Use %s/pulongest for TYPE_LENGTH
> 	instead of %d in format strings.
> 	* riscv-tdep.c (riscv_type_alignment): Cast second argument
> 	to std::min to ULONGEST.
> 	* symmisc.c (print_symbol): Use %s/pulongest for TYPE_LENGTH
> 	instead of %d in format strings.
> 	* tracepoint.c (info_scope_command): Likewise.
> 	* typeprint.c (print_offset_data::update)
> 	(print_offset_data::finish): Likewise.
> 	* xtensa-tdep.c (xtensa_store_return_value)
> 	(xtensa_push_dummy_call): Likewise.

Okay.

Kevin

Patch

diff --git a/gdb/ada-lang.c b/gdb/ada-lang.c
index a6fadc846e..37b0cb4b83 100644
--- a/gdb/ada-lang.c
+++ b/gdb/ada-lang.c
@@ -8497,11 +8497,11 @@  ada_template_to_fixed_record_type_1 (struct type *type,
   if (TYPE_LENGTH (type) <= 0)
     {
       if (TYPE_NAME (rtype))
-	warning (_("Invalid type size for `%s' detected: %d."),
-		 TYPE_NAME (rtype), TYPE_LENGTH (type));
+	warning (_("Invalid type size for `%s' detected: %s."),
+		 TYPE_NAME (rtype), pulongest (TYPE_LENGTH (type)));
       else
-	warning (_("Invalid type size for <unnamed> detected: %d."),
-		 TYPE_LENGTH (type));
+	warning (_("Invalid type size for <unnamed> detected: %s."),
+		 pulongest (TYPE_LENGTH (type)));
     }
   else
     {
diff --git a/gdb/ada-typeprint.c b/gdb/ada-typeprint.c
index 8c42e8140d..efcd14bedc 100644
--- a/gdb/ada-typeprint.c
+++ b/gdb/ada-typeprint.c
@@ -895,8 +895,8 @@  ada_print_type (struct type *type0, const char *varstring,
 	    const char *name = ada_type_name (type);
 
 	    if (!ada_is_range_type_name (name))
-	      fprintf_filtered (stream, _("<%d-byte integer>"),
-				TYPE_LENGTH (type));
+	      fprintf_filtered (stream, _("<%s-byte integer>"),
+				pulongest (TYPE_LENGTH (type)));
 	    else
 	      {
 		fprintf_filtered (stream, "range ");
@@ -917,7 +917,8 @@  ada_print_type (struct type *type0, const char *varstring,
 	  }
 	break;
       case TYPE_CODE_FLT:
-	fprintf_filtered (stream, _("<%d-byte float>"), TYPE_LENGTH (type));
+	fprintf_filtered (stream, _("<%s-byte float>"),
+			  pulongest (TYPE_LENGTH (type)));
 	break;
       case TYPE_CODE_ENUM:
 	if (show < 0)
diff --git a/gdb/amd64-windows-tdep.c b/gdb/amd64-windows-tdep.c
index 65c05c645a..922da9e48b 100644
--- a/gdb/amd64-windows-tdep.c
+++ b/gdb/amd64-windows-tdep.c
@@ -144,7 +144,7 @@  amd64_windows_store_arg_in_reg (struct regcache *regcache,
 
   gdb_assert (TYPE_LENGTH (type) <= 8);
   memset (buf, 0, sizeof buf);
-  memcpy (buf, valbuf, std::min (TYPE_LENGTH (type), (unsigned int) 8));
+  memcpy (buf, valbuf, std::min (TYPE_LENGTH (type), (ULONGEST) 8));
   regcache->cooked_write (regno, buf);
 }
 
diff --git a/gdb/compile/compile-c-support.c b/gdb/compile/compile-c-support.c
index 3d2913cd14..d1947da657 100644
--- a/gdb/compile/compile-c-support.c
+++ b/gdb/compile/compile-c-support.c
@@ -270,11 +270,11 @@  generate_register_struct (struct ui_file *stream, struct gdbarch *gdbarch,
 
 	      default:
 		fprintf_unfiltered (stream,
-				    "  unsigned char %s[%d]"
+				    "  unsigned char %s[%s]"
 				    " __attribute__((__aligned__("
 				    "__BIGGEST_ALIGNMENT__)))",
 				    regname.c_str (),
-				    TYPE_LENGTH (regtype));
+				    pulongest (TYPE_LENGTH (regtype)));
 	      }
 	    fputs_unfiltered (";\n", stream);
 	  }
diff --git a/gdb/gdbtypes.c b/gdb/gdbtypes.c
index 09284ef259..0fac740d0d 100644
--- a/gdb/gdbtypes.c
+++ b/gdb/gdbtypes.c
@@ -4607,7 +4607,7 @@  recursive_dump_type (struct type *type, int spaces)
       break;
     }
   puts_filtered ("\n");
-  printfi_filtered (spaces, "length %d\n", TYPE_LENGTH (type));
+  printfi_filtered (spaces, "length %s\n", pulongest (TYPE_LENGTH (type)));
   if (TYPE_OBJFILE_OWNED (type))
     {
       printfi_filtered (spaces, "objfile ");
diff --git a/gdb/gdbtypes.h b/gdb/gdbtypes.h
index a6d4f64e9b..7795143ba0 100644
--- a/gdb/gdbtypes.h
+++ b/gdb/gdbtypes.h
@@ -859,7 +859,7 @@  struct type
      type_length_units function should be used in order to get the length
      expressed in target addressable memory units.  */
 
-  unsigned int length;
+  ULONGEST length;
 
   /* * Core type, shared by a group of qualified types.  */
 
diff --git a/gdb/m2-typeprint.c b/gdb/m2-typeprint.c
index 754fb657af..dae07d1c53 100644
--- a/gdb/m2-typeprint.c
+++ b/gdb/m2-typeprint.c
@@ -234,9 +234,9 @@  static void m2_array (struct type *type, struct ui_file *stream,
 	  m2_print_bounds (TYPE_INDEX_TYPE (type), stream, show, -1, 1);
 	}
       else
-	fprintf_filtered (stream, "%d",
-			  (TYPE_LENGTH (type)
-			   / TYPE_LENGTH (TYPE_TARGET_TYPE (type))));
+	fputs_filtered (pulongest ((TYPE_LENGTH (type)
+				    / TYPE_LENGTH (TYPE_TARGET_TYPE (type)))),
+			stream);
     }
   fprintf_filtered (stream, "] OF ");
   m2_print_type (TYPE_TARGET_TYPE (type), "", stream, show, level, flags);
diff --git a/gdb/riscv-tdep.c b/gdb/riscv-tdep.c
index 8a996f32d3..ff5f36e762 100644
--- a/gdb/riscv-tdep.c
+++ b/gdb/riscv-tdep.c
@@ -1645,7 +1645,7 @@  riscv_type_alignment (struct type *t)
 
     case TYPE_CODE_ARRAY:
       if (TYPE_VECTOR (t))
-	return std::min (TYPE_LENGTH (t), (unsigned) BIGGEST_ALIGNMENT);
+	return std::min (TYPE_LENGTH (t), (ULONGEST) BIGGEST_ALIGNMENT);
       /* FALLTHROUGH */
 
     case TYPE_CODE_COMPLEX:
diff --git a/gdb/symmisc.c b/gdb/symmisc.c
index cb0b5a52e4..6ce799009a 100644
--- a/gdb/symmisc.c
+++ b/gdb/symmisc.c
@@ -587,8 +587,8 @@  print_symbol (struct gdbarch *gdbarch, struct symbol *symbol,
 	    unsigned i;
 	    struct type *type = check_typedef (SYMBOL_TYPE (symbol));
 
-	    fprintf_filtered (outfile, "const %u hex bytes:",
-			      TYPE_LENGTH (type));
+	    fprintf_filtered (outfile, "const %s hex bytes:",
+			      pulongest (TYPE_LENGTH (type)));
 	    for (i = 0; i < TYPE_LENGTH (type); i++)
 	      fprintf_filtered (outfile, " %02x",
 				(unsigned) SYMBOL_VALUE_BYTES (symbol)[i]);
diff --git a/gdb/tracepoint.c b/gdb/tracepoint.c
index 8cdda7aeed..c7585c6783 100644
--- a/gdb/tracepoint.c
+++ b/gdb/tracepoint.c
@@ -2636,8 +2636,11 @@  info_scope_command (const char *args_in, int from_tty)
 		}
 	    }
 	  if (SYMBOL_TYPE (sym))
-	    printf_filtered (", length %d.\n",
-			     TYPE_LENGTH (check_typedef (SYMBOL_TYPE (sym))));
+	    {
+	      struct type *t = check_typedef (SYMBOL_TYPE (sym));
+
+	      printf_filtered (", length %s.\n", pulongest (TYPE_LENGTH (t)));
+	    }
 	}
       if (BLOCK_FUNCTION (block))
 	break;
diff --git a/gdb/typeprint.c b/gdb/typeprint.c
index 114725bc69..0a93a831b8 100644
--- a/gdb/typeprint.c
+++ b/gdb/typeprint.c
@@ -120,7 +120,8 @@  print_offset_data::update (struct type *type, unsigned int field_idx,
     {
       /* Since union fields don't have the concept of offsets, we just
 	 print their sizes.  */
-      fprintf_filtered (stream, "/*              %4u */", TYPE_LENGTH (ftype));
+      fprintf_filtered (stream, "/*              %4s */",
+			pulongest (TYPE_LENGTH (ftype)));
       return;
     }
 
@@ -183,8 +184,8 @@  print_offset_data::finish (struct type *type, int level,
 
   fputs_filtered ("\n", stream);
   print_spaces_filtered (level + 4 + print_offset_data::indentation, stream);
-  fprintf_filtered (stream, "/* total size (bytes): %4u */\n",
-		    TYPE_LENGTH (type));
+  fprintf_filtered (stream, "/* total size (bytes): %4s */\n",
+		    pulongest (TYPE_LENGTH (type)));
 }
 
 
diff --git a/gdb/xtensa-tdep.c b/gdb/xtensa-tdep.c
index fcec9961ee..efa0bcb1dc 100644
--- a/gdb/xtensa-tdep.c
+++ b/gdb/xtensa-tdep.c
@@ -1615,8 +1615,8 @@  xtensa_store_return_value (struct type *type,
 
       if (len > (callsize > 8 ? 8 : 16))
 	internal_error (__FILE__, __LINE__,
-			_("unimplemented for this length: %d"),
-			TYPE_LENGTH (type));
+			_("unimplemented for this length: %s"),
+			pulongest (TYPE_LENGTH (type)));
       areg = arreg_number (gdbarch,
 			   gdbarch_tdep (gdbarch)->a0_base + 2 + callsize, wb);
 
@@ -1723,9 +1723,9 @@  xtensa_push_dummy_call (struct gdbarch *gdbarch,
         {
 	  struct value *arg = args[i];
 	  struct type *arg_type = check_typedef (value_type (arg));
-	  fprintf_unfiltered (gdb_stdlog, "%2d: %s %3d ", i,
+	  fprintf_unfiltered (gdb_stdlog, "%2d: %s %3s ", i,
 			      host_address_to_string (arg),
-			      TYPE_LENGTH (arg_type));
+			      pulongest (TYPE_LENGTH (arg_type)));
 	  switch (TYPE_CODE (arg_type))
 	    {
 	    case TYPE_CODE_INT: