Re: [linux-next:master 4103/11953] arch/arm/kernel/ftrace.c:229:6: warning: no previous prototype for function 'prepare_ftrace_return'

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



, , On Thu, Mar 10, 2022 at 6:04 PM Steven Rostedt <rostedt@xxxxxxxxxxx> wrote:
>
> On Fri, 11 Mar 2022 09:44:11 +0800
> kernel test robot <lkp@xxxxxxxxx> wrote:
>
> > Hi Ard,
> >
> > FYI, the error/warning still remains.
> >
> > tree:   https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git master
> > head:   71941773e143369a73c9c4a3b62fbb60736a1182
> > commit: 41918ec82eb6f80c8b401422f27ca76c85aa0cb7 [4103/11953] ARM: ftrace: enable the graph tracer with the EABI unwinder
> > config: arm-aspeed_g4_defconfig (https://download.01.org/0day-ci/archive/20220311/202203110903.3xDyTUVl-lkp@xxxxxxxxx/config)
> > compiler: clang version 15.0.0 (https://github.com/llvm/llvm-project 276ca87382b8f16a65bddac700202924228982f6)
> > reproduce (this is a W=1 build):
> >         wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
> >         chmod +x ~/bin/make.cross
> >         # install arm cross compiling tool for clang build
> >         # apt-get install binutils-arm-linux-gnueabi
> >         # https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git/commit/?id=41918ec82eb6f80c8b401422f27ca76c85aa0cb7
> >         git remote add linux-next https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git
> >         git fetch --no-tags linux-next master
> >         git checkout 41918ec82eb6f80c8b401422f27ca76c85aa0cb7
> >         # save the config file to linux build tree
> >         mkdir build_dir
> >         COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross W=1 O=build_dir ARCH=arm SHELL=/bin/bash arch/arm/kernel/
> >
> > If you fix the issue, kindly add following tag as appropriate
> > Reported-by: kernel test robot <lkp@xxxxxxxxx>
> >
> > All warnings (new ones prefixed by >>):
> >
> > >> arch/arm/kernel/ftrace.c:229:6: warning: no previous prototype for function 'prepare_ftrace_return' [-Wmissing-prototypes]
> >    void prepare_ftrace_return(unsigned long *parent, unsigned long self_addr,
> >         ^
> >    arch/arm/kernel/ftrace.c:229:1: note: declare 'static' if the function is not intended to be used outside of this translation unit
> >    void prepare_ftrace_return(unsigned long *parent, unsigned long self_addr,
> >    ^
> >    static
> >    1 warning generated.
> >
>
> Hmm, this is only called from assembly code, which doesn't care about
> prototypes. Is there a way to quiet this warning to say "this is called
> only by assembly"?
>
> Or do we just add a useless prototype to shut it up?

So this has come up a few times before, particularly around the usage
in the kernel of `asmlinkage`. This 0day report also only comes up for
W=1 builds, which enable -Wmissing-prototypes (see
scripts/Makefile.extrawarn).

The problem is that `asmlinkage` is not a language keyword; it's a
preprocessor define (see include/linux/linkage.h,
arch/ia64/include/asm/linkage.h, arch/x86/include/asm/linkage.h), so
the compiler has no idea that this function is only called from
assembly only. The warning is meant to catch implicit defines
(-Wimplicit-function-declaration) where the signature the caller is
expecting doesn't match the callee's actual definition (because the
callee wasn't declared in a shared header).

I think IF we had a function attribute added to the compiler that
disabled -Wmissing-prototype warnings just for that definition, then
we could do something like:

#define asmlinkage CPP_ASMLINKAGE \
  __attribute__((no_wmissing_prototypes,error( \
  "Called an asmlinkage function from C; remove " \
  "asmlinkage or dont call this fn"))

or something.  We wouldn't be able to always enable
-Wmissing-prototypes until we had such an fn attr though, due to cases
like this. I think -Wmissing-prototypes is still worthwhile, and that
Arnd previously mentioned interest in this warning.

For now, I think it's worth forward declaring the function, in the .c
file (rather than a header) with a comment that this is expected to be
called from asm only. If that ever changes, then the declaration can
be moved to a header.
-- 
Thanks,
~Nick Desaulniers




[Index of Archives]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [IETF Annouce]     [Bugtraq]     [Linux OMAP]     [Linux MIPS]     [eCos]     [Asterisk Internet PBX]     [Linux API]

  Powered by Linux