* [PATCH bpf-next v1 1/2] selftests/bpf: Add missing system defines for mips
2024-07-21 7:50 [PATCH bpf-next v1 0/2] selftests/bpf: Add support for MIPS systems Tony Ambardar
@ 2024-07-21 7:50 ` Tony Ambardar
2024-07-21 7:50 ` [PATCH bpf-next v1 2/2] selftests/bpf: Fix error linking uprobe_multi on mips Tony Ambardar
2024-07-23 0:13 ` [PATCH bpf-next v2 0/2] selftests/bpf: Add support for MIPS systems Tony Ambardar
2 siblings, 0 replies; 9+ messages in thread
From: Tony Ambardar @ 2024-07-21 7:50 UTC (permalink / raw)
To: bpf
Cc: Tony Ambardar, linux-kselftest, Alexei Starovoitov,
Daniel Borkmann, Andrii Nakryiko, Martin KaFai Lau,
Eduard Zingerman, Song Liu, Yonghong Song, John Fastabend,
KP Singh, Stanislav Fomichev, Hao Luo, Jiri Olsa, Mykola Lysenko,
Shuah Khan
Update get_sys_includes in Makefile with missing MIPS-related definitions
to fix many, many compilation errors building selftests/bpf. The following
added defines drive conditional logic in system headers for word-size and
endianness selection:
MIPSEL, MIPSEB
_MIPS_SZPTR
_MIPS_SZLONG
_MIPS_SIM, _ABIO32, _ABIN32, _ABI64
Signed-off-by: Tony Ambardar <tony.ambardar@gmail.com>
---
tools/testing/selftests/bpf/Makefile | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/tools/testing/selftests/bpf/Makefile b/tools/testing/selftests/bpf/Makefile
index 05b234248b38..a9c447c63fee 100644
--- a/tools/testing/selftests/bpf/Makefile
+++ b/tools/testing/selftests/bpf/Makefile
@@ -396,7 +396,8 @@ define get_sys_includes
$(shell $(1) $(2) -v -E - </dev/null 2>&1 \
| sed -n '/<...> search starts here:/,/End of search list./{ s| \(/.*\)|-idirafter \1|p }') \
$(shell $(1) $(2) -dM -E - </dev/null | grep '__riscv_xlen ' | awk '{printf("-D__riscv_xlen=%d -D__BITS_PER_LONG=%d", $$3, $$3)}') \
-$(shell $(1) $(2) -dM -E - </dev/null | grep '__loongarch_grlen ' | awk '{printf("-D__BITS_PER_LONG=%d", $$3)}')
+$(shell $(1) $(2) -dM -E - </dev/null | grep '__loongarch_grlen ' | awk '{printf("-D__BITS_PER_LONG=%d", $$3)}') \
+$(shell $(1) $(2) -dM -E - </dev/null | grep -E 'MIPS(EL|EB)|_MIPS_SZ(PTR|LONG) |_MIPS_SIM |_ABI(O32|N32|64) ' | awk '{printf("-D%s=%s ", $$2, $$3)}')
endef
# Determine target endianness.
--
2.34.1
^ permalink raw reply related [flat|nested] 9+ messages in thread* [PATCH bpf-next v1 2/2] selftests/bpf: Fix error linking uprobe_multi on mips
2024-07-21 7:50 [PATCH bpf-next v1 0/2] selftests/bpf: Add support for MIPS systems Tony Ambardar
2024-07-21 7:50 ` [PATCH bpf-next v1 1/2] selftests/bpf: Add missing system defines for mips Tony Ambardar
@ 2024-07-21 7:50 ` Tony Ambardar
2024-07-22 21:22 ` Andrii Nakryiko
2024-07-23 0:13 ` [PATCH bpf-next v2 0/2] selftests/bpf: Add support for MIPS systems Tony Ambardar
2 siblings, 1 reply; 9+ messages in thread
From: Tony Ambardar @ 2024-07-21 7:50 UTC (permalink / raw)
To: bpf
Cc: Tony Ambardar, linux-kselftest, Alexei Starovoitov,
Daniel Borkmann, Andrii Nakryiko, Martin KaFai Lau,
Eduard Zingerman, Song Liu, Yonghong Song, John Fastabend,
KP Singh, Stanislav Fomichev, Hao Luo, Jiri Olsa, Mykola Lysenko,
Shuah Khan
Linking uprobe_multi.c on mips64el fails due to relocation overflows, when
the GOT entries required exceeds the default maximum. Add a specific CFLAGS
(-mxgot) for uprobe_multi.c on MIPS that allows using a larger GOT and
avoids errors such as:
/tmp/ccBTNQzv.o: in function `bench':
uprobe_multi.c:49:(.text+0x1d7720): relocation truncated to fit: R_MIPS_GOT_DISP against `uprobe_multi_func_08188'
uprobe_multi.c:49:(.text+0x1d7730): relocation truncated to fit: R_MIPS_GOT_DISP against `uprobe_multi_func_08189'
...
collect2: error: ld returned 1 exit status
Fixes: 519dfeaf5119 ("selftests/bpf: Add uprobe_multi test program")
Signed-off-by: Tony Ambardar <tony.ambardar@gmail.com>
---
tools/testing/selftests/bpf/Makefile | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/tools/testing/selftests/bpf/Makefile b/tools/testing/selftests/bpf/Makefile
index a9c447c63fee..0b4bfbc0ef68 100644
--- a/tools/testing/selftests/bpf/Makefile
+++ b/tools/testing/selftests/bpf/Makefile
@@ -784,9 +784,12 @@ $(OUTPUT)/veristat: $(OUTPUT)/veristat.o
$(call msg,BINARY,,$@)
$(Q)$(CC) $(CFLAGS) $(LDFLAGS) $(filter %.a %.o,$^) $(LDLIBS) -o $@
+# Linking uprobe_multi can fail due to relocation overflows on mips.
+uprobe_multi.c-CFLAGS := $(if $(filter mips, $(ARCH)),-mxgot)
+
$(OUTPUT)/uprobe_multi: uprobe_multi.c
$(call msg,BINARY,,$@)
- $(Q)$(CC) $(CFLAGS) -O0 $(LDFLAGS) $^ $(LDLIBS) -o $@
+ $(Q)$(CC) $(CFLAGS) $($<-CFLAGS) -O0 $(LDFLAGS) $^ $(LDLIBS) -o $@
EXTRA_CLEAN := $(SCRATCH_DIR) $(HOST_SCRATCH_DIR) \
prog_tests/tests.h map_tests/tests.h verifier/tests.h \
--
2.34.1
^ permalink raw reply related [flat|nested] 9+ messages in thread* Re: [PATCH bpf-next v1 2/2] selftests/bpf: Fix error linking uprobe_multi on mips
2024-07-21 7:50 ` [PATCH bpf-next v1 2/2] selftests/bpf: Fix error linking uprobe_multi on mips Tony Ambardar
@ 2024-07-22 21:22 ` Andrii Nakryiko
2024-07-23 0:04 ` Tony Ambardar
0 siblings, 1 reply; 9+ messages in thread
From: Andrii Nakryiko @ 2024-07-22 21:22 UTC (permalink / raw)
To: Tony Ambardar
Cc: bpf, linux-kselftest, Alexei Starovoitov, Daniel Borkmann,
Andrii Nakryiko, Martin KaFai Lau, Eduard Zingerman, Song Liu,
Yonghong Song, John Fastabend, KP Singh, Stanislav Fomichev,
Hao Luo, Jiri Olsa, Mykola Lysenko, Shuah Khan
On Sun, Jul 21, 2024 at 12:51 AM Tony Ambardar <tony.ambardar@gmail.com> wrote:
>
> Linking uprobe_multi.c on mips64el fails due to relocation overflows, when
> the GOT entries required exceeds the default maximum. Add a specific CFLAGS
> (-mxgot) for uprobe_multi.c on MIPS that allows using a larger GOT and
> avoids errors such as:
>
> /tmp/ccBTNQzv.o: in function `bench':
> uprobe_multi.c:49:(.text+0x1d7720): relocation truncated to fit: R_MIPS_GOT_DISP against `uprobe_multi_func_08188'
> uprobe_multi.c:49:(.text+0x1d7730): relocation truncated to fit: R_MIPS_GOT_DISP against `uprobe_multi_func_08189'
> ...
> collect2: error: ld returned 1 exit status
>
> Fixes: 519dfeaf5119 ("selftests/bpf: Add uprobe_multi test program")
> Signed-off-by: Tony Ambardar <tony.ambardar@gmail.com>
> ---
> tools/testing/selftests/bpf/Makefile | 5 ++++-
> 1 file changed, 4 insertions(+), 1 deletion(-)
>
> diff --git a/tools/testing/selftests/bpf/Makefile b/tools/testing/selftests/bpf/Makefile
> index a9c447c63fee..0b4bfbc0ef68 100644
> --- a/tools/testing/selftests/bpf/Makefile
> +++ b/tools/testing/selftests/bpf/Makefile
> @@ -784,9 +784,12 @@ $(OUTPUT)/veristat: $(OUTPUT)/veristat.o
> $(call msg,BINARY,,$@)
> $(Q)$(CC) $(CFLAGS) $(LDFLAGS) $(filter %.a %.o,$^) $(LDLIBS) -o $@
>
> +# Linking uprobe_multi can fail due to relocation overflows on mips.
> +uprobe_multi.c-CFLAGS := $(if $(filter mips, $(ARCH)),-mxgot)
> +
> $(OUTPUT)/uprobe_multi: uprobe_multi.c
> $(call msg,BINARY,,$@)
> - $(Q)$(CC) $(CFLAGS) -O0 $(LDFLAGS) $^ $(LDLIBS) -o $@
> + $(Q)$(CC) $(CFLAGS) $($<-CFLAGS) -O0 $(LDFLAGS) $^ $(LDLIBS) -o $@
this $($<-CFLAGS) approach is fragile, non-obvious and will break. But
there is also no need for this, see:
$(OUTPUT)/bench: LDLIBS += -lm
make allows to override envvars on a per-target basis, so all you
should need is:
$(OUTPUT)/uprobe_multi: CFLAGS += $(if $(filter mips, $(ARCH)),-mxgot)
$(OUTPUT)/uprobe_multi: uprobe_multi.c
... the rest is the same with no change whatsoever ...
>
> EXTRA_CLEAN := $(SCRATCH_DIR) $(HOST_SCRATCH_DIR) \
> prog_tests/tests.h map_tests/tests.h verifier/tests.h \
> --
> 2.34.1
>
^ permalink raw reply [flat|nested] 9+ messages in thread* Re: [PATCH bpf-next v1 2/2] selftests/bpf: Fix error linking uprobe_multi on mips
2024-07-22 21:22 ` Andrii Nakryiko
@ 2024-07-23 0:04 ` Tony Ambardar
0 siblings, 0 replies; 9+ messages in thread
From: Tony Ambardar @ 2024-07-23 0:04 UTC (permalink / raw)
To: Andrii Nakryiko
Cc: bpf, linux-kselftest, Alexei Starovoitov, Daniel Borkmann,
Andrii Nakryiko, Martin KaFai Lau, Eduard Zingerman, Song Liu,
Yonghong Song, John Fastabend, KP Singh, Stanislav Fomichev,
Hao Luo, Jiri Olsa, Mykola Lysenko, Shuah Khan
On Mon, Jul 22, 2024 at 02:22:53PM -0700, Andrii Nakryiko wrote:
> On Sun, Jul 21, 2024 at 12:51 AM Tony Ambardar <tony.ambardar@gmail.com> wrote:
[...]
> > --- a/tools/testing/selftests/bpf/Makefile
> > +++ b/tools/testing/selftests/bpf/Makefile
> > @@ -784,9 +784,12 @@ $(OUTPUT)/veristat: $(OUTPUT)/veristat.o
> > $(call msg,BINARY,,$@)
> > $(Q)$(CC) $(CFLAGS) $(LDFLAGS) $(filter %.a %.o,$^) $(LDLIBS) -o $@
> >
> > +# Linking uprobe_multi can fail due to relocation overflows on mips.
> > +uprobe_multi.c-CFLAGS := $(if $(filter mips, $(ARCH)),-mxgot)
> > +
> > $(OUTPUT)/uprobe_multi: uprobe_multi.c
> > $(call msg,BINARY,,$@)
> > - $(Q)$(CC) $(CFLAGS) -O0 $(LDFLAGS) $^ $(LDLIBS) -o $@
> > + $(Q)$(CC) $(CFLAGS) $($<-CFLAGS) -O0 $(LDFLAGS) $^ $(LDLIBS) -o $@
>
> this $($<-CFLAGS) approach is fragile, non-obvious and will break. But
> there is also no need for this, see:
>
> $(OUTPUT)/bench: LDLIBS += -lm
>
> make allows to override envvars on a per-target basis, so all you
> should need is:
>
>
> $(OUTPUT)/uprobe_multi: CFLAGS += $(if $(filter mips, $(ARCH)),-mxgot)
> $(OUTPUT)/uprobe_multi: uprobe_multi.c
> ... the rest is the same with no change whatsoever ...
>
Great suggestion, thanks for pointing that out! I'll update and send v2.
> >
> > EXTRA_CLEAN := $(SCRATCH_DIR) $(HOST_SCRATCH_DIR) \
> > prog_tests/tests.h map_tests/tests.h verifier/tests.h \
> > --
> > 2.34.1
> >
^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH bpf-next v2 0/2] selftests/bpf: Add support for MIPS systems
2024-07-21 7:50 [PATCH bpf-next v1 0/2] selftests/bpf: Add support for MIPS systems Tony Ambardar
2024-07-21 7:50 ` [PATCH bpf-next v1 1/2] selftests/bpf: Add missing system defines for mips Tony Ambardar
2024-07-21 7:50 ` [PATCH bpf-next v1 2/2] selftests/bpf: Fix error linking uprobe_multi on mips Tony Ambardar
@ 2024-07-23 0:13 ` Tony Ambardar
2024-07-23 0:13 ` [PATCH bpf-next v2 1/2] selftests/bpf: Add missing system defines for mips Tony Ambardar
2024-07-23 0:13 ` [PATCH bpf-next v2 2/2] selftests/bpf: Fix error linking uprobe_multi on mips Tony Ambardar
2 siblings, 2 replies; 9+ messages in thread
From: Tony Ambardar @ 2024-07-23 0:13 UTC (permalink / raw)
To: bpf
Cc: Tony Ambardar, linux-kselftest, Alexei Starovoitov,
Daniel Borkmann, Andrii Nakryiko, Martin KaFai Lau,
Eduard Zingerman, Song Liu, Yonghong Song, John Fastabend,
KP Singh, Stanislav Fomichev, Hao Luo, Jiri Olsa, Mykola Lysenko,
Shuah Khan
From: Tony Ambardar <tony.ambardar@gmail.com>
Hello,
This series includes two fixes to support builds targeting MIPS systems.
The patches have been tested both with the kernel-patches/bpf CI and
locally using mips64el-gcc/musl-libc and QEMU with an OpenWrt rootfs.
Patch 1 adds support for MIPS system includes when compiling BPF.
Patch 2 fixes a MIPS GOT issue when linking uprobe_multi.
Feedback and suggestions for improvement are welcome!
Thanks,
Tony
v1->v2:
- improve CFLAGS handling per Andrii's suggestion
Tony Ambardar (2):
selftests/bpf: Add missing system defines for mips
selftests/bpf: Fix error linking uprobe_multi on mips
tools/testing/selftests/bpf/Makefile | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
--
2.34.1
^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH bpf-next v2 1/2] selftests/bpf: Add missing system defines for mips
2024-07-23 0:13 ` [PATCH bpf-next v2 0/2] selftests/bpf: Add support for MIPS systems Tony Ambardar
@ 2024-07-23 0:13 ` Tony Ambardar
2024-07-23 20:20 ` patchwork-bot+netdevbpf
2024-07-23 0:13 ` [PATCH bpf-next v2 2/2] selftests/bpf: Fix error linking uprobe_multi on mips Tony Ambardar
1 sibling, 1 reply; 9+ messages in thread
From: Tony Ambardar @ 2024-07-23 0:13 UTC (permalink / raw)
To: bpf
Cc: Tony Ambardar, linux-kselftest, Alexei Starovoitov,
Daniel Borkmann, Andrii Nakryiko, Martin KaFai Lau,
Eduard Zingerman, Song Liu, Yonghong Song, John Fastabend,
KP Singh, Stanislav Fomichev, Hao Luo, Jiri Olsa, Mykola Lysenko,
Shuah Khan
From: Tony Ambardar <tony.ambardar@gmail.com>
Update get_sys_includes in Makefile with missing MIPS-related definitions
to fix many, many compilation errors building selftests/bpf. The following
added defines drive conditional logic in system headers for word-size and
endianness selection:
MIPSEL, MIPSEB
_MIPS_SZPTR
_MIPS_SZLONG
_MIPS_SIM, _ABIO32, _ABIN32, _ABI64
Signed-off-by: Tony Ambardar <tony.ambardar@gmail.com>
---
tools/testing/selftests/bpf/Makefile | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/tools/testing/selftests/bpf/Makefile b/tools/testing/selftests/bpf/Makefile
index 3b638069446d..11fdf126cb7c 100644
--- a/tools/testing/selftests/bpf/Makefile
+++ b/tools/testing/selftests/bpf/Makefile
@@ -396,7 +396,8 @@ define get_sys_includes
$(shell $(1) $(2) -v -E - </dev/null 2>&1 \
| sed -n '/<...> search starts here:/,/End of search list./{ s| \(/.*\)|-idirafter \1|p }') \
$(shell $(1) $(2) -dM -E - </dev/null | grep '__riscv_xlen ' | awk '{printf("-D__riscv_xlen=%d -D__BITS_PER_LONG=%d", $$3, $$3)}') \
-$(shell $(1) $(2) -dM -E - </dev/null | grep '__loongarch_grlen ' | awk '{printf("-D__BITS_PER_LONG=%d", $$3)}')
+$(shell $(1) $(2) -dM -E - </dev/null | grep '__loongarch_grlen ' | awk '{printf("-D__BITS_PER_LONG=%d", $$3)}') \
+$(shell $(1) $(2) -dM -E - </dev/null | grep -E 'MIPS(EL|EB)|_MIPS_SZ(PTR|LONG) |_MIPS_SIM |_ABI(O32|N32|64) ' | awk '{printf("-D%s=%s ", $$2, $$3)}')
endef
# Determine target endianness.
--
2.34.1
^ permalink raw reply related [flat|nested] 9+ messages in thread* Re: [PATCH bpf-next v2 1/2] selftests/bpf: Add missing system defines for mips
2024-07-23 0:13 ` [PATCH bpf-next v2 1/2] selftests/bpf: Add missing system defines for mips Tony Ambardar
@ 2024-07-23 20:20 ` patchwork-bot+netdevbpf
0 siblings, 0 replies; 9+ messages in thread
From: patchwork-bot+netdevbpf @ 2024-07-23 20:20 UTC (permalink / raw)
To: Tony Ambardar
Cc: bpf, linux-kselftest, ast, daniel, andrii, martin.lau, eddyz87,
song, yonghong.song, john.fastabend, kpsingh, sdf, haoluo, jolsa,
mykolal, shuah
Hello:
This series was applied to bpf/bpf-next.git (master)
by Andrii Nakryiko <andrii@kernel.org>:
On Mon, 22 Jul 2024 17:13:28 -0700 you wrote:
> From: Tony Ambardar <tony.ambardar@gmail.com>
>
> Update get_sys_includes in Makefile with missing MIPS-related definitions
> to fix many, many compilation errors building selftests/bpf. The following
> added defines drive conditional logic in system headers for word-size and
> endianness selection:
>
> [...]
Here is the summary with links:
- [bpf-next,v2,1/2] selftests/bpf: Add missing system defines for mips
https://git.kernel.org/bpf/bpf-next/c/84b4e873b10a
- [bpf-next,v2,2/2] selftests/bpf: Fix error linking uprobe_multi on mips
https://git.kernel.org/bpf/bpf-next/c/64d50da31564
You are awesome, thank you!
--
Deet-doot-dot, I am a bot.
https://korg.docs.kernel.org/patchwork/pwbot.html
^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH bpf-next v2 2/2] selftests/bpf: Fix error linking uprobe_multi on mips
2024-07-23 0:13 ` [PATCH bpf-next v2 0/2] selftests/bpf: Add support for MIPS systems Tony Ambardar
2024-07-23 0:13 ` [PATCH bpf-next v2 1/2] selftests/bpf: Add missing system defines for mips Tony Ambardar
@ 2024-07-23 0:13 ` Tony Ambardar
1 sibling, 0 replies; 9+ messages in thread
From: Tony Ambardar @ 2024-07-23 0:13 UTC (permalink / raw)
To: bpf
Cc: Tony Ambardar, linux-kselftest, Alexei Starovoitov,
Daniel Borkmann, Andrii Nakryiko, Martin KaFai Lau,
Eduard Zingerman, Song Liu, Yonghong Song, John Fastabend,
KP Singh, Stanislav Fomichev, Hao Luo, Jiri Olsa, Mykola Lysenko,
Shuah Khan
From: Tony Ambardar <tony.ambardar@gmail.com>
Linking uprobe_multi.c on mips64el fails due to relocation overflows, when
the GOT entries required exceeds the default maximum. Add a specific CFLAGS
(-mxgot) for uprobe_multi.c on MIPS that allows using a larger GOT and
avoids errors such as:
/tmp/ccBTNQzv.o: in function `bench':
uprobe_multi.c:49:(.text+0x1d7720): relocation truncated to fit: R_MIPS_GOT_DISP against `uprobe_multi_func_08188'
uprobe_multi.c:49:(.text+0x1d7730): relocation truncated to fit: R_MIPS_GOT_DISP against `uprobe_multi_func_08189'
...
collect2: error: ld returned 1 exit status
Fixes: 519dfeaf5119 ("selftests/bpf: Add uprobe_multi test program")
Signed-off-by: Tony Ambardar <tony.ambardar@gmail.com>
---
tools/testing/selftests/bpf/Makefile | 2 ++
1 file changed, 2 insertions(+)
diff --git a/tools/testing/selftests/bpf/Makefile b/tools/testing/selftests/bpf/Makefile
index 11fdf126cb7c..60a07605a162 100644
--- a/tools/testing/selftests/bpf/Makefile
+++ b/tools/testing/selftests/bpf/Makefile
@@ -785,6 +785,8 @@ $(OUTPUT)/veristat: $(OUTPUT)/veristat.o
$(call msg,BINARY,,$@)
$(Q)$(CC) $(CFLAGS) $(LDFLAGS) $(filter %.a %.o,$^) $(LDLIBS) -o $@
+# Linking uprobe_multi can fail due to relocation overflows on mips.
+$(OUTPUT)/uprobe_multi: CFLAGS += $(if $(filter mips, $(ARCH)),-mxgot)
$(OUTPUT)/uprobe_multi: uprobe_multi.c
$(call msg,BINARY,,$@)
$(Q)$(CC) $(CFLAGS) -O0 $(LDFLAGS) $^ $(LDLIBS) -o $@
--
2.34.1
^ permalink raw reply related [flat|nested] 9+ messages in thread