xref: /openbmc/linux/scripts/headers_install.sh (revision c900529f3d9161bfde5cca0754f83b4d3c3e0220)
1e0e2fa4bSRob Landley#!/bin/sh
2b2441318SGreg Kroah-Hartman# SPDX-License-Identifier: GPL-2.0
3e0e2fa4bSRob Landley
4555187a8SMasahiro Yamadaif [ $# -ne 2 ]
5e0e2fa4bSRob Landleythen
6555187a8SMasahiro Yamada	echo "Usage: headers_install.sh INFILE OUTFILE"
7e0e2fa4bSRob Landley	echo
8e0e2fa4bSRob Landley	echo "Prepares kernel header files for use by user space, by removing"
9e0e2fa4bSRob Landley	echo "all compiler.h definitions and #includes, removing any"
10e0e2fa4bSRob Landley	echo "#ifdef __KERNEL__ sections, and putting __underscores__ around"
11e0e2fa4bSRob Landley	echo "asm/inline/volatile keywords."
12e0e2fa4bSRob Landley	echo
13555187a8SMasahiro Yamada	echo "INFILE: header file to operate on"
14*0f50d21aSMasanari Iida	echo "OUTFILE: output file which the processed header is written to"
15e0e2fa4bSRob Landley
16e0e2fa4bSRob Landley	exit 1
17e0e2fa4bSRob Landleyfi
18e0e2fa4bSRob Landley
19e0e2fa4bSRob Landley# Grab arguments
20555187a8SMasahiro YamadaINFILE=$1
21555187a8SMasahiro YamadaOUTFILE=$2
22555187a8SMasahiro YamadaTMPFILE=$OUTFILE.tmp
23e0e2fa4bSRob Landley
24555187a8SMasahiro Yamadatrap 'rm -f $OUTFILE $TMPFILE' EXIT
25e0e2fa4bSRob Landley
2662244554SMasahiro Yamada# SPDX-License-Identifier with GPL variants must have "WITH Linux-syscall-note"
2762244554SMasahiro Yamadaif [ -n "$(sed -n -e "/SPDX-License-Identifier:.*GPL-/{/WITH Linux-syscall-note/!p}" $INFILE)" ]; then
2862244554SMasahiro Yamada	echo "error: $INFILE: missing \"WITH Linux-syscall-note\" for SPDX-License-Identifier" >&2
2962244554SMasahiro Yamada	exit 1
3062244554SMasahiro Yamadafi
3162244554SMasahiro Yamada
32555187a8SMasahiro Yamadased -E -e '
33555187a8SMasahiro Yamada	s/([[:space:](])(__user|__force|__iomem)[[:space:]]/\1/g
34555187a8SMasahiro Yamada	s/__attribute_const__([[:space:]]|$)/\1/g
35555187a8SMasahiro Yamada	s@^#include <linux/compiler(|_types).h>@@
36555187a8SMasahiro Yamada	s/(^|[^a-zA-Z0-9])__packed([^a-zA-Z0-9_]|$)/\1__attribute__((packed))\2/g
37555187a8SMasahiro Yamada	s/(^|[[:space:](])(inline|asm|volatile)([[:space:](]|$)/\1__\2__\3/g
38555187a8SMasahiro Yamada	s@#(ifndef|define|endif[[:space:]]*/[*])[[:space:]]*_UAPI@#\1 @
39555187a8SMasahiro Yamada' $INFILE > $TMPFILE || exit 1
40e0e2fa4bSRob Landley
41555187a8SMasahiro Yamadascripts/unifdef -U__KERNEL__ -D__EXPORTED_HEADERS__ $TMPFILE > $OUTFILE
42e0e2fa4bSRob Landley[ $? -gt 1 ] && exit 1
43555187a8SMasahiro Yamada
44c7c0eecfSMasahiro Yamada# Remove /* ... */ style comments, and find CONFIG_ references in code
45c7c0eecfSMasahiro Yamadaconfigs=$(sed -e '
46c7c0eecfSMasahiro Yamada:comment
47c7c0eecfSMasahiro Yamada	s:/\*[^*][^*]*:/*:
48c7c0eecfSMasahiro Yamada	s:/\*\*\**\([^/]\):/*\1:
49c7c0eecfSMasahiro Yamada	t comment
50c7c0eecfSMasahiro Yamada	s:/\*\*/: :
51c7c0eecfSMasahiro Yamada	t comment
52c7c0eecfSMasahiro Yamada	/\/\*/! b check
53c7c0eecfSMasahiro Yamada	N
54c7c0eecfSMasahiro Yamada	b comment
55c7c0eecfSMasahiro Yamada:print
56c7c0eecfSMasahiro Yamada	P
57c7c0eecfSMasahiro Yamada	D
58c7c0eecfSMasahiro Yamada:check
59c7c0eecfSMasahiro Yamada	s:^\(CONFIG_[[:alnum:]_]*\):\1\n:
60c7c0eecfSMasahiro Yamada	t print
61c7c0eecfSMasahiro Yamada	s:^[[:alnum:]_][[:alnum:]_]*::
62c7c0eecfSMasahiro Yamada	s:^[^[:alnum:]_][^[:alnum:]_]*::
63c7c0eecfSMasahiro Yamada	t check
64c7c0eecfSMasahiro Yamada	d
65c7c0eecfSMasahiro Yamada' $OUTFILE)
66c7c0eecfSMasahiro Yamada
6759675772SSiddharth Gupta# The entries in the following list do not result in an error.
68c7c0eecfSMasahiro Yamada# Please do not add a new entry. This list is only for existing ones.
69c7c0eecfSMasahiro Yamada# The list will be reduced gradually, and deleted eventually. (hopefully)
70c7c0eecfSMasahiro Yamada#
71c7c0eecfSMasahiro Yamada# The format is <file-name>:<CONFIG-option> in each line.
72c7c0eecfSMasahiro Yamadaconfig_leak_ignores="
73c7c0eecfSMasahiro Yamadaarch/arc/include/uapi/asm/page.h:CONFIG_ARC_PAGE_SIZE_16K
74c7c0eecfSMasahiro Yamadaarch/arc/include/uapi/asm/page.h:CONFIG_ARC_PAGE_SIZE_4K
75c7c0eecfSMasahiro Yamadaarch/arc/include/uapi/asm/swab.h:CONFIG_ARC_HAS_SWAPE
76c7c0eecfSMasahiro Yamadaarch/arm/include/uapi/asm/ptrace.h:CONFIG_CPU_ENDIAN_BE8
77c7c0eecfSMasahiro Yamadaarch/hexagon/include/uapi/asm/ptrace.h:CONFIG_HEXAGON_ARCH_VERSION
78c7c0eecfSMasahiro Yamadaarch/hexagon/include/uapi/asm/user.h:CONFIG_HEXAGON_ARCH_VERSION
79c7c0eecfSMasahiro Yamadaarch/m68k/include/uapi/asm/ptrace.h:CONFIG_COLDFIRE
80c7c0eecfSMasahiro Yamadaarch/nios2/include/uapi/asm/swab.h:CONFIG_NIOS2_CI_SWAB_NO
81c7c0eecfSMasahiro Yamadaarch/nios2/include/uapi/asm/swab.h:CONFIG_NIOS2_CI_SWAB_SUPPORT
82c7c0eecfSMasahiro Yamadaarch/x86/include/uapi/asm/auxvec.h:CONFIG_IA32_EMULATION
83c7c0eecfSMasahiro Yamadaarch/x86/include/uapi/asm/auxvec.h:CONFIG_X86_64
84c7c0eecfSMasahiro Yamada"
85c7c0eecfSMasahiro Yamada
86c7c0eecfSMasahiro Yamadafor c in $configs
87c7c0eecfSMasahiro Yamadado
8859675772SSiddharth Gupta	leak_error=1
89c7c0eecfSMasahiro Yamada
90c7c0eecfSMasahiro Yamada	for ignore in $config_leak_ignores
91c7c0eecfSMasahiro Yamada	do
92c7c0eecfSMasahiro Yamada		if echo "$INFILE:$c" | grep -q "$ignore$"; then
9359675772SSiddharth Gupta			leak_error=
94c7c0eecfSMasahiro Yamada			break
95c7c0eecfSMasahiro Yamada		fi
96c7c0eecfSMasahiro Yamada	done
97c7c0eecfSMasahiro Yamada
9859675772SSiddharth Gupta	if [ "$leak_error" = 1 ]; then
9959675772SSiddharth Gupta		echo "error: $INFILE: leak $c to user-space" >&2
10059675772SSiddharth Gupta		exit 1
101c7c0eecfSMasahiro Yamada	fi
102c7c0eecfSMasahiro Yamadadone
103c7c0eecfSMasahiro Yamada
104555187a8SMasahiro Yamadarm -f $TMPFILE
105e0e2fa4bSRob Landleytrap - EXIT
106