All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 0/3] Miscellaneous 32-bit fixes
@ 2021-03-17 12:14 Geert Uytterhoeven
  2021-03-17 12:14 ` [PATCH 1/3] kexec: Use %llu/%llx and casts to format uint64_t Geert Uytterhoeven
                   ` (3 more replies)
  0 siblings, 4 replies; 7+ messages in thread
From: Geert Uytterhoeven @ 2021-03-17 12:14 UTC (permalink / raw)
  To: Simon Horman; +Cc: Varad Gautam, John Ogness, kexec, Geert Uytterhoeven

	Hi Simon,

This patch series fixes several compile warnings when building for a
32-bit platform.  All but the last one are real bugs, from a functional
point of view.

Thanks for your comments!

Geert Uytterhoeven (3):
  kexec: Use %llu/%llx and casts to format uint64_t
  printk: Use ULL suffix for 64-bit constants
  printk: Use %zu to format size_t

 kexec/kexec.c       | 3 ++-
 util_lib/elf_info.c | 8 ++++----
 2 files changed, 6 insertions(+), 5 deletions(-)

-- 
2.25.1

Gr{oetje,eeting}s,

						Geert

--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org

In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
							    -- Linus Torvalds

_______________________________________________
kexec mailing list
kexec@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/kexec

^ permalink raw reply	[flat|nested] 7+ messages in thread

* [PATCH 1/3] kexec: Use %llu/%llx and casts to format uint64_t
  2021-03-17 12:14 [PATCH 0/3] Miscellaneous 32-bit fixes Geert Uytterhoeven
@ 2021-03-17 12:14 ` Geert Uytterhoeven
  2021-03-17 12:14 ` [PATCH 2/3] printk: Use ULL suffix for 64-bit constants Geert Uytterhoeven
                   ` (2 subsequent siblings)
  3 siblings, 0 replies; 7+ messages in thread
From: Geert Uytterhoeven @ 2021-03-17 12:14 UTC (permalink / raw)
  To: Simon Horman; +Cc: Varad Gautam, John Ogness, kexec, Geert Uytterhoeven

When compiling for 32-bit:

    kexec/kexec.c: In function ‘cmdline_add_liveupdate’:
    kexec/kexec.c:1192:30: warning: format ‘%lu’ expects argument of type ‘long unsigned int’, but argument 3 has type ‘uint64_t’ {aka ‘long long unsigned int’} [-Wformat=]
     1192 |  sprintf(buf, " liveupdate=%luM@0x%lx", lu_sizeM, lu_start);
	  |                            ~~^          ~~~~~~~~
	  |                              |          |
	  |                              |          uint64_t {aka long long unsigned int}
	  |                              long unsigned int
	  |                            %llu
    kexec/kexec.c:1192:37: warning: format ‘%lx’ expects argument of type ‘long unsigned int’, but argument 4 has type ‘uint64_t’ {aka ‘long long unsigned int’} [-Wformat=]
     1192 |  sprintf(buf, " liveupdate=%luM@0x%lx", lu_sizeM, lu_start);
	  |                                   ~~^             ~~~~~~~~
	  |                                     |             |
	  |                                     |             uint64_t {aka long long unsigned int}
	  |                                     long unsigned int
	  |                                   %llx

Indeed, "uint64_t" is "unsigned long long" on 32-bit formats, and
"unsigned long" on 64-bit formats.

Fix this by casting to "unsigned long long", and formatting using "%llu"
or "%llx".

Fixes: b13984c6f9ec7fdd ("kexec: Introduce --load-live-update for xen")
Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
---
 kexec/kexec.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/kexec/kexec.c b/kexec/kexec.c
index fd7c8d2b7a7977f9..c5a8dec1f09f35ca 100644
--- a/kexec/kexec.c
+++ b/kexec/kexec.c
@@ -1189,7 +1189,8 @@ void cmdline_add_liveupdate(char **base)
 
 	xen_get_kexec_range(KEXEC_RANGE_MA_LIVEUPDATE, &lu_start, &lu_end);
 	lu_sizeM = (lu_end - lu_start) / (1024 * 1024) + 1;
-	sprintf(buf, " liveupdate=%luM@0x%lx", lu_sizeM, lu_start);
+	sprintf(buf, " liveupdate=%lluM@0x%llx", (unsigned long long)lu_sizeM,
+		(unsigned long long)lu_start);
 	len = strlen(*base) + strlen(buf) + 1;
 	str = xmalloc(len);
 	sprintf(str, "%s%s", *base, buf);
-- 
2.25.1


_______________________________________________
kexec mailing list
kexec@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/kexec

^ permalink raw reply related	[flat|nested] 7+ messages in thread

* [PATCH 2/3] printk: Use ULL suffix for 64-bit constants
  2021-03-17 12:14 [PATCH 0/3] Miscellaneous 32-bit fixes Geert Uytterhoeven
  2021-03-17 12:14 ` [PATCH 1/3] kexec: Use %llu/%llx and casts to format uint64_t Geert Uytterhoeven
