linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
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 {

  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).