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

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 





On 2/18/21 5:34 AM, Ilya Leoshkevich wrote:
On Wed, 2021-02-17 at 23:16 -0800, Yonghong Song wrote:
On 2/15/21 5:12 PM, Ilya Leoshkevich wrote:
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@xxxxxxxxxxxxx>
---
   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

[...]

@@ -2445,6 +2450,9 @@ static void bpf_object__sanitize_btf(struct
bpf_object *obj, struct btf *btf)
                 } else if (!has_func_global && btf_is_func(t)) {
                         /* replace BTF_FUNC_GLOBAL with
BTF_FUNC_STATIC */
                         t->info = BTF_INFO_ENC(BTF_KIND_FUNC, 0,
0);
+               } else if (!has_float && btf_is_float(t)) {
+                       /* replace FLOAT with INT */
+                       t->info = BTF_INFO_ENC(BTF_KIND_FLOAT, 0,
0);

You can replace float with a "pointer to void" type.

Wouldn't this cause problems with 32-bit floats on 64-bit machines?

Oh, yes. You are right. I am just thinking of standalone float type, but
obviously it could be struct/union member which makes it very important
to keep the sanatized type having the same size.

So replacing float with "point to void" won't work as you suggested.
Looks like INT is the best candidate to replace, another is CHAR array.
They do not match total size though. Maybe one of modifier type will
be a good choice. For example, you can replace float with a
BTF_KIND_CONST type and the base type for BTF_KIND_CONST type
is an int type with the same size of float and you have to
create that int type somewhere. In power-of-2 cases, it is possible
this type already exists.


[...]




[Index of Archives]     [Linux Samsung SoC]     [Linux Rockchip SoC]     [Linux Actions SoC]     [Linux for Synopsys ARC Processors]     [Linux NFS]     [Linux NILFS]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]


  Powered by Linux