Re: [PATCH] MIPS: tools: relocs: Ship a definition of R_MIPS_PC32
From: Nathan Chancellor
Date: Mon Feb 02 2026 - 18:07:36 EST
On Mon, Feb 02, 2026 at 10:17:53AM +0100, Ard Biesheuvel wrote:
>
> On Mon, 2 Feb 2026, at 05:16, Yao Zi wrote:
> > R_MIPS_PC32 is a GNU extension, its definition is available in glibc
> > only since 2.39 (released in 2024), and not available in musl libc yet.
> > Provide our own definition for R_MIPS_PC32 and use it if necessary to
> > fix relocs tool building on musl and older glibc systems.
> >
> > Fixes: ff79d31eb536 ("mips: Add support for PC32 relocations in vmlinux")
> > Signed-off-by: Yao Zi <me@xxxxxxxx>
>
> Thanks for fixing this.
>
> It does imply that the subsequent kallsyms patch will result in 32-bit MIPS no longer being buildable with older toolchains if CONFIG_RELOCATABLE=y.
Doing a little research, it seems like R_MIPS_PC32 has been recognized
by the toolchains for a long time, as I found these commits in binutils:
https://sourceware.org/git/?p=binutils-gdb.git;a=commit;h=092dcd755dcdcf664b25a7011fd15957f124c29f
https://sourceware.org/git/?p=binutils-gdb.git;a=commit;h=b47468a6dbd1b54c44c2edc0f7db64a073d894ea
It seems like this relocation was not documented in glibc until
recently, along with many other relocation types:
https://sourceware.org/git/gitweb.cgi?p=glibc.git;h=a6e8ceb3bb532236e1eecd0bb0ee8e4b7fd5ff7c
I interpret that to mean that the kallsyms patch should work fine since
the toolchain can handle these relocations? It is just building the
relocs tool against an older glibc or musl that does not have the
R_MIPS_PC32 definition that is broken? Or am I misunderstanding
something?
If we get an obvious build breakage report down the road, we can always
add another forward fix or back out of the changes altogether.
> Not sure if that is an issue, but it needs calling out. Nathan, any thoughts?
>
> > ---
> > arch/mips/boot/tools/relocs.h | 7 +++++++
> > 1 file changed, 7 insertions(+)
> >
> > diff --git a/arch/mips/boot/tools/relocs.h b/arch/mips/boot/tools/relocs.h
> > index 607ff0103064..942981d9ce73 100644
> > --- a/arch/mips/boot/tools/relocs.h
> > +++ b/arch/mips/boot/tools/relocs.h
> > @@ -29,6 +29,13 @@ void die(char *fmt, ...);
> > #define R_MIPS_PC26_S2 61
> > #endif
> >
> > +/*
> > + * GNU extension that available in glibc only since 2023, not
> > available on musl.
> > + */
> > +#ifndef R_MIPS_PC32
> > +#define R_MIPS_PC32 248
> > +#endif
> > +
> > #define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0]))
> >
> > enum symtype {
> > --
> > 2.52.0