forked from torvalds/linux
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
scripts: Coccinelle script for namespace dependencies.
A script that uses the '<module>.ns_deps' files generated by modpost to automatically add the required symbol namespace dependencies to each module. Usage: 1) Move some symbols to a namespace with EXPORT_SYMBOL_NS() or define DEFAULT_SYMBOL_NAMESPACE 2) Run 'make' (or 'make modules') and get warnings about modules not importing that namespace. 3) Run 'make nsdeps' to automatically add required import statements to said modules. This makes it easer for subsystem maintainers to introduce and maintain symbol namespaces into their codebase. Co-developed-by: Martijn Coenen <[email protected]> Signed-off-by: Martijn Coenen <[email protected]> Acked-by: Julia Lawall <[email protected]> Reviewed-by: Greg Kroah-Hartman <[email protected]> Signed-off-by: Matthias Maennich <[email protected]> Signed-off-by: Jessica Yu <[email protected]>
- Loading branch information
Showing
5 changed files
with
101 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -11436,6 +11436,11 @@ S: Maintained | |
T: git git://git.kernel.org/pub/scm/linux/kernel/git/wtarreau/nolibc.git | ||
F: tools/include/nolibc/ | ||
|
||
NSDEPS | ||
M: Matthias Maennich <[email protected]> | ||
S: Maintained | ||
F: scripts/nsdeps | ||
|
||
NTB AMD DRIVER | ||
M: Shyam Sundar S K <[email protected]> | ||
L: [email protected] | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,23 @@ | ||
// SPDX-License-Identifier: GPL-2.0-only | ||
// | ||
/// Adds missing MODULE_IMPORT_NS statements to source files | ||
/// | ||
/// This script is usually called from scripts/nsdeps with -D ns=<namespace> to | ||
/// add a missing namespace tag to a module source file. | ||
/// | ||
|
||
@has_ns_import@ | ||
declarer name MODULE_IMPORT_NS; | ||
identifier virtual.ns; | ||
@@ | ||
MODULE_IMPORT_NS(ns); | ||
|
||
// Add missing imports, but only adjacent to a MODULE_LICENSE statement. | ||
// That ensures we are adding it only to the main module source file. | ||
@do_import depends on !has_ns_import@ | ||
declarer name MODULE_LICENSE; | ||
expression license; | ||
identifier virtual.ns; | ||
@@ | ||
MODULE_LICENSE(license); | ||
+ MODULE_IMPORT_NS(ns); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,58 @@ | ||
#!/bin/bash | ||
# SPDX-License-Identifier: GPL-2.0 | ||
# Linux kernel symbol namespace import generator | ||
# | ||
# This script requires a minimum spatch version. | ||
SPATCH_REQ_VERSION="1.0.4" | ||
|
||
DIR="$(dirname $(readlink -f $0))/.." | ||
SPATCH="`which ${SPATCH:=spatch}`" | ||
if [ ! -x "$SPATCH" ]; then | ||
echo 'spatch is part of the Coccinelle project and is available at http://coccinelle.lip6.fr/' | ||
exit 1 | ||
fi | ||
|
||
SPATCH_REQ_VERSION_NUM=$(echo $SPATCH_REQ_VERSION | ${DIR}/scripts/ld-version.sh) | ||
SPATCH_VERSION=$($SPATCH --version | head -1 | awk '{print $3}') | ||
SPATCH_VERSION_NUM=$(echo $SPATCH_VERSION | ${DIR}/scripts/ld-version.sh) | ||
|
||
if [ "$SPATCH_VERSION_NUM" -lt "$SPATCH_REQ_VERSION_NUM" ] ; then | ||
echo "spatch needs to be version $SPATCH_REQ_VERSION or higher" | ||
exit 1 | ||
fi | ||
|
||
generate_deps_for_ns() { | ||
$SPATCH --very-quiet --in-place --sp-file \ | ||
$srctree/scripts/coccinelle/misc/add_namespace.cocci -D ns=$1 $2 | ||
} | ||
|
||
generate_deps() { | ||
local mod_name=`basename $@ .ko` | ||
local mod_file=`echo $@ | sed -e 's/\.ko/\.mod/'` | ||
local ns_deps_file=`echo $@ | sed -e 's/\.ko/\.ns_deps/'` | ||
if [ ! -f "$ns_deps_file" ]; then return; fi | ||
local mod_source_files=`cat $mod_file | sed -n 1p \ | ||
| sed -e 's/\.o/\.c/g' \ | ||
| sed "s/[^ ]* */${srctree}\/&/g"` | ||
for ns in `cat $ns_deps_file`; do | ||
echo "Adding namespace $ns to module $mod_name (if needed)." | ||
generate_deps_for_ns $ns $mod_source_files | ||
# sort the imports | ||
for source_file in $mod_source_files; do | ||
sed '/MODULE_IMPORT_NS/Q' $source_file > ${source_file}.tmp | ||
offset=$(wc -l ${source_file}.tmp | awk '{print $1;}') | ||
cat $source_file | grep MODULE_IMPORT_NS | sort -u >> ${source_file}.tmp | ||
tail -n +$((offset +1)) ${source_file} | grep -v MODULE_IMPORT_NS >> ${source_file}.tmp | ||
if ! diff -q ${source_file} ${source_file}.tmp; then | ||
mv ${source_file}.tmp ${source_file} | ||
else | ||
rm ${source_file}.tmp | ||
fi | ||
done | ||
done | ||
} | ||
|
||
for f in `cat $objtree/modules.order`; do | ||
generate_deps $f | ||
done | ||
|