All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH bpf-next 0/3] Add generic and raw BTF parsing APIs to libbpf
@ 2020-08-02  1:32 Andrii Nakryiko
  2020-08-02  1:32 ` [PATCH bpf-next 1/3] libbpf: add btf__parse_raw() and generic btf__parse() APIs Andrii Nakryiko
                   ` (4 more replies)
  0 siblings, 5 replies; 8+ messages in thread
From: Andrii Nakryiko @ 2020-08-02  1:32 UTC (permalink / raw)
  To: bpf, netdev, ast, daniel; +Cc: andrii.nakryiko, kernel-team, Andrii Nakryiko

It's pretty common for applications to want to parse raw (binary) BTF data
from file, as opposed to parsing it from ELF sections. It's also pretty common
for tools to not care whether given file is ELF or raw BTF format. This patch
series exposes internal raw BTF parsing API and adds generic variant of BTF
parsing, which will efficiently determine the format of a given fail and will
parse BTF appropriately.

Patches #2 and #3 removes re-implementations of such APIs from bpftool and
resolve_btfids tools.

Andrii Nakryiko (3):
  libbpf: add btf__parse_raw() and generic btf__parse() APIs
  tools/bpftool: use libbpf's btf__parse() API for parsing BTF from file
  tools/resolve_btfids: use libbpf's btf__parse() API

 tools/bpf/bpftool/btf.c             |  54 +------------
 tools/bpf/resolve_btfids/.gitignore |   4 +
 tools/bpf/resolve_btfids/main.c     |  58 +-------------
 tools/lib/bpf/btf.c                 | 114 +++++++++++++++++++---------
 tools/lib/bpf/btf.h                 |   5 +-
 tools/lib/bpf/libbpf.map            |   2 +
 6 files changed, 89 insertions(+), 148 deletions(-)
 create mode 100644 tools/bpf/resolve_btfids/.gitignore

-- 
2.24.1


^ permalink raw reply	[flat|nested] 8+ messages in thread

* [PATCH bpf-next 1/3] libbpf: add btf__parse_raw() and generic btf__parse() APIs
  2020-08-02  1:32 [PATCH bpf-next 0/3] Add generic and raw BTF parsing APIs to libbpf Andrii Nakryiko
