[2/2] gdb.base/coremaker2.c: Fix compilation problems for x86_64 -m32 multilib

Message ID 20200731042157.1323816-3-kevinb@redhat.com
State New
Headers show
Series
  • Fix gdb.base/coremaker.c problems
Related show

Commit Message

Hannes Domani via Gdb-patches July 31, 2020, 4:21 a.m.
There are compilation warnings / errors when compiling coremaker2.c
for the gdb.base/corefile2.exp tests.  Here's the command to use
on x86_64 linux:

make check RUNTESTFLAGS="--target_board unix/-m32" \
           TESTS="gdb.base/corefile2.exp"

These are the warnings / errors - I've shortened the paths somewhat:

gdb compile failed, gdb/testsuite/gdb.base/coremaker2.c: In function 'main':
gdb/testsuite/gdb.base/coremaker2.c:106:11: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast]
  106 |   addr = ((unsigned long long) buf_ro + pagesize) & ~(pagesize - 1);
      |           ^
gdb/testsuite/gdb.base/coremaker2.c:108:15: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast]
  108 |   if (addr <= (unsigned long long) buf_ro
      |               ^
gdb/testsuite/gdb.base/coremaker2.c:109:18: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast]
  109 |       || addr >= (unsigned long long) buf_ro + sizeof (buf_ro))
      |                  ^
gdb/testsuite/gdb.base/coremaker2.c:115:19: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast]
  115 |   mbuf_ro = mmap ((void *) addr, pagesize, PROT_READ,
      |                   ^
gdb/testsuite/gdb.base/coremaker2.c:130:11: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast]
  130 |   addr = ((unsigned long long) buf_rw + pagesize) & ~(pagesize - 1);
      |           ^
gdb/testsuite/gdb.base/coremaker2.c:132:15: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast]
  132 |   if (addr <= (unsigned long long) buf_rw
      |               ^
gdb/testsuite/gdb.base/coremaker2.c:133:18: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast]
  133 |       || addr >= (unsigned long long) buf_rw + sizeof (buf_rw))
      |                  ^
gdb/testsuite/gdb.base/coremaker2.c:139:19: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast]
  139 |   mbuf_rw = mmap ((void *) addr, pagesize, PROT_READ,
      |                   ^

These were fixed by changing unsigned long long to size_t.

Tested on Fedora 32 with architectures: x86_64, x86_64/-m32, aarch64,
s390x, and ppc64le.

gdb/testsuite/ChangeLog:

	* gdb.base/coremaker2.c: Change all uses of 'unsigned long long'
	to 'size_t'
	(stddef.h): Include.
---
 gdb/testsuite/gdb.base/coremaker2.c | 15 ++++++++-------
 1 file changed, 8 insertions(+), 7 deletions(-)

-- 
2.26.2

Comments

Simon Marchi July 31, 2020, 3:31 p.m. | #1
On 2020-07-31 12:21 a.m., Kevin Buettner via Gdb-patches wrote:
> There are compilation warnings / errors when compiling coremaker2.c

> for the gdb.base/corefile2.exp tests.  Here's the command to use

> on x86_64 linux:

> 

> make check RUNTESTFLAGS="--target_board unix/-m32" \

>            TESTS="gdb.base/corefile2.exp"

> 

> These are the warnings / errors - I've shortened the paths somewhat:

> 

> gdb compile failed, gdb/testsuite/gdb.base/coremaker2.c: In function 'main':

> gdb/testsuite/gdb.base/coremaker2.c:106:11: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast]

>   106 |   addr = ((unsigned long long) buf_ro + pagesize) & ~(pagesize - 1);

>       |           ^

> gdb/testsuite/gdb.base/coremaker2.c:108:15: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast]

>   108 |   if (addr <= (unsigned long long) buf_ro

>       |               ^

> gdb/testsuite/gdb.base/coremaker2.c:109:18: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast]

>   109 |       || addr >= (unsigned long long) buf_ro + sizeof (buf_ro))

>       |                  ^

> gdb/testsuite/gdb.base/coremaker2.c:115:19: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast]

>   115 |   mbuf_ro = mmap ((void *) addr, pagesize, PROT_READ,

>       |                   ^

> gdb/testsuite/gdb.base/coremaker2.c:130:11: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast]

>   130 |   addr = ((unsigned long long) buf_rw + pagesize) & ~(pagesize - 1);

>       |           ^

> gdb/testsuite/gdb.base/coremaker2.c:132:15: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast]

>   132 |   if (addr <= (unsigned long long) buf_rw

>       |               ^

> gdb/testsuite/gdb.base/coremaker2.c:133:18: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast]

>   133 |       || addr >= (unsigned long long) buf_rw + sizeof (buf_rw))

>       |                  ^

> gdb/testsuite/gdb.base/coremaker2.c:139:19: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast]

