Skip to content
Snippets Groups Projects
  1. May 13, 2022
    • Masahiro Yamada's avatar
      sparc: add asm/stat.h to UAPI compile-test coverage · 31a088b6
      Masahiro Yamada authored
      
      asm/stat.h is currently excluded from the UAPI compile-test for
      ARCH=sparc because of the errors like follows:
      
        In file included from <command-line>:
        ./usr/include/asm/stat.h:11:2: error: unknown type name 'ino_t'
           11 |  ino_t   st_ino;
              |  ^~~~~
          HDRTEST usr/include/asm/param.h
        ./usr/include/asm/stat.h:12:2: error: unknown type name 'mode_t'
           12 |  mode_t  st_mode;
              |  ^~~~~~
        ./usr/include/asm/stat.h:14:2: error: unknown type name 'uid_t'
           14 |  uid_t   st_uid;
              |  ^~~~~
        ./usr/include/asm/stat.h:15:2: error: unknown type name 'gid_t'
           15 |  gid_t   st_gid;
              |  ^~~~~
      
      The errors can be fixed by prefixing the types with __kernel_.
      
      Then, remove the no-header-test entry from user/include/Makefile.
      
      Signed-off-by: default avatarMasahiro Yamada <masahiroy@kernel.org>
      Signed-off-by: default avatarArnd Bergmann <arnd@arndb.de>
      Reviewed-by: default avatarChristoph Hellwig <hch@lst.de>
      31a088b6
    • Masahiro Yamada's avatar
      powerpc: add asm/stat.h to UAPI compile-test coverage · c01013a2
      Masahiro Yamada authored
      
      asm/stat.h is currently excluded from the UAPI compile-test for
      ARCH=powerpc because of the errors like follows:
      
          HDRTEST usr/include/asm/stat.h
        In file included from <command-line>:32:
        ./usr/include/asm/stat.h:32:2: error: unknown type name 'ino_t'
           32 |  ino_t  st_ino;
              |  ^~~~~
        ./usr/include/asm/stat.h:35:2: error: unknown type name 'mode_t'
           35 |  mode_t  st_mode;
              |  ^~~~~~
        ./usr/include/asm/stat.h:40:2: error: unknown type name 'uid_t'
           40 |  uid_t  st_uid;
              |  ^~~~~
        ./usr/include/asm/stat.h:41:2: error: unknown type name 'gid_t'
           41 |  gid_t  st_gid;
              |  ^~~~~
      
      The errors can be fixed by prefixing the types with __kernel_.
      
      Then, remove the no-header-test entry from user/include/Makefile.
      
      Signed-off-by: default avatarMasahiro Yamada <masahiroy@kernel.org>
      Signed-off-by: default avatarArnd Bergmann <arnd@arndb.de>
      Reviewed-by: default avatarChristoph Hellwig <hch@lst.de>
      c01013a2
    • Masahiro Yamada's avatar
      mips: add asm/stat.h to UAPI compile-test coverage · 8c1a381a
      Masahiro Yamada authored
      
      asm/stat.h is currently excluded from the UAPI compile-test for
      ARCH=mips because of the errors like follows:
      
          HDRTEST usr/include/asm/stat.h
        In file included from <command-line>:32:
        ./usr/include/asm/stat.h:22:2: error: unknown type name 'ino_t'
           22 |  ino_t  st_ino;
              |  ^~~~~
        ./usr/include/asm/stat.h:23:2: error: unknown type name 'mode_t'
           23 |  mode_t  st_mode;
              |  ^~~~~~
        ./usr/include/asm/stat.h:25:2: error: unknown type name 'uid_t'
           25 |  uid_t  st_uid;
              |  ^~~~~
        ./usr/include/asm/stat.h:26:2: error: unknown type name 'gid_t'
           26 |  gid_t  st_gid;
              |  ^~~~~
        ./usr/include/asm/stat.h:58:2: error: unknown type name 'mode_t'
           58 |  mode_t  st_mode;
              |  ^~~~~~
        ./usr/include/asm/stat.h:61:2: error: unknown type name 'uid_t'
           61 |  uid_t  st_uid;
              |  ^~~~~
        ./usr/include/asm/stat.h:62:2: error: unknown type name 'gid_t'
           62 |  gid_t  st_gid;
              |  ^~~~~
      
      The errors can be fixed by prefixing the types with __kernel_.
      
      Then, remove the no-header-test entry from user/include/Makefile.
      
      Signed-off-by: default avatarMasahiro Yamada <masahiroy@kernel.org>
      Signed-off-by: default avatarArnd Bergmann <arnd@arndb.de>
      Reviewed-by: default avatarChristoph Hellwig <hch@lst.de>
      8c1a381a
    • Masahiro Yamada's avatar
      riscv: add linux/bpf_perf_event.h to UAPI compile-test coverage · 5c41778e
      Masahiro Yamada authored
      
      I can compile this for ARCH=riscv with CONFIG_UAPI_HEADER_TEST=y.
      
      Signed-off-by: default avatarMasahiro Yamada <masahiroy@kernel.org>
      Signed-off-by: default avatarArnd Bergmann <arnd@arndb.de>
      Reviewed-by: default avatarChristoph Hellwig <hch@lst.de>
      5c41778e
    • Masahiro Yamada's avatar
      kbuild: prevent exported headers from including <stdlib.h>, <stdbool.h> · 02a6e4be
      Masahiro Yamada authored
      
      Some UAPI headers included <stdlib.h>, like this:
      
        #ifndef __KERNEL__
        #include <stdlib.h>
        #endif
      
      As it turned out, they just included it for no good reason.
      
      After some fixes, now I can compile-test UAPI headers
      (CONFIG_UAPI_HEADER_TEST=y) without including <stdlib.h> from the
      system header search paths.
      
      To avoid somebody getting it back again, this commit adds the dummy
      header, usr/dummy-include/stdlib.h
      
      I added $(srctree)/usr/dummy-include to the header search paths.
      Because it is searched before the system directories, if someone
      tries to include <stdlib.h>, they will see the error message.
      
      While I am here, I also replaced $(objtree)/usr/include with $(obj),
      but it has no functional change.
      
      If we can make kernel headers self-contained (that is, none of exported
      kernel headers includes system headers), we will be able to add the
      -nostdinc flag, but that is much far from where we stand now.
      
      As a realistic solution, we can ban header inclusion individually by
      putting a dummy header into usr/dummy-include/.
      
      Currently, no header include <stdbool.h>. I put it as well before somebody
      attempts to use it.
      
      Signed-off-by: default avatarMasahiro Yamada <masahiroy@kernel.org>
      Signed-off-by: default avatarArnd Bergmann <arnd@arndb.de>
      Reviewed-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      02a6e4be
  2. Apr 05, 2022
  3. Mar 31, 2022
  4. Feb 17, 2022
  5. Feb 14, 2022
    • Elliot Berman's avatar
      kbuild: Add environment variables for userprogs flags · f67695c9
      Elliot Berman authored
      
      Allow additional arguments be passed to userprogs compilation.
      Reproducible clang builds need to provide a sysroot and gcc path to
      ensure the same toolchain is used across hosts. KCFLAGS is not currently
      used for any user programs compilation, so add new USERCFLAGS and
      USERLDFLAGS which serves similar purpose as HOSTCFLAGS/HOSTLDFLAGS.
      
      Clang might detect GCC installation on hosts which have it installed
      to a default location in /. With addition of these environment
      variables, you can specify flags such as:
      
      $ make USERCFLAGS=--sysroot=/path/to/sysroot
      
      This can also be used to specify different sysroots such as musl or
      bionic which may be installed on the host in paths that the compiler
      may not search by default.
      
      Signed-off-by: default avatarElliot Berman <quic_eberman@quicinc.com>
      Reviewed-by: default avatarNick Desaulniers <ndesaulniers@google.com>
      Reviewed-by: default avatarFangrui Song <maskray@google.com>
      Signed-off-by: default avatarMasahiro Yamada <masahiroy@kernel.org>
      f67695c9
  6. Jan 27, 2022
  7. Jan 22, 2022
  8. Jan 08, 2022
  9. May 01, 2021
    • Masahiro Yamada's avatar
      usr/include: refactor .gitignore · 5134e94a
      Masahiro Yamada authored
      
      The current .gitignore intends to ignore everything under usr/include/
      except .gitignore and Makefile.
      
      A cleaner solution is to use a pattern suffixed with '/', which matches
      only directories. It works well here because all the exported headers
      are located in sub-directories, like <linux/*.h>, <asm/*.h>.
      
      Signed-off-by: default avatarMasahiro Yamada <masahiroy@kernel.org>
      5134e94a
  10. Jan 22, 2021
  11. Jul 27, 2020
    • Al Viro's avatar
      unexport linux/elfcore.h · 1e6b57d6
      Al Viro authored
      
      It's unusable from userland - it uses elf_gregset_t, which is not
      provided by exported headers.  glibc has it in sys/procfs.h, but
      the same file defines struct elf_prstatus, so linux/elfcore.h can't
      be included once sys/procfs.h has been pulled.  Same goes for uclibc
      and dietlibc simply doesn't have elf_gregset_t defined anywhere.
      
      IOW, no userland source is including that thing.
      
      Signed-off-by: default avatarAl Viro <viro@zeniv.linux.org.uk>
      1e6b57d6
  12. May 17, 2020
    • Masahiro Yamada's avatar
      bpfilter: match bit size of bpfilter_umh to that of the kernel · 9371f86e
      Masahiro Yamada authored
      
      bpfilter_umh is built for the default machine bit of the compiler,
      which may not match to the bit size of the kernel.
      
      This happens in the scenario below:
      
      You can use biarch GCC that defaults to 64-bit for building the 32-bit
      kernel. In this case, Kbuild passes -m32 to teach the compiler to
      produce 32-bit kernel space objects. However, it is missing when
      building bpfilter_umh. It is built as a 64-bit ELF, and then embedded
      into the 32-bit kernel.
      
      The 32-bit kernel and 64-bit umh is a bad combination.
      
      In theory, we can have 32-bit umh running on 64-bit kernel, but we do
      not have a good reason to support such a usecase.
      
      The best is to match the bit size between them.
      
      Pass -m32 or -m64 to the umh build command if it is found in
      $(KBUILD_CFLAGS). Evaluate CC_CAN_LINK against the kernel bit-size.
      
      Signed-off-by: default avatarMasahiro Yamada <masahiroy@kernel.org>
      9371f86e
  13. May 12, 2020
    • Masahiro Yamada's avatar
      kbuild: use -MMD instead of -MD to exclude system headers from dependency · 30a77297
      Masahiro Yamada authored
      
      This omits system headers from the generated header dependency.
      
      System headers are not updated unless you upgrade the compiler. Nor do
      they contain CONFIG options, so fixdep does not need to parse them.
      
      Having said that, the effect of this optimization will be quite small
      because the kernel code generally does not include system headers
      except <stdarg.h>. Host programs include a lot of system headers,
      but there are not so many in the kernel tree.
      
      At first, keeping system headers in .*.cmd files might be useful to
      detect the compiler update, but there is no guarantee that <stdarg.h>
      is included from every file. So, I implemented a more reliable way in
      the previous commit.
      
      Signed-off-by: default avatarMasahiro Yamada <masahiroy@kernel.org>
      30a77297
  14. Apr 11, 2020
  15. Mar 25, 2020
  16. Jan 06, 2020
  17. Dec 09, 2019
  18. Dec 05, 2019
    • Masahiro Yamada's avatar
      arch: sembuf.h: make uapi asm/sembuf.h self-contained · 0fb9dc28
      Masahiro Yamada authored
      Userspace cannot compile <asm/sembuf.h> due to some missing type
      definitions.  For example, building it for x86 fails as follows:
      
          CC      usr/include/asm/sembuf.h.s
        In file included from <command-line>:32:0:
        usr/include/asm/sembuf.h:17:20: error: field `sem_perm' has incomplete type
          struct ipc64_perm sem_perm; /* permissions .. see ipc.h */
                            ^~~~~~~~
        usr/include/asm/sembuf.h:24:2: error: unknown type name `__kernel_time_t'
          __kernel_time_t sem_otime; /* last semop time */
          ^~~~~~~~~~~~~~~
        usr/include/asm/sembuf.h:25:2: error: unknown type name `__kernel_ulong_t'
          __kernel_ulong_t __unused1;
          ^~~~~~~~~~~~~~~~
        usr/include/asm/sembuf.h:26:2: error: unknown type name `__kernel_time_t'
          __kernel_time_t sem_ctime; /* last change time */
          ^~~~~~~~~~~~~~~
        usr/include/asm/sembuf.h:27:2: error: unknown type name `__kernel_ulong_t'
          __kernel_ulong_t __unused2;
          ^~~~~~~~~~~~~~~~
        usr/include/asm/sembuf.h:29:2: error: unknown type name `__kernel_ulong_t'
          __kernel_ulong_t sem_nsems; /* no. of semaphores in array */
          ^~~~~~~~~~~~~~~~
        usr/include/asm/sembuf.h:30:2: error: unknown type name `__kernel_ulong_t'
          __kernel_ulong_t __unused3;
          ^~~~~~~~~~~~~~~~
        usr/include/asm/sembuf.h:31:2: error: unknown type name `__kernel_ulong_t'
          __kernel_ulong_t __unused4;
          ^~~~~~~~~~~~~~~~
      
      It is just a matter of missing include directive.
      
      Include <asm/ipcbuf.h> to make it self-contained, and add it to
      the compile-test coverage.
      
      Link: http://lkml.kernel.org/r/20191030063855.9989-3-yamada.masahiro@socionext.com
      
      
      Signed-off-by: default avatarMasahiro Yamada <yamada.masahiro@socionext.com>
      Cc: Arnd Bergmann <arnd@arndb.de>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      0fb9dc28
    • Masahiro Yamada's avatar
      arch: msgbuf.h: make uapi asm/msgbuf.h self-contained · 9ef0e004
      Masahiro Yamada authored
      Userspace cannot compile <asm/msgbuf.h> due to some missing type
      definitions.  For example, building it for x86 fails as follows:
      
          CC      usr/include/asm/msgbuf.h.s
        In file included from usr/include/asm/msgbuf.h:6:0,
                         from <command-line>:32:
        usr/include/asm-generic/msgbuf.h:25:20: error: field `msg_perm' has incomplete type
          struct ipc64_perm msg_perm;
                            ^~~~~~~~
        usr/include/asm-generic/msgbuf.h:27:2: error: unknown type name `__kernel_time_t'
          __kernel_time_t msg_stime; /* last msgsnd time */
          ^~~~~~~~~~~~~~~
        usr/include/asm-generic/msgbuf.h:28:2: error: unknown type name `__kernel_time_t'
          __kernel_time_t msg_rtime; /* last msgrcv time */
          ^~~~~~~~~~~~~~~
        usr/include/asm-generic/msgbuf.h:29:2: error: unknown type name `__kernel_time_t'
          __kernel_time_t msg_ctime; /* last change time */
          ^~~~~~~~~~~~~~~
        usr/include/asm-generic/msgbuf.h:41:2: error: unknown type name `__kernel_pid_t'
          __kernel_pid_t msg_lspid; /* pid of last msgsnd */
          ^~~~~~~~~~~~~~
        usr/include/asm-generic/msgbuf.h:42:2: error: unknown type name `__kernel_pid_t'
          __kernel_pid_t msg_lrpid; /* last receive pid */
          ^~~~~~~~~~~~~~
      
      It is just a matter of missing include directive.
      
      Include <asm/ipcbuf.h> to make it self-contained, and add it to
      the compile-test coverage.
      
      Link: http://lkml.kernel.org/r/20191030063855.9989-2-yamada.masahiro@socionext.com
      
      
      Signed-off-by: default avatarMasahiro Yamada <yamada.masahiro@socionext.com>
      Cc: Arnd Bergmann <arnd@arndb.de>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      9ef0e004
    • Masahiro Yamada's avatar
      arch: ipcbuf.h: make uapi asm/ipcbuf.h self-contained · 5b009673
      Masahiro Yamada authored
      Userspace cannot compile <asm/ipcbuf.h> due to some missing type
      definitions.  For example, building it for x86 fails as follows:
      
          CC      usr/include/asm/ipcbuf.h.s
        In file included from usr/include/asm/ipcbuf.h:1:0,
                         from <command-line>:32:
        usr/include/asm-generic/ipcbuf.h:21:2: error: unknown type name `__kernel_key_t'
          __kernel_key_t  key;
          ^~~~~~~~~~~~~~
        usr/include/asm-generic/ipcbuf.h:22:2: error: unknown type name `__kernel_uid32_t'
          __kernel_uid32_t uid;
          ^~~~~~~~~~~~~~~~
        usr/include/asm-generic/ipcbuf.h:23:2: error: unknown type name `__kernel_gid32_t'
          __kernel_gid32_t gid;
          ^~~~~~~~~~~~~~~~
        usr/include/asm-generic/ipcbuf.h:24:2: error: unknown type name `__kernel_uid32_t'
          __kernel_uid32_t cuid;
          ^~~~~~~~~~~~~~~~
        usr/include/asm-generic/ipcbuf.h:25:2: error: unknown type name `__kernel_gid32_t'
          __kernel_gid32_t cgid;
          ^~~~~~~~~~~~~~~~
        usr/include/asm-generic/ipcbuf.h:26:2: error: unknown type name `__kernel_mode_t'
          __kernel_mode_t  mode;
          ^~~~~~~~~~~~~~~
        usr/include/asm-generic/ipcbuf.h:28:35: error: `__kernel_mode_t' undeclared here (not in a function)
          unsigned char  __pad1[4 - sizeof(__kernel_mode_t)];
                                           ^~~~~~~~~~~~~~~
        usr/include/asm-generic/ipcbuf.h:31:2: error: unknown type name `__kernel_ulong_t'
          __kernel_ulong_t __unused1;
          ^~~~~~~~~~~~~~~~
        usr/include/asm-generic/ipcbuf.h:32:2: error: unknown type name `__kernel_ulong_t'
          __kernel_ulong_t __unused2;
          ^~~~~~~~~~~~~~~~
      
      It is just a matter of missing include directive.
      
      Include <linux/posix_types.h> to make it self-contained, and add it to
      the compile-test coverage.
      
      Link: http://lkml.kernel.org/r/20191030063855.9989-1-yamada.masahiro@socionext.com
      
      
      Signed-off-by: default avatarMasahiro Yamada <yamada.masahiro@socionext.com>
      Cc: Arnd Bergmann <arnd@arndb.de>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      5b009673
    • Masahiro Yamada's avatar
      linux/scc.h: make uapi linux/scc.h self-contained · 1a18374f
      Masahiro Yamada authored
      Userspace cannot compile <linux/scc.h>
      
          CC      usr/include/linux/scc.h.s
        In file included from <command-line>:32:0:
        usr/include/linux/scc.h:20:20: error: `SIOCDEVPRIVATE' undeclared here (not in a function)
          SIOCSCCRESERVED = SIOCDEVPRIVATE,
                            ^~~~~~~~~~~~~~
      
      Include <linux/sockios.h> to make it self-contained, and add it to the
      compile-test coverage.
      
      Link: http://lkml.kernel.org/r/20191108055809.26969-1-yamada.masahiro@socionext.com
      
      
      Signed-off-by: default avatarMasahiro Yamada <yamada.masahiro@socionext.com>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      1a18374f
  19. Nov 14, 2019
    • Masahiro Yamada's avatar
      kbuild: move headers_check rule to usr/include/Makefile · 7ecaf069
      Masahiro Yamada authored
      
      Currently, some sanity checks for uapi headers are done by
      scripts/headers_check.pl, which is wired up to the 'headers_check'
      target in the top Makefile.
      
      It is true compiling headers has better test coverage, but there
      are still several headers excluded from the compile test. I like
      to keep headers_check.pl for a while, but we can delete a lot of
      code by moving the build rule to usr/include/Makefile.
      
      Signed-off-by: default avatarMasahiro Yamada <yamada.masahiro@socionext.com>
      7ecaf069
    • Masahiro Yamada's avatar
      kbuild: remove header compile test · fcbb8461
      Masahiro Yamada authored
      There are both positive and negative options about this feature.
      At first, I thought it was a good idea, but actually Linus stated a
      negative opinion (https://lkml.org/lkml/2019/9/29/227
      
      ). I admit it
      is ugly and annoying.
      
      The baseline I'd like to keep is the compile-test of uapi headers.
      (Otherwise, kernel developers have no way to ensure the correctness
      of the exported headers.)
      
      I will maintain a small build rule in usr/include/Makefile.
      Remove the other header test functionality.
      
      Signed-off-by: default avatarMasahiro Yamada <yamada.masahiro@socionext.com>
      fcbb8461
  20. Nov 11, 2019
  21. Oct 05, 2019
  22. Sep 25, 2019
    • Masahiro Yamada's avatar
      netfilter: ebtables: use __u8 instead of uint8_t in uapi header · 20ff1cb5
      Masahiro Yamada authored
      When CONFIG_UAPI_HEADER_TEST=y, exported headers are compile-tested to
      make sure they can be included from user-space.
      
      Currently, linux/netfilter_bridge/ebtables.h is excluded from the test
      coverage. To make it join the compile-test, we need to fix the build
      errors attached below.
      
      For a case like this, we decided to use __u{8,16,32,64} variable types
      in this discussion:
      
        https://lkml.org/lkml/2019/6/5/18
      
      
      
      Build log:
      
        CC      usr/include/linux/netfilter_bridge/ebtables.h.s
      In file included from <command-line>:32:0:
      ./usr/include/linux/netfilter_bridge/ebtables.h:126:4: error: unknown type name ‘uint8_t’
          uint8_t revision;
          ^~~~~~~
      ./usr/include/linux/netfilter_bridge/ebtables.h:139:4: error: unknown type name ‘uint8_t’
          uint8_t revision;
          ^~~~~~~
      ./usr/include/linux/netfilter_bridge/ebtables.h:152:4: error: unknown type name ‘uint8_t’
          uint8_t revision;
          ^~~~~~~
      
      Signed-off-by: default avatarMasahiro Yamada <yamada.masahiro@socionext.com>
      Signed-off-by: default avatarPablo Neira Ayuso <pablo@netfilter.org>
      20ff1cb5
  23. Aug 29, 2019
  24. Jul 23, 2019
  25. Jul 20, 2019
    • Masahiro Yamada's avatar
      kbuild: update compile-test header list for v5.3-rc1 · 67bf4745
      Masahiro Yamada authored
      
       - Some headers graduated from the blacklist
      
       - hyperv_timer.h joined the header-test when CONFIG_X86=y
      
       - nf_tables*.h joined the header-test when CONFIG_NF_TABLES is
         enabled.
      
       - The entry for nf_tables_offload.h was added to fix build error for
         the combination of CONFIG_NF_TABLES=n and CONFIG_KERNEL_HEADER_TEST=y.
      
       - The entry for iomap.h was added because this header is supposed to
         be included only when CONFIG_BLOCK=y
      
      Signed-off-by: default avatarMasahiro Yamada <yamada.masahiro@socionext.com>
      67bf4745
Loading