Skip to content

Commit

Permalink
Merge git://git.kernel.org/pub/scm/linux/kernel/git/sam/kbuild
Browse files Browse the repository at this point in the history
* git://git.kernel.org/pub/scm/linux/kernel/git/sam/kbuild:
  kbuild: fix depmod comment
  kbuild: Add new Kbuild variable KBUILD_EXTRA_SYMBOLS
  kbuild: support loading extra symbols in modpost
  Add option to enable -Wframe-larger-than= on gcc 4.4
  kbuild: add kconfig symbols to tags output
  kbuild: fix some minor typoes
  kbuild: error out on missing MODULE_LICENSE
  • Loading branch information
torvalds committed Apr 25, 2008
2 parents dd0e101 + 0254da0 commit f7ce1f5
Show file tree
Hide file tree
Showing 8 changed files with 69 additions and 15 deletions.
9 changes: 8 additions & 1 deletion Documentation/kbuild/modules.txt
Original file line number Diff line number Diff line change
Expand Up @@ -486,7 +486,7 @@ Module.symvers contains a list of all exported symbols from a kernel build.
Sometimes, an external module uses exported symbols from another
external module. Kbuild needs to have full knowledge on all symbols
to avoid spitting out warnings about undefined symbols.
Two solutions exist to let kbuild know all symbols of more than
Three solutions exist to let kbuild know all symbols of more than
one external module.
The method with a top-level kbuild file is recommended but may be
impractical in certain situations.
Expand Down Expand Up @@ -523,6 +523,13 @@ Module.symvers contains a list of all exported symbols from a kernel build.
containing the sum of all symbols defined and not part of the
kernel.

Use make variable KBUILD_EXTRA_SYMBOLS in the Makefile
If it is impractical to copy Module.symvers from another
module, you can assign a space separated list of files to
KBUILD_EXTRA_SYMBOLS in your Makfile. These files will be
loaded by modpost during the initialisation of its symbol
tables.

=== 8. Tips & Tricks

--- 8.1 Testing for CONFIG_FOO_BAR
Expand Down
9 changes: 6 additions & 3 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -507,6 +507,10 @@ else
KBUILD_CFLAGS += -O2
endif

ifneq (CONFIG_FRAME_WARN,0)
KBUILD_CFLAGS += $(call cc-option,-Wframe-larger-than=${CONFIG_FRAME_WARN})
endif

