# Detect files that are tracked but ignored by git.
check_tracked_ignored_files () {
git -C "${srctree:-.}" ls-files -i -c --exclude-per-directory=.gitignore 2>/dev/null |
sed 's/$/: warning: ignored by one of the .gitignore files/' >&2
}
# Check for missing #include <linux/export.h>
java.lang.NullPointerException # The rule for including <linux/export.h> is very simple: # Include <linux/export.h> only when you use EXPORT_SYMBOL(). That's it.
java.lang.NullPointerException # However, some headers include <linux/export.h> even though they are completely # unrelated to EXPORT_SYMBOL().
java.lang.NullPointerException # One example is include/linux/module.h. Please note <linux/module.h> and # <linux/export.h> are orthogonal. <linux/module.h> should be included by files # that can be compiled as modules. In other words, <linux/module.h> should be # included by EXPORT_SYMBOL consumers. In contrast, <linux/export.h> should be # included from EXPORT_SYMBOL providers, which may or may not be modular. # Hence, include/linux/module.h should *not* include <linux/export.h>.
java.lang.NullPointerException # Another example is include/linux/linkage.h, which is completely unrelated to # EXPORT_SYMBOL(). Worse, it is included by most C files, which means, most C # files end up including <linux/export.h>, even though only some of them # actually export symbols. Hence, include/linux/linkage.h should *not* include # <linux/export.h>.
java.lang.NullPointerException # Before fixing such headers, we must ensure that C files using EXPORT_SYMBOL() # include <linux/export.h> directly, since many C files currently rely on # <linux/export.h> being included indirectly (likely, via <linux/linkage> etc.).
java.lang.NullPointerException # Therefore, this check.
java.lang.NullPointerException # The problem is simple - the warned files use EXPORT_SYMBOL(), but donot # include <linux/export.h>. Please add #include <linux/export.h> to them.
java.lang.NullPointerException # If the included headers are sorted alphabetically, please insert # <linux/export.h> in the appropriate position to maintain the sort order. # Forthis reason, this script only checks missing <linux/export.h>, but # does not automatically fix it.
check_missing_include_linux_export_h () {
# If you donot use EXPORT_SYMBOL(), please donot include <linux/export.h>. # Currently, this is checked for *.c files, but notfor *.h files, because some # *.c files rely on <linux/export.h> being included indirectly.
check_unnecessary_include_linux_export_h () {
git -C "${srctree:-.}" grep --files-with-matches '#include[[:space:]]*<linux/export\.h>' \
-- '*.[c]' :^tools/ |
xargs -r git -C "${srctree:-.}" grep --files-without-match -E 'EXPORT_SYMBOL((_NS)?(_GPL)?|_FOR_MODULES)\(.*\)' |
xargs -r printf "%s: warning: EXPORT_SYMBOL() is not used, but #include <linux/export.h> is present\n" >&2
}
case"${KBUILD_EXTRA_WARN}" in
*1*)
check_tracked_ignored_files
;;
esac
case"${KBUILD_EXTRA_WARN}" in
*2*)
check_missing_include_linux_export_h
check_unnecessary_include_linux_export_h
;;
esac
Messung V0.5 in Prozent
¤ Dauer der Verarbeitung: 0.10 Sekunden
(vorverarbeitet am 2026-06-08)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.