[powerpc:next-test 54/220] arch/powerpc/kernel/vdso32/vgettimeofday.c:13:5: warning: no previous prototype for function '__c_kernel_clock_gettime64'

4 messages, 4 authors, 2020-12-07 · open the first message on its own page

[powerpc:next-test 54/220] arch/powerpc/kernel/vdso32/vgettimeofday.c:13:5: warning: no previous prototype for function '__c_kernel_clock_gettime64'

From: kernel test robot <hidden>
Date: 2020-12-04 14:29:16

tree:   https://git.kernel.org/pub/scm/linux/kernel/git/powerpc/linux.git next-test
head:   4e4ed87981c764498942c52004c620bb8f104eac
commit: d0e3fc69d00d1f50d22d6b6acfc555ccda80ad1e [54/220] powerpc/vdso: Provide __kernel_clock_gettime64() on vdso32
config: powerpc64-randconfig-r011-20201204 (attached as .config)
compiler: clang version 12.0.0 (https://github.com/llvm/llvm-project 32c501dd88b62787d3a5ffda7aabcf4650dbe3cd)
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 powerpc64 cross compiling tool for clang build
        # apt-get install binutils-powerpc64-linux-gnu
        # https://git.kernel.org/pub/scm/linux/kernel/git/powerpc/linux.git/commit/?id=d0e3fc69d00d1f50d22d6b6acfc555ccda80ad1e
        git remote add powerpc https://git.kernel.org/pub/scm/linux/kernel/git/powerpc/linux.git
        git fetch --no-tags powerpc next-test
        git checkout d0e3fc69d00d1f50d22d6b6acfc555ccda80ad1e
        # save the attached .config to linux build tree
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross ARCH=powerpc64 

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <redacted>

All warnings (new ones prefixed by >>):

   arch/powerpc/kernel/vdso32/vgettimeofday.c:7:5: error: conflicting types for '__c_kernel_clock_gettime'
   int __c_kernel_clock_gettime(clockid_t clock, struct old_timespec32 *ts,
       ^
   arch/powerpc/include/asm/vdso/gettimeofday.h:183:5: note: previous declaration is here
   int __c_kernel_clock_gettime(clockid_t clock, struct __kernel_timespec *ts,
       ^
quoted
arch/powerpc/kernel/vdso32/vgettimeofday.c:13:5: warning: no previous prototype for function '__c_kernel_clock_gettime64' [-Wmissing-prototypes]
   int __c_kernel_clock_gettime64(clockid_t clock, struct __kernel_timespec *ts,
       ^
   arch/powerpc/kernel/vdso32/vgettimeofday.c:13:1: note: declare 'static' if the function is not intended to be used outside of this translation unit
   int __c_kernel_clock_gettime64(clockid_t clock, struct __kernel_timespec *ts,
   ^
   static 
   arch/powerpc/kernel/vdso32/vgettimeofday.c:25:5: error: conflicting types for '__c_kernel_clock_getres'
   int __c_kernel_clock_getres(clockid_t clock_id, struct old_timespec32 *res,
       ^
   arch/powerpc/include/asm/vdso/gettimeofday.h:185:5: note: previous declaration is here
   int __c_kernel_clock_getres(clockid_t clock_id, struct __kernel_timespec *res,
       ^
   1 warning and 2 errors generated.

vim +/__c_kernel_clock_gettime64 +13 arch/powerpc/kernel/vdso32/vgettimeofday.c

    12	
  > 13	int __c_kernel_clock_gettime64(clockid_t clock, struct __kernel_timespec *ts,
    14				       const struct vdso_data *vd)
    15	{
    16		return __cvdso_clock_gettime_data(vd, clock, ts);
    17	}
    18	

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org

Re: [powerpc:next-test 54/220] arch/powerpc/kernel/vdso32/vgettimeofday.c:13:5: warning: no previous prototype for function '__c_kernel_clock_gettime64'

From: Michael Ellerman <mpe@ellerman.id.au>
Date: 2020-12-07 12:27:13

kernel test robot [off-list ref] writes:
tree:   https://git.kernel.org/pub/scm/linux/kernel/git/powerpc/linux.git next-test
head:   4e4ed87981c764498942c52004c620bb8f104eac
commit: d0e3fc69d00d1f50d22d6b6acfc555ccda80ad1e [54/220] powerpc/vdso: Provide __kernel_clock_gettime64() on vdso32
config: powerpc64-randconfig-r011-20201204 (attached as .config)
compiler: clang version 12.0.0 (https://github.com/llvm/llvm-project 32c501dd88b62787d3a5ffda7aabcf4650dbe3cd)
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 powerpc64 cross compiling tool for clang build
        # apt-get install binutils-powerpc64-linux-gnu
        # https://git.kernel.org/pub/scm/linux/kernel/git/powerpc/linux.git/commit/?id=d0e3fc69d00d1f50d22d6b6acfc555ccda80ad1e
        git remote add powerpc https://git.kernel.org/pub/scm/linux/kernel/git/powerpc/linux.git
        git fetch --no-tags powerpc next-test
        git checkout d0e3fc69d00d1f50d22d6b6acfc555ccda80ad1e
        # save the attached .config to linux build tree
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross ARCH=powerpc64 

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <redacted>

All warnings (new ones prefixed by >>):

   arch/powerpc/kernel/vdso32/vgettimeofday.c:7:5: error: conflicting types for '__c_kernel_clock_gettime'
   int __c_kernel_clock_gettime(clockid_t clock, struct old_timespec32 *ts,
       ^
We're building vdso32, which is 32-bit code, we pass -m32:

  clang -Wp,-MMD,arch/powerpc/kernel/vdso32/.vgettimeofday.o.d -nostdinc -isystem /usr/lib/llvm-11/lib/clang/11.0.0/include -I/linux/arch/powerpc/include -I./arch/powerpc/include/generated -I/linux/include -I./include -I/linux/arch/powerpc/include/uapi -I./arch/powerpc/include/generated/uapi -I/linux/include/uapi -I./include/generated/uapi -include /linux/include/linux/kconfig.h -include /linux/include/linux/compiler_types.h -D__KERNEL__ -I /linux/arch/powerpc -DHAVE_AS_ATHIGH=1 -Qunused-arguments -Wall -Wundef -Werror=strict-prototypes -Wno-trigraphs -fno-strict-aliasing -fno-common -fshort-wchar -fno-PIE -Werror=implicit-function-declaration -Werror=implicit-int -Werror=return-type -Wno-format-security -std=gnu89 --target=powerpc64le-linux-gnu --prefix=/usr/bin/powerpc64le-linux-gnu- --gcc-toolchain=/usr -no-integrated-as -Werror=unknown-warning-option -mlittle-endian -m64 -msoft-float -pipe -mcpu=power8 -mtune=power9 -mno-altivec -mno-vsx -mno-spe -fno-asynchronous-unwind-tables -Wa,-mpower4 -Wa,-many -mlittle-endian -fno-delete-null-pointer-checks -Wno-frame-address -Wno-address-of-packed-member -Os -Wframe-larger-than=2048 -fno-stack-protector -Wno-format-invalid-specifier -Wno-gnu -mno-global-merge -Wno-unused-const-variable -fomit-frame-pointer -Wdeclaration-after-statement -Wvla -Wno-pointer-sign -Wno-array-bounds -fno-strict-overflow -fno-stack-check -Werror=date-time -Werror=incompatible-pointer-types -fmacro-prefix-map=/linux/= -Wno-initializer-overrides -Wno-format -Wno-sign-compare -Wno-format-zero-length -Wno-pointer-to-enum-cast -Wno-tautological-constant-out-of-range-compare -D_TASK_CPU=304 -shared -fno-common -fno-builtin -nostdlib -Wl,-soname=linux-vdso32.so.1 -Wl,--hash-style=both -include /linux/lib/vdso/gettimeofday.c -fno-stack-protector -DDISABLE_BRANCH_PROFILING -ffreestanding -fasynchronous-unwind-tables   -I /linux/arch/powerpc/kernel/vdso32 -I ./arch/powerpc/kernel/vdso32    -DKBUILD_MODFILE='"arch/powerpc/kernel/vdso32/vgettimeofday"' -DKBUILD_BASENAME='"vgettimeofday"' -DKBUILD_MODNAME='"vgettimeofday"' -m32 -c -o arch/powerpc/kernel/vdso32/vgettimeofday.o /linux/arch/powerpc/kernel/vdso32/vgettimeofday.c

   arch/powerpc/include/asm/vdso/gettimeofday.h:183:5: note: previous declaration is here
   int __c_kernel_clock_gettime(clockid_t clock, struct __kernel_timespec *ts,
       ^
But this is inside an #ifdef __powerpc64__ block:

182 #ifdef __powerpc64__
183 int __c_kernel_clock_gettime(clockid_t clock, struct __kernel_timespec *ts,
184                              const struct vdso_data *vd);


So is clang defining __powerpc64__ even for 32-bit code?

And the answer appears to be yes:

  $ clang --version
  Ubuntu clang version 11.0.0-2
  Target: powerpc64le-unknown-linux-gnu

  $ clang -m32 -dM -E - < /dev/null | grep powerpc
  #define __powerpc64__ 1
  #define __powerpc__ 1

Compare to gcc:

  $ gcc --version
  gcc (Ubuntu 10.2.0-13ubuntu1) 10.2.0
  
  $ gcc -m32 -dM -E - < /dev/null | grep powerpc
  #define __powerpc__ 1
  #define powerpc 1
  #define __powerpc 1


Which is fairly problematic, because we use the presence/absence of
__powerpc64__ to determine if we're building 64-bit/32-bit code in
several places.

Not sure what the best approach for fixing that is.

cheers

Re: [powerpc:next-test 54/220] arch/powerpc/kernel/vdso32/vgettimeofday.c:13:5: warning: no previous prototype for function '__c_kernel_clock_gettime64'

From: Nick Desaulniers <ndesaulniers@google.com>
Date: 2020-12-07 17:59:12

On Mon, Dec 7, 2020 at 4:23 AM Michael Ellerman [off-list ref] wrote:
So is clang defining __powerpc64__ even for 32-bit code?

And the answer appears to be yes:

  $ clang --version
  Ubuntu clang version 11.0.0-2
  Target: powerpc64le-unknown-linux-gnu

  $ clang -m32 -dM -E - < /dev/null | grep powerpc
  #define __powerpc64__ 1
  #define __powerpc__ 1

Compare to gcc:

  $ gcc --version
  gcc (Ubuntu 10.2.0-13ubuntu1) 10.2.0

  $ gcc -m32 -dM -E - < /dev/null | grep powerpc
  #define __powerpc__ 1
  #define powerpc 1
  #define __powerpc 1


Which is fairly problematic, because we use the presence/absence of
__powerpc64__ to determine if we're building 64-bit/32-bit code in
several places.

Not sure what the best approach for fixing that is.
Thanks for the triage; we should fix our preprocessor:
https://bugs.llvm.org/show_bug.cgi?id=48427
-- 
Thanks,
~Nick Desaulniers

Re: [powerpc:next-test 54/220] arch/powerpc/kernel/vdso32/vgettimeofday.c:13:5: warning: no previous prototype for function '__c_kernel_clock_gettime64'

From: Segher Boessenkool <hidden>
Date: 2020-12-07 18:28:01

On Mon, Dec 07, 2020 at 09:56:56AM -0800, Nick Desaulniers wrote:
On Mon, Dec 7, 2020 at 4:23 AM Michael Ellerman [off-list ref] wrote:
quoted
So is clang defining __powerpc64__ even for 32-bit code?

And the answer appears to be yes:

  $ clang --version
  Ubuntu clang version 11.0.0-2
  Target: powerpc64le-unknown-linux-gnu

  $ clang -m32 -dM -E - < /dev/null | grep powerpc
  #define __powerpc64__ 1
  #define __powerpc__ 1

Compare to gcc:

  $ gcc --version
  gcc (Ubuntu 10.2.0-13ubuntu1) 10.2.0

  $ gcc -m32 -dM -E - < /dev/null | grep powerpc
  #define __powerpc__ 1
  #define powerpc 1
  #define __powerpc 1


Which is fairly problematic, because we use the presence/absence of
__powerpc64__ to determine if we're building 64-bit/32-bit code in
several places.

Not sure what the best approach for fixing that is.
Thanks for the triage; we should fix our preprocessor:
https://bugs.llvm.org/show_bug.cgi?id=48427
Not only is that a compatibility problem (as the bug report says): it is
a straight up violation of the ABI!  (For ELFv2, which you have here;
older ABIs did not mention the preprocessor predefines, but this was
exactly the same on all compilers afaik.)


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