# Force gcc to behave correct even for buggy distributions
# Arch Makefiles may override this setting
KBUILD_CFLAGS += $(call cc-option, -fno-stack-protector)
Expand Down Expand Up @@ -1396,15 +1400,15 @@ define xtags
$(all-kconfigs) | xargs $1 -a \
--langdef=kconfig \
--language-force=kconfig \
--regex-kconfig='/^[[:blank:]]*config[[:blank:]]+([[:alnum:]_]+)/\1/'; \
--regex-kconfig='/^[[:blank:]]*(menu|)config[[:blank:]]+([[:alnum:]_]+)/\2/'; \
$(all-defconfigs) | xargs -r $1 -a \
--langdef=dotconfig \
--language-force=dotconfig \
--regex-dotconfig='/^#?[[:blank:]]*(CONFIG_[[:alnum:]_]+)/\1/'; \
elif $1 --version 2>&1 | grep -iq emacs; then \
$(all-sources) | xargs $1 -a; \
$(all-kconfigs) | xargs $1 -a \
--regex='/^[ \t]*config[ \t]+\([a-zA-Z0-9_]+\)/\1/'; \
--regex='/^[ \t]*(menu|)config[ \t]+\([a-zA-Z0-9_]+\)/\2/'; \
$(all-defconfigs) | xargs -r $1 -a \
--regex='/^#?[ \t]?\(CONFIG_[a-zA-Z0-9_]+\)/\1/'; \
else \
Expand Down Expand Up @@ -1539,7 +1543,6 @@ quiet_cmd_rmfiles = $(if $(wildcard $(rm-files)),CLEAN $(wildcard $(rm-files))
cmd_rmfiles = rm -f $(rm-files)

# Run depmod only if we have System.map and depmod is executable
# and we build for the host arch
quiet_cmd_depmod = DEPMOD $(KERNELRELEASE)
cmd_depmod = \
if [ -r System.map -a -x $(DEPMOD) ]; then \
Expand Down
11 changes: 11 additions & 0 deletions lib/Kconfig.debug
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,17 @@ config ENABLE_MUST_CHECK
suppress the "warning: ignoring return value of 'foo', declared with
attribute warn_unused_result" messages.

config FRAME_WARN
int "Warn for stack frames larger than (needs gcc 4.4)"
range 0 8192
default 1024 if !64BIT
default 2048 if 64BIT
help
Tell gcc to warn at build time for stack frames larger than this.
Setting this too low will cause a lot of warnings.
Setting it to 0 disables the warning.
Requires gcc 4.4

config MAGIC_SYSRQ
bool "Magic SysRq key"
depends on !UML
Expand Down
6 changes: 3 additions & 3 deletions scripts/Makefile.build
Original file line number Diff line number Diff line change
Expand Up @@ -27,12 +27,12 @@ ccflags-y :=
cppflags-y :=
ldflags-y :=

# Read .config if it exist, otherwise ignore
# Read auto.conf if it exists, otherwise ignore
-include include/config/auto.conf

include scripts/Kbuild.include

# For backward compatibility check that these variables does not change
# For backward compatibility check that these variables do not change
save-cflags := $(CFLAGS)

# The filename Kbuild has precedence over Makefile
Expand All @@ -55,7 +55,7 @@ hostprogs-y += $(host-progs)
endif
endif

# Do not include host rules unles needed
# Do not include host rules unless needed
ifneq ($(hostprogs-y)$(hostprogs-m),)
include scripts/Makefile.host
endif
Expand Down
2 changes: 1 addition & 1 deletion scripts/Makefile.clean
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ subdir-ymn := $(sort $(subdir-ym) $(subdir-n) $(subdir-))

subdir-ymn := $(addprefix $(obj)/,$(subdir-ymn))

# build a list of files to remove, usually releative to the current
# build a list of files to remove, usually relative to the current
# directory

__clean-files := $(extra-y) $(always) \
Expand Down
12 changes: 6 additions & 6 deletions scripts/Makefile.host
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,9 @@
# Binaries are used during the compilation of the kernel, for example
# to preprocess a data file.
#
# Both C and C++ is supported, but preferred language is C for such utilities.
# Both C and C++ are supported, but preferred language is C for such utilities.
#
# Samle syntax (see Documentation/kbuild/makefile.txt for reference)
# Sample syntax (see Documentation/kbuild/makefiles.txt for reference)
# hostprogs-y := bin2hex
# Will compile bin2hex.c and create an executable named bin2hex
#
Expand All @@ -23,10 +23,10 @@
# hostprogs-y := conf
# conf-objs := conf.o libkconfig.so
# libkconfig-objs := expr.o type.o
# Will create a shared library named libkconfig.so that consist of
# expr.o and type.o (they are both compiled as C code and the object file
# Will create a shared library named libkconfig.so that consists of
# expr.o and type.o (they are both compiled as C code and the object files
# are made as position independent code).
# conf.c is compiled as a c program, and conf.o is linked together with
# conf.c is compiled as a C program, and conf.o is linked together with
# libkconfig.so as the executable conf.
# Note: Shared libraries consisting of C++ files are not supported

Expand Down Expand Up @@ -61,7 +61,7 @@ host-cobjs := $(filter-out %.so,$(host-cobjs))
host-cshobjs := $(sort $(foreach m,$(host-cshlib),$($(m:.so=-objs))))

# output directory for programs/.o files
# hostprogs-y := tools/build may have been specified. Retreive directory
# hostprogs-y := tools/build may have been specified. Retrieve directory
host-objdirs := $(foreach f,$(__hostprogs), $(if $(dir $(f)),$(dir $(f))))
# directory of .o files from prog-objs notation
host-objdirs += $(foreach f,$(host-cmulti), \
Expand Down
8 changes: 8 additions & 0 deletions scripts/Makefile.modpost
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,13 @@ _modpost: __modpost

include include/config/auto.conf
include scripts/Kbuild.include

ifneq ($(KBUILD_EXTMOD),)
# Include the module's Makefile to find KBUILD_EXTRA_SYMBOLS
include $(if $(wildcard $(KBUILD_EXTMOD)/Kbuild), \
$(KBUILD_EXTMOD)/Kbuild, $(KBUILD_EXTMOD)/Makefile)
endif

include scripts/Makefile.lib

kernelsymfile := $(objtree)/Module.symvers
Expand Down Expand Up @@ -69,6 +76,7 @@ modpost = scripts/mod/modpost \
$(if $(CONFIG_MODULE_SRCVERSION_ALL),-a,) \
$(if $(KBUILD_EXTMOD),-i,-o) $(kernelsymfile) \
$(if $(KBUILD_EXTMOD),-I $(modulesymfile)) \
$(if $(iKBUILD_EXTRA_SYMBOLS), $(patsubst %, -e %,$(EXTRA_SYMBOLS))) \
$(if $(KBUILD_EXTMOD),-o $(modulesymfile)) \
$(if $(CONFIG_DEBUG_SECTION_MISMATCH),,-S) \
$(if $(CONFIG_MARKERS),-K $(kernelmarkersfile)) \
Expand Down
27 changes: 26 additions & 1 deletion scripts/mod/modpost.c
Original file line number Diff line number Diff line change
Expand Up @@ -1552,6 +1552,10 @@ static void read_symbols(char *modname)
}

license = get_modinfo(info.modinfo, info.modinfo_len, "license");
if (!license && !is_vmlinux(modname))
fatal("modpost: missing MODULE_LICENSE() in %s\n"
"see include/linux/module.h for "
"more information\n", modname);
while (license) {
if (license_is_gpl_compatible(license))
mod->gpl_compatible = 1;
Expand Down Expand Up @@ -2015,6 +2019,11 @@ static void write_markers(const char *fname)
write_if_changed(&buf, fname);
}

struct ext_sym_list {
struct ext_sym_list *next;
const char *file;
};

int main(int argc, char **argv)
{
struct module *mod;
Expand All @@ -2025,8 +2034,10 @@ int main(int argc, char **argv)
char *markers_write = NULL;
int opt;
int err;
struct ext_sym_list *extsym_iter;
struct ext_sym_list *extsym_start = NULL;

while ((opt = getopt(argc, argv, "i:I:cmsSo:awM:K:")) != -1) {
while ((opt = getopt(argc, argv, "i:I:e:cmsSo:awM:K:")) != -1) {
switch (opt) {
case 'i':
kernel_read = optarg;
Expand All @@ -2038,6 +2049,14 @@ int main(int argc, char **argv)
case 'c':
cross_build = 1;
break;
case 'e':
external_module = 1;
extsym_iter =
NOFAIL(malloc(sizeof(*extsym_iter)));
extsym_iter->next = extsym_start;
extsym_iter->file = optarg;
extsym_start = extsym_iter;
break;
case 'm':
modversions = 1;
break;
Expand Down Expand Up @@ -2071,6 +2090,12 @@ int main(int argc, char **argv)
read_dump(kernel_read, 1);
if (module_read)
read_dump(module_read, 0);
while (extsym_start) {
read_dump(extsym_start->file, 0);
extsym_iter = extsym_start->next;
free(extsym_start);
extsym_start = extsym_iter;
}

while (optind < argc)
read_symbols(argv[optind++]);
Expand Down

0 comments on commit f7ce1f5

Please sign in to comment.