linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* Unknown __always_inline in linux/swab.h
@ 2021-07-16 14:27 Petr Vaněk
  2021-07-16 15:41 ` Khem Raj
  0 siblings, 1 reply; 3+ messages in thread
From: Petr Vaněk @ 2021-07-16 14:27 UTC (permalink / raw)
  To: Denys Vlasenko, Ingo Molnar, linux-kernel
  Cc: Alexander Shishkin, Arnaldo Carvalho de Melo, Chanho Park,
	Greg Kroah-Hartman, Jiri Olsa, John Garry, Josh Poimboeuf,
	Kate Stewart, Khem Raj, Leo Yan, Mark Rutland,
	Martin Schwidefsky, Masami Hiramatsu, Mathieu Poirier,
	Matt Redfearn, Mike Leach, Namhyung Kim, Peter Zijlstra,
	Petr Vaněk, Philippe Ombredanne, Stephane Eranian,
	Suzuki K Poulose, Thomas Gleixner, Vasily Gorbik, Will Deacon

Hi all,

I cannot build the kernel on my box with musl libc since release 5.12,
see the kernel 5.13.1 build log below.  Bisect points to the commit
1d509f2a6ebc ("x86/insn: Support big endian cross-compiles") merged to
5.12-rc1, but it probably only triggers the issue from different place.

I searched through the mailing list [1] and it seems that people face to
a similar issue with perf tool as well [2-5]. Related issues were also
reported in Gentoo [6] and alpinelinux [7]. Both distributions basically
fixed it with the patch from [3] which works for me and it is the best
solution, in my opinion. I believe it should be applied to the upstream
and backported to 5.12 and 5.13.

Systems with glibc are not affected because glibc defines its own
__always_inline in sys/cdefs.h which is indirectly included with stdio.h
and/or stdlib.h in top of tools/objtool/arch/x86/decode.c file.

Note: I CCed you because your address was mentioned in [2-5] or in
bisected commit.

Thanks,
Petr

References:

[1] https://lore.kernel.org/lkml/?q=swab+__always_inline
[2] https://lore.kernel.org/lkml/20210204005810.GZ854763@kernel.org/
[3] https://lore.kernel.org/lkml/1514973450-12447-1-git-send-email-matt.redfearn@mips.com/
[4] https://lore.kernel.org/lkml/20181213180129.1373-1-raj.khem@gmail.com/
[5] https://lore.kernel.org/lkml/20201210144844.72580-1-chanho61.park@samsung.com/
[6] https://bugs.gentoo.org/791364
[7] https://gitlab.alpinelinux.org/alpine/aports/-/issues/11119

Build log:

make[1]: Entering directory '/var/tmp/portage/linux'
  GEN     Makefile
  DESCEND objtool
  CALL    /usr/src/linux-5.13.1-gentoo/scripts/atomic/check-atomics.sh
  CALL    /usr/src/linux-5.13.1-gentoo/scripts/checksyscalls.sh
  CC      /var/tmp/portage/linux/tools/objtool/arch/x86/decode.o
  CC      /var/tmp/portage/linux/tools/objtool/str_error_r.o
  CC      /var/tmp/portage/linux/tools/objtool/librbtree.o
In file included from /usr/include/linux/byteorder/little_endian.h:13,
                 from /usr/include/asm/byteorder.h:5,
                 from /usr/src/linux-5.13.1-gentoo/tools/arch/x86/include/asm/insn.h:10,
                 from arch/x86/decode.c:10:
/usr/include/linux/swab.h:136:23: error: expected ';' before 'unsigned'
  136 | static __always_inline unsigned long __swab(const unsigned long y)
      |                       ^~~~~~~~~
      |                       ;
/usr/include/linux/swab.h:171:8: error: unknown type name '__always_inline'
  171 | static __always_inline __u16 __swab16p(const __u16 *p)
      |        ^~~~~~~~~~~~~~~
/usr/include/linux/swab.h:171:30: error: expected '=', ',', ';', 'asm' or '__attribute__' before '__swab16p'
  171 | static __always_inline __u16 __swab16p(const __u16 *p)
      |                              ^~~~~~~~~
/usr/include/linux/swab.h:184:8: error: unknown type name '__always_inline'
  184 | static __always_inline __u32 __swab32p(const __u32 *p)
      |        ^~~~~~~~~~~~~~~
/usr/include/linux/swab.h:184:30: error: expected '=', ',', ';', 'asm' or '__attribute__' before '__swab32p'
  184 | static __always_inline __u32 __swab32p(const __u32 *p)
      |                              ^~~~~~~~~
/usr/include/linux/swab.h:197:8: error: unknown type name '__always_inline'
  197 | static __always_inline __u64 __swab64p(const __u64 *p)
      |        ^~~~~~~~~~~~~~~
/usr/include/linux/swab.h:197:30: error: expected '=', ',', ';', 'asm' or '__attribute__' before '__swab64p'
  197 | static __always_inline __u64 __swab64p(const __u64 *p)
      |                              ^~~~~~~~~
/usr/include/linux/swab.h:252:23: error: expected ';' before 'void'
  252 | static __always_inline void __swab32s(__u32 *p)
      |                       ^~~~~
      |                       ;
/usr/include/linux/swab.h:265:23: error: expected ';' before 'void'
  265 | static __always_inline void __swab64s(__u64 *p)
      |                       ^~~~~
      |                       ;
In file included from /usr/include/asm/byteorder.h:5,
                 from /usr/src/linux-5.13.1-gentoo/tools/arch/x86/include/asm/insn.h:10,
                 from arch/x86/decode.c:10:
/usr/include/linux/byteorder/little_endian.h:44:8: error: unknown type name '__always_inline'
   44 | static __always_inline __le64 __cpu_to_le64p(const __u64 *p)
      |        ^~~~~~~~~~~~~~~
/usr/include/linux/byteorder/little_endian.h:44:31: error: expected '=', ',', ';', 'asm' or '__attribute__' before '__cpu_to_le64p'
   44 | static __always_inline __le64 __cpu_to_le64p(const __u64 *p)
      |                               ^~~~~~~~~~~~~~
/usr/include/linux/byteorder/little_endian.h:48:8: error: unknown type name '__always_inline'
   48 | static __always_inline __u64 __le64_to_cpup(const __le64 *p)
      |        ^~~~~~~~~~~~~~~
/usr/include/linux/byteorder/little_endian.h:48:30: error: expected '=', ',', ';', 'asm' or '__attribute__' before '__le64_to_cpup'
   48 | static __always_inline __u64 __le64_to_cpup(const __le64 *p)
      |                              ^~~~~~~~~~~~~~
/usr/include/linux/byteorder/little_endian.h:52:8: error: unknown type name '__always_inline'
   52 | static __always_inline __le32 __cpu_to_le32p(const __u32 *p)
      |        ^~~~~~~~~~~~~~~
/usr/include/linux/byteorder/little_endian.h:52:31: error: expected '=', ',', ';', 'asm' or '__attribute__' before '__cpu_to_le32p'
   52 | static __always_inline __le32 __cpu_to_le32p(const __u32 *p)
      |                               ^~~~~~~~~~~~~~
/usr/include/linux/byteorder/little_endian.h:56:8: error: unknown type name '__always_inline'
   56 | static __always_inline __u32 __le32_to_cpup(const __le32 *p)
      |        ^~~~~~~~~~~~~~~
/usr/include/linux/byteorder/little_endian.h:56:30: error: expected '=', ',', ';', 'asm' or '__attribute__' before '__le32_to_cpup'
   56 | static __always_inline __u32 __le32_to_cpup(const __le32 *p)
      |                              ^~~~~~~~~~~~~~
/usr/include/linux/byteorder/little_endian.h:60:8: error: unknown type name '__always_inline'
   60 | static __always_inline __le16 __cpu_to_le16p(const __u16 *p)
      |        ^~~~~~~~~~~~~~~
/usr/include/linux/byteorder/little_endian.h:60:31: error: expected '=', ',', ';', 'asm' or '__attribute__' before '__cpu_to_le16p'
   60 | static __always_inline __le16 __cpu_to_le16p(const __u16 *p)
      |                               ^~~~~~~~~~~~~~
/usr/include/linux/byteorder/little_endian.h:64:8: error: unknown type name '__always_inline'
   64 | static __always_inline __u16 __le16_to_cpup(const __le16 *p)
      |        ^~~~~~~~~~~~~~~
/usr/include/linux/byteorder/little_endian.h:64:30: error: expected '=', ',', ';', 'asm' or '__attribute__' before '__le16_to_cpup'
   64 | static __always_inline __u16 __le16_to_cpup(const __le16 *p)
      |                              ^~~~~~~~~~~~~~
/usr/include/linux/byteorder/little_endian.h:68:8: error: unknown type name '__always_inline'
   68 | static __always_inline __be64 __cpu_to_be64p(const __u64 *p)
      |        ^~~~~~~~~~~~~~~
/usr/include/linux/byteorder/little_endian.h:68:31: error: expected '=', ',', ';', 'asm' or '__attribute__' before '__cpu_to_be64p'
   68 | static __always_inline __be64 __cpu_to_be64p(const __u64 *p)
      |                               ^~~~~~~~~~~~~~
/usr/include/linux/byteorder/little_endian.h:72:8: error: unknown type name '__always_inline'
   72 | static __always_inline __u64 __be64_to_cpup(const __be64 *p)
      |        ^~~~~~~~~~~~~~~
/usr/include/linux/byteorder/little_endian.h:72:30: error: expected '=', ',', ';', 'asm' or '__attribute__' before '__be64_to_cpup'
   72 | static __always_inline __u64 __be64_to_cpup(const __be64 *p)
      |                              ^~~~~~~~~~~~~~
/usr/include/linux/byteorder/little_endian.h:76:8: error: unknown type name '__always_inline'
   76 | static __always_inline __be32 __cpu_to_be32p(const __u32 *p)
      |        ^~~~~~~~~~~~~~~
/usr/include/linux/byteorder/little_endian.h:76:31: error: expected '=', ',', ';', 'asm' or '__attribute__' before '__cpu_to_be32p'
   76 | static __always_inline __be32 __cpu_to_be32p(const __u32 *p)
      |                               ^~~~~~~~~~~~~~
/usr/include/linux/byteorder/little_endian.h:80:8: error: unknown type name '__always_inline'
   80 | static __always_inline __u32 __be32_to_cpup(const __be32 *p)
      |        ^~~~~~~~~~~~~~~
/usr/include/linux/byteorder/little_endian.h:80:30: error: expected '=', ',', ';', 'asm' or '__attribute__' before '__be32_to_cpup'
   80 | static __always_inline __u32 __be32_to_cpup(const __be32 *p)
      |                              ^~~~~~~~~~~~~~
/usr/include/linux/byteorder/little_endian.h:84:8: error: unknown type name '__always_inline'
   84 | static __always_inline __be16 __cpu_to_be16p(const __u16 *p)
      |        ^~~~~~~~~~~~~~~
/usr/include/linux/byteorder/little_endian.h:84:31: error: expected '=', ',', ';', 'asm' or '__attribute__' before '__cpu_to_be16p'
   84 | static __always_inline __be16 __cpu_to_be16p(const __u16 *p)
      |                               ^~~~~~~~~~~~~~
/usr/include/linux/byteorder/little_endian.h:88:8: error: unknown type name '__always_inline'
   88 | static __always_inline __u16 __be16_to_cpup(const __be16 *p)
      |        ^~~~~~~~~~~~~~~
/usr/include/linux/byteorder/little_endian.h:88:30: error: expected '=', ',', ';', 'asm' or '__attribute__' before '__be16_to_cpup'
   88 | static __always_inline __u16 __be16_to_cpup(const __be16 *p)
      |                              ^~~~~~~~~~~~~~
make[5]: *** [/usr/src/linux-5.13.1-gentoo/tools/build/Makefile.build:97: /var/tmp/portage/linux/tools/objtool/arch/x86/decode.o] Error 1
make[4]: *** [/usr/src/linux-5.13.1-gentoo/tools/build/Makefile.build:139: arch/x86] Error 2
make[4]: *** Waiting for unfinished jobs....
make[3]: *** [Makefile:56: /var/tmp/portage/linux/tools/objtool/objtool-in.o] Error 2
make[2]: *** [Makefile:69: objtool] Error 2
make[1]: *** [/usr/src/linux-5.13.1-gentoo/Makefile:1974: tools/objtool] Error 2
make[1]: Leaving directory '/var/tmp/portage/linux'
make: *** [Makefile:215: __sub-make] Error 2

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: Unknown __always_inline in linux/swab.h
  2021-07-16 14:27 Unknown __always_inline in linux/swab.h Petr Vaněk
@ 2021-07-16 15:41 ` Khem Raj
  2021-07-19 14:23   ` Petr Vaněk
  0 siblings, 1 reply; 3+ messages in thread
From: Khem Raj @ 2021-07-16 15:41 UTC (permalink / raw)
  To: Petr Vaněk
  Cc: Denys Vlasenko, Ingo Molnar, linux-kernel, Alexander Shishkin,
	Arnaldo Carvalho de Melo, Chanho Park, Greg Kroah-Hartman,
	Jiri Olsa, John Garry, Josh Poimboeuf, Kate Stewart, Leo Yan,
	Mark Rutland, Martin Schwidefsky, Masami Hiramatsu,
	Mathieu Poirier, Matt Redfearn, Mike Leach, Namhyung Kim,
	Peter Zijlstra, Philippe Ombredanne, Stephane Eranian,
	Suzuki K Poulose, Thomas Gleixner, Vasily Gorbik, Will Deacon

On Fri, Jul 16, 2021 at 7:27 AM Petr Vaněk <arkamar@atlas.cz> wrote:
>
> Hi all,
>
> I cannot build the kernel on my box with musl libc since release 5.12,
> see the kernel 5.13.1 build log below.  Bisect points to the commit
> 1d509f2a6ebc ("x86/insn: Support big endian cross-compiles") merged to
> 5.12-rc1, but it probably only triggers the issue from different place.
>
> I searched through the mailing list [1] and it seems that people face to
> a similar issue with perf tool as well [2-5]. Related issues were also
> reported in Gentoo [6] and alpinelinux [7]. Both distributions basically
> fixed it with the patch from [3] which works for me and it is the best
> solution, in my opinion. I believe it should be applied to the upstream
> and backported to 5.12 and 5.13.
>
> Systems with glibc are not affected because glibc defines its own
> __always_inline in sys/cdefs.h which is indirectly included with stdio.h
> and/or stdlib.h in top of tools/objtool/arch/x86/decode.c file.
>
> Note: I CCed you because your address was mentioned in [2-5] or in
> bisected commit.
>

does https://lore.kernel.org/lkml/20181213180129.1373-1-raj.khem@gmail.com/
work for you ?
It was not applied but there were no comments on rejecting it either,
so I guess it either fell through cracks somehow.

> Thanks,
> Petr
>
> References:
>
> [1] https://lore.kernel.org/lkml/?q=swab+__always_inline
> [2] https://lore.kernel.org/lkml/20210204005810.GZ854763@kernel.org/
> [3] https://lore.kernel.org/lkml/1514973450-12447-1-git-send-email-matt.redfearn@mips.com/
> [4] https://lore.kernel.org/lkml/20181213180129.1373-1-raj.khem@gmail.com/
> [5] https://lore.kernel.org/lkml/20201210144844.72580-1-chanho61.park@samsung.com/
> [6] https://bugs.gentoo.org/791364
> [7] https://gitlab.alpinelinux.org/alpine/aports/-/issues/11119
>
> Build log:
>
> make[1]: Entering directory '/var/tmp/portage/linux'
>   GEN     Makefile
>   DESCEND objtool
>   CALL    /usr/src/linux-5.13.1-gentoo/scripts/atomic/check-atomics.sh
>   CALL    /usr/src/linux-5.13.1-gentoo/scripts/checksyscalls.sh
>   CC      /var/tmp/portage/linux/tools/objtool/arch/x86/decode.o
>   CC      /var/tmp/portage/linux/tools/objtool/str_error_r.o
>   CC      /var/tmp/portage/linux/tools/objtool/librbtree.o
> In file included from /usr/include/linux/byteorder/little_endian.h:13,
>                  from /usr/include/asm/byteorder.h:5,
>                  from /usr/src/linux-5.13.1-gentoo/tools/arch/x86/include/asm/insn.h:10,
>                  from arch/x86/decode.c:10:
> /usr/include/linux/swab.h:136:23: error: expected ';' before 'unsigned'
>   136 | static __always_inline unsigned long __swab(const unsigned long y)
>       |                       ^~~~~~~~~
>       |                       ;
> /usr/include/linux/swab.h:171:8: error: unknown type name '__always_inline'
>   171 | static __always_inline __u16 __swab16p(const __u16 *p)
>       |        ^~~~~~~~~~~~~~~
> /usr/include/linux/swab.h:171:30: error: expected '=', ',', ';', 'asm' or '__attribute__' before '__swab16p'
>   171 | static __always_inline __u16 __swab16p(const __u16 *p)
>       |                              ^~~~~~~~~
> /usr/include/linux/swab.h:184:8: error: unknown type name '__always_inline'
>   184 | static __always_inline __u32 __swab32p(const __u32 *p)
>       |        ^~~~~~~~~~~~~~~
> /usr/include/linux/swab.h:184:30: error: expected '=', ',', ';', 'asm' or '__attribute__' before '__swab32p'
>   184 | static __always_inline __u32 __swab32p(const __u32 *p)
>       |                              ^~~~~~~~~
> /usr/include/linux/swab.h:197:8: error: unknown type name '__always_inline'
>   197 | static __always_inline __u64 __swab64p(const __u64 *p)
>       |        ^~~~~~~~~~~~~~~
> /usr/include/linux/swab.h:197:30: error: expected '=', ',', ';', 'asm' or '__attribute__' before '__swab64p'
>   197 | static __always_inline __u64 __swab64p(const __u64 *p)
>       |                              ^~~~~~~~~
> /usr/include/linux/swab.h:252:23: error: expected ';' before 'void'
>   252 | static __always_inline void __swab32s(__u32 *p)
>       |                       ^~~~~
>       |                       ;
> /usr/include/linux/swab.h:265:23: error: expected ';' before 'void'
>   265 | static __always_inline void __swab64s(__u64 *p)
>       |                       ^~~~~
>       |                       ;
> In file included from /usr/include/asm/byteorder.h:5,
>                  from /usr/src/linux-5.13.1-gentoo/tools/arch/x86/include/asm/insn.h:10,
>                  from arch/x86/decode.c:10:
> /usr/include/linux/byteorder/little_endian.h:44:8: error: unknown type name '__always_inline'
>    44 | static __always_inline __le64 __cpu_to_le64p(const __u64 *p)
>       |        ^~~~~~~~~~~~~~~
> /usr/include/linux/byteorder/little_endian.h:44:31: error: expected '=', ',', ';', 'asm' or '__attribute__' before '__cpu_to_le64p'
>    44 | static __always_inline __le64 __cpu_to_le64p(const __u64 *p)
>       |                               ^~~~~~~~~~~~~~
> /usr/include/linux/byteorder/little_endian.h:48:8: error: unknown type name '__always_inline'
>    48 | static __always_inline __u64 __le64_to_cpup(const __le64 *p)
>       |        ^~~~~~~~~~~~~~~
> /usr/include/linux/byteorder/little_endian.h:48:30: error: expected '=', ',', ';', 'asm' or '__attribute__' before '__le64_to_cpup'
>    48 | static __always_inline __u64 __le64_to_cpup(const __le64 *p)
>       |                              ^~~~~~~~~~~~~~
> /usr/include/linux/byteorder/little_endian.h:52:8: error: unknown type name '__always_inline'
>    52 | static __always_inline __le32 __cpu_to_le32p(const __u32 *p)
>       |        ^~~~~~~~~~~~~~~
> /usr/include/linux/byteorder/little_endian.h:52:31: error: expected '=', ',', ';', 'asm' or '__attribute__' before '__cpu_to_le32p'
>    52 | static __always_inline __le32 __cpu_to_le32p(const __u32 *p)
>       |                               ^~~~~~~~~~~~~~
> /usr/include/linux/byteorder/little_endian.h:56:8: error: unknown type name '__always_inline'
>    56 | static __always_inline __u32 __le32_to_cpup(const __le32 *p)
>       |        ^~~~~~~~~~~~~~~
> /usr/include/linux/byteorder/little_endian.h:56:30: error: expected '=', ',', ';', 'asm' or '__attribute__' before '__le32_to_cpup'
>    56 | static __always_inline __u32 __le32_to_cpup(const __le32 *p)
>       |                              ^~~~~~~~~~~~~~
> /usr/include/linux/byteorder/little_endian.h:60:8: error: unknown type name '__always_inline'
>    60 | static __always_inline __le16 __cpu_to_le16p(const __u16 *p)
>       |        ^~~~~~~~~~~~~~~
> /usr/include/linux/byteorder/little_endian.h:60:31: error: expected '=', ',', ';', 'asm' or '__attribute__' before '__cpu_to_le16p'
>    60 | static __always_inline __le16 __cpu_to_le16p(const __u16 *p)
>       |                               ^~~~~~~~~~~~~~
> /usr/include/linux/byteorder/little_endian.h:64:8: error: unknown type name '__always_inline'
>    64 | static __always_inline __u16 __le16_to_cpup(const __le16 *p)
>       |        ^~~~~~~~~~~~~~~
> /usr/include/linux/byteorder/little_endian.h:64:30: error: expected '=', ',', ';', 'asm' or '__attribute__' before '__le16_to_cpup'
>    64 | static __always_inline __u16 __le16_to_cpup(const __le16 *p)
>       |                              ^~~~~~~~~~~~~~
> /usr/include/linux/byteorder/little_endian.h:68:8: error: unknown type name '__always_inline'
>    68 | static __always_inline __be64 __cpu_to_be64p(const __u64 *p)
>       |        ^~~~~~~~~~~~~~~
> /usr/include/linux/byteorder/little_endian.h:68:31: error: expected '=', ',', ';', 'asm' or '__attribute__' before '__cpu_to_be64p'
>    68 | static __always_inline __be64 __cpu_to_be64p(const __u64 *p)
>       |                               ^~~~~~~~~~~~~~
> /usr/include/linux/byteorder/little_endian.h:72:8: error: unknown type name '__always_inline'
>    72 | static __always_inline __u64 __be64_to_cpup(const __be64 *p)
>       |        ^~~~~~~~~~~~~~~
> /usr/include/linux/byteorder/little_endian.h:72:30: error: expected '=', ',', ';', 'asm' or '__attribute__' before '__be64_to_cpup'
>    72 | static __always_inline __u64 __be64_to_cpup(const __be64 *p)
>       |                              ^~~~~~~~~~~~~~
> /usr/include/linux/byteorder/little_endian.h:76:8: error: unknown type name '__always_inline'
>    76 | static __always_inline __be32 __cpu_to_be32p(const __u32 *p)
>       |        ^~~~~~~~~~~~~~~
> /usr/include/linux/byteorder/little_endian.h:76:31: error: expected '=', ',', ';', 'asm' or '__attribute__' before '__cpu_to_be32p'
>    76 | static __always_inline __be32 __cpu_to_be32p(const __u32 *p)
>       |                               ^~~~~~~~~~~~~~
> /usr/include/linux/byteorder/little_endian.h:80:8: error: unknown type name '__always_inline'
>    80 | static __always_inline __u32 __be32_to_cpup(const __be32 *p)
>       |        ^~~~~~~~~~~~~~~
> /usr/include/linux/byteorder/little_endian.h:80:30: error: expected '=', ',', ';', 'asm' or '__attribute__' before '__be32_to_cpup'
>    80 | static __always_inline __u32 __be32_to_cpup(const __be32 *p)
>       |                              ^~~~~~~~~~~~~~
> /usr/include/linux/byteorder/little_endian.h:84:8: error: unknown type name '__always_inline'
>    84 | static __always_inline __be16 __cpu_to_be16p(const __u16 *p)
>       |        ^~~~~~~~~~~~~~~
> /usr/include/linux/byteorder/little_endian.h:84:31: error: expected '=', ',', ';', 'asm' or '__attribute__' before '__cpu_to_be16p'
>    84 | static __always_inline __be16 __cpu_to_be16p(const __u16 *p)
>       |                               ^~~~~~~~~~~~~~
> /usr/include/linux/byteorder/little_endian.h:88:8: error: unknown type name '__always_inline'
>    88 | static __always_inline __u16 __be16_to_cpup(const __be16 *p)
>       |        ^~~~~~~~~~~~~~~
> /usr/include/linux/byteorder/little_endian.h:88:30: error: expected '=', ',', ';', 'asm' or '__attribute__' before '__be16_to_cpup'
>    88 | static __always_inline __u16 __be16_to_cpup(const __be16 *p)
>       |                              ^~~~~~~~~~~~~~
> make[5]: *** [/usr/src/linux-5.13.1-gentoo/tools/build/Makefile.build:97: /var/tmp/portage/linux/tools/objtool/arch/x86/decode.o] Error 1
> make[4]: *** [/usr/src/linux-5.13.1-gentoo/tools/build/Makefile.build:139: arch/x86] Error 2
> make[4]: *** Waiting for unfinished jobs....
> make[3]: *** [Makefile:56: /var/tmp/portage/linux/tools/objtool/objtool-in.o] Error 2
> make[2]: *** [Makefile:69: objtool] Error 2
> make[1]: *** [/usr/src/linux-5.13.1-gentoo/Makefile:1974: tools/objtool] Error 2
> make[1]: Leaving directory '/var/tmp/portage/linux'
> make: *** [Makefile:215: __sub-make] Error 2

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: Unknown __always_inline in linux/swab.h
  2021-07-16 15:41 ` Khem Raj