@ 2020-08-02  1:32 ` Andrii Nakryiko
  2020-08-02  1:32 ` [PATCH bpf-next 2/3] tools/bpftool: use libbpf's btf__parse() API for parsing BTF from file Andrii Nakryiko
                   ` (3 subsequent siblings)
  4 siblings, 0 replies; 8+ messages in thread
From: Andrii Nakryiko @ 2020-08-02  1:32 UTC (permalink / raw)
  To: bpf, netdev, ast, daniel; +Cc: andrii.nakryiko, kernel-team, Andrii Nakryiko

Add public APIs to parse BTF from raw data file (e.g.,
/sys/kernel/btf/vmlinux), as well as generic btf__parse(), which will try to
determine correct format, currently either raw or ELF.

Signed-off-by: Andrii Nakryiko <andriin@fb.com>
---
 tools/lib/bpf/btf.c      | 114 ++++++++++++++++++++++++++-------------
 tools/lib/bpf/btf.h      |   5 +-
 tools/lib/bpf/libbpf.map |   2 +
 3 files changed, 83 insertions(+), 38 deletions(-)

diff --git a/tools/lib/bpf/btf.c b/tools/lib/bpf/btf.c
index ded5b29965f9..856b09a04563 100644
--- a/tools/lib/bpf/btf.c
+++ b/tools/lib/bpf/btf.c
@@ -562,6 +562,83 @@ struct btf *btf__parse_elf(const char *path, struct btf_ext **btf_ext)
 	return btf;
 }
 
+struct btf *btf__parse_raw(const char *path)
+{
+	void *data = NULL;
+	struct btf *btf;
+	FILE *f = NULL;
+	__u16 magic;
+	int err = 0;
+	long sz;
+
+	f = fopen(path, "rb");
+	if (!f) {
+		err = -errno;
+		goto err_out;
+	}
+
+	/* check BTF magic */
+	if (fread(&magic, 1, sizeof(magic), f) < sizeof(magic)) {
+		err = -EIO;
+		goto err_out;
+	}
+	if (magic != BTF_MAGIC) {
+		/* definitely not a raw BTF */
+		err = -EPROTO;
+		goto err_out;
+	}
+
+	/* get file size */
+	if (fseek(f, 0, SEEK_END)) {
+		err = -errno;
+		goto err_out;
+	}
+	sz = ftell(f);
+	if (sz < 0) {
+		err = -errno;
+		goto err_out;
+	}
+	/* rewind to the start */
+	if (fseek(f, 0, SEEK_SET)) {
+		err = -errno;
+		goto err_out;
+	}
+
+	/* pre-alloc memory and read all of BTF data */
+	data = malloc(sz);
+	if (!data) {
+		err = -ENOMEM;
+		goto err_out;
+	}
+	if (fread(data, 1, sz, f) < sz) {
+		err = -EIO;
+		goto err_out;
+	}
+
+	/* finally parse BTF data */
+	btf = btf__new(data, sz);
+
+err_out:
+	free(data);
+	if (f)
+		fclose(f);
+	return err ? ERR_PTR(err) : btf;
+}
+
+struct btf *btf__parse(const char *path, struct btf_ext **btf_ext)
+{
+	struct btf *btf;
+
+	if (btf_ext)
+		*btf_ext = NULL;
+
+	btf = btf__parse_raw(path);
+	if (!IS_ERR(btf) || PTR_ERR(btf) != -EPROTO)
+		return btf;
+
+	return btf__parse_elf(path, btf_ext);
+}
+
 static int compare_vsi_off(const void *_a, const void *_b)
 {
 	const struct btf_var_secinfo *a = _a;
@@ -2951,41 +3028,6 @@ static int btf_dedup_remap_types(struct btf_dedup *d)
 	return 0;
 }
 
-static struct btf *btf_load_raw(const char *path)
-{
-	struct btf *btf;
-	size_t read_cnt;
-	struct stat st;
-	void *data;
-	FILE *f;
-
-	if (stat(path, &st))
-		return ERR_PTR(-errno);
-
-	data = malloc(st.st_size);
-	if (!data)
-		return ERR_PTR(-ENOMEM);
-
-	f = fopen(path, "rb");
-	if (!f) {
-		btf = ERR_PTR(-errno);
-		goto cleanup;
-	}
-
-	read_cnt = fread(data, 1, st.st_size, f);
-	fclose(f);
-	if (read_cnt < st.st_size) {
-		btf = ERR_PTR(-EBADF);
-		goto cleanup;
-	}
-
-	btf = btf__new(data, read_cnt);
-
-cleanup:
-	free(data);
-	return btf;
-}
-
 /*
  * Probe few well-known locations for vmlinux kernel image and try to load BTF
  * data out of it to use for target BTF.
@@ -3021,7 +3063,7 @@ struct btf *libbpf_find_kernel_btf(void)
 			continue;
 
 		if (locations[i].raw_btf)
-			btf = btf_load_raw(path);
+			btf = btf__parse_raw(path);
 		else
 			btf = btf__parse_elf(path, NULL);
 
diff --git a/tools/lib/bpf/btf.h b/tools/lib/bpf/btf.h
index 491c7b41ffdc..f4a1a1d2b9a3 100644
--- a/tools/lib/bpf/btf.h
+++ b/tools/lib/bpf/btf.h
@@ -64,8 +64,9 @@ struct btf_ext_header {
 
 LIBBPF_API void btf__free(struct btf *btf);
 LIBBPF_API struct btf *btf__new(const void *data, __u32 size);
-LIBBPF_API struct btf *btf__parse_elf(const char *path,
-				      struct btf_ext **btf_ext);
+LIBBPF_API struct btf *btf__parse(const char *path, struct btf_ext **btf_ext);
+LIBBPF_API struct btf *btf__parse_elf(const char *path, struct btf_ext **btf_ext);
+LIBBPF_API struct btf *btf__parse_raw(const char *path);
 LIBBPF_API int btf__finalize_data(struct bpf_object *obj, struct btf *btf);
 LIBBPF_API int btf__load(struct btf *btf);
 LIBBPF_API __s32 btf__find_by_name(const struct btf *btf,
diff --git a/tools/lib/bpf/libbpf.map b/tools/lib/bpf/libbpf.map
index ca49a6a7e5b2..edf6a38807ea 100644
--- a/tools/lib/bpf/libbpf.map
+++ b/tools/lib/bpf/libbpf.map
@@ -291,5 +291,7 @@ LIBBPF_0.1.0 {
 		bpf_program__is_sk_lookup;
 		bpf_program__set_autoload;
 		bpf_program__set_sk_lookup;
+		btf__parse;
+		btf__parse_raw;
 		btf__set_fd;
 } LIBBPF_0.0.9;
-- 
2.24.1


^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [PATCH bpf-next 2/3] tools/bpftool: use libbpf's btf__parse() API for parsing BTF from file
  2020-08-02  1:32 [PATCH bpf-next 0/3] Add generic and raw BTF parsing APIs to libbpf Andrii Nakryiko
  2020-08-02  1:32 ` [PATCH bpf-next 1/3] libbpf: add btf__parse_raw() and generic btf__parse() APIs Andrii Nakryiko
