|
@@ -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,
|
|
@@ -407,6 +410,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);
|
|
|
}
|
|
@@ -2119,7 +2127,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;
|
|
@@ -2139,6 +2147,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;
|