History

Merge tag 'kbuild-v5.7' of git://git.kernel.org/pub/scm/linux/kernel/git/masahiroy/linux-kbuild

Pull Kbuild updates from Masahiro Yamada: "Build system: - add CONFIG_UNUSED_KSYMS_WHITELIST, which will be useful to define a fixed set of export symbols for Generic Kernel Image (GKI) - allow to run 'make dt_binding_check' without .config - use full schema for checking DT examples in *.yaml files - make modpost fail for missing MODULE_IMPORT_NS(), which makes more sense because we know the produced modules are never loadable - Remove unused 'AS' variable Kconfig: - sanitize DEFCONFIG_LIST, and remove ARCH_DEFCONFIG from Kconfig files - relax the 'imply' behavior so that symbols implied by 'y' can become 'm' - make 'imply' obey 'depends on' in order to make 'imply' really weak Misc: - add documentation on building the kernel with Clang/LLVM - revive __HAVE_ARCH_STRLEN for 32bit sparc to use optimized strlen() - fix warning from deb-pkg builds when CONFIG_DEBUG_INFO=n - various script and Makefile cleanups" * tag 'kbuild-v5.7' of git://git.kernel.org/pub/scm/linux/kernel/git/masahiroy/linux-kbuild: (34 commits) Makefile: Update kselftest help information kbuild: deb-pkg: fix warning when CONFIG_DEBUG_INFO is unset kbuild: add outputmakefile to no-dot-config-targets kbuild: remove AS variable net: wan: wanxl: refactor the firmware rebuild rule net: wan: wanxl: use $(M68KCC) instead of $(M68KAS) for rebuilding firmware net: wan: wanxl: use allow to pass CROSS_COMPILE_M68k for rebuilding firmware kbuild: add comment about grouped target kbuild: add -Wall to KBUILD_HOSTCXXFLAGS kconfig: remove unused variable in qconf.cc sparc: revive __HAVE_ARCH_STRLEN for 32bit sparc kbuild: refactor Makefile.dtbinst more kbuild: compute the dtbs_install destination more simply Makefile: disallow data races on gcc-10 as well kconfig: make 'imply' obey the direct dependency kconfig: allow symbols implied by y to become m net: drop_monitor: use IS_REACHABLE() to guard net_dm_hw_report() modpost: return error if module is missing ns imports and MODULE_ALLOW_MISSING_NAMESPACE_IMPORTS=n modpost: rework and consolidate logging interface kbuild: allow to run dt_binding_check without kernel configuration ...

Linus Torvalds committed 6 years ago

Commit 5b67fbf2 parents a162984 e51d8da35 files · +356 −200Browse files

Showing the changes to scripts (15 of 35 files). Show all

Unified · Split

15 files
  1. scripts/Makefile.dtbinst +11 −15
  2. scripts/Makefile.lib +2 −1
  3. scripts/Makefile.modpost +8 −7
  4. scripts/adjust_autoksyms.sh +4 −20
  5. scripts/basic/fixdep.c +2 −8
  6. scripts/dtc/Makefile +3 −2
  7. scripts/gcc-plugins/Makefile +1 −1
  8. scripts/gen_autoksyms.sh +52 −0
  9. scripts/kconfig/Makefile +0 −4
  10. scripts/kconfig/qconf.cc +0 −2
  11. scripts/kconfig/symbol.c +4 −5
  12. scripts/mkcompile_h +0 −11
  13. scripts/mod/modpost.c +40 −43
  14. scripts/mod/modpost.h +11 −3
  15. scripts/package/mkdebian +5 −0
