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