@ 2020-08-02  1:32 ` Andrii Nakryiko
  2020-08-02  1:32 ` [PATCH bpf-next 3/3] tools/resolve_btfids: use libbpf's btf__parse() API Andrii Nakryiko
                   ` (2 subsequent siblings)
  4 siblings, 0 replies; 8+ messages in thread
From: Andrii Nakryiko @ 2020-08-02  1:32 UTC (permalink / raw)
  To: bpf, netdev, ast, daniel; +Cc: andrii.nakryiko, kernel-team, Andrii Nakryiko

Use generic libbpf API to parse BTF data from file, instead of re-implementing
it in bpftool.

Signed-off-by: Andrii Nakryiko <andriin@fb.com>
---
 tools/bpf/bpftool/btf.c | 54 +----------------------------------------
 1 file changed, 1 insertion(+), 53 deletions(-)

diff --git a/tools/bpf/bpftool/btf.c b/tools/bpf/bpftool/btf.c
index fc9bc7a23db6..42d1df2c1939 100644
--- a/tools/bpf/bpftool/btf.c
+++ b/tools/bpf/bpftool/btf.c
@@ -422,54 +422,6 @@ static int dump_btf_c(const struct btf *btf,
 	return err;
 }
 
-static struct btf *btf__parse_raw(const char *file)
-{
-	struct btf *btf;
-	struct stat st;
-	__u8 *buf;
-	FILE *f;
-
-	if (stat(file, &st))
-		return NULL;
-
-	f = fopen(file, "rb");
-	if (!f)
-		return NULL;
-
-	buf = malloc(st.st_size);
-	if (!buf) {
-		btf = ERR_PTR(-ENOMEM);
-		goto exit_close;
-	}
-
-	if ((size_t) st.st_size != fread(buf, 1, st.st_size, f)) {
-		btf = ERR_PTR(-EINVAL);
-		goto exit_free;
-	}
-
-	btf = btf__new(buf, st.st_size);
-
-exit_free:
-	free(buf);
-exit_close:
-	fclose(f);
-	return btf;
-}
-
-static bool is_btf_raw(const char *file)
-{
-	__u16 magic = 0;
-	int fd, nb_read;
-
-	fd = open(file, O_RDONLY);
-	if (fd < 0)
-		return false;
-
-	nb_read = read(fd, &magic, sizeof(magic));
-	close(fd);
-	return nb_read == sizeof(magic) && magic == BTF_MAGIC;
-}
-
 static int do_dump(int argc, char **argv)
 {
 	struct btf *btf = NULL;
@@ -547,11 +499,7 @@ static int do_dump(int argc, char **argv)
 		}
 		NEXT_ARG();
 	} else if (is_prefix(src, "file")) {
-		if (is_btf_raw(*argv))
-			btf = btf__parse_raw(*argv);
-		else
-			btf = btf__parse_elf(*argv, NULL);
-
+		btf = btf__parse(*argv, NULL);
 		if (IS_ERR(btf)) {
 			err = -PTR_ERR(btf);
 			btf = NULL;
-- 
2.24.1


^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [PATCH bpf-next 3/3] tools/resolve_btfids: use libbpf's btf__parse() API
  2020-08-02  1:32 [PATCH bpf-next 0/3] Add generic and raw BTF parsing APIs to libbpf Andrii Nakryiko
  2020-08-02  1:32 ` [PATCH bpf-next 1/3] libbpf: add btf__parse_raw() and generic btf__parse() APIs Andrii Nakryiko
  2020-08-02  1:32 ` [PATCH bpf-next 2/3] tools/bpftool: use libbpf's btf__parse() API for parsing BTF from file Andrii Nakryiko
@ 2020-08-02  1:32 ` Andrii Nakryiko
  2020-08-03 14:45 ` [PATCH bpf-next 0/3] Add generic and raw BTF parsing APIs to libbpf Daniel Borkmann
  2020-08-06 17:39 ` Arnaldo Carvalho de Melo
  4 siblings, 0 replies; 8+ messages in thread