@ 2021-03-17 12:14 ` Geert Uytterhoeven
  2021-03-17 13:14   ` John Ogness
  2021-03-17 12:14 ` [PATCH 3/3] printk: Use %zu to format size_t Geert Uytterhoeven
  2021-04-02  9:58 ` [PATCH 0/3] Miscellaneous 32-bit fixes Simon Horman
  3 siblings, 1 reply; 7+ messages in thread
From: Geert Uytterhoeven @ 2021-03-17 12:14 UTC (permalink / raw)
  To: Simon Horman; +Cc: Varad Gautam, John Ogness, kexec, Geert Uytterhoeven

When compiling for 32-bit:

    util_lib/elf_info.c: In function ‘get_desc_state’:
    util_lib/elf_info.c:923:31: warning: left shift count >= width of type [-Wshift-count-overflow]
      923 | #define DESC_FLAGS_MASK  (3UL << DESC_FLAGS_SHIFT)
	  |                               ^~
    util_lib/elf_info.c:925:25: note: in expansion of macro ‘DESC_FLAGS_MASK’
      925 | #define DESC_ID_MASK  (~DESC_FLAGS_MASK)
	  |                         ^~~~~~~~~~~~~~~
    util_lib/elf_info.c:926:30: note: in expansion of macro ‘DESC_ID_MASK’
      926 | #define DESC_ID(sv)  ((sv) & DESC_ID_MASK)
	  |                              ^~~~~~~~~~~~
    util_lib/elf_info.c:947:12: note: in expansion of macro ‘DESC_ID’
      947 |  if (id != DESC_ID(state_val))
	  |            ^~~~~~~
    util_lib/elf_info.c: In function ‘id_inc’:
    util_lib/elf_info.c:923:31: warning: left shift count >= width of type [-Wshift-count-overflow]
      923 | #define DESC_FLAGS_MASK  (3UL << DESC_FLAGS_SHIFT)
	  |                               ^~
    util_lib/elf_info.c:925:25: note: in expansion of macro ‘DESC_FLAGS_MASK’
      925 | #define DESC_ID_MASK  (~DESC_FLAGS_MASK)
	  |                         ^~~~~~~~~~~~~~~
    util_lib/elf_info.c:981:15: note: in expansion of macro ‘DESC_ID_MASK’
      981 |  return (id & DESC_ID_MASK);
	  |               ^~~~~~~~~~~~

Indeed, "unsigned long" constants are 32-bit on 32-bit platforms, and
64-bit on 64-bit platforms.

Fix this by using a "ULL" suffix instead.

Fixes: 4149df9005f2cdd2 ("printk: add support for lockless ringbuffer")
Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
---
 util_lib/elf_info.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/util_lib/elf_info.c b/util_lib/elf_info.c
