dwarves.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Yonghong Song <yhs@fb.com>
To: Andrii Nakryiko <andrii.nakryiko@gmail.com>
Cc: Arnaldo Carvalho de Melo <arnaldo.melo@gmail.com>,
	<dwarves@vger.kernel.org>, Alexei Starovoitov <ast@kernel.org>,
	Andrii Nakryiko <andrii@kernel.org>, bpf <bpf@vger.kernel.org>,
	Daniel Borkmann <daniel@iogearbox.net>,
	Kernel Team <kernel-team@fb.com>, Martin KaFai Lau <kafai@fb.com>
Subject: Re: [PATCH dwarves 2/2] btf_encoder: generate BTF_KIND_TAG from llvm annotations
Date: Tue, 21 Sep 2021 18:16:07 -0700	[thread overview]
Message-ID: <0431c617-5465-6451-c278-b2077ff3d9d4@fb.com> (raw)
In-Reply-To: <CAEf4BzZ2kros1tWOscUOt5nmDd=GZfvtTsn7K7b==QgM-4gsKA@mail.gmail.com>



On 9/21/21 3:02 PM, Andrii Nakryiko wrote:
> On Sun, Sep 19, 2021 at 5:36 PM Yonghong Song <yhs@fb.com> wrote:
>>
>> The following is an example with latest upstream clang:
>>    $ cat t.c
>>    #define __tag1 __attribute__((btf_tag("tag1")))
>>    #define __tag2 __attribute__((btf_tag("tag2")))
>>
>>    struct t {
>>            int a:1 __tag1;
>>            int b __tag2;
>>    } __tag1 __tag2;
>>
>>    int g __tag1 __attribute__((section(".data..percpu")));
>>
>>    int __tag1 foo(struct t *a1, int a2 __tag2) {
>>      return a1->b + a2 + g;
>>    }
>>
>>    $ clang -O2 -g -c t.c
>>    $ pahole -JV t.o
>>    Found per-CPU symbol 'g' at address 0x0
>>    Found 1 per-CPU variables!
>>    Found 1 functions!
>>    File t.o:
>>    [1] INT int size=4 nr_bits=32 encoding=SIGNED
>>    [2] PTR (anon) type_id=3
>>    [3] STRUCT t size=8
>>          a type_id=1 bitfield_size=1 bits_offset=0
>>          b type_id=1 bitfield_size=0 bits_offset=32
>>    [4] TAG tag1 type_id=3 component_idx=0
>>    [5] TAG tag2 type_id=3 component_idx=1
>>    [6] TAG tag1 type_id=3 component_idx=-1
>>    [7] TAG tag2 type_id=3 component_idx=-1
>>    [8] FUNC_PROTO (anon) return=1 args=(2 a1, 1 a2)
>>    [9] FUNC foo type_id=8
>>    [10] TAG tag2 type_id=9 component_idx=1
>>    [11] TAG tag1 type_id=9 component_idx=-1
>>    search cu 't.c' for percpu global variables.
>>    Variable 'g' from CU 't.c' at address 0x0 encoded
>>    [12] VAR g type=1 linkage=1
>>    [13] TAG tag1 type_id=12 component_idx=-1
>>    [14] DATASEC .data..percpu size=4 vlen=1
>>          type=12 offset=0 size=4
>>    $ ...
>>
>> With additional option --skip_encoding_btf_tag, pahole doesn't
>> generate BTF_KIND_TAGs any more.
>>    $ pahole -JV --skip_encoding_btf_tag t.o
>>    Found per-CPU symbol 'g' at address 0x0
>>    Found 1 per-CPU variables!
>>    Found 1 functions!
>>    File t.o:
>>    [1] INT int size=4 nr_bits=32 encoding=SIGNED
>>    [2] PTR (anon) type_id=3
>>    [3] STRUCT t size=8
>>          a type_id=1 bitfield_size=1 bits_offset=0
>>          b type_id=1 bitfield_size=0 bits_offset=32
>>    [4] FUNC_PROTO (anon) return=1 args=(2 a1, 1 a2)
>>    [5] FUNC foo type_id=4
>>    search cu 't.c' for percpu global variables.
>>    Variable 'g' from CU 't.c' at address 0x0 encoded
>>    [6] VAR g type=1 linkage=1
>>    [7] DATASEC .data..percpu size=4 vlen=1
>>          type=6 offset=0 size=4
>>    $ ...
>>
>> Signed-off-by: Yonghong Song <yhs@fb.com>
>> ---
>>   btf_encoder.c | 45 +++++++++++++++++++++++++++++++++++++++++++++
>>   1 file changed, 45 insertions(+)
>>
> 
> [...]
> 
>> @@ -1244,6 +1266,10 @@ static int btf_encoder__encode_cu_variables(struct btf_encoder *encoder, struct
>>                          goto out;
>>                  }
>>
>> +               list_for_each_entry(annot, &var->annots, node) {
>> +                       btf_encoder__add_tag(encoder, annot->value, id, annot->component_idx);
> 
> check errors?

Yes, I missed it. Will fix this and the following two other instances 
and send v2.

> 
>> +               }
>> +
>>                  /*
>>                   * add a BTF_VAR_SECINFO in encoder->percpu_secinfo, which will be added into
>>                   * encoder->types later when we add BTF_VAR_DATASEC.
>> @@ -1359,6 +1385,7 @@ void btf_encoder__delete(struct btf_encoder *encoder)
>>   int btf_encoder__encode_cu(struct btf_encoder *encoder, struct cu *cu)
>>   {
>>          uint32_t type_id_off = btf__get_nr_types(encoder->btf);
>> +       struct llvm_annotation *annot;
>>          uint32_t core_id;
>>          struct function *fn;
>>          struct tag *pos;
>> @@ -1396,6 +1423,20 @@ int btf_encoder__encode_cu(struct btf_encoder *encoder, struct cu *cu)
>>                  encoder->has_index_type = true;
>>          }
>>
>> +       cu__for_each_type(cu, core_id, pos) {
>> +               struct namespace *ns;
>> +               int btf_type_id;
>> +
>> +               if (pos->tag != DW_TAG_structure_type && pos->tag != DW_TAG_union_type)
>> +                       continue;
>> +
>> +               btf_type_id = type_id_off + core_id;
>> +               ns = tag__namespace(pos);
>> +               list_for_each_entry(annot, &ns->annots, node) {
>> +                       btf_encoder__add_tag(encoder, annot->value, btf_type_id, annot->component_idx);
> 
> same, this can fail
> 
>> +               }
>> +       }
>> +
>>          cu__for_each_function(cu, core_id, fn) {
>>                  int btf_fnproto_id, btf_fn_id;
>>                  const char *name;
>> @@ -1436,6 +1477,10 @@ int btf_encoder__encode_cu(struct btf_encoder *encoder, struct cu *cu)
>>                          printf("error: failed to encode function '%s'\n", function__name(fn));
>>                          goto out;
>>                  }
>> +
>> +               list_for_each_entry(annot, &fn->annots, node) {
>> +                       btf_encoder__add_tag(encoder, annot->value, btf_fn_id, annot->component_idx);
> 
> and here as well
> 
>> +               }
>>          }
>>
>>          if (!encoder->skip_encoding_vars)
>> --
>> 2.30.2
>>

      reply	other threads:[~2021-09-22  1:17 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-09-20  0:35 [PATCH dwarves 0/2] generate BTF_KIND_TAG types from DW_TAG_LLVM_annotation dwarf tags Yonghong Song
2021-09-20  0:35 ` [PATCH dwarves 1/2] dwarf_loader: parse dwarf tag DW_TAG_LLVM_annotation Yonghong Song
2021-09-21 21:57   ` Andrii Nakryiko
2021-09-20  0:35 ` [PATCH dwarves 2/2] btf_encoder: generate BTF_KIND_TAG from llvm annotations Yonghong Song
2021-09-21 22:02   ` Andrii Nakryiko
2021-09-22  1:16     ` Yonghong Song [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=0431c617-5465-6451-c278-b2077ff3d9d4@fb.com \
    --to=yhs@fb.com \
    --cc=andrii.nakryiko@gmail.com \
    --cc=andrii@kernel.org \
    --cc=arnaldo.melo@gmail.com \
    --cc=ast@kernel.org \
    --cc=bpf@vger.kernel.org \
    --cc=daniel@iogearbox.net \
    --cc=dwarves@vger.kernel.org \
    --cc=kafai@fb.com \
    --cc=kernel-team@fb.com \
    --subject='Re: [PATCH dwarves 2/2] btf_encoder: generate BTF_KIND_TAG from llvm annotations' \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).