Skip to content

Commit

Permalink
tools/libbpf: improve the pr_debug statements to contain section numbers
Browse files Browse the repository at this point in the history
While debugging a bpf ELF loading issue, I needed to correlate the
ELF section number with the failed relocation section reference.
Thus, add section numbers/index to the pr_debug.

In debug mode, also print section that were skipped.  This helped
me identify that a section (.eh_frame) was skipped, and this was
the reason the relocation section (.rel.eh_frame) could not find
that section number.

The section numbers corresponds to the readelf tools Section Headers [Nr].

Signed-off-by: Jesper Dangaard Brouer <brouer@redhat.com>
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
  • Loading branch information
Jesper Dangaard Brouer authored and Daniel Borkmann committed Feb 8, 2018
1 parent 8c88181 commit 077c066
Showing 1 changed file with 13 additions and 12 deletions.
25 changes: 13 additions & 12 deletions tools/lib/bpf/libbpf.c
Original file line number Diff line number Diff line change
Expand Up @@ -319,8 +319,8 @@ bpf_program__init(void *data, size_t size, char *section_name, int idx,

prog->section_name = strdup(section_name);
if (!prog->section_name) {
pr_warning("failed to alloc name for prog under section %s\n",
section_name);
pr_warning("failed to alloc name for prog under section(%d) %s\n",
idx, section_name);
goto errout;
}

Expand Down Expand Up @@ -763,29 +763,29 @@ static int bpf_object__elf_collect(struct bpf_object *obj)

idx++;
if (gelf_getshdr(scn, &sh) != &sh) {
pr_warning("failed to get section header from %s\n",
obj->path);
pr_warning("failed to get section(%d) header from %s\n",
idx, obj->path);
err = -LIBBPF_ERRNO__FORMAT;
goto out;
}

name = elf_strptr(elf, ep->e_shstrndx, sh.sh_name);
if (!name) {
pr_warning("failed to get section name from %s\n",
obj->path);
pr_warning("failed to get section(%d) name from %s\n",
idx, obj->path);
err = -LIBBPF_ERRNO__FORMAT;
goto out;
}

data = elf_getdata(scn, 0);
if (!data) {
pr_warning("failed to get section data from %s(%s)\n",
name, obj->path);
pr_warning("failed to get section(%d) data from %s(%s)\n",
idx, name, obj->path);
err = -LIBBPF_ERRNO__FORMAT;
goto out;
}
pr_debug("section %s, size %ld, link %d, flags %lx, type=%d\n",
name, (unsigned long)data->d_size,
pr_debug("section(%d) %s, size %ld, link %d, flags %lx, type=%d\n",
idx, name, (unsigned long)data->d_size,
(int)sh.sh_link, (unsigned long)sh.sh_flags,
(int)sh.sh_type);

Expand Down Expand Up @@ -840,6 +840,8 @@ static int bpf_object__elf_collect(struct bpf_object *obj)
obj->efile.reloc[n].shdr = sh;
obj->efile.reloc[n].data = data;
}
} else {
pr_debug("skip section(%d) %s\n", idx, name);
}
if (err)
goto out;
Expand Down Expand Up @@ -1119,8 +1121,7 @@ static int bpf_object__collect_reloc(struct bpf_object *obj)

prog = bpf_object__find_prog_by_idx(obj, idx);
if (!prog) {
pr_warning("relocation failed: no %d section\n",
idx);
pr_warning("relocation failed: no section(%d)\n", idx);
return -LIBBPF_ERRNO__RELOC;
}

Expand Down

0 comments on commit 077c066

Please sign in to comment.