Re: Build: arm rustgcc unknown argument '-mno-fdpic'

From: Miguel Ojeda
Date: Tue Apr 15 2025 - 11:40:02 EST


On Tue, Apr 15, 2025 at 1:40 PM Naresh Kamboju
<naresh.kamboju@xxxxxxxxxx> wrote:
>
> On Tue, 8 Apr 2025 at 00:07, Miguel Ojeda <ojeda@xxxxxxxxxx> wrote:
> >
> > On Mon, 07 Apr 2025 22:58:02 +0530 Naresh Kamboju <naresh.kamboju@xxxxxxxxxx> wrote:
> > >
> > > Regressions on arm build with config rustgcc-lkftconfig-kselftest on the
> > > Linux mainline and next failed with CONFIG_RUST=y enabled.
> >
> > > Bad: next-20250327
> > > Good: next-20250326
> >
> > > Unable to generate bindings: clang diagnosed error: error: unknown
> > > argument: '-mno-fdpic'
> >
> > I assume this is the arm support, i.e. commit ccb8ce526807 ("ARM: 9441/1:
> > rust: Enable Rust support for ARMv7").
> >
> > Clang does not seem to support `-mno-fdpic`, thus you probably need to add it to
> > `bindgen_skip_c_flags` in `rust/Makefile` so that it gets skipped when the C
> > compiler is GCC.
> >
> > If you do so, please double-check if the flag could potentially alter the ABI in
> > a way that `bindgen` would generate the wrong bindings.
>
> I tested this idea and it works but I don't know enough about
> rust to double-check if the flag could potentially alter the
> ABI in a way that `bindgen` would generate the wrong bindings.

Yeah, it would be nice to have someone knowledgeable about the
arch/GCC/flag confirm or not -- I don't think Rust knowledge is
needed, i.e. it is mostly about how GCC behaves with/without the flag
and vs. Clang (since `bindgen` uses libclang to parse code).

The original commit adding it to arm (and similar ones for sh and xtensa) says:

When building with an arm-*-uclinuxfdpiceabi toolchain, the FDPIC ABI is
enabled by default but should not be used to build the kernel.

So it sounds like it is only an issue for particular toolchains/targets anyway?

Cc'ing Ben who introduced it, and the arm port GCC maintainers in case
they may be able to tell us more -- thanks in advance, and sorry for
any potential noise!

Cheers,
Miguel