From: Sedat Dilek <sedat.dilek@gmail.com>
To: Yonghong Song <yhs@fb.com>
Cc: "Masahiro Yamada" <masahiroy@kernel.org>,
"Arnaldo Carvalho de Melo" <acme@kernel.org>,
"Arnaldo Carvalho de Melo" <arnaldo.melo@gmail.com>,
dwarves@vger.kernel.org,
"Linux Kernel Mailing List" <linux-kernel@vger.kernel.org>,
bpf@vger.kernel.org, "Jiri Olsa" <jolsa@kernel.org>,
"Jan Engelhardt" <jengelh@inai.de>,
"Domenico Andreoli" <cavok@debian.org>,
"Matthias Schwarzott" <zzam@gentoo.org>,
"Andrii Nakryiko" <andriin@fb.com>,
"Mark Wieelard" <mjw@redhat.com>,
"Paul Moore" <paul@paul-moore.com>,
"Ondrej Mosnacek" <omosnace@redhat.com>,
"Daniel P. Berrangé" <berrange@redhat.com>,
"Tom Stellard" <tstellar@redhat.com>
Subject: Re: ERROR: INT DW_ATE_unsigned_1 Error emitting BTF type
Date: Sat, 6 Feb 2021 11:23:52 +0100 [thread overview]
Message-ID: <CA+icZUUjy5cR5cq6PqSA0+KDsovqAx-zH9CozH8TpETu9jYYPw@mail.gmail.com> (raw)
In-Reply-To: <CA+icZUUOS03BgOoSFdUWP8G61b2wjhAx0bUGNstqS7OTm3+7iQ@mail.gmail.com>
[-- Attachment #1: Type: text/plain, Size: 3293 bytes --]
[ SNIP ]
> > > > > Please help do a test. I can submit a formal patch tomorrow.
> > > >
> > > > Thanks for the patch.
> > > >
> > > > Can you attach the diff as Gmail has totally truncated/malformed it?
> > > >
> > > > For the Linux breakage - you will need some additional Clang specific patches.
> > > > Is this Linux 5.11-rcX?
> > > > The "Blocking bugs" are listed in the first post of "Linux 5.11 release cycle".
> > > > Hope this helps.
> > > >
> > > > This is cool co-working :-).
> > > >
> > > > - Sedat -
> > > >
> > > > [1] https://github.com/ClangBuiltLinux/linux/issues/1228
> > >
> > > With the attached diff and new selfmade pahole looks good here.
> > >
> > > Passed (see line-numbers):
> > >
> > > 11090:+ info LD .tmp_vmlinux.btf
> > > 11099:+ info BTF .btf.vmlinux.bin.o
> > > 11103:+ LLVM_OBJCOPY=llvm-objcopy /opt/pahole/bin/pahole -J .tmp_vmlinux.btf
> > > 11121:+ info LD .tmp_vmlinux.kallsyms1
> > > 11139:+ info KSYMS .tmp_vmlinux.kallsyms1.S
> > > 11145:+ info AS .tmp_vmlinux.kallsyms1.S
> > > 11160:+ info LD .tmp_vmlinux.kallsyms2
> > > 11178:+ info KSYMS .tmp_vmlinux.kallsyms2.S
> > > 11184:+ info AS .tmp_vmlinux.kallsyms2.S
> > > 11200:+ info LD vmlinux
> > > 11210:+ info BTFIDS vmlinux
> > > 11216:+ info SORTTAB vmlinux
> > >
> > > Still building linux-kernel...
> > >
> > > Will report later if I was able to boot on bare metal.
> > >
> >
> > When running scripts/Makefile.modfinal:
> >
> > ...
> > not supported bit_size 160
> > Encountered error while encoding BTF.
> > ...
> > make[5]: *** [scripts/Makefile.modfinal:59:
> > drivers/net/ethernet/mellanox/mlx5/core/mlx5_core.ko] Error 1
> > make[5]: *** Deleting file
> > 'drivers/net/ethernet/mellanox/mlx5/core/mlx5_core.ko'
> >
>
> I added "bit_size 160" to libbtf.c:
>
> static int bits_to_int_bytes(uint16_t bit_size)
> {
> if (bit_size <= 8)
> return 1;
> if (bit_size <= 16)
> return 2;
> if (bit_size <= 32)
> return 4;
> if (bit_size <= 64)
> return 8;
> if (bit_size <= 128)
> return 16;
> if (bit_size <= 160)
> return 20;
> /* BTF supports upto 16byte int (__int128). */
> return -1;
> }
>
> It still breaks with:
>
> [521367] INT DW_ATE_unsigned_160 Error emitting BTF type
> Encountered error while encoding BTF.
> make[5]: *** [scripts/Makefile.modfinal:58:
> drivers/net/ethernet/mellanox/mlx5/core/mlx5_core.ko] Error 1
> make[5]: *** Deleting file
> 'drivers/net/ethernet/mellanox/mlx5/core/mlx5_core.ko'
>
> Comments?
>
Indeed there is DW_ATE_unsigned_160:
$ /opt/llvm-toolchain/bin/llvm-dwarfdump
drivers/net/ethernet/mellanox/mlx5/core/mlx5_core.o | grep DW_AT_name
| grep DW_ATE_ | sort -u
DW_AT_name ("DW_ATE_signed_32")
DW_AT_name ("DW_ATE_signed_64")
DW_AT_name ("DW_ATE_unsigned_1")
DW_AT_name ("DW_ATE_unsigned_128")
DW_AT_name ("DW_ATE_unsigned_16")
DW_AT_name ("DW_ATE_unsigned_160")
DW_AT_name ("DW_ATE_unsigned_32")
DW_AT_name ("DW_ATE_unsigned_64")
DW_AT_name ("DW_ATE_unsigned_8")
Attached is diff v2 with the "bit_size 160" fix.
- Sedat -
[-- Attachment #2: DW_ATE_unsigned_1-pahole_1_20-dileks-v2.diff --]
[-- Type: text/x-patch, Size: 2439 bytes --]
diff --git a/dwarf_loader.c b/dwarf_loader.c
index b73d7867e1e6..aba14679a07e 100644
--- a/dwarf_loader.c
+++ b/dwarf_loader.c
@@ -467,8 +467,15 @@ static struct base_type *base_type__new(Dwarf_Die *die, struct cu *cu)
if (bt != NULL) {
tag__init(&bt->tag, cu, die);
- bt->name = strings__add(strings, attr_string(die, DW_AT_name));
- bt->bit_size = attr_numeric(die, DW_AT_byte_size) * 8;
+ const char *name = attr_string(die, DW_AT_name);
+ bt->name = strings__add(strings, name);
+ /* DW_ATE_unsigned_1 has DW_AT_byte_size == 0.
+ * specially process it.
+ */
+ if (strcmp(name, "DW_ATE_unsigned_1") == 0)
+ bt->bit_size = 1;
+ else
+ bt->bit_size = attr_numeric(die, DW_AT_byte_size) * 8;
uint64_t encoding = attr_numeric(die, DW_AT_encoding);
bt->is_bool = encoding == DW_ATE_boolean;
bt->is_signed = encoding == DW_ATE_signed;
diff --git a/libbtf.c b/libbtf.c
index 9f7628304495..48ba57394090 100644
--- a/libbtf.c
+++ b/libbtf.c
@@ -367,13 +367,34 @@ static void btf_log_func_param(const struct btf_elf *btfe,
}
}
+/* btf requires power-of-2 bytes, yet dwarf may have something like
+ * DW_ATE_unsigned_24 which encodes as 24 bits (3 bytes).
+ */
+static int bits_to_int_bytes(uint16_t bit_size)
+{
+ if (bit_size <= 8)
+ return 1;
+ if (bit_size <= 16)
+ return 2;
+ if (bit_size <= 32)
+ return 4;
+ if (bit_size <= 64)
+ return 8;
+ if (bit_size <= 128)
+ return 16;
+ if (bit_size <= 160)
+ return 20;
+ /* BTF supports upto 16byte int (__int128). */
+ return -1;
+}
+
int32_t btf_elf__add_base_type(struct btf_elf *btfe, const struct base_type *bt,
const char *name)
{
struct btf *btf = btfe->btf;
const struct btf_type *t;
uint8_t encoding = 0;
- int32_t id;
+ int32_t id, nbytes;
if (bt->is_signed) {
encoding = BTF_INT_SIGNED;
@@ -384,7 +405,13 @@ int32_t btf_elf__add_base_type(struct btf_elf *btfe, const struct base_type *bt,
return -1;
}
- id = btf__add_int(btf, name, BITS_ROUNDUP_BYTES(bt->bit_size), encoding);
+ nbytes = bits_to_int_bytes(bt->bit_size);
+ if (nbytes < 0) {
+ fprintf(stderr, "not supported bit_size %hu\n", bt->bit_size);
+ return -1;
+ }
+
+ id = btf__add_int(btf, name, nbytes, encoding);
if (id < 0) {
btf_elf__log_err(btfe, BTF_KIND_INT, name, true, "Error emitting BTF type");
} else {
next prev parent reply other threads:[~2021-02-06 10:25 UTC|newest]
Thread overview: 64+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-02-04 22:07 ANNOUNCE: pahole v1.20 (gcc11 DWARF5's default, lots of ELF sections, BTF) Arnaldo Carvalho de Melo
2021-02-04 22:10 ` Sedat Dilek
2021-02-05 0:01 ` Andrii Nakryiko
2021-02-05 4:33 ` Arnaldo Carvalho de Melo
2021-02-05 7:39 ` Andrii Nakryiko
2021-02-05 9:33 ` Arnaldo Carvalho de Melo
2021-02-05 16:25 ` Arnaldo Carvalho de Melo
2021-02-05 22:11 ` Andrii Nakryiko
2021-02-05 23:55 ` Arnaldo Carvalho de Melo
2021-02-07 6:40 ` Andrii Nakryiko
2021-02-05 14:37 ` ERROR: INT DW_ATE_unsigned_1 Error emitting BTF type Sedat Dilek
2021-02-05 14:41 ` Sedat Dilek
2021-02-05 15:23 ` Sedat Dilek
2021-02-05 15:28 ` Arnaldo Carvalho de Melo
2021-02-05 15:40 ` Sedat Dilek
2021-02-05 17:48 ` Sedat Dilek
2021-02-05 18:53 ` Sedat Dilek
2021-02-05 19:06 ` Sedat Dilek
2021-02-05 19:10 ` Yonghong Song
2021-02-05 19:15 ` Sedat Dilek
2021-02-05 19:20 ` Yonghong Song
2021-02-05 19:24 ` Sedat Dilek
2021-02-05 19:44 ` Sedat Dilek
2021-02-05 19:21 ` Sedat Dilek
2021-02-05 19:30 ` Fāng-ruì Sòng
2021-02-05 19:38 ` Sedat Dilek
2021-02-05 19:24 ` Arnaldo Carvalho de Melo
2021-02-05 20:03 ` Yonghong Song
2021-02-05 20:31 ` Sedat Dilek
2021-02-05 21:54 ` Yonghong Song
2021-02-06 3:34 ` Sedat Dilek
2021-02-06 5:44 ` Sedat Dilek
2021-02-06 5:53 ` Sedat Dilek
2021-02-06 6:26 ` Sedat Dilek
2021-02-06 6:52 ` Sedat Dilek
2021-02-06 8:26 ` Yonghong Song
2021-02-06 8:32 ` Sedat Dilek
2021-02-06 9:32 ` Sedat Dilek
2021-02-06 9:37 ` Sedat Dilek
2021-02-06 9:48 ` Sedat Dilek
2021-02-06 10:16 ` Sedat Dilek
2021-02-06 10:23 ` Sedat Dilek [this message]
2021-02-06 11:27 ` Sedat Dilek
2021-02-06 12:54 ` Sedat Dilek
2021-02-06 16:24 ` Mark Wieelard
2021-02-06 17:53 ` Yonghong Song
2021-02-06 18:10 ` Sedat Dilek
2021-02-06 19:17 ` Yonghong Song
2021-02-06 19:22 ` Sedat Dilek
2021-02-06 19:28 ` Sedat Dilek
2021-02-06 19:32 ` Yonghong Song
2021-02-06 19:44 ` Sedat Dilek
2021-02-06 20:12 ` Yonghong Song
2021-02-06 20:46 ` Sedat Dilek
2021-02-06 7:26 ` Sedat Dilek
2021-02-05 21:10 ` Nick Desaulniers
2021-02-05 21:16 ` Sedat Dilek
2021-02-05 21:40 ` Nick Desaulniers
2021-02-05 21:42 ` Sedat Dilek
2021-02-08 2:44 ` ANNOUNCE: pahole v1.20 (gcc11 DWARF5's default, lots of ELF sections, BTF) Sedat Dilek
2021-02-08 12:32 ` Arnaldo Carvalho de Melo
2021-02-08 12:36 ` Sedat Dilek
2021-02-17 12:08 ` Domenico Andreoli
2021-02-17 12:48 ` Arnaldo Carvalho de Melo
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=CA+icZUUjy5cR5cq6PqSA0+KDsovqAx-zH9CozH8TpETu9jYYPw@mail.gmail.com \
--to=sedat.dilek@gmail.com \
--cc=acme@kernel.org \
--cc=andriin@fb.com \
--cc=arnaldo.melo@gmail.com \
--cc=berrange@redhat.com \
--cc=bpf@vger.kernel.org \
--cc=cavok@debian.org \
--cc=dwarves@vger.kernel.org \
--cc=jengelh@inai.de \
--cc=jolsa@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=masahiroy@kernel.org \
--cc=mjw@redhat.com \
--cc=omosnace@redhat.com \
--cc=paul@paul-moore.com \
--cc=tstellar@redhat.com \
--cc=yhs@fb.com \
--cc=zzam@gentoo.org \
/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
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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).