Merge tag 'modules-next-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/rusty/linux
Pull module updates from Rusty Russell: "Mainly boring here, too. rmmod --wait finally removed, though" * tag 'modules-next-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/rusty/linux: modpost: fix bogus 'exported twice' warnings. init: fix in-place parameter modification regression asmlinkage, module: Make ksymtab and kcrctab symbols and __this_module __visible kernel: add support for init_array constructors modpost: Optionally ignore secondary errors seen if a single module build fails module: remove rmmod --wait option.
This commit is contained in:
@@ -79,9 +79,11 @@ modpost = scripts/mod/modpost \
|
||||
$(if $(CONFIG_DEBUG_SECTION_MISMATCH),,-S) \
|
||||
$(if $(KBUILD_EXTMOD)$(KBUILD_MODPOST_WARN),-w)
|
||||
|
||||
MODPOST_OPT=$(subst -i,-n,$(filter -i,$(MAKEFLAGS)))
|
||||
|
||||
# We can go over command line length here, so be careful.
|
||||
quiet_cmd_modpost = MODPOST $(words $(filter-out vmlinux FORCE, $^)) modules
|
||||
cmd_modpost = $(MODLISTCMD) | sed 's/\.ko$$/.o/' | $(modpost) -s -T -
|
||||
cmd_modpost = $(MODLISTCMD) | sed 's/\.ko$$/.o/' | $(modpost) $(MODPOST_OPT) -s -T -
|
||||
|
||||
PHONY += __modpost
|
||||
__modpost: $(modules:.ko=.o) FORCE
|
||||
|
@@ -17,6 +17,7 @@
|
||||
#include <string.h>
|
||||
#include <limits.h>
|
||||
#include <stdbool.h>
|
||||
#include <errno.h>
|
||||
#include "modpost.h"
|
||||
#include "../../include/generated/autoconf.h"
|
||||
#include "../../include/linux/license.h"
|
||||
@@ -37,6 +38,8 @@ static int warn_unresolved = 0;
|
||||
/* How a symbol is exported */
|
||||
static int sec_mismatch_count = 0;
|
||||
static int sec_mismatch_verbose = 1;
|
||||
/* ignore missing files */
|
||||
static int ignore_missing_files;
|
||||
|
||||
enum export {
|
||||
export_plain, export_unused, export_gpl,
|
||||
@@ -161,7 +164,7 @@ struct symbol {
|
||||
unsigned int vmlinux:1; /* 1 if symbol is defined in vmlinux */
|
||||
unsigned int kernel:1; /* 1 if symbol is from kernel
|
||||
* (only for external modules) **/
|
||||
unsigned int preloaded:1; /* 1 if symbol from Module.symvers */
|
||||
unsigned int preloaded:1; /* 1 if symbol from Module.symvers, or crc */
|
||||
enum export export; /* Type of export */
|
||||
char name[0];
|
||||
};
|
||||
@@ -329,8 +332,11 @@ static void sym_update_crc(const char *name, struct module *mod,
|
||||
{
|
||||
struct symbol *s = find_symbol(name);
|
||||
|
||||
if (!s)
|
||||
if (!s) {
|
||||
s = new_symbol(name, mod, export);
|
||||
/* Don't complain when we find it later. */
|
||||
s->preloaded = 1;
|
||||
}
|
||||
s->crc = crc;
|
||||
s->crc_valid = 1;
|
||||
}
|
||||
@@ -407,6 +413,11 @@ static int parse_elf(struct elf_info *info, const char *filename)
|
||||
|
||||
hdr = grab_file(filename, &info->size);
|
||||
if (!hdr) {
|
||||
if (ignore_missing_files) {
|
||||
fprintf(stderr, "%s: %s (ignored)\n", filename,
|
||||
strerror(errno));
|
||||
return 0;
|
||||
}
|
||||
perror(filename);
|
||||
exit(1);
|
||||
}
|
||||
@@ -1852,7 +1863,7 @@ static void add_header(struct buffer *b, struct module *mod)
|
||||
buf_printf(b, "\n");
|
||||
buf_printf(b, "MODULE_INFO(vermagic, VERMAGIC_STRING);\n");
|
||||
buf_printf(b, "\n");
|
||||
buf_printf(b, "struct module __this_module\n");
|
||||
buf_printf(b, "__visible struct module __this_module\n");
|
||||
buf_printf(b, "__attribute__((section(\".gnu.linkonce.this_module\"))) = {\n");
|
||||
buf_printf(b, "\t.name = KBUILD_MODNAME,\n");
|
||||
if (mod->has_init)
|
||||
@@ -2118,7 +2129,7 @@ int main(int argc, char **argv)
|
||||
struct ext_sym_list *extsym_iter;
|
||||
struct ext_sym_list *extsym_start = NULL;
|
||||
|
||||
while ((opt = getopt(argc, argv, "i:I:e:msST:o:awM:K:")) != -1) {
|
||||
while ((opt = getopt(argc, argv, "i:I:e:mnsST:o:awM:K:")) != -1) {
|
||||
switch (opt) {
|
||||
case 'i':
|
||||
kernel_read = optarg;
|
||||
@@ -2138,6 +2149,9 @@ int main(int argc, char **argv)
|
||||
case 'm':
|
||||
modversions = 1;
|
||||
break;
|
||||
case 'n':
|
||||
ignore_missing_files = 1;
|
||||
break;
|
||||
case 'o':
|
||||
dump_write = optarg;
|
||||
break;
|
||||
|
Reference in New Issue
Block a user