[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH] pickles: btf: add support for BTF_KIND_ENUM64 type
From: |
Jose E. Marchesi |
Subject: |
Re: [PATCH] pickles: btf: add support for BTF_KIND_ENUM64 type |
Date: |
Tue, 30 Aug 2022 01:09:31 +0200 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) |
Hi Guillermo.
OK for master.
Thanks!
> Hello poke team,
>
> This patch add support to decode `BTF_KIND_ENUM64' types.
>
> I'll really appreciate your comments and suggestions.
>
> Kind regards,
> guillermo
> --
>
> * pickles/btf-dump.pk (btf_dump_enum): Update function signature
> to print appropriately signed/unsigned enumerators values,
> depending of `info.kind_flag'.
> (btf_dump_enum64): New function.
> * pickles/btf.pk: Add BTF_KIND_ENUM64 type and `BTF_Enum64'
> definition.
> (btf_kind_names): New `enum64' entry.
> (BTF_Type): New `_enum64' field of `BTF_Enum64' type.
> ---
> pickles/btf-dump.pk | 32 +++++++++++++++++++++++++++-----
> pickles/btf.pk | 18 +++++++++++++++---
> 2 files changed, 42 insertions(+), 8 deletions(-)
>
> diff --git a/pickles/btf-dump.pk b/pickles/btf-dump.pk
> index f18479d0..a3c77253 100644
> --- a/pickles/btf-dump.pk
> +++ b/pickles/btf-dump.pk
> @@ -38,13 +38,34 @@ fun btf_dump_array = (BTF_Array arr) void:
>
> /* Dump enumerators. */
>
> -fun btf_dump_enum = (BTF_Section btf, BTF_Enum[] e) void:
> +fun btf_dump_enum = (BTF_Section btf, BTF_Type t) void:
> {
> + var e = BTF_Enum[]();
> + e = t.data._enum;
> +
> + for (member in e)
> + printf ("\n\t '%s'(%v) value=%s",
> + btf.get_string (member.name),
> + member.name,
> + t.info.kind_flag == 1
> + ? format ("%i32d", member.val)
> + : format ("%u32d", member.val));
> + }
> +
> +/* Dump 64 bits enumerators. */
> +
> +fun btf_dump_enum64 = (BTF_Section btf, BTF_Type t) void:
> + {
> + var e = BTF_Enum64[]();
> + e = t.data._enum64;
> +
> for (member in e)
> - printf ("\n\t '%s'(%v) value=%i32d",
> + printf ("\n\t '%s'(%v) value=%s",
> btf.get_string (member.name),
> member.name,
> - member.val);
> + t.info.kind_flag == 1
> + ? format ("%i64d", (member.val_hi32 as int<64> <<. 32) +
> member.val_lo32)
> + : format ("%u64d", (member.val_hi32 as uint<64> <<. 32) +
> member.val_lo32));
> }
>
> /* Dump function prototype members. */
> @@ -118,11 +139,12 @@ fun btf_dump_type_vdata = (BTF_Section btf, BTF_Type t)
> void:
>
> ({ btf_dump_int (t.data.integer); } ?! E_elem)
> && ({ btf_dump_array (t.data.array); } ?! E_elem)
> - && ({ btf_dump_enum (btf, t.data._enum); } ?! E_elem)
> + && ({ btf_dump_enum (btf, t); } ?! E_elem)
> && ({ btf_dump_proto (btf, t.data.func_proto.params); } ?! E_elem)
> && ({ btf_dump_var (t.data.variable); } ?! E_elem)
> && ({ btf_dump_sou (btf, t); } ?! E_elem)
> - && ({ btf_dump_datasec (t.data.datasec); } ?! E_elem);
> + && ({ btf_dump_datasec (t.data.datasec); } ?! E_elem)
> + && ({ btf_dump_enum64 (btf, t); } ?! E_elem);
> }
>
> /* Dump a complete BTF type. Includes lookup and display of any strings
> diff --git a/pickles/btf.pk b/pickles/btf.pk
> index e40be31d..a732ebba 100644
> --- a/pickles/btf.pk
> +++ b/pickles/btf.pk
> @@ -38,12 +38,14 @@ var BTF_KIND_UNKNOWN = 0,
> BTF_KIND_DATASEC = 15,
> BTF_KIND_FLOAT = 16,
> BTF_KIND_DECL_TAG = 17,
> - BTF_KIND_TYPE_TAG = 18;
> + BTF_KIND_TYPE_TAG = 18,
> + BTF_KIND_ENUM64 = 19;
>
> var btf_kind_names =
> ["unkn", "int", "ptr", "array", "struct", "union", "enum",
> "fwd", "typedef", "volatile", "const", "restrict", "func",
> - "func_proto", "var", "datasec", "float", "decl_tag", "type_tag"];
> + "func_proto", "var", "datasec", "float", "decl_tag", "type_tag",
> + "enum64"];
>
> var BTF_VAR_STATIC = 0,
> BTF_VAR_GLOBAL_ALLOCATED = 1,
> @@ -128,6 +130,14 @@ type BTF_Decl_Tag =
> int<32> component_idx;
> };
>
> +type BTF_Enum64 =
> + struct
> + {
> + offset<uint<32>,B> name;
> + uint<32> val_lo32;
> + uint<32> val_hi32;
> + };
> +
> type BTF_Type =
> struct
> {
> @@ -159,7 +169,8 @@ type BTF_Type =
> BTF_KIND_ENUM,
> BTF_KIND_STRUCT,
> BTF_KIND_UNION,
> - BTF_KIND_DATASEC]);
> + BTF_KIND_DATASEC,
> + BTF_KIND_ENUM64]);
> BTF_Type_Id type_id;
> } attrs;
>
> @@ -199,6 +210,7 @@ type BTF_Type =
> || info.kind == BTF_KIND_STRUCT);
> BTF_Var_SecInfo[info.vlen] datasec : info.kind == BTF_KIND_DATASEC;
> BTF_Decl_Tag decl_tag : info.kind == BTF_KIND_DECL_TAG;
> + BTF_Enum64[info.vlen] _enum64 : info.kind == BTF_KIND_ENUM64;
>
> struct {} nothing;
> } data;