index 2f23a448da08ebdd..7c0a2c345379a7ca 100644
--- a/util_lib/elf_info.c
+++ b/util_lib/elf_info.c
@@ -920,8 +920,8 @@ enum desc_state {
 
 #define DESC_SV_BITS		(sizeof(uint64_t) * 8)
 #define DESC_FLAGS_SHIFT	(DESC_SV_BITS - 2)
-#define DESC_FLAGS_MASK		(3UL << DESC_FLAGS_SHIFT)
-#define DESC_STATE(sv)		(3UL & (sv >> DESC_FLAGS_SHIFT))
+#define DESC_FLAGS_MASK		(3ULL << DESC_FLAGS_SHIFT)
+#define DESC_STATE(sv)		(3ULL & (sv >> DESC_FLAGS_SHIFT))
 #define DESC_ID_MASK		(~DESC_FLAGS_MASK)
 #define DESC_ID(sv)		((sv) & DESC_ID_MASK)
 
-- 
2.25.1


_______________________________________________
kexec mailing list
kexec@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/kexec

^ permalink raw reply related	[flat|nested] 7+ messages in thread

* [PATCH 3/3] printk: Use %zu to format size_t
  2021-03-17 12:14 [PATCH 0/3] Miscellaneous 32-bit fixes Geert Uytterhoeven
  2021-03-17 12:14 ` [PATCH 1/3] kexec: Use %llu/%llx and casts to format uint64_t Geert Uytterhoeven
  2021-03-17 12:14 ` [PATCH 2/3] printk: Use ULL suffix for 64-bit constants Geert Uytterhoeven
@ 2021-03-17 12:14 ` Geert Uytterhoeven
  2021-03-17 13:19   ` John Ogness
  2021-04-02  9:58 ` [PATCH 0/3] Miscellaneous 32-bit fixes Simon Horman
  3 siblings, 1 reply; 7+ messages in thread
From: Geert Uytterhoeven @ 2021-03-17 12:14 UTC (permalink / raw)
  To: Simon Horman; +Cc: Varad Gautam, John Ogness, kexec, Geert Uytterhoeven

When compiling for 32-bit:

    util_lib/elf_info.c: In function ‘dump_dmesg_lockless’:
    util_lib/elf_info.c:1095:39: warning: format ‘%lu’ expects argument of type ‘long unsigned int’, but argument 3 has type ‘size_t’ {aka ‘unsigned int’} [-Wformat=]
     1095 |   fprintf(stderr, "Failed to malloc %lu bytes for prb: %s\n",
	  |                                     ~~^
	  |                                       |
	  |                                       long unsigned int
	  |                                     %u
     1096 |    printk_ringbuffer_sz, strerror(errno));
	  |    ~~~~~~~~~~~~~~~~~~~~
	  |    |
	  |    size_t {aka unsigned int}
    util_lib/elf_info.c:1101:49: warning: format ‘%lu’ expects argument of type ‘long unsigned int’, but argument 3 has type ‘size_t’ {aka ‘unsigned int’} [-Wformat=]
     1101 |   fprintf(stderr, "Failed to read prb of size %lu bytes: %s\n",
	  |                                               ~~^
	  |                                                 |
	  |                                                 long unsigned int
	  |                                               %u
     1102 |    printk_ringbuffer_sz, strerror(errno));
	  |    ~~~~~~~~~~~~~~~~~~~~
	  |    |
	  |    size_t {aka unsigned int}

Indeed, "size_t" is "unsigned int" on 32-bit platforms, and "unsigned
long" on 64-bit platforms.

Fix this by formatting using "%zu".

Fixes: 4149df9005f2cdd2 ("printk: add support for lockless ringbuffer")
Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
---
 util_lib/elf_info.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/util_lib/elf_info.c b/util_lib/elf_info.c
index 7c0a2c345379a7ca..676926ca8c5f3766 100644
--- a/util_lib/elf_info.c
+++ b/util_lib/elf_info.c
@@ -1092,13 +1092,13 @@ static void dump_dmesg_lockless(int fd, void (*handler)(char*, unsigned int))
 	kaddr = read_file_pointer(fd, vaddr_to_offset(prb_vaddr));
 	m.prb = calloc(1, printk_ringbuffer_sz);
 	if (!m.prb) {
-		fprintf(stderr, "Failed to malloc %lu bytes for prb: %s\n",
+		fprintf(stderr, "Failed to malloc %zu bytes for prb: %s\n",
 			printk_ringbuffer_sz, strerror(errno));
 		exit(64);
 	}
 	ret = pread(fd, m.prb, printk_ringbuffer_sz, vaddr_to_offset(kaddr));
 	if (ret != printk_ringbuffer_sz) {
-		fprintf(stderr, "Failed to read prb of size %lu bytes: %s\n",
+		fprintf(stderr, "Failed to read prb of size %zu bytes: %s\n",
 			printk_ringbuffer_sz, strerror(errno));
 		exit(65);
 	}
-- 
2.25.1


_______________________________________________
kexec mailing list
kexec@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/kexec

^ permalink raw reply related	[flat|nested] 7+ messages in thread

* Re: [PATCH 2/3] printk: Use ULL suffix for 64-bit constants
  2021-03-17 12:14 ` [PATCH 2/3] printk: Use ULL suffix for 64-bit constants Geert Uytterhoeven
@ 2021-03-17 13:14   ` John Ogness
  0 siblings, 0 replies; 7+ messages in thread
From: John Ogness @ 2021-03-17 13:14 UTC (permalink / raw)
  To: Geert Uytterhoeven; +Cc: Simon Horman, Varad Gautam, kexec

On 2021-03-17, Geert Uytterhoeven <geert+renesas@glider.be> wrote:
> When compiling for 32-bit:
>
>     util_lib/elf_info.c: In function ‘get_desc_state’:
>     util_lib/elf_info.c:923:31: warning: left shift count >= width of type [-Wshift-count-overflow]
>       923 | #define DESC_FLAGS_MASK  (3UL << DESC_FLAGS_SHIFT)
> 	  |                               ^~
>     util_lib/elf_info.c:925:25: note: in expansion of macro ‘DESC_FLAGS_MASK’
>       925 | #define DESC_ID_MASK  (~DESC_FLAGS_MASK)
> 	  |                         ^~~~~~~~~~~~~~~
>     util_lib/elf_info.c:926:30: note: in expansion of macro ‘DESC_ID_MASK’
>       926 | #define DESC_ID(sv)  ((sv) & DESC_ID_MASK)
> 	  |                              ^~~~~~~~~~~~
>     util_lib/elf_info.c:947:12: note: in expansion of macro ‘DESC_ID’
>       947 |  if (id != DESC_ID(state_val))
> 	  |            ^~~~~~~
>     util_lib/elf_info.c: In function ‘id_inc’:
>     util_lib/elf_info.c:923:31: warning: left shift count >= width of type [-Wshift-count-overflow]
>       923 | #define DESC_FLAGS_MASK  (3UL << DESC_FLAGS_SHIFT)
> 	  |                               ^~
>     util_lib/elf_info.c:925:25: note: in expansion of macro ‘DESC_FLAGS_MASK’
>       925 | #define DESC_ID_MASK  (~DESC_FLAGS_MASK)
> 	  |                         ^~~~~~~~~~~~~~~
>     util_lib/elf_info.c:981:15: note: in expansion of macro ‘DESC_ID_MASK’
>       981 |  return (id & DESC_ID_MASK);
> 	  |               ^~~~~~~~~~~~
>
> Indeed, "unsigned long" constants are 32-bit on 32-bit platforms, and
> 64-bit on 64-bit platforms.
>
> Fix this by using a "ULL" suffix instead.
>
> Fixes: 4149df9005f2cdd2 ("printk: add support for lockless ringbuffer")
> Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>

Reviewed-by: John Ogness <john.ogness@linutronix.de>

> ---
>  util_lib/elf_info.c | 4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/util_lib/elf_info.c b/util_lib/elf_info.c
> index 2f23a448da08ebdd..7c0a2c345379a7ca 100644
> --- a/util_lib/elf_info.c
> +++ b/util_lib/elf_info.c
> @@ -920,8 +920,8 @@ enum desc_state {
>  
>  #define DESC_SV_BITS		(sizeof(uint64_t) * 8)
>  #define DESC_FLAGS_SHIFT	(DESC_SV_BITS - 2)
> -#define DESC_FLAGS_MASK		(3UL << DESC_FLAGS_SHIFT)
> -#define DESC_STATE(sv)		(3UL & (sv >> DESC_FLAGS_SHIFT))
> +#define DESC_FLAGS_MASK		(3ULL << DESC_FLAGS_SHIFT)
> +#define DESC_STATE(sv)		(3ULL & (sv >> DESC_FLAGS_SHIFT))
>  #define DESC_ID_MASK		(~DESC_FLAGS_MASK)
>  #define DESC_ID(sv)		((sv) & DESC_ID_MASK)

_______________________________________________
kexec mailing list
kexec@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/kexec

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH 3/3] printk: Use %zu to format size_t
  2021-03-17 12:14 ` [PATCH 3/3] printk: Use %zu to format size_t Geert Uytterhoeven
@ 2021-03-17 13:19   ` John Ogness
  0 siblings, 0 replies; 7+ messages in thread
From: John Ogness @ 2021-03-17 13:19 UTC (permalink / raw)
  To: Geert Uytterhoeven; +Cc: Simon Horman, Varad Gautam, kexec

On 2021-03-17, Geert Uytterhoeven <geert+renesas@glider.be> wrote:
> When compiling for 32-bit:
>
>     util_lib/elf_info.c: In function ‘dump_dmesg_lockless’:
>     util_lib/elf_info.c:1095:39: warning: format ‘%lu’ expects argument of type ‘long unsigned int’, but argument 3 has type ‘size_t’ {aka ‘unsigned int’} [-Wformat=]
>      1095 |   fprintf(stderr, "Failed to malloc %lu bytes for prb: %s\n",
> 	  |                                     ~~^
> 	  |                                       |
> 	  |                                       long unsigned int
> 	  |                                     %u
>      1096 |    printk_ringbuffer_sz, strerror(errno));
> 	  |    ~~~~~~~~~~~~~~~~~~~~
> 	  |    |
> 	  |    size_t {aka unsigned int}
>     util_lib/elf_info.c:1101:49: warning: format ‘%lu’ expects
> argument of type ‘long unsigned int’, but argument 3 has type ‘size_t’
> {aka ‘unsigned int’} [-Wformat=]
>      1101 |   fprintf(stderr, "Failed to read prb of size %lu bytes: %s\n",
> 	  |                                               ~~^
> 	  |                                                 |
> 	  |                                                 long unsigned int
> 	  |                                               %u
>      1102 |    printk_ringbuffer_sz, strerror(errno));
> 	  |    ~~~~~~~~~~~~~~~~~~~~
> 	  |    |
> 	  |    size_t {aka unsigned int}
>
> Indeed, "size_t" is "unsigned int" on 32-bit platforms, and "unsigned
> long" on 64-bit platforms.
>
> Fix this by formatting using "%zu".
>
> Fixes: 4149df9005f2cdd2 ("printk: add support for lockless ringbuffer")
> Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>

Reviewed-by: John Ogness <john.ogness@linutronix.de>

> ---
>  util_lib/elf_info.c | 4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/util_lib/elf_info.c b/util_lib/elf_info.c
> index 7c0a2c345379a7ca..676926ca8c5f3766 100644
> --- a/util_lib/elf_info.c
> +++ b/util_lib/elf_info.c
> @@ -1092,13 +1092,13 @@ static void dump_dmesg_lockless(int fd, void (*handler)(char*, unsigned int))
>  	kaddr = read_file_pointer(fd, vaddr_to_offset(prb_vaddr));
>  	m.prb = calloc(1, printk_ringbuffer_sz);
>  	if (!m.prb) {
> -		fprintf(stderr, "Failed to malloc %lu bytes for prb: %s\n",
> +		fprintf(stderr, "Failed to malloc %zu bytes for prb: %s\n",
>  			printk_ringbuffer_sz, strerror(errno));
>  		exit(64);
>  	}
>  	ret = pread(fd, m.prb, printk_ringbuffer_sz, vaddr_to_offset(kaddr));
>  	if (ret != printk_ringbuffer_sz) {
> -		fprintf(stderr, "Failed to read prb of size %lu bytes: %s\n",
> +		fprintf(stderr, "Failed to read prb of size %zu bytes: %s\n",
>  			printk_ringbuffer_sz, strerror(errno));
>  		exit(65);
>  	}

_______________________________________________
kexec mailing list
kexec@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/kexec

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH 0/3] Miscellaneous 32-bit fixes
  2021-03-17 12:14 [PATCH 0/3] Miscellaneous 32-bit fixes Geert Uytterhoeven
                   ` (2 preceding siblings ...)
  2021-03-17 12:14 ` [PATCH 3/3] printk: Use %zu to format size_t Geert Uytterhoeven
@ 2021-04-02  9:58 ` Simon Horman
  3 siblings, 0 replies; 7+ messages in thread
From: Simon Horman @ 2021-04-02  9:58 UTC (permalink / raw)
  To: Geert Uytterhoeven; +Cc: Varad Gautam, John Ogness, kexec

On Wed, Mar 17, 2021 at 01:14:47PM +0100, Geert Uytterhoeven wrote:
> 	Hi Simon,
> 
> This patch series fixes several compile warnings when building for a
> 32-bit platform.  All but the last one are real bugs, from a functional
> point of view.
> 
> Thanks for your comments!

Thanks Geert,

applied.

_______________________________________________
kexec mailing list
kexec@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/kexec

^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2021-04-02  9:58 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-03-17 12:14 [PATCH 0/3] Miscellaneous 32-bit fixes Geert Uytterhoeven
2021-03-17 12:14 ` [PATCH 1/3] kexec: Use %llu/%llx and casts to format uint64_t Geert Uytterhoeven
2021-03-17 12:14 ` [PATCH 2/3] printk: Use ULL suffix for 64-bit constants Geert Uytterhoeven
2021-03-17 13:14   ` John Ogness
2021-03-17 12:14 ` [PATCH 3/3] printk: Use %zu to format size_t Geert Uytterhoeven
2021-03-17 13:19   ` John Ogness
2021-04-02  9:58 ` [PATCH 0/3] Miscellaneous 32-bit fixes Simon Horman

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.