18c2ecf20Sopenharmony_ci#!/bin/sh 28c2ecf20Sopenharmony_ci# SPDX-License-Identifier: GPL-2.0 38c2ecf20Sopenharmony_ci# Linux kernel symbol namespace import generator 48c2ecf20Sopenharmony_ci# 58c2ecf20Sopenharmony_ci# This script requires a minimum spatch version. 68c2ecf20Sopenharmony_ciSPATCH_REQ_VERSION="1.0.4" 78c2ecf20Sopenharmony_ci 88c2ecf20Sopenharmony_ciDIR="$(dirname $(readlink -f $0))/.." 98c2ecf20Sopenharmony_ciSPATCH="`which ${SPATCH:=spatch}`" 108c2ecf20Sopenharmony_ciif [ ! -x "$SPATCH" ]; then 118c2ecf20Sopenharmony_ci echo 'spatch is part of the Coccinelle project and is available at http://coccinelle.lip6.fr/' 128c2ecf20Sopenharmony_ci exit 1 138c2ecf20Sopenharmony_cifi 148c2ecf20Sopenharmony_ci 158c2ecf20Sopenharmony_ciSPATCH_REQ_VERSION_NUM=$(echo $SPATCH_REQ_VERSION | ${DIR}/scripts/ld-version.sh) 168c2ecf20Sopenharmony_ciSPATCH_VERSION=$($SPATCH --version | head -1 | awk '{print $3}') 178c2ecf20Sopenharmony_ciSPATCH_VERSION_NUM=$(echo $SPATCH_VERSION | ${DIR}/scripts/ld-version.sh) 188c2ecf20Sopenharmony_ci 198c2ecf20Sopenharmony_ciif [ "$SPATCH_VERSION_NUM" -lt "$SPATCH_REQ_VERSION_NUM" ] ; then 208c2ecf20Sopenharmony_ci echo "spatch needs to be version $SPATCH_REQ_VERSION or higher" 218c2ecf20Sopenharmony_ci exit 1 228c2ecf20Sopenharmony_cifi 238c2ecf20Sopenharmony_ci 248c2ecf20Sopenharmony_ciif [ "$KBUILD_EXTMOD" ]; then 258c2ecf20Sopenharmony_ci src_prefix= 268c2ecf20Sopenharmony_cielse 278c2ecf20Sopenharmony_ci src_prefix=$srctree/ 288c2ecf20Sopenharmony_cifi 298c2ecf20Sopenharmony_ci 308c2ecf20Sopenharmony_cigenerate_deps_for_ns() { 318c2ecf20Sopenharmony_ci $SPATCH --very-quiet --in-place --sp-file \ 328c2ecf20Sopenharmony_ci $srctree/scripts/coccinelle/misc/add_namespace.cocci -D nsdeps -D ns=$1 $2 338c2ecf20Sopenharmony_ci} 348c2ecf20Sopenharmony_ci 358c2ecf20Sopenharmony_cigenerate_deps() { 368c2ecf20Sopenharmony_ci local mod=${1%.ko:} 378c2ecf20Sopenharmony_ci shift 388c2ecf20Sopenharmony_ci local namespaces="$*" 398c2ecf20Sopenharmony_ci local mod_source_files="`cat $mod.mod | sed -n 1p \ 408c2ecf20Sopenharmony_ci | sed -e 's/\.o/\.c/g' \ 418c2ecf20Sopenharmony_ci | sed "s|[^ ]* *|${src_prefix}&|g"`" 428c2ecf20Sopenharmony_ci for ns in $namespaces; do 438c2ecf20Sopenharmony_ci echo "Adding namespace $ns to module $mod.ko." 448c2ecf20Sopenharmony_ci generate_deps_for_ns $ns "$mod_source_files" 458c2ecf20Sopenharmony_ci # sort the imports 468c2ecf20Sopenharmony_ci for source_file in $mod_source_files; do 478c2ecf20Sopenharmony_ci sed '/MODULE_IMPORT_NS/Q' $source_file > ${source_file}.tmp 488c2ecf20Sopenharmony_ci offset=$(wc -l ${source_file}.tmp | awk '{print $1;}') 498c2ecf20Sopenharmony_ci cat $source_file | grep MODULE_IMPORT_NS | LANG=C sort -u >> ${source_file}.tmp 508c2ecf20Sopenharmony_ci tail -n +$((offset +1)) ${source_file} | grep -v MODULE_IMPORT_NS >> ${source_file}.tmp 518c2ecf20Sopenharmony_ci if ! diff -q ${source_file} ${source_file}.tmp; then 528c2ecf20Sopenharmony_ci mv ${source_file}.tmp ${source_file} 538c2ecf20Sopenharmony_ci else 548c2ecf20Sopenharmony_ci rm ${source_file}.tmp 558c2ecf20Sopenharmony_ci fi 568c2ecf20Sopenharmony_ci done 578c2ecf20Sopenharmony_ci done 588c2ecf20Sopenharmony_ci} 598c2ecf20Sopenharmony_ci 608c2ecf20Sopenharmony_ciwhile read line 618c2ecf20Sopenharmony_cido 628c2ecf20Sopenharmony_ci generate_deps $line 638c2ecf20Sopenharmony_cidone < $MODULES_NSDEPS 64