Thread (19 messages) 19 messages, 3 authors, 2021-02-18

Re: [PATCH bpf-next 2/6] libbpf: Add BTF_KIND_FLOAT support

From: Ilya Leoshkevich <iii@linux.ibm.com>
Date: 2021-02-18 16:51:05

On Wed, 2021-02-17 at 22:58 -0800, Yonghong Song wrote:
On 2/15/21 5:12 PM, Ilya Leoshkevich wrote:
quoted
The logic follows that of BTF_KIND_INT most of the time.
Sanitization
replaces BTF_KIND_FLOATs with equally-sized BTF_KIND_INTs on older
kernels.

Signed-off-by: Ilya Leoshkevich <iii@linux.ibm.com>
---
  tools/lib/bpf/btf.c             | 44
+++++++++++++++++++++++++++++++++
  tools/lib/bpf/btf.h             |  8 ++++++
  tools/lib/bpf/btf_dump.c        |  4 +++
  tools/lib/bpf/libbpf.c          | 29 +++++++++++++++++++++-
  tools/lib/bpf/libbpf.map        |  5 ++++
  tools/lib/bpf/libbpf_internal.h |  2 ++
  6 files changed, 91 insertions(+), 1 deletion(-)
diff --git a/tools/lib/bpf/btf.c b/tools/lib/bpf/btf.c
index d9c10830d749..07a30e98c3de 100644
--- a/tools/lib/bpf/btf.c
+++ b/tools/lib/bpf/btf.c
[...]
quoted
@@ -2373,6 +2377,42 @@ int btf__add_datasec(struct btf *btf, const
char *name, __u32 byte_sz)
        return btf_commit_type(btf, sz);
  }
  
+/*
+ * Append new BTF_KIND_FLOAT type with:
+ *   - *name* - non-empty, non-NULL type name;
+ *   - *sz* - size of the type, in bytes;
+ * Returns:
+ *   - >0, type ID of newly added BTF type;
+ *   - <0, on error.
+ */
+int btf__add_float(struct btf *btf, const char *name, size_t
byte_sz)
+{
+       struct btf_type *t;
+       int sz, name_off;
+
+       /* non-empty name */
+       if (!name || !name[0])
+               return -EINVAL;
Do we want to ensure byte_sz to be 2/4/8/16?
Currently, the int type supports 1/2/4/8/16.

In LLVM, the following are supported float types:

   case BuiltinType::Half:
   case BuiltinType::Float:
   case BuiltinType::LongDouble:
   case BuiltinType::Float16:
   case BuiltinType::BFloat16:
   case BuiltinType::Float128:
   case BuiltinType::Double:
There can be 80-bit floats on x86:

#include <stdio.h>
int main() { printf("%zu\n", sizeof(long double)); }

prints 12 when compiled with -m32 (not 10 due to alignment I assume).

I guess this now completely kills the idea with sanitizing FLOATs to
equally-sized INTs...

[...]
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help