Patchwork [obvious/pushed] Use "pulongest" on aarch64-tdep.c:aarch64_gdbarch_init

login
register
mail settings
Submitter Sergio Durigan Junior
Date April 24, 2019, 6:59 p.m.
Message ID <20190424185949.9267-1-sergiodj@redhat.com>
Download mbox | patch
Permalink /patch/32405/
State New
Headers show

Comments

Sergio Durigan Junior - April 24, 2019, 6:59 p.m.
While trying to build GDB on i686, I found the following error:

 In file included from ../../gdb/common/common-defs.h:105,
                  from ../../gdb/defs.h:28,
                  from ../../gdb/aarch64-tdep.c:21:
 ../../gdb/aarch64-tdep.c: In function 'gdbarch* aarch64_gdbarch_init(gdbarch_info, gdbarch_list*)':
 ../../gdb/aarch64-tdep.c:3176:43: error: format '%ld' expects argument of type 'long int', but argument 4 has type 'uint64_t' {aka 'long long unsigned int'} [-Werror=format=]
  3176 |     internal_error (__FILE__, __LINE__, _("VQ out of bounds: %ld (max %d)"),
       |                                           ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 ../../gdb/common/gdb_locale.h:28:29: note: in definition of macro '_'
    28 | # define _(String) gettext (String)
       |                             ^~~~~~
 ../../gdb/aarch64-tdep.c:3176:64: note: format string is defined here
  3176 |     internal_error (__FILE__, __LINE__, _("VQ out of bounds: %ld (max %d)"),
       |                                                              ~~^
       |                                                                |
       |                                                                long int
       |                                                              %lld

This happens because aarch64-tdep.c:aarch64_gdbarch_init prints a
"uint64_t" variable using "%ld".  This patch fixes the build by using
"pulongest" instead.  As explained in a similar fix (commit
495143533ad95369811391c6e3c6dadd69d7dd67), this should be safe because
if aarch64-tdep.c is included in the build, then ULONGEST must be a
64-bit type.

gdb/ChangeLog:
2019-04-24  Sergio Durigan Junior  <sergiodj@redhat.com>

	* aarch64-tdep.c (aarch64_gdbarch_init): Use "pulongest" to print
	"vq".
---
 gdb/ChangeLog      | 5 +++++
 gdb/aarch64-tdep.c | 4 ++--
 2 files changed, 7 insertions(+), 2 deletions(-)

Patch

diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 490c181762..21358ff311 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,3 +1,8 @@ 
+2019-04-24  Sergio Durigan Junior  <sergiodj@redhat.com>
+
+	* aarch64-tdep.c (aarch64_gdbarch_init): Use "pulongest" to print
+	"vq".
+
 2019-04-24  Tom Tromey  <tromey@adacore.com>
 
 	* amd64-tdep.c (amd64_has_unaligned_fields): Ignore bitfields.
diff --git a/gdb/aarch64-tdep.c b/gdb/aarch64-tdep.c
index d53c57357f..f8b4fa4c97 100644
--- a/gdb/aarch64-tdep.c
+++ b/gdb/aarch64-tdep.c
@@ -3173,8 +3173,8 @@  aarch64_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
     vq = aarch64_get_tdesc_vq (info.target_desc);
 
   if (vq > AARCH64_MAX_SVE_VQ)
-    internal_error (__FILE__, __LINE__, _("VQ out of bounds: %ld (max %d)"),
-		    vq, AARCH64_MAX_SVE_VQ);
+    internal_error (__FILE__, __LINE__, _("VQ out of bounds: %s (max %d)"),
+		    pulongest (vq), AARCH64_MAX_SVE_VQ);
 
   /* If there is already a candidate, use it.  */
   for (gdbarch_list *best_arch = gdbarch_list_lookup_by_info (arches, &info);