netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH bpf-next] libbpf: fix printf compilation warnings on ppc64le arch
@ 2019-12-11 19:26 Andrii Nakryiko
  2019-12-12  0:09 ` Martin Lau
  0 siblings, 1 reply; 5+ messages in thread
From: Andrii Nakryiko @ 2019-12-11 19:26 UTC (permalink / raw)
  To: bpf, netdev, ast, daniel; +Cc: andrii.nakryiko, kernel-team, Andrii Nakryiko

On ppc64le __u64 and __s64 are defined as long int and unsigned long int,
respectively. This causes compiler to emit warning when %lld/%llu are used to
printf 64-bit numbers. Fix this by casting directly to unsigned long long
(through shorter typedef). In few cases casting error code to int explicitly
is cleaner, so that's what's done instead.

Fixes: 1f8e2bcb2cd5 ("libbpf: Refactor relocation handling")
Fixes: abd29c931459 ("libbpf: allow specifying map definitions using BTF")
Signed-off-by: Andrii Nakryiko <andriin@fb.com>
---
 tools/lib/bpf/libbpf.c | 34 ++++++++++++++++++----------------
 1 file changed, 18 insertions(+), 16 deletions(-)

diff --git a/tools/lib/bpf/libbpf.c b/tools/lib/bpf/libbpf.c
index 3f09772192f1..5ee54f9355a4 100644
--- a/tools/lib/bpf/libbpf.c
+++ b/tools/lib/bpf/libbpf.c
@@ -128,6 +128,8 @@ void libbpf_print(enum libbpf_print_level level, const char *format, ...)
 # define LIBBPF_ELF_C_READ_MMAP ELF_C_READ
 #endif
 
+typedef unsigned long long __pu64;
+
 static inline __u64 ptr_to_u64(const void *ptr)
 {
 	return (__u64) (unsigned long) ptr;
@@ -1242,15 +1244,15 @@ static int bpf_object__init_user_btf_map(struct bpf_object *obj,
 			}
 			sz = btf__resolve_size(obj->btf, t->type);
 			if (sz < 0) {
-				pr_warn("map '%s': can't determine key size for type [%u]: %lld.\n",
-					map_name, t->type, sz);
+				pr_warn("map '%s': can't determine key size for type [%u]: %d.\n",
+					map_name, t->type, (int)sz);
 				return sz;
 			}
-			pr_debug("map '%s': found key [%u], sz = %lld.\n",
-				 map_name, t->type, sz);
+			pr_debug("map '%s': found key [%u], sz = %d.\n",
+				 map_name, t->type, (int)sz);
 			if (map->def.key_size && map->def.key_size != sz) {
-				pr_warn("map '%s': conflicting key size %u != %lld.\n",
-					map_name, map->def.key_size, sz);
+				pr_warn("map '%s': conflicting key size %u != %d.\n",
+					map_name, map->def.key_size, (int)sz);
 				return -EINVAL;
 			}
 			map->def.key_size = sz;
@@ -1285,15 +1287,15 @@ static int bpf_object__init_user_btf_map(struct bpf_object *obj,
 			}
 			sz = btf__resolve_size(obj->btf, t->type);
 			if (sz < 0) {
-				pr_warn("map '%s': can't determine value size for type [%u]: %lld.\n",
-					map_name, t->type, sz);
+				pr_warn("map '%s': can't determine value size for type [%u]: %d.\n",
+					map_name, t->type, (int)sz);
 				return sz;
 			}
-			pr_debug("map '%s': found value [%u], sz = %lld.\n",
-				 map_name, t->type, sz);
+			pr_debug("map '%s': found value [%u], sz = %d.\n",
+				 map_name, t->type, (int)sz);
 			if (map->def.value_size && map->def.value_size != sz) {
-				pr_warn("map '%s': conflicting value size %u != %lld.\n",
-					map_name, map->def.value_size, sz);
+				pr_warn("map '%s': conflicting value size %u != %d.\n",
+					map_name, map->def.value_size, (int)sz);
 				return -EINVAL;
 			}
 			map->def.value_size = sz;
@@ -1817,7 +1819,7 @@ static int bpf_program__record_reloc(struct bpf_program *prog,
 			return -LIBBPF_ERRNO__RELOC;
 		}
 		if (sym->st_value % 8) {
-			pr_warn("bad call relo offset: %llu\n", (__u64)sym->st_value);
+			pr_warn("bad call relo offset: %llu\n", (__pu64)sym->st_value);
 			return -LIBBPF_ERRNO__RELOC;
 		}
 		reloc_desc->type = RELO_CALL;
@@ -1860,7 +1862,7 @@ static int bpf_program__record_reloc(struct bpf_program *prog,
 		}
 		if (map_idx >= nr_maps) {
 			pr_warn("map relo failed to find map for sec %u, off %llu\n",
-				shdr_idx, (__u64)sym->st_value);
+				shdr_idx, (__pu64)sym->st_value);
 			return -LIBBPF_ERRNO__RELOC;
 		}
 		reloc_desc->type = RELO_LD64;
@@ -1942,8 +1944,8 @@ bpf_program__collect_reloc(struct bpf_program *prog, GElf_Shdr *shdr,
 				  sym.st_name) ? : "<?>";
 
 		pr_debug("relo for shdr %u, symb %llu, value %llu, type %d, bind %d, name %d (\'%s\'), insn %u\n",
-			 (__u32)sym.st_shndx, (__u64)GELF_R_SYM(rel.r_info),
-			 (__u64)sym.st_value, GELF_ST_TYPE(sym.st_info),
+			 (__u32)sym.st_shndx, (__pu64)GELF_R_SYM(rel.r_info),
+			 (__pu64)sym.st_value, GELF_ST_TYPE(sym.st_info),
 			 GELF_ST_BIND(sym.st_info), sym.st_name, name,
 			 insn_idx);
 
-- 
2.17.1


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

* Re: [PATCH bpf-next] libbpf: fix printf compilation warnings on ppc64le arch
  2019-12-11 19:26 [PATCH bpf-next] libbpf: fix printf compilation warnings on ppc64le arch Andrii Nakryiko
@ 2019-12-12  0:09 ` Martin Lau
  2019-12-12  0:11   ` Andrii Nakryiko
  0 siblings, 1 reply; 5+ messages in thread
From: Martin Lau @ 2019-12-12  0:09 UTC (permalink / raw)
  To: Andrii Nakryiko
  Cc: bpf, netdev, Alexei Starovoitov, daniel, andrii.nakryiko, Kernel Team

On Wed, Dec 11, 2019 at 11:26:34AM -0800, Andrii Nakryiko wrote:
> On ppc64le __u64 and __s64 are defined as long int and unsigned long int,
> respectively. This causes compiler to emit warning when %lld/%llu are used to
> printf 64-bit numbers. Fix this by casting directly to unsigned long long
> (through shorter typedef). In few cases casting error code to int explicitly
> is cleaner, so that's what's done instead.
> 
> Fixes: 1f8e2bcb2cd5 ("libbpf: Refactor relocation handling")
> Fixes: abd29c931459 ("libbpf: allow specifying map definitions using BTF")
> Signed-off-by: Andrii Nakryiko <andriin@fb.com>
> ---
>  tools/lib/bpf/libbpf.c | 34 ++++++++++++++++++----------------
>  1 file changed, 18 insertions(+), 16 deletions(-)
> 
> diff --git a/tools/lib/bpf/libbpf.c b/tools/lib/bpf/libbpf.c
> index 3f09772192f1..5ee54f9355a4 100644
> --- a/tools/lib/bpf/libbpf.c
> +++ b/tools/lib/bpf/libbpf.c
> @@ -128,6 +128,8 @@ void libbpf_print(enum libbpf_print_level level, const char *format, ...)
>  # define LIBBPF_ELF_C_READ_MMAP ELF_C_READ
>  #endif
>  
> +typedef unsigned long long __pu64;
> +
>  static inline __u64 ptr_to_u64(const void *ptr)
>  {
>  	return (__u64) (unsigned long) ptr;
> @@ -1242,15 +1244,15 @@ static int bpf_object__init_user_btf_map(struct bpf_object *obj,
>  			}
>  			sz = btf__resolve_size(obj->btf, t->type);
>  			if (sz < 0) {
> -				pr_warn("map '%s': can't determine key size for type [%u]: %lld.\n",
> -					map_name, t->type, sz);
> +				pr_warn("map '%s': can't determine key size for type [%u]: %d.\n",
> +					map_name, t->type, (int)sz);
>  				return sz;
>  			}
> -			pr_debug("map '%s': found key [%u], sz = %lld.\n",
> -				 map_name, t->type, sz);
> +			pr_debug("map '%s': found key [%u], sz = %d.\n",
> +				 map_name, t->type, (int)sz);
>  			if (map->def.key_size && map->def.key_size != sz) {
> -				pr_warn("map '%s': conflicting key size %u != %lld.\n",
> -					map_name, map->def.key_size, sz);
> +				pr_warn("map '%s': conflicting key size %u != %d.\n",
> +					map_name, map->def.key_size, (int)sz);
>  				return -EINVAL;
>  			}
>  			map->def.key_size = sz;
> @@ -1285,15 +1287,15 @@ static int bpf_object__init_user_btf_map(struct bpf_object *obj,
>  			}
>  			sz = btf__resolve_size(obj->btf, t->type);
>  			if (sz < 0) {
> -				pr_warn("map '%s': can't determine value size for type [%u]: %lld.\n",
> -					map_name, t->type, sz);
> +				pr_warn("map '%s': can't determine value size for type [%u]: %d.\n",
> +					map_name, t->type, (int)sz);
>  				return sz;
>  			}
> -			pr_debug("map '%s': found value [%u], sz = %lld.\n",
> -				 map_name, t->type, sz);
> +			pr_debug("map '%s': found value [%u], sz = %d.\n",
> +				 map_name, t->type, (int)sz);
>  			if (map->def.value_size && map->def.value_size != sz) {
> -				pr_warn("map '%s': conflicting value size %u != %lld.\n",
> -					map_name, map->def.value_size, sz);
> +				pr_warn("map '%s': conflicting value size %u != %d.\n",
> +					map_name, map->def.value_size, (int)sz);
It is not an error case (i.e. not sz < 0) here.
Same for the above pr_debug().

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

* Re: [PATCH bpf-next] libbpf: fix printf compilation warnings on ppc64le arch
  2019-12-12  0:09 ` Martin Lau
