Thread (25 messages) 25 messages, 6 authors, 2023-01-23

Re: [bpf-next v2] bpf: drop deprecated bpf_jit_enable == 2

From: Quentin Monnet <hidden>
Date: 2023-01-17 14:41:15
Also in: bpf, linux-mips, linux-riscv, linux-s390, loongarch, netdev, sparclinux

2023-01-17 14:25 UTC+0000 ~ Christophe Leroy [off-list ref]

Le 17/01/2023 à 15:18, Tonghao Zhang a écrit :
quoted
quoted
On Jan 17, 2023, at 7:36 PM, Christophe Leroy [off-list ref] wrote:



Le 17/01/2023 à 08:30, Christophe Leroy a écrit :
quoted

Le 17/01/2023 à 06:30, Tonghao Zhang a écrit :
quoted
quoted
On Jan 9, 2023, at 4:15 PM, Christophe Leroy
[off-list ref] wrote:
[...]
quoted
quoted
quoted
quoted
quoted
Sure I will try to test bpftool again in the coming days.

Previous discussion about that subject is here:
https://patchwork.kernel.org/project/linux-riscv/patch/20210415093250.3391257-1-Jianlin.Lv@arm.com/#24176847=
Christophe, apologies from dropping the discussion the last time, it
seems your last message on that thread didn't make it to my inbox at the
time :/. Thanks a lot for looking into that again!
quoted
quoted
quoted
quoted
Hi Christophe
Any progress? We discuss to deprecate the bpf_jit_enable == 2 in 2021,
but bpftool can not run on powerpc.
Now can we fix this issue?
Hi Tong,

I have started to look at it but I don't have any fruitfull feedback yet.
Hi Again,

I tested again, the problem is still the same as one year ago:

root@vgoip:~# ./bpftool prog
libbpf: elf: endianness mismatch in pid_iter_bpf.
It seem to be not right ehdr->e_ident[EI_DATA]. Do we can print the real value?
/*
  * e_ident[EI_DATA]
  */
#define ELFDATANONE     0
#define ELFDATA2LSB     1
#define ELFDATA2MSB     2
#define ELFDATANUM      3

bpf_object__elf_init:
obj->efile.ehdr = ehdr = elf64_getehdr(elf);
quoted
libbpf: failed to initialize skeleton BPF object 'pid_iter_bpf': -4003
Error: failed to open PID iterator skeleton

root@vgoip:~# uname -a
Linux vgoip 6.2.0-rc3-02596-g1c2c9c13e256 #242 PREEMPT Tue Jan 17
09:36:08 CET 2023 ppc GNU/Linux
On my pc, elf is little endian.
# readelf -h tools/bpf/bpftool/pid_iter.bpf.o
ELF Header:
   Magic:   7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00
   Class:                             ELF64
   Data:                              2's complement, little endian # x86_64
   Version:                           1 (current)
   OS/ABI:                            UNIX - System V
   ABI Version:                       0
   Type:                              REL (Relocatable file)
   Machine:                           Linux BPF
   Version:                           0x1
   Entry point address:               0x0
   Start of program headers:          0 (bytes into file)
   Start of section headers:          64832 (bytes into file)
   Flags:                             0x0
   Size of this header:               64 (bytes)
   Size of program headers:           0 (bytes)
   Number of program headers:         0
   Size of section headers:           64 (bytes)
   Number of section headers:         13
   Section header string table index: 1
Yes, must be something wrong with the build, I get same as you :

$ LANG= readelf -h pid_iter.bpf.o
ELF Header:
   Magic:   7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00
   Class:                             ELF64
   Data:                              2's complement, little endian
   Version:                           1 (current)
   OS/ABI:                            UNIX - System V
   ABI Version:                       0
   Type:                              REL (Relocatable file)
   Machine:                           Linux BPF
   Version:                           0x1
   Entry point address:               0x0
   Start of program headers:          0 (bytes into file)
   Start of section headers:          34704 (bytes into file)
   Flags:                             0x0
   Size of this header:               64 (bytes)
   Size of program headers:           0 (bytes)
   Number of program headers:         0
   Size of section headers:           64 (bytes)
   Number of section headers:         13
   Section header string table index: 1


Whereas I expect the same as bpftool I suppose, which is :

$ LANG= readelf -h bpftool
ELF Header:
   Magic:   7f 45 4c 46 01 02 01 00 00 00 00 00 00 00 00 00
   Class:                             ELF32
   Data:                              2's complement, big endian
   Version:                           1 (current)
   OS/ABI:                            UNIX - System V
   ABI Version:                       0
   Type:                              EXEC (Executable file)
   Machine:                           PowerPC
   Version:                           0x1
   Entry point address:               0x100027d0
   Start of program headers:          52 (bytes into file)
   Start of section headers:          1842896 (bytes into file)
   Flags:                             0x0
   Size of this header:               52 (bytes)
   Size of program headers:           32 (bytes)
   Number of program headers:         9
   Size of section headers:           40 (bytes)
   Number of section headers:         39
   Section header string table index: 38
pid_iter.bpf.o should be generated from that command in bpftool's Makefile:

	$(OUTPUT)%.bpf.o: skeleton/%.bpf.c $(OUTPUT)vmlinux.h \
			$(LIBBPF_BOOTSTRAP)
		$(QUIET_CLANG)$(CLANG) \
			-I$(or $(OUTPUT),.) \
			-I$(srctree)/tools/include/uapi/ \
			-I$(LIBBPF_BOOTSTRAP_INCLUDE) \
			-g -O2 -Wall -fno-stack-protector \
			-target bpf -c $< -o $@

My understanding is that "-target bpf" is supposed to pick the
endianness for the host (see "llc --version | grep bpf". If that's not
the case, could you please try to turn that into '-target bpfeb' in the
Makefile instead? I'd be curious to see if it helps.

Quentin
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help