Re: [PATCH bpf-next 2/6] libbpf: Add BTF_KIND_FLOAT support
From: Yonghong Song <hidden>
Date: 2021-02-18 18:49:22
On 2/18/21 5:34 AM, Ilya Leoshkevich wrote:
On Wed, 2021-02-17 at 23:16 -0800, Yonghong Song wrote:quoted
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
quoted
@@ -2445,6 +2450,9 @@ static void bpf_object__sanitize_btf(structbpf_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.
[...]