scripts/Makefile.dtbinst+11−15
@@ -13,28 +13,24 @@ src := $(obj) · 12 unmodified lines
13PHONY := __dtbs_install13PHONY := __dtbs_install
14__dtbs_install:14__dtbs_install:
15 15
16export dtbinst_root ?= $(obj)
17
18include include/config/auto.conf16include include/config/auto.conf
19include scripts/Kbuild.include17include scripts/Kbuild.include
20include $(src)/Makefile18include $(src)/Makefile
21 19
22dtbinst-files := $(sort $(dtb-y) $(if $(CONFIG_OF_ALL_DTBS), $(dtb-)))20dtbs := $(addprefix $(dst)/, $(dtb-y) $(if $(CONFIG_OF_ALL_DTBS),$(dtb-)))
23dtbinst-dirs := $(subdir-y) $(subdir-m)21subdirs := $(addprefix $(obj)/, $(subdir-y) $(subdir-m))
24
25# Helper targets for Installing DTBs into the boot directory
26quiet_cmd_dtb_install = INSTALL $<
27 cmd_dtb_install = mkdir -p $(2); cp $< $(2)
28 22
29install-dir = $(patsubst $(dtbinst_root)%,$(INSTALL_DTBS_PATH)%,$(obj))23__dtbs_install: $(dtbs) $(subdirs)
24 @:
30 25
31$(dtbinst-files): %.dtb: $(obj)/%.dtb26quiet_cmd_dtb_install = INSTALL $@
32 $(call cmd,dtb_install,$(install-dir))27 cmd_dtb_install = install -D $< $@
33 28
34$(dtbinst-dirs):29$(dst)/%.dtb: $(obj)/%.dtb
35 $(Q)$(MAKE) $(dtbinst)=$(obj)/$@30 $(call cmd,dtb_install)
36 31
37PHONY += $(dtbinst-files) $(dtbinst-dirs)32PHONY += $(subdirs)
38__dtbs_install: $(dtbinst-files) $(dtbinst-dirs)33$(subdirs):
34 $(Q)$(MAKE) $(dtbinst)=$@ dst=$(patsubst $(obj)/%,$(dst)/%,$@)
39 35
40.PHONY: $(PHONY)36.PHONY: $(PHONY)
scripts/Makefile.lib+2−1
@@ -297,7 +297,8 @@ $(obj)/%.dtb: $(src)/%.dts $(DTC) FORCE · 296 unmodified lines
297 297
298DT_CHECKER ?= dt-validate298DT_CHECKER ?= dt-validate
299DT_BINDING_DIR := Documentation/devicetree/bindings299DT_BINDING_DIR := Documentation/devicetree/bindings
300DT_TMP_SCHEMA := $(objtree)/$(DT_BINDING_DIR)/processed-schema.yaml300# DT_TMP_SCHEMA may be overridden from Documentation/devicetree/bindings/Makefile
301DT_TMP_SCHEMA ?= $(objtree)/$(DT_BINDING_DIR)/processed-schema.yaml
301 302
302quiet_cmd_dtb_check = CHECK $@303quiet_cmd_dtb_check = CHECK $@
303 cmd_dtb_check = $(DT_CHECKER) -u $(srctree)/$(DT_BINDING_DIR) -p $(DT_TMP_SCHEMA) $@304 cmd_dtb_check = $(DT_CHECKER) -u $(srctree)/$(DT_BINDING_DIR) -p $(DT_TMP_SCHEMA) $@
scripts/Makefile.modpost+8−7
@@ -46,13 +46,14 @@ include scripts/Kbuild.include · 45 unmodified lines
46kernelsymfile := $(objtree)/Module.symvers46kernelsymfile := $(objtree)/Module.symvers
47modulesymfile := $(firstword $(KBUILD_EXTMOD))/Module.symvers47modulesymfile := $(firstword $(KBUILD_EXTMOD))/Module.symvers
48 48
49MODPOST = scripts/mod/modpost \49MODPOST = scripts/mod/modpost \
50 $(if $(CONFIG_MODVERSIONS),-m) \50 $(if $(CONFIG_MODVERSIONS),-m) \
51 $(if $(CONFIG_MODULE_SRCVERSION_ALL),-a) \51 $(if $(CONFIG_MODULE_SRCVERSION_ALL),-a) \
52 $(if $(KBUILD_EXTMOD),-i,-o) $(kernelsymfile) \52 $(if $(KBUILD_EXTMOD),-i,-o) $(kernelsymfile) \
53 $(if $(KBUILD_EXTMOD),$(addprefix -e ,$(KBUILD_EXTRA_SYMBOLS))) \53 $(if $(KBUILD_EXTMOD),$(addprefix -e ,$(KBUILD_EXTRA_SYMBOLS))) \
54 $(if $(KBUILD_EXTMOD),-o $(modulesymfile)) \54 $(if $(KBUILD_EXTMOD),-o $(modulesymfile)) \
55 $(if $(CONFIG_SECTION_MISMATCH_WARN_ONLY),,-E) \55 $(if $(CONFIG_SECTION_MISMATCH_WARN_ONLY),,-E) \
56 $(if $(CONFIG_MODULE_ALLOW_MISSING_NAMESPACE_IMPORTS)$(KBUILD_NSDEPS),-N) \
56 $(if $(KBUILD_MODPOST_WARN),-w)57 $(if $(KBUILD_MODPOST_WARN),-w)
57 58
58ifdef MODPOST_VMLINUX59ifdef MODPOST_VMLINUX
scripts/adjust_autoksyms.sh+4−20
@@ -1,14 +1,13 @@
1#!/bin/sh1#!/bin/sh
2# SPDX-License-Identifier: GPL-2.0-only2# SPDX-License-Identifier: GPL-2.0-only
3 3
4# Script to create/update include/generated/autoksyms.h and dependency files4# Script to update include/generated/autoksyms.h and dependency files
5#5#
6# Copyright: (C) 2016 Linaro Limited6# Copyright: (C) 2016 Linaro Limited
7# Created by: Nicolas Pitre, January 20167# Created by: Nicolas Pitre, January 2016
8#8#
9 9
10# Create/update the include/generated/autoksyms.h file from the list10# Update the include/generated/autoksyms.h file.
11# of all module's needed symbols as recorded on the second line of *.mod files.
12#11#
13# For each symbol being added or removed, the corresponding dependency12# For each symbol being added or removed, the corresponding dependency
14# file's timestamp is updated to force a rebuild of the affected source13# file's timestamp is updated to force a rebuild of the affected source
@@ -38,23 +37,8 @@ esac · 23 unmodified lines
38# We need access to CONFIG_ symbols37# We need access to CONFIG_ symbols
39. include/config/auto.conf38. include/config/auto.conf
40 39
41# Generate a new ksym list file with symbols needed by the current40# Generate a new symbol list file
42# set of modules.41$CONFIG_SHELL $srctree/scripts/gen_autoksyms.sh "$new_ksyms_file"
43cat > "$new_ksyms_file" << EOT
44/*
45 * Automatically generated file; DO NOT EDIT.
46 */
47
48EOT
49sed 's/ko$/mod/' modules.order |
50xargs -n1 sed -n -e '2{s/ /\n/g;/^$/!p;}' -- |
51sort -u |
52sed -e 's/\(.*\)/#define __KSYM_\1 1/' >> "$new_ksyms_file"
53
54# Special case for modversions (see modpost.c)
55if [ -n "$CONFIG_MODVERSIONS" ]; then
56 echo "#define __KSYM_module_layout 1" >> "$new_ksyms_file"
57fi
58 42
59# Extract changes between old and new list and touch corresponding43# Extract changes between old and new list and touch corresponding
60# dependency files.44# dependency files.
scripts/basic/fixdep.c+2−8
@@ -77,11 +77,6 @@ · 76 unmodified lines
77 * dependencies on include/config/my/option.h for every77 * dependencies on include/config/my/option.h for every
78 * CONFIG_MY_OPTION encountered in any of the prerequisites.78 * CONFIG_MY_OPTION encountered in any of the prerequisites.
79 *79 *
80 * It will also filter out all the dependencies on *.ver. We need
81 * to make sure that the generated version checksum are globally up
82 * to date before even starting the recursive build, so it's too late
83 * at this point anyway.
84 *
85 * We don't even try to really parse the header files, but80 * We don't even try to really parse the header files, but
86 * merely grep, i.e. if CONFIG_FOO is mentioned in a comment, it will81 * merely grep, i.e. if CONFIG_FOO is mentioned in a comment, it will
87 * be picked up as well. It's not a problem with respect to82 * be picked up as well. It's not a problem with respect to
@@ -251,7 +246,7 @@ static void parse_config_file(const char *p) · 163 unmodified lines
251 }246 }
252 p += 7;247 p += 7;
253 q = p;248 q = p;
254 while (*q && (isalnum(*q) || *q == '_'))249 while (isalnum(*q) || *q == '_')
255 q++;250 q++;
256 if (str_ends_with(p, q - p, "_MODULE"))251 if (str_ends_with(p, q - p, "_MODULE"))
257 r = q - 7;252 r = q - 7;
@@ -299,8 +294,7 @@ static void *read_file(const char *filename) · 41 unmodified lines
299static int is_ignored_file(const char *s, int len)294static int is_ignored_file(const char *s, int len)
300{295{
301 return str_ends_with(s, len, "include/generated/autoconf.h") ||296 return str_ends_with(s, len, "include/generated/autoconf.h") ||
302 str_ends_with(s, len, "include/generated/autoksyms.h") ||297 str_ends_with(s, len, "include/generated/autoksyms.h");
303 str_ends_with(s, len, ".ver");
304}298}
305 299
306/*300/*
scripts/dtc/Makefile+3−2
@@ -1,8 +1,9 @@
1# SPDX-License-Identifier: GPL-2.01# SPDX-License-Identifier: GPL-2.0
2# scripts/dtc makefile2# scripts/dtc makefile
3 3
4hostprogs := dtc4hostprogs := dtc
5always-$(CONFIG_DTC) := $(hostprogs)5always-$(CONFIG_DTC) += $(hostprogs)
6always-$(CHECK_DT_BINDING) += $(hostprogs)
6 7
7dtc-objs := dtc.o flattree.o fstree.o data.o livetree.o treesource.o \8dtc-objs := dtc.o flattree.o fstree.o data.o livetree.o treesource.o \
8 srcpos.o checks.o util.o9 srcpos.o checks.o util.o
scripts/gcc-plugins/Makefile+1−1
@@ -10,7 +10,7 @@ else · 9 unmodified lines
10 HOSTLIBS := hostcxxlibs10 HOSTLIBS := hostcxxlibs
11 HOST_EXTRACXXFLAGS += -I$(GCC_PLUGINS_DIR)/include -I$(src) -std=gnu++98 -fno-rtti11 HOST_EXTRACXXFLAGS += -I$(GCC_PLUGINS_DIR)/include -I$(src) -std=gnu++98 -fno-rtti
12 HOST_EXTRACXXFLAGS += -fno-exceptions -fasynchronous-unwind-tables -ggdb12 HOST_EXTRACXXFLAGS += -fno-exceptions -fasynchronous-unwind-tables -ggdb
13 HOST_EXTRACXXFLAGS += -Wno-narrowing -Wno-unused-variable13 HOST_EXTRACXXFLAGS += -Wno-narrowing -Wno-unused-variable -Wno-c++11-compat
14 export HOST_EXTRACXXFLAGS14 export HOST_EXTRACXXFLAGS
15endif15endif
16 16
scripts/gen_autoksyms.sh+52−0
@@ -0,0 +1,52 @@
1#!/bin/sh
2# SPDX-License-Identifier: GPL-2.0-only
3
4# Create an autoksyms.h header file from the list of all module's needed symbols
5# as recorded on the second line of *.mod files and the user-provided symbol
6# whitelist.
7
8set -e
9
10output_file="$1"
11
12# Use "make V=1" to debug this script.
13case "$KBUILD_VERBOSE" in
14*1*)
15 set -x
16 ;;
17esac
18
19# We need access to CONFIG_ symbols
20. include/config/auto.conf
21
22ksym_wl=/dev/null
23if [ -n "$CONFIG_UNUSED_KSYMS_WHITELIST" ]; then
24 # Use 'eval' to expand the whitelist path and check if it is relative
25 eval ksym_wl="$CONFIG_UNUSED_KSYMS_WHITELIST"
26 [ "${ksym_wl}" != "${ksym_wl#/}" ] || ksym_wl="$abs_srctree/$ksym_wl"
27 if [ ! -f "$ksym_wl" ] || [ ! -r "$ksym_wl" ]; then
28 echo "ERROR: '$ksym_wl' whitelist file not found" >&2
29 exit 1
30 fi
31fi
32
33# Generate a new ksym list file with symbols needed by the current
34# set of modules.
35cat > "$output_file" << EOT
36/*
37 * Automatically generated file; DO NOT EDIT.
38 */
39
40EOT
41
42[ -f modules.order ] && modlist=modules.order || modlist=/dev/null
43sed 's/ko$/mod/' $modlist |
44xargs -n1 sed -n -e '2{s/ /\n/g;/^$/!p;}' -- |
45cat - "$ksym_wl" |
46sort -u |
47sed -e 's/\(.*\)/#define __KSYM_\1 1/' >> "$output_file"
48
49# Special case for modversions (see modpost.c)
50if [ -n "$CONFIG_MODVERSIONS" ]; then
51 echo "#define __KSYM_module_layout 1" >> "$output_file"
52fi
scripts/kconfig/Makefile+0−4
@@ -12,10 +12,6 @@ else · 11 unmodified lines
12Kconfig := Kconfig12Kconfig := Kconfig
13endif13endif
14 14
15ifndef KBUILD_DEFCONFIG
16KBUILD_DEFCONFIG := defconfig
17endif
18
19ifeq ($(quiet),silent_)15ifeq ($(quiet),silent_)
20silent := -s16silent := -s
21endif17endif
scripts/kconfig/qconf.cc+0−2
@@ -309,8 +309,6 @@ ConfigList::ConfigList(ConfigView* p, const char *name) · 308 unmodified lines
309 showName(false), showRange(false), showData(false), mode(singleMode), optMode(normalOpt),309 showName(false), showRange(false), showData(false), mode(singleMode), optMode(normalOpt),
310 rootEntry(0), headerPopup(0)310 rootEntry(0), headerPopup(0)
311{311{
312 int i;
313
314 setObjectName(name);312 setObjectName(name);
315 setSortingEnabled(false);313 setSortingEnabled(false);
316 setRootIsDecorated(true);314 setRootIsDecorated(true);
scripts/kconfig/symbol.c+4−5
@@ -221,7 +221,7 @@ static void sym_calc_visibility(struct symbol *sym) · 220 unmodified lines
221 sym_set_changed(sym);221 sym_set_changed(sym);
222 }222 }
223 tri = no;223 tri = no;
224 if (sym->implied.expr && sym->dir_dep.tri != no)224 if (sym->implied.expr)
225 tri = expr_calc_value(sym->implied.expr);225 tri = expr_calc_value(sym->implied.expr);
226 if (tri == mod && sym_get_type(sym) == S_BOOLEAN)226 if (tri == mod && sym_get_type(sym) == S_BOOLEAN)
227 tri = yes;227 tri = yes;
@@ -394,6 +394,8 @@ void sym_calc_value(struct symbol *sym) · 166 unmodified lines
394 if (sym->implied.tri != no) {394 if (sym->implied.tri != no) {
395 sym->flags |= SYMBOL_WRITE;395 sym->flags |= SYMBOL_WRITE;
396 newval.tri = EXPR_OR(newval.tri, sym->implied.tri);396 newval.tri = EXPR_OR(newval.tri, sym->implied.tri);
397 newval.tri = EXPR_AND(newval.tri,
398 sym->dir_dep.tri);
397 }399 }
398 }400 }
399 calc_newval:401 calc_newval:
@@ -401,8 +403,7 @@ void sym_calc_value(struct symbol *sym) · 1 unmodified line
401 sym_warn_unmet_dep(sym);403 sym_warn_unmet_dep(sym);
402 newval.tri = EXPR_OR(newval.tri, sym->rev_dep.tri);404 newval.tri = EXPR_OR(newval.tri, sym->rev_dep.tri);
403 }405 }
404 if (newval.tri == mod &&406 if (newval.tri == mod && sym_get_type(sym) == S_BOOLEAN)
405 (sym_get_type(sym) == S_BOOLEAN || sym->implied.tri == yes))
406 newval.tri = yes;407 newval.tri = yes;
407 break;408 break;
408 case S_STRING:409 case S_STRING:
@@ -484,8 +485,6 @@ bool sym_tristate_within_range(struct symbol *sym, tristate val) · 75 unmodified lines
484 return false;485 return false;
485 if (sym->visible <= sym->rev_dep.tri)486 if (sym->visible <= sym->rev_dep.tri)
486 return false;487 return false;
487 if (sym->implied.tri == yes && val == mod)
488 return false;
489 if (sym_is_choice_value(sym) && sym->visible == yes)488 if (sym_is_choice_value(sym) && sym->visible == yes)
490 return val == yes;489 return val == yes;
491 return val >= sym->rev_dep.tri && val <= sym->visible;490 return val >= sym->rev_dep.tri && val <= sym->visible;
scripts/mkcompile_h+0−11
@@ -10,17 +10,6 @@ CC=$6 · 9 unmodified lines
10 10
11vecho() { [ "${quiet}" = "silent_" ] || echo "$@" ; }11vecho() { [ "${quiet}" = "silent_" ] || echo "$@" ; }
12 12
13# If compile.h exists already and we don't own autoconf.h
14# (i.e. we're not the same user who did make *config), don't
15# modify compile.h
16# So "sudo make install" won't change the "compiled by <user>"
17# do "compiled by root"
18
19if [ -r $TARGET -a ! -O include/generated/autoconf.h ]; then
20 vecho " SKIPPED $TARGET"
21 exit 0
22fi
23
24# Do not expand names13# Do not expand names
25set -f14set -f
26 15
scripts/mod/modpost.c+40−43
@@ -39,6 +39,8 @@ static int sec_mismatch_count = 0; · 38 unmodified lines
39static int sec_mismatch_fatal = 0;39static int sec_mismatch_fatal = 0;
40/* ignore missing files */40/* ignore missing files */
41static int ignore_missing_files;41static int ignore_missing_files;
42/* If set to 1, only warn (instead of error) about missing ns imports */
43static int allow_missing_ns_imports;
42 44
43enum export {45enum export {
44 export_plain, export_unused, export_gpl,46 export_plain, export_unused, export_gpl,
@@ -51,41 +53,33 @@ enum export { · 6 unmodified lines
51 53
52#define MODULE_NAME_LEN (64 - sizeof(Elf_Addr))54#define MODULE_NAME_LEN (64 - sizeof(Elf_Addr))
53 55
54#define PRINTF __attribute__ ((format (printf, 1, 2)))56void __attribute__((format(printf, 2, 3)))
55 57modpost_log(enum loglevel loglevel, const char *fmt, ...)
56PRINTF void fatal(const char *fmt, ...)
57{58{
58 va_list arglist;59 va_list arglist;
59 60
60 fprintf(stderr, "FATAL: ");61 switch (loglevel) {
61 62 case LOG_WARN:
62 va_start(arglist, fmt);63 fprintf(stderr, "WARNING: ");
63 vfprintf(stderr, fmt, arglist);64 break;
64 va_end(arglist);65 case LOG_ERROR:
65 66 fprintf(stderr, "ERROR: ");
66 exit(1);67 break;
67}68 case LOG_FATAL:
68 69 fprintf(stderr, "FATAL: ");
69PRINTF void warn(const char *fmt, ...)70 break;
70{71 default: /* invalid loglevel, ignore */
71 va_list arglist;72 break;
73 }
72 74
73 fprintf(stderr, "WARNING: ");75 fprintf(stderr, "modpost: ");
74 76
75 va_start(arglist, fmt);77 va_start(arglist, fmt);
76 vfprintf(stderr, fmt, arglist);78 vfprintf(stderr, fmt, arglist);
77 va_end(arglist);79 va_end(arglist);
78}
79
80PRINTF void merror(const char *fmt, ...)
81{
82 va_list arglist;
83 80
84 fprintf(stderr, "ERROR: ");81 if (loglevel == LOG_FATAL)
85 82 exit(1);
86 va_start(arglist, fmt);
87 vfprintf(stderr, fmt, arglist);
88 va_end(arglist);
89}83}
90 84
91static inline bool strends(const char *str, const char *postfix)85static inline bool strends(const char *str, const char *postfix)
@@ -113,7 +107,7 @@ static int is_vmlinux(const char *modname) · 21 unmodified lines
113void *do_nofail(void *ptr, const char *expr)107void *do_nofail(void *ptr, const char *expr)
114{108{
115 if (!ptr)109 if (!ptr)
116 fatal("modpost: Memory allocation failure: %s.\n", expr);110 fatal("Memory allocation failure: %s.\n", expr);
117 111
118 return ptr;112 return ptr;
119}113}
@@ -2022,7 +2016,7 @@ static void read_symbols(const char *modname) · 1902 unmodified lines
2022 2016
2023 license = get_modinfo(&info, "license");2017 license = get_modinfo(&info, "license");
2024 if (!license && !is_vmlinux(modname))2018 if (!license && !is_vmlinux(modname))
2025 warn("modpost: missing MODULE_LICENSE() in %s\n"2019 warn("missing MODULE_LICENSE() in %s\n"
2026 "see include/linux/module.h for "2020 "see include/linux/module.h for "
2027 "more information\n", modname);2021 "more information\n", modname);
2028 while (license) {2022 while (license) {
@@ -2153,15 +2147,15 @@ static void check_for_gpl_usage(enum export exp, const char *m, const char *s) · 124 unmodified lines
2153 2147
2154 switch (exp) {2148 switch (exp) {
2155 case export_gpl:2149 case export_gpl:
2156 fatal("modpost: GPL-incompatible module %s%s "2150 fatal("GPL-incompatible module %s%s "
2157 "uses GPL-only symbol '%s'\n", m, e, s);2151 "uses GPL-only symbol '%s'\n", m, e, s);
2158 break;2152 break;
2159 case export_unused_gpl:2153 case export_unused_gpl:
2160 fatal("modpost: GPL-incompatible module %s%s "2154 fatal("GPL-incompatible module %s%s "
2161 "uses GPL-only symbol marked UNUSED '%s'\n", m, e, s);2155 "uses GPL-only symbol marked UNUSED '%s'\n", m, e, s);
2162 break;2156 break;
2163 case export_gpl_future:2157 case export_gpl_future:
2164 warn("modpost: GPL-incompatible module %s%s "2158 warn("GPL-incompatible module %s%s "
2165 "uses future GPL-only symbol '%s'\n", m, e, s);2159 "uses future GPL-only symbol '%s'\n", m, e, s);
2166 break;2160 break;
2167 case export_plain:2161 case export_plain:
@@ -2179,7 +2173,7 @@ static void check_for_unused(enum export exp, const char *m, const char *s) · 11 unmodified lines
2179 switch (exp) {2173 switch (exp) {
2180 case export_unused:2174 case export_unused:
2181 case export_unused_gpl:2175 case export_unused_gpl:
2182 warn("modpost: module %s%s "2176 warn("module %s%s "
2183 "uses symbol '%s' marked UNUSED\n", m, e, s);2177 "uses symbol '%s' marked UNUSED\n", m, e, s);
2184 break;2178 break;
2185 default:2179 default:
@@ -2198,14 +2192,11 @@ static int check_exports(struct module *mod) · 12 unmodified lines
2198 exp = find_symbol(s->name);2192 exp = find_symbol(s->name);
2199 if (!exp || exp->module == mod) {2193 if (!exp || exp->module == mod) {
2200 if (have_vmlinux && !s->weak) {2194 if (have_vmlinux && !s->weak) {
2201 if (warn_unresolved) {2195 modpost_log(warn_unresolved ? LOG_WARN : LOG_ERROR,
2202 warn("\"%s\" [%s.ko] undefined!\n",2196 "\"%s\" [%s.ko] undefined!\n",
2203 s->name, mod->name);2197 s->name, mod->name);
2204 } else {2198 if (!warn_unresolved)
2205 merror("\"%s\" [%s.ko] undefined!\n",
2206 s->name, mod->name);
2207 err = 1;2199 err = 1;
2208 }
2209 }2200 }
2210 continue;2201 continue;
2211 }2202 }
@@ -2217,8 +2208,11 @@ static int check_exports(struct module *mod) · 5 unmodified lines
2217 2208
2218 if (exp->namespace &&2209 if (exp->namespace &&
2219 !module_imports_namespace(mod, exp->namespace)) {2210 !module_imports_namespace(mod, exp->namespace)) {
2220 warn("module %s uses symbol %s from namespace %s, but does not import it.\n",2211 modpost_log(allow_missing_ns_imports ? LOG_WARN : LOG_ERROR,
2221 basename, exp->name, exp->namespace);2212 "module %s uses symbol %s from namespace %s, but does not import it.\n",
2213 basename, exp->name, exp->namespace);
2214 if (!allow_missing_ns_imports)
2215 err = 1;
2222 add_namespace(&mod->missing_namespaces, exp->namespace);2216 add_namespace(&mod->missing_namespaces, exp->namespace);
2223 }2217 }
2224 2218
@@ -2565,7 +2559,7 @@ int main(int argc, char **argv) · 340 unmodified lines
2565 struct ext_sym_list *extsym_iter;2559 struct ext_sym_list *extsym_iter;
2566 struct ext_sym_list *extsym_start = NULL;2560 struct ext_sym_list *extsym_start = NULL;
2567 2561
2568 while ((opt = getopt(argc, argv, "i:e:mnsT:o:awEd:")) != -1) {2562 while ((opt = getopt(argc, argv, "i:e:mnsT:o:awENd:")) != -1) {
2569 switch (opt) {2563 switch (opt) {
2570 case 'i':2564 case 'i':
2571 kernel_read = optarg;2565 kernel_read = optarg;
@@ -2603,6 +2597,9 @@ int main(int argc, char **argv) · 31 unmodified lines
2603 case 'E':2597 case 'E':
2604 sec_mismatch_fatal = 1;2598 sec_mismatch_fatal = 1;
2605 break;2599 break;
2600 case 'N':
2601 allow_missing_ns_imports = 1;
2602 break;
2606 case 'd':2603 case 'd':
2607 missing_namespace_deps = optarg;2604 missing_namespace_deps = optarg;
2608 break;2605 break;
@@ -2658,7 +2655,7 @@ int main(int argc, char **argv) · 49 unmodified lines
2658 if (dump_write)2655 if (dump_write)
2659 write_dump(dump_write);2656 write_dump(dump_write);
2660 if (sec_mismatch_count && sec_mismatch_fatal)2657 if (sec_mismatch_count && sec_mismatch_fatal)
2661 fatal("modpost: Section mismatches detected.\n"2658 fatal("Section mismatches detected.\n"
2662 "Set CONFIG_SECTION_MISMATCH_WARN_ONLY=y to allow them.\n");2659 "Set CONFIG_SECTION_MISMATCH_WARN_ONLY=y to allow them.\n");
2663 for (n = 0; n < SYMBOL_HASH_SIZE; n++) {2660 for (n = 0; n < SYMBOL_HASH_SIZE; n++) {
2664 struct symbol *s;2661 struct symbol *s;
scripts/mod/modpost.h+11−3
@@ -198,6 +198,14 @@ void *grab_file(const char *filename, unsigned long *size); · 197 unmodified lines
198char* get_next_line(unsigned long *pos, void *file, unsigned long size);198char* get_next_line(unsigned long *pos, void *file, unsigned long size);
199void release_file(void *file, unsigned long size);199void release_file(void *file, unsigned long size);
200 200
201void fatal(const char *fmt, ...);201enum loglevel {
202void warn(const char *fmt, ...);202 LOG_WARN,
203void merror(const char *fmt, ...);203 LOG_ERROR,
204 LOG_FATAL
205};
206
207void modpost_log(enum loglevel loglevel, const char *fmt, ...);
208
209#define warn(fmt, args...) modpost_log(LOG_WARN, fmt, ##args)
210#define merror(fmt, args...) modpost_log(LOG_ERROR, fmt, ##args)
211#define fatal(fmt, args...) modpost_log(LOG_FATAL, fmt, ##args)
scripts/package/mkdebian+5−0
@@ -198,6 +198,10 @@ Description: Linux support headers for userspace development · 197 unmodified lines
198 This package provides userspaces headers from the Linux kernel. These headers198 This package provides userspaces headers from the Linux kernel. These headers
199 are used by the installed headers for GNU glibc and other system libraries.199 are used by the installed headers for GNU glibc and other system libraries.
200Multi-Arch: same200Multi-Arch: same
201EOF
202
203if is_enabled CONFIG_DEBUG_INFO; then
204cat <<EOF >> debian/control
201 205
202Package: $dbg_packagename206Package: $dbg_packagename
203Section: debug207Section: debug
@@ -206,6 +210,7 @@ Description: Linux kernel debugging symbols for $version · 2 unmodified lines
206 This package will come in handy if you need to debug the kernel. It provides210 This package will come in handy if you need to debug the kernel. It provides
207 all the necessary debug symbols for the kernel and its modules.211 all the necessary debug symbols for the kernel and its modules.
208EOF212EOF
213fi
209 214
210cat <<EOF > debian/rules215cat <<EOF > debian/rules
211#!$(command -v $MAKE) -f216#!$(command -v $MAKE) -f