From: Andrii Nakryiko @ 2020-08-02  1:32 UTC (permalink / raw)
  To: bpf, netdev, ast, daniel; +Cc: andrii.nakryiko, kernel-team, Andrii Nakryiko

Instead of re-implementing generic BTF parsing logic, use libbpf's API.
Also add .gitignore for resolve_btfids's build artifacts.

Signed-off-by: Andrii Nakryiko <andriin@fb.com>
---
 tools/bpf/resolve_btfids/.gitignore |  4 ++
 tools/bpf/resolve_btfids/main.c     | 58 +----------------------------
 2 files changed, 5 insertions(+), 57 deletions(-)
 create mode 100644 tools/bpf/resolve_btfids/.gitignore

diff --git a/tools/bpf/resolve_btfids/.gitignore b/tools/bpf/resolve_btfids/.gitignore
new file mode 100644
index 000000000000..a026df7dc280
--- /dev/null
+++ b/tools/bpf/resolve_btfids/.gitignore
@@ -0,0 +1,4 @@
+/FEATURE-DUMP.libbpf
+/bpf_helper_defs.h
+/fixdep
+/resolve_btfids
diff --git a/tools/bpf/resolve_btfids/main.c b/tools/bpf/resolve_btfids/main.c
index 6956b6350cad..52d883325a23 100644
--- a/tools/bpf/resolve_btfids/main.c
+++ b/tools/bpf/resolve_btfids/main.c
@@ -403,62 +403,6 @@ static int symbols_collect(struct object *obj)
 	return 0;
 }
 