@ 2021-07-19 14:23   ` Petr Vaněk
  0 siblings, 0 replies; 3+ messages in thread
From: Petr Vaněk @ 2021-07-19 14:23 UTC (permalink / raw)
  To: Khem Raj
  Cc: Denys Vlasenko, Ingo Molnar, linux-kernel, Alexander Shishkin,
	Arnaldo Carvalho de Melo, Chanho Park, Greg Kroah-Hartman,
	Jiri Olsa, John Garry, Josh Poimboeuf, Kate Stewart, Leo Yan,
	Mark Rutland, Martin Schwidefsky, Masami Hiramatsu,
	Mathieu Poirier, Matt Redfearn, Mike Leach, Namhyung Kim,
	Peter Zijlstra, Philippe Ombredanne, Stephane Eranian,
	Suzuki K Poulose, Thomas Gleixner, Vasily Gorbik, Will Deacon

On Fri, Jul 16, 2021 at 08:41:57AM -0700, Khem Raj wrote:
> On Fri, Jul 16, 2021 at 7:27 AM Petr Vaněk <arkamar@atlas.cz> wrote:
> >
> > Hi all,
> >
> > I cannot build the kernel on my box with musl libc since release 5.12,
> > see the kernel 5.13.1 build log below.  Bisect points to the commit
> > 1d509f2a6ebc ("x86/insn: Support big endian cross-compiles") merged to
> > 5.12-rc1, but it probably only triggers the issue from different place.
> >
> > I searched through the mailing list [1] and it seems that people face to
> > a similar issue with perf tool as well [2-5]. Related issues were also
> > reported in Gentoo [6] and alpinelinux [7]. Both distributions basically
> > fixed it with the patch from [3] which works for me and it is the best
> > solution, in my opinion. I believe it should be applied to the upstream
> > and backported to 5.12 and 5.13.
> >
> > Systems with glibc are not affected because glibc defines its own
> > __always_inline in sys/cdefs.h which is indirectly included with stdio.h
> > and/or stdlib.h in top of tools/objtool/arch/x86/decode.c file.
> >
> > Note: I CCed you because your address was mentioned in [2-5] or in
> > bisected commit.
> >
> 
> does https://lore.kernel.org/lkml/20181213180129.1373-1-raj.khem@gmail.com/
> work for you ?

Yes, it does, however, I still think the
https://lore.kernel.org/lkml/1514973450-12447-1-git-send-email-matt.redfearn@mips.com/
patch is better, because linux/stddef.h includes linux/compiler_types.h,
which should be enough for linux/swab.h. However, your patch is
definitely safer if linux/compiler.h is needed for some reason I don't
see right now. 

> It was not applied but there were no comments on rejecting it either,
> so I guess it either fell through cracks somehow.
> 
> > Thanks,
> > Petr
> >
> > References:
> >
> > [1] https://lore.kernel.org/lkml/?q=swab+__always_inline
> > [2] https://lore.kernel.org/lkml/20210204005810.GZ854763@kernel.org/
> > [3] https://lore.kernel.org/lkml/1514973450-12447-1-git-send-email-matt.redfearn@mips.com/
> > [4] https://lore.kernel.org/lkml/20181213180129.1373-1-raj.khem@gmail.com/
> > [5] https://lore.kernel.org/lkml/20201210144844.72580-1-chanho61.park@samsung.com/
> > [6] https://bugs.gentoo.org/791364
> > [7] https://gitlab.alpinelinux.org/alpine/aports/-/issues/11119
> >
> > Build log:
> >
> > make[1]: Entering directory '/var/tmp/portage/linux'
> >   GEN     Makefile
> >   DESCEND objtool
> >   CALL    /usr/src/linux-5.13.1-gentoo/scripts/atomic/check-atomics.sh
> >   CALL    /usr/src/linux-5.13.1-gentoo/scripts/checksyscalls.sh
> >   CC      /var/tmp/portage/linux/tools/objtool/arch/x86/decode.o
> >   CC      /var/tmp/portage/linux/tools/objtool/str_error_r.o
> >   CC      /var/tmp/portage/linux/tools/objtool/librbtree.o
> > In file included from /usr/include/linux/byteorder/little_endian.h:13,
> >                  from /usr/include/asm/byteorder.h:5,
> >                  from /usr/src/linux-5.13.1-gentoo/tools/arch/x86/include/asm/insn.h:10,
> >                  from arch/x86/decode.c:10:
> > /usr/include/linux/swab.h:136:23: error: expected ';' before 'unsigned'
> >   136 | static __always_inline unsigned long __swab(const unsigned long y)
> >       |                       ^~~~~~~~~
> >       |                       ;
> > /usr/include/linux/swab.h:171:8: error: unknown type name '__always_inline'
> >   171 | static __always_inline __u16 __swab16p(const __u16 *p)
> >       |        ^~~~~~~~~~~~~~~
> > /usr/include/linux/swab.h:171:30: error: expected '=', ',', ';', 'asm' or '__attribute__' before '__swab16p'
> >   171 | static __always_inline __u16 __swab16p(const __u16 *p)
> >       |                              ^~~~~~~~~
> > /usr/include/linux/swab.h:184:8: error: unknown type name '__always_inline'
> >   184 | static __always_inline __u32 __swab32p(const __u32 *p)
> >       |        ^~~~~~~~~~~~~~~
> > /usr/include/linux/swab.h:184:30: error: expected '=', ',', ';', 'asm' or '__attribute__' before '__swab32p'
> >   184 | static __always_inline __u32 __swab32p(const __u32 *p)
> >       |                              ^~~~~~~~~
> > /usr/include/linux/swab.h:197:8: error: unknown type name '__always_inline'
> >   197 | static __always_inline __u64 __swab64p(const __u64 *p)
> >       |        ^~~~~~~~~~~~~~~
> > /usr/include/linux/swab.h:197:30: error: expected '=', ',', ';', 'asm' or '__attribute__' before '__swab64p'
> >   197 | static __always_inline __u64 __swab64p(const __u64 *p)
> >       |                              ^~~~~~~~~
> > /usr/include/linux/swab.h:252:23: error: expected ';' before 'void'
> >   252 | static __always_inline void __swab32s(__u32 *p)
> >       |                       ^~~~~
> >       |                       ;
> > /usr/include/linux/swab.h:265:23: error: expected ';' before 'void'
> >   265 | static __always_inline void __swab64s(__u64 *p)
> >       |                       ^~~~~
> >       |                       ;
> > In file included from /usr/include/asm/byteorder.h:5,
> >                  from /usr/src/linux-5.13.1-gentoo/tools/arch/x86/include/asm/insn.h:10,
> >                  from arch/x86/decode.c:10:
> > /usr/include/linux/byteorder/little_endian.h:44:8: error: unknown type name '__always_inline'
> >    44 | static __always_inline __le64 __cpu_to_le64p(const __u64 *p)
> >       |        ^~~~~~~~~~~~~~~
> > /usr/include/linux/byteorder/little_endian.h:44:31: error: expected '=', ',', ';', 'asm' or '__attribute__' before '__cpu_to_le64p'
> >    44 | static __always_inline __le64 __cpu_to_le64p(const __u64 *p)
> >       |                               ^~~~~~~~~~~~~~
> > /usr/include/linux/byteorder/little_endian.h:48:8: error: unknown type name '__always_inline'
> >    48 | static __always_inline __u64 __le64_to_cpup(const __le64 *p)
> >       |        ^~~~~~~~~~~~~~~
> > /usr/include/linux/byteorder/little_endian.h:48:30: error: expected '=', ',', ';', 'asm' or '__attribute__' before '__le64_to_cpup'
> >    48 | static __always_inline __u64 __le64_to_cpup(const __le64 *p)
> >       |                              ^~~~~~~~~~~~~~
> > /usr/include/linux/byteorder/little_endian.h:52:8: error: unknown type name '__always_inline'
> >    52 | static __always_inline __le32 __cpu_to_le32p(const __u32 *p)
> >       |        ^~~~~~~~~~~~~~~
> > /usr/include/linux/byteorder/little_endian.h:52:31: error: expected '=', ',', ';', 'asm' or '__attribute__' before '__cpu_to_le32p'
> >    52 | static __always_inline __le32 __cpu_to_le32p(const __u32 *p)
> >       |                               ^~~~~~~~~~~~~~
> > /usr/include/linux/byteorder/little_endian.h:56:8: error: unknown type name '__always_inline'
> >    56 | static __always_inline __u32 __le32_to_cpup(const __le32 *p)
> >       |        ^~~~~~~~~~~~~~~
> > /usr/include/linux/byteorder/little_endian.h:56:30: error: expected '=', ',', ';', 'asm' or '__attribute__' before '__le32_to_cpup'
> >    56 | static __always_inline __u32 __le32_to_cpup(const __le32 *p)
> >       |                              ^~~~~~~~~~~~~~
> > /usr/include/linux/byteorder/little_endian.h:60:8: error: unknown type name '__always_inline'
> >    60 | static __always_inline __le16 __cpu_to_le16p(const __u16 *p)
> >       |        ^~~~~~~~~~~~~~~
> > /usr/include/linux/byteorder/little_endian.h:60:31: error: expected '=', ',', ';', 'asm' or '__attribute__' before '__cpu_to_le16p'
> >    60 | static __always_inline __le16 __cpu_to_le16p(const __u16 *p)
> >       |                               ^~~~~~~~~~~~~~
> > /usr/include/linux/byteorder/little_endian.h:64:8: error: unknown type name '__always_inline'
> >    64 | static __always_inline __u16 __le16_to_cpup(const __le16 *p)
> >       |        ^~~~~~~~~~~~~~~
> > /usr/include/linux/byteorder/little_endian.h:64:30: error: expected '=', ',', ';', 'asm' or '__attribute__' before '__le16_to_cpup'
> >    64 | static __always_inline __u16 __le16_to_cpup(const __le16 *p)
> >       |                              ^~~~~~~~~~~~~~
> > /usr/include/linux/byteorder/little_endian.h:68:8: error: unknown type name '__always_inline'
> >    68 | static __always_inline __be64 __cpu_to_be64p(const __u64 *p)
> >       |        ^~~~~~~~~~~~~~~
> > /usr/include/linux/byteorder/little_endian.h:68:31: error: expected '=', ',', ';', 'asm' or '__attribute__' before '__cpu_to_be64p'
> >    68 | static __always_inline __be64 __cpu_to_be64p(const __u64 *p)
> >       |                               ^~~~~~~~~~~~~~
> > /usr/include/linux/byteorder/little_endian.h:72:8: error: unknown type name '__always_inline'
> >    72 | static __always_inline __u64 __be64_to_cpup(const __be64 *p)
> >       |        ^~~~~~~~~~~~~~~
> > /usr/include/linux/byteorder/little_endian.h:72:30: error: expected '=', ',', ';', 'asm' or '__attribute__' before '__be64_to_cpup'
> >    72 | static __always_inline __u64 __be64_to_cpup(const __be64 *p)
> >       |                              ^~~~~~~~~~~~~~
> > /usr/include/linux/byteorder/little_endian.h:76:8: error: unknown type name '__always_inline'
> >    76 | static __always_inline __be32 __cpu_to_be32p(const __u32 *p)
> >       |        ^~~~~~~~~~~~~~~
> > /usr/include/linux/byteorder/little_endian.h:76:31: error: expected '=', ',', ';', 'asm' or '__attribute__' before '__cpu_to_be32p'
> >    76 | static __always_inline __be32 __cpu_to_be32p(const __u32 *p)
> >       |                               ^~~~~~~~~~~~~~
> > /usr/include/linux/byteorder/little_endian.h:80:8: error: unknown type name '__always_inline'
> >    80 | static __always_inline __u32 __be32_to_cpup(const __be32 *p)
> >       |        ^~~~~~~~~~~~~~~
> > /usr/include/linux/byteorder/little_endian.h:80:30: error: expected '=', ',', ';', 'asm' or '__attribute__' before '__be32_to_cpup'
> >    80 | static __always_inline __u32 __be32_to_cpup(const __be32 *p)
> >       |                              ^~~~~~~~~~~~~~
> > /usr/include/linux/byteorder/little_endian.h:84:8: error: unknown type name '__always_inline'
> >    84 | static __always_inline __be16 __cpu_to_be16p(const __u16 *p)
> >       |        ^~~~~~~~~~~~~~~
> > /usr/include/linux/byteorder/little_endian.h:84:31: error: expected '=', ',', ';', 'asm' or '__attribute__' before '__cpu_to_be16p'
> >    84 | static __always_inline __be16 __cpu_to_be16p(const __u16 *p)
> >       |                               ^~~~~~~~~~~~~~
> > /usr/include/linux/byteorder/little_endian.h:88:8: error: unknown type name '__always_inline'
> >    88 | static __always_inline __u16 __be16_to_cpup(const __be16 *p)
> >       |        ^~~~~~~~~~~~~~~
> > /usr/include/linux/byteorder/little_endian.h:88:30: error: expected '=', ',', ';', 'asm' or '__attribute__' before '__be16_to_cpup'
> >    88 | static __always_inline __u16 __be16_to_cpup(const __be16 *p)
> >       |                              ^~~~~~~~~~~~~~
> > make[5]: *** [/usr/src/linux-5.13.1-gentoo/tools/build/Makefile.build:97: /var/tmp/portage/linux/tools/objtool/arch/x86/decode.o] Error 1
> > make[4]: *** [/usr/src/linux-5.13.1-gentoo/tools/build/Makefile.build:139: arch/x86] Error 2
> > make[4]: *** Waiting for unfinished jobs....
> > make[3]: *** [Makefile:56: /var/tmp/portage/linux/tools/objtool/objtool-in.o] Error 2
> > make[2]: *** [Makefile:69: objtool] Error 2
> > make[1]: *** [/usr/src/linux-5.13.1-gentoo/Makefile:1974: tools/objtool] Error 2
> > make[1]: Leaving directory '/var/tmp/portage/linux'
> > make: *** [Makefile:215: __sub-make] Error 2

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2021-07-19 14:25 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-07-16 14:27 Unknown __always_inline in linux/swab.h Petr Vaněk
2021-07-16 15:41 ` Khem Raj
2021-07-19 14:23   ` Petr Vaněk

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).