Skip to content

Commit 4ce16dd

Browse files
mykyta5anakryiko
authored andcommitted
libbpf: Stringify errno in log messages in the remaining code
Convert numeric error codes into the string representations in log messages in the rest of libbpf source files. Signed-off-by: Mykyta Yatsenko <[email protected]> Signed-off-by: Andrii Nakryiko <[email protected]> Link: https://lore.kernel.org/bpf/[email protected]
1 parent af8380d commit 4ce16dd

File tree

6 files changed

+56
-53
lines changed

6 files changed

+56
-53
lines changed

tools/lib/bpf/elf.c

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@
2424

2525
int elf_open(const char *binary_path, struct elf_fd *elf_fd)
2626
{
27-
char errmsg[STRERR_BUFSIZE];
2827
int fd, ret;
2928
Elf *elf;
3029

@@ -38,8 +37,7 @@ int elf_open(const char *binary_path, struct elf_fd *elf_fd)
3837
fd = open(binary_path, O_RDONLY | O_CLOEXEC);
3938
if (fd < 0) {
4039
ret = -errno;
41-
pr_warn("elf: failed to open %s: %s\n", binary_path,
42-
libbpf_strerror_r(ret, errmsg, sizeof(errmsg)));
40+
pr_warn("elf: failed to open %s: %s\n", binary_path, errstr(ret));
4341
return ret;
4442
}
4543
elf = elf_begin(fd, ELF_C_READ_MMAP, NULL);

tools/lib/bpf/features.c

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,6 @@ static int probe_kern_prog_name(int token_fd)
4747

4848
static int probe_kern_global_data(int token_fd)
4949
{
50-
char *cp, errmsg[STRERR_BUFSIZE];
5150
struct bpf_insn insns[] = {
5251
BPF_LD_MAP_VALUE(BPF_REG_1, 0, 16),
5352
BPF_ST_MEM(BPF_DW, BPF_REG_1, 0, 42),
@@ -67,9 +66,8 @@ static int probe_kern_global_data(int token_fd)
6766
map = bpf_map_create(BPF_MAP_TYPE_ARRAY, "libbpf_global", sizeof(int), 32, 1, &map_opts);
6867
if (map < 0) {
6968
ret = -errno;
70-
cp = libbpf_strerror_r(ret, errmsg, sizeof(errmsg));
71-
pr_warn("Error in %s():%s(%d). Couldn't create simple array map.\n",
72-
__func__, cp, -ret);
69+
pr_warn("Error in %s(): %s. Couldn't create simple array map.\n",
70+
__func__, errstr(ret));
7371
return ret;
7472
}
7573

@@ -267,7 +265,6 @@ static int probe_kern_probe_read_kernel(int token_fd)
267265

268266
static int probe_prog_bind_map(int token_fd)
269267
{
270-
char *cp, errmsg[STRERR_BUFSIZE];
271268
struct bpf_insn insns[] = {
272269
BPF_MOV64_IMM(BPF_REG_0, 0),
273270
BPF_EXIT_INSN(),
@@ -285,9 +282,8 @@ static int probe_prog_bind_map(int token_fd)
285282
map = bpf_map_create(BPF_MAP_TYPE_ARRAY, "libbpf_det_bind", sizeof(int), 32, 1, &map_opts);
286283
if (map < 0) {
287284
ret = -errno;
288-
cp = libbpf_strerror_r(ret, errmsg, sizeof(errmsg));
289-
pr_warn("Error in %s():%s(%d). Couldn't create simple array map.\n",
290-
__func__, cp, -ret);
285+
pr_warn("Error in %s(): %s. Couldn't create simple array map.\n",
286+
__func__, errstr(ret));
291287
return ret;
292288
}
293289

@@ -604,7 +600,8 @@ bool feat_supported(struct kern_feature_cache *cache, enum kern_feature_id feat_
604600
} else if (ret == 0) {
605601
WRITE_ONCE(cache->res[feat_id], FEAT_MISSING);
606602
} else {
607-
pr_warn("Detection of kernel %s support failed: %d\n", feat->desc, ret);
603+
pr_warn("Detection of kernel %s support failed: %s\n",
604+
feat->desc, errstr(ret));
608605
WRITE_ONCE(cache->res[feat_id], FEAT_MISSING);
609606
}
610607
}

tools/lib/bpf/gen_loader.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
#include "bpf_gen_internal.h"
1515
#include "skel_internal.h"
1616
#include <asm/byteorder.h>
17+
#include "str_error.h"
1718

1819
#define MAX_USED_MAPS 64
1920
#define MAX_USED_PROGS 32
@@ -393,7 +394,7 @@ int bpf_gen__finish(struct bpf_gen *gen, int nr_progs, int nr_maps)
393394
blob_fd_array_off(gen, i));
394395
emit(gen, BPF_MOV64_IMM(BPF_REG_0, 0));
395396
emit(gen, BPF_EXIT_INSN());
396-
pr_debug("gen: finish %d\n", gen->error);
397+
pr_debug("gen: finish %s\n", errstr(gen->error));
397398
if (!gen->error) {
398399
struct gen_loader_opts *opts = gen->opts;
399400

tools/lib/bpf/linker.c

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
#include "btf.h"
2121
#include "libbpf_internal.h"
2222
#include "strset.h"
23+
#include "str_error.h"
2324

2425
#define BTF_EXTERN_SEC ".extern"
2526

@@ -306,7 +307,7 @@ static int init_output_elf(struct bpf_linker *linker, const char *file)
306307
linker->fd = open(file, O_WRONLY | O_CREAT | O_TRUNC | O_CLOEXEC, 0644);
307308
if (linker->fd < 0) {
308309
err = -errno;
309-
pr_warn("failed to create '%s': %d\n", file, err);
310+
pr_warn("failed to create '%s': %s\n", file, errstr(err));
310311
return err;
311312
}
312313

@@ -560,7 +561,7 @@ static int linker_load_obj_file(struct bpf_linker *linker, const char *filename,
560561
obj->fd = open(filename, O_RDONLY | O_CLOEXEC);
561562
if (obj->fd < 0) {
562563
err = -errno;
563-
pr_warn("failed to open file '%s': %d\n", filename, err);
564+
pr_warn("failed to open file '%s': %s\n", filename, errstr(err));
564565
return err;
565566
}
566567
obj->elf = elf_begin(obj->fd, ELF_C_READ_MMAP, NULL);
@@ -670,7 +671,8 @@ static int linker_load_obj_file(struct bpf_linker *linker, const char *filename,
670671
obj->btf = btf__new(data->d_buf, shdr->sh_size);
671672
err = libbpf_get_error(obj->btf);
672673
if (err) {
673-
pr_warn("failed to parse .BTF from %s: %d\n", filename, err);
674+
pr_warn("failed to parse .BTF from %s: %s\n",
675+
filename, errstr(err));
674676
return err;
675677
}
676678
sec->skipped = true;
@@ -680,7 +682,8 @@ static int linker_load_obj_file(struct bpf_linker *linker, const char *filename,
680682
obj->btf_ext = btf_ext__new(data->d_buf, shdr->sh_size);
681683
err = libbpf_get_error(obj->btf_ext);
682684
if (err) {
683-
pr_warn("failed to parse .BTF.ext from '%s': %d\n", filename, err);
685+
pr_warn("failed to parse .BTF.ext from '%s': %s\n",
686+
filename, errstr(err));
684687
return err;
685688
}
686689
sec->skipped = true;
@@ -2774,14 +2777,14 @@ static int finalize_btf(struct bpf_linker *linker)
27742777

27752778
err = finalize_btf_ext(linker);
27762779
if (err) {
2777-
pr_warn(".BTF.ext generation failed: %d\n", err);
2780+
pr_warn(".BTF.ext generation failed: %s\n", errstr(err));
27782781
return err;
27792782
}
27802783

27812784
opts.btf_ext = linker->btf_ext;
27822785
err = btf__dedup(linker->btf, &opts);
27832786
if (err) {
2784-
pr_warn("BTF dedup failed: %d\n", err);
2787+
pr_warn("BTF dedup failed: %s\n", errstr(err));
27852788
return err;
27862789
}
27872790

@@ -2799,7 +2802,7 @@ static int finalize_btf(struct bpf_linker *linker)
27992802

28002803
err = emit_elf_data_sec(linker, BTF_ELF_SEC, 8, raw_data, raw_sz);
28012804
if (err) {
2802-
pr_warn("failed to write out .BTF ELF section: %d\n", err);
2805+
pr_warn("failed to write out .BTF ELF section: %s\n", errstr(err));
28032806
return err;
28042807
}
28052808

@@ -2811,7 +2814,7 @@ static int finalize_btf(struct bpf_linker *linker)
28112814

28122815
err = emit_elf_data_sec(linker, BTF_EXT_ELF_SEC, 8, raw_data, raw_sz);
28132816
if (err) {
2814-
pr_warn("failed to write out .BTF.ext ELF section: %d\n", err);
2817+
pr_warn("failed to write out .BTF.ext ELF section: %s\n", errstr(err));
28152818
return err;
28162819
}
28172820
}
@@ -2987,7 +2990,7 @@ static int finalize_btf_ext(struct bpf_linker *linker)
29872990
err = libbpf_get_error(linker->btf_ext);
29882991
if (err) {
29892992
linker->btf_ext = NULL;
2990-
pr_warn("failed to parse final .BTF.ext data: %d\n", err);
2993+
pr_warn("failed to parse final .BTF.ext data: %s\n", errstr(err));
29912994
goto out;
29922995
}
29932996

tools/lib/bpf/ringbuf.c

Lines changed: 18 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
#include "libbpf.h"
2222
#include "libbpf_internal.h"
2323
#include "bpf.h"
24+
#include "str_error.h"
2425

2526
struct ring {
2627
ring_buffer_sample_fn sample_cb;
@@ -88,8 +89,8 @@ int ring_buffer__add(struct ring_buffer *rb, int map_fd,
8889
err = bpf_map_get_info_by_fd(map_fd, &info, &len);
8990
if (err) {
9091
err = -errno;
91-
pr_warn("ringbuf: failed to get map info for fd=%d: %d\n",
92-
map_fd, err);
92+
pr_warn("ringbuf: failed to get map info for fd=%d: %s\n",
93+
map_fd, errstr(err));
9394
return libbpf_err(err);
9495
}
9596

@@ -123,8 +124,8 @@ int ring_buffer__add(struct ring_buffer *rb, int map_fd,
123124
tmp = mmap(NULL, rb->page_size, PROT_READ | PROT_WRITE, MAP_SHARED, map_fd, 0);
124125
if (tmp == MAP_FAILED) {
125126
err = -errno;
126-
pr_warn("ringbuf: failed to mmap consumer page for map fd=%d: %d\n",
127-
map_fd, err);
127+
pr_warn("ringbuf: failed to mmap consumer page for map fd=%d: %s\n",
128+
map_fd, errstr(err));
128129
goto err_out;
129130
}
130131
r->consumer_pos = tmp;
@@ -142,8 +143,8 @@ int ring_buffer__add(struct ring_buffer *rb, int map_fd,
142143
tmp = mmap(NULL, (size_t)mmap_sz, PROT_READ, MAP_SHARED, map_fd, rb->page_size);
143144
if (tmp == MAP_FAILED) {
144145
err = -errno;
145-
pr_warn("ringbuf: failed to mmap data pages for map fd=%d: %d\n",
146-
map_fd, err);
146+
pr_warn("ringbuf: failed to mmap data pages for map fd=%d: %s\n",
147+
map_fd, errstr(err));
147148
goto err_out;
148149
}
149150
r->producer_pos = tmp;
@@ -156,8 +157,8 @@ int ring_buffer__add(struct ring_buffer *rb, int map_fd,
156157
e->data.fd = rb->ring_cnt;
157158
if (epoll_ctl(rb->epoll_fd, EPOLL_CTL_ADD, map_fd, e) < 0) {
158159
err = -errno;
159-
pr_warn("ringbuf: failed to epoll add map fd=%d: %d\n",
160-
map_fd, err);
160+
pr_warn("ringbuf: failed to epoll add map fd=%d: %s\n",
161+
map_fd, errstr(err));
161162
goto err_out;
162163
}
163164

@@ -205,7 +206,7 @@ ring_buffer__new(int map_fd, ring_buffer_sample_fn sample_cb, void *ctx,
205206
rb->epoll_fd = epoll_create1(EPOLL_CLOEXEC);
206207
if (rb->epoll_fd < 0) {
207208
err = -errno;
208-
pr_warn("ringbuf: failed to create epoll instance: %d\n", err);
209+
pr_warn("ringbuf: failed to create epoll instance: %s\n", errstr(err));
209210
goto err_out;
210211
}
211212

@@ -458,7 +459,8 @@ static int user_ringbuf_map(struct user_ring_buffer *rb, int map_fd)
458459
err = bpf_map_get_info_by_fd(map_fd, &info, &len);
459460
if (err) {
460461
err = -errno;
461-
pr_warn("user ringbuf: failed to get map info for fd=%d: %d\n", map_fd, err);
462+
pr_warn("user ringbuf: failed to get map info for fd=%d: %s\n",
463+
map_fd, errstr(err));
462464
return err;
463465
}
464466

@@ -474,8 +476,8 @@ static int user_ringbuf_map(struct user_ring_buffer *rb, int map_fd)
474476
tmp = mmap(NULL, rb->page_size, PROT_READ, MAP_SHARED, map_fd, 0);
475477
if (tmp == MAP_FAILED) {
476478
err = -errno;
477-
pr_warn("user ringbuf: failed to mmap consumer page for map fd=%d: %d\n",
478-
map_fd, err);
479+
pr_warn("user ringbuf: failed to mmap consumer page for map fd=%d: %s\n",
480+
map_fd, errstr(err));
479481
return err;
480482
}
481483
rb->consumer_pos = tmp;
@@ -494,8 +496,8 @@ static int user_ringbuf_map(struct user_ring_buffer *rb, int map_fd)
494496
map_fd, rb->page_size);
495497
if (tmp == MAP_FAILED) {
496498
err = -errno;
497-
pr_warn("user ringbuf: failed to mmap data pages for map fd=%d: %d\n",
498-
map_fd, err);
499+
pr_warn("user ringbuf: failed to mmap data pages for map fd=%d: %s\n",
500+
map_fd, errstr(err));
499501
return err;
500502
}
501503

@@ -506,7 +508,7 @@ static int user_ringbuf_map(struct user_ring_buffer *rb, int map_fd)
506508
rb_epoll->events = EPOLLOUT;
507509
if (epoll_ctl(rb->epoll_fd, EPOLL_CTL_ADD, map_fd, rb_epoll) < 0) {
508510
err = -errno;
509-
pr_warn("user ringbuf: failed to epoll add map fd=%d: %d\n", map_fd, err);
511+
pr_warn("user ringbuf: failed to epoll add map fd=%d: %s\n", map_fd, errstr(err));
510512
return err;
511513
}
512514

@@ -531,7 +533,7 @@ user_ring_buffer__new(int map_fd, const struct user_ring_buffer_opts *opts)
531533
rb->epoll_fd = epoll_create1(EPOLL_CLOEXEC);
532534
if (rb->epoll_fd < 0) {
533535
err = -errno;
534-
pr_warn("user ringbuf: failed to create epoll instance: %d\n", err);
536+
pr_warn("user ringbuf: failed to create epoll instance: %s\n", errstr(err));
535537
goto err_out;
536538
}
537539

tools/lib/bpf/usdt.c

Lines changed: 17 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
#include "libbpf_common.h"
2121
#include "libbpf_internal.h"
2222
#include "hashmap.h"
23+
#include "str_error.h"
2324

2425
/* libbpf's USDT support consists of BPF-side state/code and user-space
2526
* state/code working together in concert. BPF-side parts are defined in
@@ -465,8 +466,8 @@ static int parse_vma_segs(int pid, const char *lib_path, struct elf_seg **segs,
465466
goto proceed;
466467

467468
if (!realpath(lib_path, path)) {
468-
pr_warn("usdt: failed to get absolute path of '%s' (err %d), using path as is...\n",
469-
lib_path, -errno);
469+
pr_warn("usdt: failed to get absolute path of '%s' (err %s), using path as is...\n",
470+
lib_path, errstr(-errno));
470471
libbpf_strlcpy(path, lib_path, sizeof(path));
471472
}
472473

@@ -475,8 +476,8 @@ static int parse_vma_segs(int pid, const char *lib_path, struct elf_seg **segs,
475476
f = fopen(line, "re");
476477
if (!f) {
477478
err = -errno;
478-
pr_warn("usdt: failed to open '%s' to get base addr of '%s': %d\n",
479-
line, lib_path, err);
479+
pr_warn("usdt: failed to open '%s' to get base addr of '%s': %s\n",
480+
line, lib_path, errstr(err));
480481
return err;
481482
}
482483

@@ -606,7 +607,8 @@ static int collect_usdt_targets(struct usdt_manager *man, Elf *elf, const char *
606607

607608
err = parse_elf_segs(elf, path, &segs, &seg_cnt);
608609
if (err) {
609-
pr_warn("usdt: failed to process ELF program segments for '%s': %d\n", path, err);
610+
pr_warn("usdt: failed to process ELF program segments for '%s': %s\n",
611+
path, errstr(err));
610612
goto err_out;
611613
}
612614

@@ -708,8 +710,8 @@ static int collect_usdt_targets(struct usdt_manager *man, Elf *elf, const char *
708710
if (vma_seg_cnt == 0) {
709711
err = parse_vma_segs(pid, path, &vma_segs, &vma_seg_cnt);
710712
if (err) {
711-
pr_warn("usdt: failed to get memory segments in PID %d for shared library '%s': %d\n",
712-
pid, path, err);
713+
pr_warn("usdt: failed to get memory segments in PID %d for shared library '%s': %s\n",
714+
pid, path, errstr(err));
713715
goto err_out;
714716
}
715717
}
@@ -1047,8 +1049,8 @@ struct bpf_link *usdt_manager_attach_usdt(struct usdt_manager *man, const struct
10471049

10481050
if (is_new && bpf_map_update_elem(spec_map_fd, &spec_id, &target->spec, BPF_ANY)) {
10491051
err = -errno;
1050-
pr_warn("usdt: failed to set USDT spec #%d for '%s:%s' in '%s': %d\n",
1051-
spec_id, usdt_provider, usdt_name, path, err);
1052+
pr_warn("usdt: failed to set USDT spec #%d for '%s:%s' in '%s': %s\n",
1053+
spec_id, usdt_provider, usdt_name, path, errstr(err));
10521054
goto err_out;
10531055
}
10541056
if (!man->has_bpf_cookie &&
@@ -1058,9 +1060,9 @@ struct bpf_link *usdt_manager_attach_usdt(struct usdt_manager *man, const struct
10581060
pr_warn("usdt: IP collision detected for spec #%d for '%s:%s' in '%s'\n",
10591061
spec_id, usdt_provider, usdt_name, path);
10601062
} else {
1061-
pr_warn("usdt: failed to map IP 0x%lx to spec #%d for '%s:%s' in '%s': %d\n",
1063+
pr_warn("usdt: failed to map IP 0x%lx to spec #%d for '%s:%s' in '%s': %s\n",
10621064
target->abs_ip, spec_id, usdt_provider, usdt_name,
1063-
path, err);
1065+
path, errstr(err));
10641066
}
10651067
goto err_out;
10661068
}
@@ -1076,8 +1078,8 @@ struct bpf_link *usdt_manager_attach_usdt(struct usdt_manager *man, const struct
10761078
target->rel_ip, &opts);
10771079
err = libbpf_get_error(uprobe_link);
10781080
if (err) {
1079-
pr_warn("usdt: failed to attach uprobe #%d for '%s:%s' in '%s': %d\n",
1080-
i, usdt_provider, usdt_name, path, err);
1081+
pr_warn("usdt: failed to attach uprobe #%d for '%s:%s' in '%s': %s\n",
1082+
i, usdt_provider, usdt_name, path, errstr(err));
10811083
goto err_out;
10821084
}
10831085

@@ -1099,8 +1101,8 @@ struct bpf_link *usdt_manager_attach_usdt(struct usdt_manager *man, const struct
10991101
NULL, &opts_multi);
11001102
if (!link->multi_link) {
11011103
err = -errno;
1102-
pr_warn("usdt: failed to attach uprobe multi for '%s:%s' in '%s': %d\n",
1103-
usdt_provider, usdt_name, path, err);
1104+
pr_warn("usdt: failed to attach uprobe multi for '%s:%s' in '%s': %s\n",
1105+
usdt_provider, usdt_name, path, errstr(err));
11041106
goto err_out;
11051107
}
11061108

0 commit comments

Comments
 (0)