-static struct btf *btf__parse_raw(const char *file)
-{
-	struct btf *btf;
-	struct stat st;
-	__u8 *buf;
-	FILE *f;
-
-	if (stat(file, &st))
-		return NULL;
-
-	f = fopen(file, "rb");
-	if (!f)
-		return NULL;
-
-	buf = malloc(st.st_size);
-	if (!buf) {
-		btf = ERR_PTR(-ENOMEM);
-		goto exit_close;
-	}
-
-	if ((size_t) st.st_size != fread(buf, 1, st.st_size, f)) {
-		btf = ERR_PTR(-EINVAL);
-		goto exit_free;
-	}
-
-	btf = btf__new(buf, st.st_size);
-
-exit_free:
-	free(buf);
-exit_close:
-	fclose(f);
-	return btf;
-}
-
-static bool is_btf_raw(const char *file)
-{
-	__u16 magic = 0;
-	int fd, nb_read;
-
-	fd = open(file, O_RDONLY);
-	if (fd < 0)
-		return false;
-
-	nb_read = read(fd, &magic, sizeof(magic));
-	close(fd);
-	return nb_read == sizeof(magic) && magic == BTF_MAGIC;
-}
-
-static struct btf *btf_open(const char *path)
-{
-	if (is_btf_raw(path))
-		return btf__parse_raw(path);
-	else
-		return btf__parse_elf(path, NULL);
-}
-
 static int symbols_resolve(struct object *obj)
 {
 	int nr_typedefs = obj->nr_typedefs;
@@ -469,7 +413,7 @@ static int symbols_resolve(struct object *obj)
 	struct btf *btf;
 	__u32 nr;
 
-	btf = btf_open(obj->btf ?: obj->path);
+	btf = btf__parse(obj->btf ?: obj->path, NULL);
 	err = libbpf_get_error(btf);
 	if (err) {
 		pr_err("FAILED: load BTF from %s: %s",
-- 
2.24.1


^ permalink raw reply related	[flat|nested] 8+ messages in thread

* Re: [PATCH bpf-next 0/3] Add generic and raw BTF parsing APIs to libbpf
  2020-08-02  1:32 [PATCH bpf-next 0/3] Add generic and raw BTF parsing APIs to libbpf Andrii Nakryiko
                   ` (2 preceding siblings ...)
  2020-08-02  1:32 ` [PATCH bpf-next 3/3] tools/resolve_btfids: use libbpf's btf__parse() API Andrii Nakryiko
@ 2020-08-03 14:45 ` Daniel Borkmann
  2020-08-06 17:39 ` Arnaldo Carvalho de Melo
  4 siblings, 0 replies; 8+ messages in thread
From: Daniel Borkmann @ 2020-08-03 14:45 UTC (permalink / raw)
  To: Andrii Nakryiko, bpf, netdev, ast; +Cc: andrii.nakryiko, kernel-team

On 8/2/20 3:32 AM, Andrii Nakryiko wrote:
> It's pretty common for applications to want to parse raw (binary) BTF data
> from file, as opposed to parsing it from ELF sections. It's also pretty common
> for tools to not care whether given file is ELF or raw BTF format. This patch
> series exposes internal raw BTF parsing API and adds generic variant of BTF
> parsing, which will efficiently determine the format of a given fail and will
> parse BTF appropriately.
> 
> Patches #2 and #3 removes re-implementations of such APIs from bpftool and
> resolve_btfids tools.
> 
> Andrii Nakryiko (3):
>    libbpf: add btf__parse_raw() and generic btf__parse() APIs
>    tools/bpftool: use libbpf's btf__parse() API for parsing BTF from file
>    tools/resolve_btfids: use libbpf's btf__parse() API
> 
>   tools/bpf/bpftool/btf.c             |  54 +------------
>   tools/bpf/resolve_btfids/.gitignore |   4 +
>   tools/bpf/resolve_btfids/main.c     |  58 +-------------
>   tools/lib/bpf/btf.c                 | 114 +++++++++++++++++++---------
>   tools/lib/bpf/btf.h                 |   5 +-
>   tools/lib/bpf/libbpf.map            |   2 +
>   6 files changed, 89 insertions(+), 148 deletions(-)
>   create mode 100644 tools/bpf/resolve_btfids/.gitignore
> 

Applied, thanks!

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH bpf-next 0/3] Add generic and raw BTF parsing APIs to libbpf
  2020-08-02  1:32 [PATCH bpf-next 0/3] Add generic and raw BTF parsing APIs to libbpf Andrii Nakryiko
                   ` (3 preceding siblings ...)
  2020-08-03 14:45 ` [PATCH bpf-next 0/3] Add generic and raw BTF parsing APIs to libbpf Daniel Borkmann
@ 2020-08-06 17:39 ` Arnaldo Carvalho de Melo
  2020-08-06 17:49   ` Andrii Nakryiko
  4 siblings, 1 reply; 8+ messages in thread
From: Arnaldo Carvalho de Melo @ 2020-08-06 17:39 UTC (permalink / raw)
  To: Andrii Nakryiko; +Cc: bpf, netdev, ast, daniel, andrii.nakryiko, kernel-team

Em Sat, Aug 01, 2020 at 06:32:16PM -0700, Andrii Nakryiko escreveu:
> It's pretty common for applications to want to parse raw (binary) BTF data
> from file, as opposed to parsing it from ELF sections. It's also pretty common
> for tools to not care whether given file is ELF or raw BTF format. This patch
> series exposes internal raw BTF parsing API and adds generic variant of BTF
> parsing, which will efficiently determine the format of a given fail and will
> parse BTF appropriately.
> 
> Patches #2 and #3 removes re-implementations of such APIs from bpftool and
> resolve_btfids tools.
> 
> Andrii Nakryiko (3):
>   libbpf: add btf__parse_raw() and generic btf__parse() APIs
>   tools/bpftool: use libbpf's btf__parse() API for parsing BTF from file
>   tools/resolve_btfids: use libbpf's btf__parse() API

I haven't checked which of the patches, or some in other series caused
this on Clear Linux:

  21 clearlinux:latest             : FAIL gcc (Clear Linux OS for Intel Architecture) 10.2.1 20200723 releases/gcc-10.2.0-3-g677b80db41, clang ver
sion 10.0.1

  gcc (Clear Linux OS for Intel Architecture) 10.2.1 20200723 releases/gcc-10.2.0-3-g677b80db41

  btf.c: In function 'btf__parse_raw':
  btf.c:625:28: error: 'btf' may be used uninitialized in this function [-Werror=maybe-uninitialized]
    625 |  return err ? ERR_PTR(err) : btf;
        |         ~~~~~~~~~~~~~~~~~~~^~~~~

This is what I have:

[acme@quaco perf]$ git log -10 --oneline tools/lib/bpf
94a1fedd63ed libbpf: Add btf__parse_raw() and generic btf__parse() APIs
2e49527e5248 libbpf: Add bpf_link detach APIs
1acf8f90ea7e libbpf: Fix register in PT_REGS MIPS macros
50450fc716c1 libbpf: Make destructors more robust by handling ERR_PTR(err) cases
dc8698cac7aa libbpf: Add support for BPF XDP link
d4b4dd6ce770 libbpf: Print hint when PERF_EVENT_IOC_SET_BPF returns -EPROTO
cd31039a7347 tools/libbpf: Add support for bpf map element iterator
da7a35062bcc libbpf bpf_helpers: Use __builtin_offsetof for offsetof
499dd29d90bb libbpf: Add support for SK_LOOKUP program type
4be556cf5aef libbpf: Add SEC name for xdp programs attached to CPUMAP
[acme@quaco perf]$

>  tools/bpf/bpftool/btf.c             |  54 +------------
>  tools/bpf/resolve_btfids/.gitignore |   4 +
>  tools/bpf/resolve_btfids/main.c     |  58 +-------------
>  tools/lib/bpf/btf.c                 | 114 +++++++++++++++++++---------
>  tools/lib/bpf/btf.h                 |   5 +-
>  tools/lib/bpf/libbpf.map            |   2 +
>  6 files changed, 89 insertions(+), 148 deletions(-)
>  create mode 100644 tools/bpf/resolve_btfids/.gitignore
> 
> -- 
> 2.24.1
> 

-- 

- Arnaldo

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH bpf-next 0/3] Add generic and raw BTF parsing APIs to libbpf
  2020-08-06 17:39 ` Arnaldo Carvalho de Melo
@ 2020-08-06 17:49   ` Andrii Nakryiko
  2020-08-06 18:01     ` Alexei Starovoitov
  0 siblings, 1 reply; 8+ messages in thread
From: Andrii Nakryiko @ 2020-08-06 17:49 UTC (permalink / raw)
  To: Arnaldo Carvalho de Melo
  Cc: Andrii Nakryiko, bpf, Networking, Alexei Starovoitov,
	Daniel Borkmann, Kernel Team

On Thu, Aug 6, 2020 at 10:39 AM Arnaldo Carvalho de Melo
<arnaldo.melo@gmail.com> wrote:
>
> Em Sat, Aug 01, 2020 at 06:32:16PM -0700, Andrii Nakryiko escreveu:
> > It's pretty common for applications to want to parse raw (binary) BTF data
> > from file, as opposed to parsing it from ELF sections. It's also pretty common
> > for tools to not care whether given file is ELF or raw BTF format. This patch
> > series exposes internal raw BTF parsing API and adds generic variant of BTF
> > parsing, which will efficiently determine the format of a given fail and will
> > parse BTF appropriately.
> >
> > Patches #2 and #3 removes re-implementations of such APIs from bpftool and
> > resolve_btfids tools.
> >
> > Andrii Nakryiko (3):
> >   libbpf: add btf__parse_raw() and generic btf__parse() APIs
> >   tools/bpftool: use libbpf's btf__parse() API for parsing BTF from file
> >   tools/resolve_btfids: use libbpf's btf__parse() API
>
> I haven't checked which of the patches, or some in other series caused
> this on Clear Linux:
>
>   21 clearlinux:latest             : FAIL gcc (Clear Linux OS for Intel Architecture) 10.2.1 20200723 releases/gcc-10.2.0-3-g677b80db41, clang ver
> sion 10.0.1
>
>   gcc (Clear Linux OS for Intel Architecture) 10.2.1 20200723 releases/gcc-10.2.0-3-g677b80db41
>
>   btf.c: In function 'btf__parse_raw':
>   btf.c:625:28: error: 'btf' may be used uninitialized in this function [-Werror=maybe-uninitialized]
>     625 |  return err ? ERR_PTR(err) : btf;
>         |         ~~~~~~~~~~~~~~~~~~~^~~~~
>

Yeah, fixed in https://patchwork.ozlabs.org/project/netdev/patch/20200805223359.32109-1-danieltimlee@gmail.com/

> This is what I have:
>
> [acme@quaco perf]$ git log -10 --oneline tools/lib/bpf
> 94a1fedd63ed libbpf: Add btf__parse_raw() and generic btf__parse() APIs
> 2e49527e5248 libbpf: Add bpf_link detach APIs
> 1acf8f90ea7e libbpf: Fix register in PT_REGS MIPS macros
> 50450fc716c1 libbpf: Make destructors more robust by handling ERR_PTR(err) cases
> dc8698cac7aa libbpf: Add support for BPF XDP link
> d4b4dd6ce770 libbpf: Print hint when PERF_EVENT_IOC_SET_BPF returns -EPROTO
> cd31039a7347 tools/libbpf: Add support for bpf map element iterator
> da7a35062bcc libbpf bpf_helpers: Use __builtin_offsetof for offsetof
> 499dd29d90bb libbpf: Add support for SK_LOOKUP program type
> 4be556cf5aef libbpf: Add SEC name for xdp programs attached to CPUMAP
> [acme@quaco perf]$
>
> >  tools/bpf/bpftool/btf.c             |  54 +------------
> >  tools/bpf/resolve_btfids/.gitignore |   4 +
> >  tools/bpf/resolve_btfids/main.c     |  58 +-------------
> >  tools/lib/bpf/btf.c                 | 114 +++++++++++++++++++---------
> >  tools/lib/bpf/btf.h                 |   5 +-
> >  tools/lib/bpf/libbpf.map            |   2 +
> >  6 files changed, 89 insertions(+), 148 deletions(-)
> >  create mode 100644 tools/bpf/resolve_btfids/.gitignore
> >
> > --
> > 2.24.1
> >
>
> --
>
> - Arnaldo

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH bpf-next 0/3] Add generic and raw BTF parsing APIs to libbpf
  2020-08-06 17:49   ` Andrii Nakryiko
@ 2020-08-06 18:01     ` Alexei Starovoitov
  0 siblings, 0 replies; 8+ messages in thread
From: Alexei Starovoitov @ 2020-08-06 18:01 UTC (permalink / raw)
  To: Andrii Nakryiko
  Cc: Arnaldo Carvalho de Melo, Andrii Nakryiko, bpf, Networking,
	Alexei Starovoitov, Daniel Borkmann, Kernel Team

On Thu, Aug 6, 2020 at 10:51 AM Andrii Nakryiko
<andrii.nakryiko@gmail.com> wrote:
> > I haven't checked which of the patches, or some in other series caused
> > this on Clear Linux:
> >
> >   21 clearlinux:latest             : FAIL gcc (Clear Linux OS for Intel Architecture) 10.2.1 20200723 releases/gcc-10.2.0-3-g677b80db41, clang ver
> > sion 10.0.1
> >
> >   gcc (Clear Linux OS for Intel Architecture) 10.2.1 20200723 releases/gcc-10.2.0-3-g677b80db41
> >
> >   btf.c: In function 'btf__parse_raw':
> >   btf.c:625:28: error: 'btf' may be used uninitialized in this function [-Werror=maybe-uninitialized]
> >     625 |  return err ? ERR_PTR(err) : btf;
> >         |         ~~~~~~~~~~~~~~~~~~~^~~~~
> >
>
> Yeah, fixed in https://patchwork.ozlabs.org/project/netdev/patch/20200805223359.32109-1-danieltimlee@gmail.com/
>

Thanks for headsup.
The fix will be pushed to bpf tree when net tree gets ffwd-ed to
Linus. Hopefully today.

^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2020-08-06 18:02 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-08-02  1:32 [PATCH bpf-next 0/3] Add generic and raw BTF parsing APIs to libbpf Andrii Nakryiko
2020-08-02  1:32 ` [PATCH bpf-next 1/3] libbpf: add btf__parse_raw() and generic btf__parse() APIs Andrii Nakryiko
2020-08-02  1:32 ` [PATCH bpf-next 2/3] tools/bpftool: use libbpf's btf__parse() API for parsing BTF from file Andrii Nakryiko
2020-08-02  1:32 ` [PATCH bpf-next 3/3] tools/resolve_btfids: use libbpf's btf__parse() API Andrii Nakryiko
2020-08-03 14:45 ` [PATCH bpf-next 0/3] Add generic and raw BTF parsing APIs to libbpf Daniel Borkmann
2020-08-06 17:39 ` Arnaldo Carvalho de Melo
2020-08-06 17:49   ` Andrii Nakryiko
2020-08-06 18:01     ` Alexei Starovoitov

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.