poke-devel
[Top][All Lists]
Advanced

[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: Thu, 01 Sep 2022 15:37:29 +0200
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux)

Please also make sure to add the entries to ChangeLog :)
Thanks!

> 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;



reply via email to

[Prev in Thread] Current Thread [Next in Thread]