Blame view

scripts/headers_install.sh 3.32 KB
e0e2fa4b5   Rob Landley   headers_install.p...
1
  #!/bin/sh
b24413180   Greg Kroah-Hartman   License cleanup: ...
2
  # SPDX-License-Identifier: GPL-2.0
e0e2fa4b5   Rob Landley   headers_install.p...
3

555187a87   Masahiro Yamada   kbuild: simplify ...
4
  if [ $# -ne 2 ]
e0e2fa4b5   Rob Landley   headers_install.p...
5
  then
555187a87   Masahiro Yamada   kbuild: simplify ...
6
  	echo "Usage: headers_install.sh INFILE OUTFILE"
e0e2fa4b5   Rob Landley   headers_install.p...
7
8
9
10
11
12
  	echo
  	echo "Prepares kernel header files for use by user space, by removing"
  	echo "all compiler.h definitions and #includes, removing any"
  	echo "#ifdef __KERNEL__ sections, and putting __underscores__ around"
  	echo "asm/inline/volatile keywords."
  	echo
555187a87   Masahiro Yamada   kbuild: simplify ...
13
  	echo "INFILE: header file to operate on"
0f50d21ad   Masanari Iida   scripts: Fix typo...
14
  	echo "OUTFILE: output file which the processed header is written to"
e0e2fa4b5   Rob Landley   headers_install.p...
15
16
17
18
19
  
  	exit 1
  fi
  
  # Grab arguments
555187a87   Masahiro Yamada   kbuild: simplify ...
20
21
22
  INFILE=$1
  OUTFILE=$2
  TMPFILE=$OUTFILE.tmp
e0e2fa4b5   Rob Landley   headers_install.p...
23

555187a87   Masahiro Yamada   kbuild: simplify ...
24
  trap 'rm -f $OUTFILE $TMPFILE' EXIT
e0e2fa4b5   Rob Landley   headers_install.p...
25

622445541   Masahiro Yamada   kbuild: detect mi...
26
27
28
29
30
  # SPDX-License-Identifier with GPL variants must have "WITH Linux-syscall-note"
  if [ -n "$(sed -n -e "/SPDX-License-Identifier:.*GPL-/{/WITH Linux-syscall-note/!p}" $INFILE)" ]; then
  	echo "error: $INFILE: missing \"WITH Linux-syscall-note\" for SPDX-License-Identifier" >&2
  	exit 1
  fi
555187a87   Masahiro Yamada   kbuild: simplify ...
31
32
33
34
35
36
37
38
  sed -E -e '
  	s/([[:space:](])(__user|__force|__iomem)[[:space:]]/\1/g
  	s/__attribute_const__([[:space:]]|$)/\1/g
  	s@^#include <linux/compiler(|_types).h>@@
  	s/(^|[^a-zA-Z0-9])__packed([^a-zA-Z0-9_]|$)/\1__attribute__((packed))\2/g
  	s/(^|[[:space:](])(inline|asm|volatile)([[:space:](]|$)/\1__\2__\3/g
  	s@#(ifndef|define|endif[[:space:]]*/[*])[[:space:]]*_UAPI@#\1 @
  ' $INFILE > $TMPFILE || exit 1
e0e2fa4b5   Rob Landley   headers_install.p...
39

555187a87   Masahiro Yamada   kbuild: simplify ...
40
41
  scripts/unifdef -U__KERNEL__ -D__EXPORTED_HEADERS__ $TMPFILE > $OUTFILE
  [ $? -gt 1 ] && exit 1
c7c0eecf8   Masahiro Yamada   kbuild: re-implem...
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
  # Remove /* ... */ style comments, and find CONFIG_ references in code
  configs=$(sed -e '
  :comment
  	s:/\*[^*][^*]*:/*:
  	s:/\*\*\**\([^/]\):/*\1:
  	t comment
  	s:/\*\*/: :
  	t comment
  	/\/\*/! b check
  	N
  	b comment
  :print
  	P
  	D
  :check
  	s:^\(CONFIG_[[:alnum:]_]*\):\1
  :
  	t print
  	s:^[[:alnum:]_][[:alnum:]_]*::
  	s:^[^[:alnum:]_][^[:alnum:]_]*::
  	t check
  	d
  ' $OUTFILE)
2a26f777c   Dong Aisheng   Revert "scripts: ...
65
  # The entries in the following list are not warned.
c7c0eecf8   Masahiro Yamada   kbuild: re-implem...
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
  # Please do not add a new entry. This list is only for existing ones.
  # The list will be reduced gradually, and deleted eventually. (hopefully)
  #
  # The format is <file-name>:<CONFIG-option> in each line.
  config_leak_ignores="
  arch/alpha/include/uapi/asm/setup.h:CONFIG_ALPHA_LEGACY_START_ADDRESS
  arch/arc/include/uapi/asm/page.h:CONFIG_ARC_PAGE_SIZE_16K
  arch/arc/include/uapi/asm/page.h:CONFIG_ARC_PAGE_SIZE_4K
  arch/arc/include/uapi/asm/swab.h:CONFIG_ARC_HAS_SWAPE
  arch/arm/include/uapi/asm/ptrace.h:CONFIG_CPU_ENDIAN_BE8
  arch/hexagon/include/uapi/asm/ptrace.h:CONFIG_HEXAGON_ARCH_VERSION
  arch/hexagon/include/uapi/asm/user.h:CONFIG_HEXAGON_ARCH_VERSION
  arch/ia64/include/uapi/asm/cmpxchg.h:CONFIG_IA64_DEBUG_CMPXCHG
  arch/m68k/include/uapi/asm/ptrace.h:CONFIG_COLDFIRE
  arch/nios2/include/uapi/asm/swab.h:CONFIG_NIOS2_CI_SWAB_NO
  arch/nios2/include/uapi/asm/swab.h:CONFIG_NIOS2_CI_SWAB_SUPPORT
c7c0eecf8   Masahiro Yamada   kbuild: re-implem...
82
83
84
85
86
  arch/x86/include/uapi/asm/auxvec.h:CONFIG_IA32_EMULATION
  arch/x86/include/uapi/asm/auxvec.h:CONFIG_X86_64
  arch/x86/include/uapi/asm/mman.h:CONFIG_X86_INTEL_MEMORY_PROTECTION_KEYS
  include/uapi/asm-generic/fcntl.h:CONFIG_64BIT
  include/uapi/linux/atmdev.h:CONFIG_COMPAT
c7c0eecf8   Masahiro Yamada   kbuild: re-implem...
87
88
89
  include/uapi/linux/eventpoll.h:CONFIG_PM_SLEEP
  include/uapi/linux/hw_breakpoint.h:CONFIG_HAVE_MIXED_BREAKPOINTS_REGS
  include/uapi/linux/pktcdvd.h:CONFIG_CDROM_PKTCDVD_WCACHE
c7c0eecf8   Masahiro Yamada   kbuild: re-implem...
90
91
92
93
  "
  
  for c in $configs
  do
2a26f777c   Dong Aisheng   Revert "scripts: ...
94
  	warn=1
c7c0eecf8   Masahiro Yamada   kbuild: re-implem...
95
96
97
98
  
  	for ignore in $config_leak_ignores
  	do
  		if echo "$INFILE:$c" | grep -q "$ignore$"; then
2a26f777c   Dong Aisheng   Revert "scripts: ...
99
  			warn=
c7c0eecf8   Masahiro Yamada   kbuild: re-implem...
100
101
102
  			break
  		fi
  	done
2a26f777c   Dong Aisheng   Revert "scripts: ...
103
104
  	if [ "$warn" = 1 ]; then
  		echo "warning: $INFILE: leak $c to user-space" >&2
c7c0eecf8   Masahiro Yamada   kbuild: re-implem...
105
106
  	fi
  done
555187a87   Masahiro Yamada   kbuild: simplify ...
107
  rm -f $TMPFILE
e0e2fa4b5   Rob Landley   headers_install.p...
108
  trap - EXIT