>   139 |   mbuf_rw = mmap ((void *) addr, pagesize, PROT_READ,

>       |                   ^

> 

> These were fixed by changing unsigned long long to size_t.

> 

> Tested on Fedora 32 with architectures: x86_64, x86_64/-m32, aarch64,

> s390x, and ppc64le.

> 

> gdb/testsuite/ChangeLog:

> 

> 	* gdb.base/coremaker2.c: Change all uses of 'unsigned long long'

> 	to 'size_t'

> 	(stddef.h): Include.

> ---

>  gdb/testsuite/gdb.base/coremaker2.c | 15 ++++++++-------

>  1 file changed, 8 insertions(+), 7 deletions(-)

> 

> diff --git a/gdb/testsuite/gdb.base/coremaker2.c b/gdb/testsuite/gdb.base/coremaker2.c

> index 3c89bd790b..29649b84e9 100644

> --- a/gdb/testsuite/gdb.base/coremaker2.c

> +++ b/gdb/testsuite/gdb.base/coremaker2.c

> @@ -39,11 +39,12 @@

>  #include <unistd.h>

>  #include <string.h>

>  #include <errno.h>

> +#include <stddef.h>

>  

>  /* These are globals so that we can find them easily when debugging

>     the core file.  */

>  long pagesize;

> -unsigned long long addr;

> +size_t addr;

>  char *mbuf_ro;

>  char *mbuf_rw;

>  

> @@ -106,10 +107,10 @@ main (int argc, char **argv)

>      }

>  

>    /* Compute an address that should be within buf_ro.  Complain if not.  */

> -  addr = ((unsigned long long) buf_ro + pagesize) & ~(pagesize - 1);

> +  addr = ((size_t) buf_ro + pagesize) & ~(pagesize - 1);

>  

> -  if (addr <= (unsigned long long) buf_ro

> -      || addr >= (unsigned long long) buf_ro + sizeof (buf_ro))

> +  if (addr <= (size_t) buf_ro

> +      || addr >= (size_t) buf_ro + sizeof (buf_ro))

>      {

>        fprintf (stderr, "Unable to compute a suitable address within buf_ro.\n");

>        exit (1);

> @@ -130,10 +131,10 @@ main (int argc, char **argv)

>  

>    /* Compute an mmap address within buf_rw.  Complain if it's somewhere

>       else.  */

> -  addr = ((unsigned long long) buf_rw + pagesize) & ~(pagesize - 1);

> +  addr = ((size_t) buf_rw + pagesize) & ~(pagesize - 1);

>  

> -  if (addr <= (unsigned long long) buf_rw

> -      || addr >= (unsigned long long) buf_rw + sizeof (buf_rw))

> +  if (addr <= (size_t) buf_rw

> +      || addr >= (size_t) buf_rw + sizeof (buf_rw))

>      {

>        fprintf (stderr, "Unable to compute a suitable address within buf_rw.\n");

>        exit (1);

> -- 

> 2.26.2

> 


Not sure if it will make a difference in practice, but I think uintptr_t would be more
appropriate than size_t, since you are converting an address (pointer) to an integer.

https://stackoverflow.com/questions/1464174/size-t-vs-uintptr-t

Otherwise, both of your patches LGTM.

Simon
Hannes Domani via Gdb-patches July 31, 2020, 4:43 p.m. | #2
On Fri, 31 Jul 2020 11:31:33 -0400
Simon Marchi <simark@simark.ca> wrote:
 
> Not sure if it will make a difference in practice, but I think uintptr_t would be more

> appropriate than size_t, since you are converting an address (pointer) to an integer.

> 

> https://stackoverflow.com/questions/1464174/size-t-vs-uintptr-t

> 

> Otherwise, both of your patches LGTM.


I made the uintptr_t change and have pushed those commits.

Kevin

Patch

diff --git a/gdb/testsuite/gdb.base/coremaker2.c b/gdb/testsuite/gdb.base/coremaker2.c
index 3c89bd790b..29649b84e9 100644
--- a/gdb/testsuite/gdb.base/coremaker2.c
+++ b/gdb/testsuite/gdb.base/coremaker2.c
@@ -39,11 +39,12 @@ 
 #include <unistd.h>
 #include <string.h>
 #include <errno.h>
+#include <stddef.h>
 
 /* These are globals so that we can find them easily when debugging
    the core file.  */
 long pagesize;
-unsigned long long addr;
+size_t addr;
 char *mbuf_ro;
 char *mbuf_rw;
 
@@ -106,10 +107,10 @@  main (int argc, char **argv)
     }
 
   /* Compute an address that should be within buf_ro.  Complain if not.  */
-  addr = ((unsigned long long) buf_ro + pagesize) & ~(pagesize - 1);
+  addr = ((size_t) buf_ro + pagesize) & ~(pagesize - 1);
 
-  if (addr <= (unsigned long long) buf_ro
-      || addr >= (unsigned long long) buf_ro + sizeof (buf_ro))
+  if (addr <= (size_t) buf_ro
+      || addr >= (size_t) buf_ro + sizeof (buf_ro))
     {
       fprintf (stderr, "Unable to compute a suitable address within buf_ro.\n");
       exit (1);
@@ -130,10 +131,10 @@  main (int argc, char **argv)
 
   /* Compute an mmap address within buf_rw.  Complain if it's somewhere
      else.  */
-  addr = ((unsigned long long) buf_rw + pagesize) & ~(pagesize - 1);
+  addr = ((size_t) buf_rw + pagesize) & ~(pagesize - 1);
 
-  if (addr <= (unsigned long long) buf_rw
-      || addr >= (unsigned long long) buf_rw + sizeof (buf_rw))
+  if (addr <= (size_t) buf_rw
+      || addr >= (size_t) buf_rw + sizeof (buf_rw))
     {
       fprintf (stderr, "Unable to compute a suitable address within buf_rw.\n");
       exit (1);