@ 2019-12-12  0:11   ` Andrii Nakryiko
  2019-12-12  0:23     ` Martin Lau
  0 siblings, 1 reply; 5+ messages in thread
From: Andrii Nakryiko @ 2019-12-12  0:11 UTC (permalink / raw)
  To: Martin Lau
  Cc: Andrii Nakryiko, bpf, netdev, Alexei Starovoitov, daniel, Kernel Team

On Wed, Dec 11, 2019 at 4:09 PM Martin Lau <kafai@fb.com> wrote:
>
> On Wed, Dec 11, 2019 at 11:26:34AM -0800, Andrii Nakryiko wrote:
> > On ppc64le __u64 and __s64 are defined as long int and unsigned long int,
> > respectively. This causes compiler to emit warning when %lld/%llu are used to
> > printf 64-bit numbers. Fix this by casting directly to unsigned long long
> > (through shorter typedef). In few cases casting error code to int explicitly
> > is cleaner, so that's what's done instead.
> >
> > Fixes: 1f8e2bcb2cd5 ("libbpf: Refactor relocation handling")
> > Fixes: abd29c931459 ("libbpf: allow specifying map definitions using BTF")
> > Signed-off-by: Andrii Nakryiko <andriin@fb.com>
> > ---
> >  tools/lib/bpf/libbpf.c | 34 ++++++++++++++++++----------------
> >  1 file changed, 18 insertions(+), 16 deletions(-)
> >
> > diff --git a/tools/lib/bpf/libbpf.c b/tools/lib/bpf/libbpf.c
> > index 3f09772192f1..5ee54f9355a4 100644
> > --- a/tools/lib/bpf/libbpf.c
> > +++ b/tools/lib/bpf/libbpf.c
> > @@ -128,6 +128,8 @@ void libbpf_print(enum libbpf_print_level level, const char *format, ...)
> >  # define LIBBPF_ELF_C_READ_MMAP ELF_C_READ
> >  #endif
> >
> > +typedef unsigned long long __pu64;
> > +
> >  static inline __u64 ptr_to_u64(const void *ptr)
> >  {
> >       return (__u64) (unsigned long) ptr;
> > @@ -1242,15 +1244,15 @@ static int bpf_object__init_user_btf_map(struct bpf_object *obj,
> >                       }
> >                       sz = btf__resolve_size(obj->btf, t->type);
> >                       if (sz < 0) {
> > -                             pr_warn("map '%s': can't determine key size for type [%u]: %lld.\n",
> > -                                     map_name, t->type, sz);
> > +                             pr_warn("map '%s': can't determine key size for type [%u]: %d.\n",
> > +                                     map_name, t->type, (int)sz);
> >                               return sz;
> >                       }
> > -                     pr_debug("map '%s': found key [%u], sz = %lld.\n",
> > -                              map_name, t->type, sz);
> > +                     pr_debug("map '%s': found key [%u], sz = %d.\n",
> > +                              map_name, t->type, (int)sz);
> >                       if (map->def.key_size && map->def.key_size != sz) {
> > -                             pr_warn("map '%s': conflicting key size %u != %lld.\n",
> > -                                     map_name, map->def.key_size, sz);
> > +                             pr_warn("map '%s': conflicting key size %u != %d.\n",
> > +                                     map_name, map->def.key_size, (int)sz);
> >                               return -EINVAL;
> >                       }
> >                       map->def.key_size = sz;
> > @@ -1285,15 +1287,15 @@ static int bpf_object__init_user_btf_map(struct bpf_object *obj,
> >                       }
> >                       sz = btf__resolve_size(obj->btf, t->type);
> >                       if (sz < 0) {
> > -                             pr_warn("map '%s': can't determine value size for type [%u]: %lld.\n",
> > -                                     map_name, t->type, sz);
> > +                             pr_warn("map '%s': can't determine value size for type [%u]: %d.\n",
> > +                                     map_name, t->type, (int)sz);
> >                               return sz;
> >                       }
> > -                     pr_debug("map '%s': found value [%u], sz = %lld.\n",
> > -                              map_name, t->type, sz);
> > +                     pr_debug("map '%s': found value [%u], sz = %d.\n",
> > +                              map_name, t->type, (int)sz);
> >                       if (map->def.value_size && map->def.value_size != sz) {
> > -                             pr_warn("map '%s': conflicting value size %u != %lld.\n",
> > -                                     map_name, map->def.value_size, sz);
> > +                             pr_warn("map '%s': conflicting value size %u != %d.\n",
> > +                                     map_name, map->def.value_size, (int)sz);
> It is not an error case (i.e. not sz < 0) here.
> Same for the above pr_debug().

You are right, not sure if it matters in practice, though. Highly
unlikely values will be bigger than 2GB, but even if they, they still
fit in 4 bytes, we'll just report them as negative values. I can do
similar __ps64 conversion, as for __pu64, though, it we are afraid
it's going to be a problem.

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

* Re: [PATCH bpf-next] libbpf: fix printf compilation warnings on ppc64le arch
  2019-12-12  0:11   ` Andrii Nakryiko
@ 2019-12-12  0:23     ` Martin Lau
  2019-12-12  0:33       ` Andrii Nakryiko
  0 siblings, 1 reply; 5+ messages in thread
From: Martin Lau @ 2019-12-12  0:23 UTC (permalink / raw)
  To: Andrii Nakryiko
  Cc: Andrii Nakryiko, bpf, netdev, Alexei Starovoitov, daniel, Kernel Team

On Wed, Dec 11, 2019 at 04:11:40PM -0800, Andrii Nakryiko wrote:
> On Wed, Dec 11, 2019 at 4:09 PM Martin Lau <kafai@fb.com> wrote:
> >
> > On Wed, Dec 11, 2019 at 11:26:34AM -0800, Andrii Nakryiko wrote:
> > > On ppc64le __u64 and __s64 are defined as long int and unsigned long int,
> > > respectively. This causes compiler to emit warning when %lld/%llu are used to
> > > printf 64-bit numbers. Fix this by casting directly to unsigned long long
> > > (through shorter typedef). In few cases casting error code to int explicitly
> > > is cleaner, so that's what's done instead.
> > >
> > > Fixes: 1f8e2bcb2cd5 ("libbpf: Refactor relocation handling")
> > > Fixes: abd29c931459 ("libbpf: allow specifying map definitions using BTF")
> > > Signed-off-by: Andrii Nakryiko <andriin@fb.com>
> > > ---
> > >  tools/lib/bpf/libbpf.c | 34 ++++++++++++++++++----------------
> > >  1 file changed, 18 insertions(+), 16 deletions(-)
> > >
> > > diff --git a/tools/lib/bpf/libbpf.c b/tools/lib/bpf/libbpf.c
> > > index 3f09772192f1..5ee54f9355a4 100644
> > > --- a/tools/lib/bpf/libbpf.c
> > > +++ b/tools/lib/bpf/libbpf.c
> > > @@ -128,6 +128,8 @@ void libbpf_print(enum libbpf_print_level level, const char *format, ...)
> > >  # define LIBBPF_ELF_C_READ_MMAP ELF_C_READ
> > >  #endif
> > >
> > > +typedef unsigned long long __pu64;
> > > +
> > >  static inline __u64 ptr_to_u64(const void *ptr)
> > >  {
> > >       return (__u64) (unsigned long) ptr;
> > > @@ -1242,15 +1244,15 @@ static int bpf_object__init_user_btf_map(struct bpf_object *obj,
> > >                       }
> > >                       sz = btf__resolve_size(obj->btf, t->type);
> > >                       if (sz < 0) {
> > > -                             pr_warn("map '%s': can't determine key size for type [%u]: %lld.\n",
> > > -                                     map_name, t->type, sz);
> > > +                             pr_warn("map '%s': can't determine key size for type [%u]: %d.\n",
> > > +                                     map_name, t->type, (int)sz);
> > >                               return sz;
> > >                       }
> > > -                     pr_debug("map '%s': found key [%u], sz = %lld.\n",
> > > -                              map_name, t->type, sz);
> > > +                     pr_debug("map '%s': found key [%u], sz = %d.\n",
> > > +                              map_name, t->type, (int)sz);
> > >                       if (map->def.key_size && map->def.key_size != sz) {
> > > -                             pr_warn("map '%s': conflicting key size %u != %lld.\n",
> > > -                                     map_name, map->def.key_size, sz);
> > > +                             pr_warn("map '%s': conflicting key size %u != %d.\n",
> > > +                                     map_name, map->def.key_size, (int)sz);
> > >                               return -EINVAL;
> > >                       }
> > >                       map->def.key_size = sz;
> > > @@ -1285,15 +1287,15 @@ static int bpf_object__init_user_btf_map(struct bpf_object *obj,
> > >                       }
> > >                       sz = btf__resolve_size(obj->btf, t->type);
> > >                       if (sz < 0) {
> > > -                             pr_warn("map '%s': can't determine value size for type [%u]: %lld.\n",
> > > -                                     map_name, t->type, sz);
> > > +                             pr_warn("map '%s': can't determine value size for type [%u]: %d.\n",
> > > +                                     map_name, t->type, (int)sz);
> > >                               return sz;
> > >                       }
> > > -                     pr_debug("map '%s': found value [%u], sz = %lld.\n",
> > > -                              map_name, t->type, sz);
> > > +                     pr_debug("map '%s': found value [%u], sz = %d.\n",
> > > +                              map_name, t->type, (int)sz);
> > >                       if (map->def.value_size && map->def.value_size != sz) {
> > > -                             pr_warn("map '%s': conflicting value size %u != %lld.\n",
> > > -                                     map_name, map->def.value_size, sz);
> > > +                             pr_warn("map '%s': conflicting value size %u != %d.\n",
> > > +                                     map_name, map->def.value_size, (int)sz);
> > It is not an error case (i.e. not sz < 0) here.
> > Same for the above pr_debug().
> 
> You are right, not sure if it matters in practice, though. Highly
> unlikely values will be bigger than 2GB, but even if they, they still
> fit in 4 bytes, we'll just report them as negative values. I can do
Then may be everything to int without adding __pu64?

> similar __ps64 conversion, as for __pu64, though, it we are afraid
> it's going to be a problem.

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

* Re: [PATCH bpf-next] libbpf: fix printf compilation warnings on ppc64le arch
  2019-12-12  0:23     ` Martin Lau
@ 2019-12-12  0:33       ` Andrii Nakryiko
  0 siblings, 0 replies; 5+ messages in thread
From: Andrii Nakryiko @ 2019-12-12  0:33 UTC (permalink / raw)
  To: Martin Lau
  Cc: Andrii Nakryiko, bpf, netdev, Alexei Starovoitov, daniel, Kernel Team

On Wed, Dec 11, 2019 at 4:23 PM Martin Lau <kafai@fb.com> wrote:
>
> On Wed, Dec 11, 2019 at 04:11:40PM -0800, Andrii Nakryiko wrote:
> > On Wed, Dec 11, 2019 at 4:09 PM Martin Lau <kafai@fb.com> wrote:
> > >
> > > On Wed, Dec 11, 2019 at 11:26:34AM -0800, Andrii Nakryiko wrote:
> > > > On ppc64le __u64 and __s64 are defined as long int and unsigned long int,
> > > > respectively. This causes compiler to emit warning when %lld/%llu are used to
> > > > printf 64-bit numbers. Fix this by casting directly to unsigned long long
> > > > (through shorter typedef). In few cases casting error code to int explicitly
> > > > is cleaner, so that's what's done instead.
> > > >
> > > > Fixes: 1f8e2bcb2cd5 ("libbpf: Refactor relocation handling")
> > > > Fixes: abd29c931459 ("libbpf: allow specifying map definitions using BTF")
> > > > Signed-off-by: Andrii Nakryiko <andriin@fb.com>
> > > > ---
> > > >  tools/lib/bpf/libbpf.c | 34 ++++++++++++++++++----------------
> > > >  1 file changed, 18 insertions(+), 16 deletions(-)
> > > >
> > > > diff --git a/tools/lib/bpf/libbpf.c b/tools/lib/bpf/libbpf.c
> > > > index 3f09772192f1..5ee54f9355a4 100644
> > > > --- a/tools/lib/bpf/libbpf.c
> > > > +++ b/tools/lib/bpf/libbpf.c
> > > > @@ -128,6 +128,8 @@ void libbpf_print(enum libbpf_print_level level, const char *format, ...)
> > > >  # define LIBBPF_ELF_C_READ_MMAP ELF_C_READ
> > > >  #endif
> > > >
> > > > +typedef unsigned long long __pu64;
> > > > +
> > > >  static inline __u64 ptr_to_u64(const void *ptr)
> > > >  {
> > > >       return (__u64) (unsigned long) ptr;
> > > > @@ -1242,15 +1244,15 @@ static int bpf_object__init_user_btf_map(struct bpf_object *obj,
> > > >                       }
> > > >                       sz = btf__resolve_size(obj->btf, t->type);
> > > >                       if (sz < 0) {
> > > > -                             pr_warn("map '%s': can't determine key size for type [%u]: %lld.\n",
> > > > -                                     map_name, t->type, sz);
> > > > +                             pr_warn("map '%s': can't determine key size for type [%u]: %d.\n",
> > > > +                                     map_name, t->type, (int)sz);
> > > >                               return sz;
> > > >                       }
> > > > -                     pr_debug("map '%s': found key [%u], sz = %lld.\n",
> > > > -                              map_name, t->type, sz);
> > > > +                     pr_debug("map '%s': found key [%u], sz = %d.\n",
> > > > +                              map_name, t->type, (int)sz);
> > > >                       if (map->def.key_size && map->def.key_size != sz) {
> > > > -                             pr_warn("map '%s': conflicting key size %u != %lld.\n",
> > > > -                                     map_name, map->def.key_size, sz);
> > > > +                             pr_warn("map '%s': conflicting key size %u != %d.\n",
> > > > +                                     map_name, map->def.key_size, (int)sz);
> > > >                               return -EINVAL;
> > > >                       }
> > > >                       map->def.key_size = sz;
> > > > @@ -1285,15 +1287,15 @@ static int bpf_object__init_user_btf_map(struct bpf_object *obj,
> > > >                       }
> > > >                       sz = btf__resolve_size(obj->btf, t->type);
> > > >                       if (sz < 0) {
> > > > -                             pr_warn("map '%s': can't determine value size for type [%u]: %lld.\n",
> > > > -                                     map_name, t->type, sz);
> > > > +                             pr_warn("map '%s': can't determine value size for type [%u]: %d.\n",
> > > > +                                     map_name, t->type, (int)sz);
> > > >                               return sz;
> > > >                       }
> > > > -                     pr_debug("map '%s': found value [%u], sz = %lld.\n",
> > > > -                              map_name, t->type, sz);
> > > > +                     pr_debug("map '%s': found value [%u], sz = %d.\n",
> > > > +                              map_name, t->type, (int)sz);
> > > >                       if (map->def.value_size && map->def.value_size != sz) {
> > > > -                             pr_warn("map '%s': conflicting value size %u != %lld.\n",
> > > > -                                     map_name, map->def.value_size, sz);
> > > > +                             pr_warn("map '%s': conflicting value size %u != %d.\n",
> > > > +                                     map_name, map->def.value_size, (int)sz);
> > > It is not an error case (i.e. not sz < 0) here.
> > > Same for the above pr_debug().
> >
> > You are right, not sure if it matters in practice, though. Highly
> > unlikely values will be bigger than 2GB, but even if they, they still
> > fit in 4 bytes, we'll just report them as negative values. I can do
> Then may be everything to int without adding __pu64?

sym->st_value can be legitimately 64-bit value, truncating it seems
worse. I'd rather do __pu64/__ps64 instead, as a more "data
preserving" way to handle things.

>
> > similar __ps64 conversion, as for __pu64, though, it we are afraid
> > it's going to be a problem.

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

end of thread, other threads:[~2019-12-12  0:33 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-12-11 19:26 [PATCH bpf-next] libbpf: fix printf compilation warnings on ppc64le arch Andrii Nakryiko
2019-12-12  0:09 ` Martin Lau
2019-12-12  0:11   ` Andrii Nakryiko
2019-12-12  0:23     ` Martin Lau
2019-12-12  0:33       ` Andrii Nakryiko

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).