diff options
| author | Dmitry Torokhov <dmitry.torokhov@gmail.com> | 2011-05-24 00:06:26 -0700 |
|---|---|---|
| committer | Dmitry Torokhov <dmitry.torokhov@gmail.com> | 2011-05-24 00:06:26 -0700 |
| commit | b73077eb03f510a84b102fb97640e595a958403c (patch) | |
| tree | 8b639000418e2756bf6baece4e00e07d2534bccc /scripts | |
| parent | 28350e330cfab46b60a1dbf763b678d859f9f3d9 (diff) | |
| parent | 9d2e173644bb5c42ff1b280fbdda3f195a7cf1f7 (diff) | |
Merge branch 'next' into for-linus
Diffstat (limited to 'scripts')
46 files changed, 1352 insertions, 1041 deletions
diff --git a/scripts/Makefile b/scripts/Makefile index 2e088109fbd5..fcea26168bca 100644 --- a/scripts/Makefile +++ b/scripts/Makefile @@ -18,6 +18,11 @@ always := $(hostprogs-y) $(hostprogs-m) # The following hostprogs-y programs are only build on demand hostprogs-y += unifdef +# This target is used internally to avoid "is up to date" messages +PHONY += build_unifdef +build_unifdef: scripts/unifdef FORCE + @: + subdir-$(CONFIG_MODVERSIONS) += genksyms subdir-y += mod subdir-$(CONFIG_SECURITY_SELINUX) += selinux diff --git a/scripts/Makefile.build b/scripts/Makefile.build index 4eb99ab34053..d5f925abe4d2 100644 --- a/scripts/Makefile.build +++ b/scripts/Makefile.build @@ -49,6 +49,40 @@ ifeq ($(KBUILD_NOPEDANTIC),) $(error CFLAGS was changed in "$(kbuild-file)". Fix it to use EXTRA_CFLAGS) endif endif + +# +# make W=1 settings +# +# $(call cc-option... ) handles gcc -W.. options which +# are not supported by all versions of the compiler +ifdef KBUILD_ENABLE_EXTRA_GCC_CHECKS +KBUILD_EXTRA_WARNINGS := -Wextra +KBUILD_EXTRA_WARNINGS += -Wunused -Wno-unused-parameter +KBUILD_EXTRA_WARNINGS += -Waggregate-return +KBUILD_EXTRA_WARNINGS += -Wbad-function-cast +KBUILD_EXTRA_WARNINGS += -Wcast-qual +KBUILD_EXTRA_WARNINGS += -Wcast-align +KBUILD_EXTRA_WARNINGS += -Wconversion +KBUILD_EXTRA_WARNINGS += -Wdisabled-optimization +KBUILD_EXTRA_WARNINGS += -Wlogical-op +KBUILD_EXTRA_WARNINGS += -Wmissing-declarations +KBUILD_EXTRA_WARNINGS += -Wmissing-format-attribute +KBUILD_EXTRA_WARNINGS += $(call cc-option, -Wmissing-include-dirs,) +KBUILD_EXTRA_WARNINGS += -Wmissing-prototypes +KBUILD_EXTRA_WARNINGS += -Wnested-externs +KBUILD_EXTRA_WARNINGS += -Wold-style-definition +KBUILD_EXTRA_WARNINGS += $(call cc-option, -Woverlength-strings,) +KBUILD_EXTRA_WARNINGS += -Wpacked +KBUILD_EXTRA_WARNINGS += -Wpacked-bitfield-compat +KBUILD_EXTRA_WARNINGS += -Wpadded +KBUILD_EXTRA_WARNINGS += -Wpointer-arith +KBUILD_EXTRA_WARNINGS += -Wredundant-decls +KBUILD_EXTRA_WARNINGS += -Wshadow +KBUILD_EXTRA_WARNINGS += -Wswitch-default +KBUILD_EXTRA_WARNINGS += $(call cc-option, -Wvla,) +KBUILD_CFLAGS += $(KBUILD_EXTRA_WARNINGS) +endif + include scripts/Makefile.lib ifdef host-progs @@ -403,7 +437,6 @@ ifneq ($(cmd_files),) include $(cmd_files) endif - # Declare the contents of the .PHONY variable as phony. We keep that # information in a variable se we can use it in if_changed and friends. diff --git a/scripts/Makefile.modpost b/scripts/Makefile.modpost index 7d22056582c1..56dfafc73c1a 100644 --- a/scripts/Makefile.modpost +++ b/scripts/Makefile.modpost @@ -35,14 +35,14 @@ # KBUILD_MODPOST_WARN can be set to avoid error out in case of undefined # symbols in the final module linking stage # KBUILD_MODPOST_NOFINAL can be set to skip the final link of modules. -# This is solely usefull to speed up test compiles +# This is solely useful to speed up test compiles PHONY := _modpost _modpost: __modpost include include/config/auto.conf include scripts/Kbuild.include -# When building external modules load the Kbuild file to retreive EXTRA_SYMBOLS info +# When building external modules load the Kbuild file to retrieve EXTRA_SYMBOLS info ifneq ($(KBUILD_EXTMOD),) # set src + obj - they may be used when building the .mod.c file diff --git a/scripts/basic/fixdep.c b/scripts/basic/fixdep.c index c9a16abacab4..291228e25984 100644 --- a/scripts/basic/fixdep.c +++ b/scripts/basic/fixdep.c @@ -309,12 +309,18 @@ static void do_config_file(const char *filename) close(fd); } +/* + * Important: The below generated source_foo.o and deps_foo.o variable + * assignments are parsed not only by make, but also by the rather simple + * parser in scripts/mod/sumversion.c. + */ static void parse_dep_file(void *map, size_t len) { char *m = map; char *end = m + len; char *p; char s[PATH_MAX]; + int first; p = strchr(m, ':'); if (!p) { @@ -322,11 +328,11 @@ static void parse_dep_file(void *map, size_t len) exit(1); } memcpy(s, m, p-m); s[p-m] = 0; - printf("deps_%s := \\\n", target); m = p+1; clear_config(); + first = 1; while (m < end) { while (m < end && (*m == ' ' || *m == '\\' || *m == '\n')) m++; @@ -340,9 +346,20 @@ static void parse_dep_file(void *map, size_t len) if (strrcmp(s, "include/generated/autoconf.h") && strrcmp(s, "arch/um/include/uml-config.h") && strrcmp(s, ".ver")) { - printf(" %s \\\n", s); + /* + * Do not list the source file as dependency, so that + * kbuild is not confused if a .c file is rewritten + * into .S or vice versa. Storing it in source_* is + * needed for modpost to compute srcversions. + */ + if (first) { + printf("source_%s := %s\n\n", target, s); + printf("deps_%s := \\\n", target); + } else + printf(" %s \\\n", s); do_config_file(s); } + first = 0; m = p + 1; } printf("\n%s: $(deps_%s)\n\n", target, target); diff --git a/scripts/bloat-o-meter b/scripts/bloat-o-meter index 6501a50e17f0..6129020c41a9 100755 --- a/scripts/bloat-o-meter +++ b/scripts/bloat-o-meter @@ -17,7 +17,9 @@ def getsizes(file): sym = {} for l in os.popen("nm --size-sort " + file).readlines(): size, type, name = l[:-1].split() - if type in "tTdDbB": + if type in "tTdDbBrR": + # strip generated symbols + if name[:6] == "__mod_": continue # function names begin with '.' on 64-bit powerpc if "." in name[1:]: name = "static." + name.split(".")[0] sym[name] = sym.get(name, 0) + int(size, 16) diff --git a/scripts/checkpatch.pl b/scripts/checkpatch.pl index 4c0383da1c9a..d8670810db65 100755 --- a/scripts/checkpatch.pl +++ b/scripts/checkpatch.pl @@ -1946,13 +1946,13 @@ sub process { # printk should use KERN_* levels. Note that follow on printk's on the # same line do not need a level, so we use the current block context # to try and find and validate the current printk. In summary the current -# printk includes all preceeding printk's which have no newline on the end. +# printk includes all preceding printk's which have no newline on the end. # we assume the first bad printk is the one to report. if ($line =~ /\bprintk\((?!KERN_)\s*"/) { my $ok = 0; for (my $ln = $linenr - 1; $ln >= $first_line; $ln--) { #print "CHECK<$lines[$ln - 1]\n"; - # we have a preceeding printk if it ends + # we have a preceding printk if it ends # with "\n" ignore it, else it is to blame if ($lines[$ln - 1] =~ m{\bprintk\(}) { if ($rawlines[$ln - 1] !~ m{\\n"}) { @@ -2044,7 +2044,7 @@ sub process { for (my $n = 0; $n < $#elements; $n += 2) { $off += length($elements[$n]); - # Pick up the preceeding and succeeding characters. + # Pick up the preceding and succeeding characters. my $ca = substr($opline, 0, $off); my $cc = ''; if (length($opline) >= ($off + length($elements[$n + 1]))) { @@ -2654,11 +2654,6 @@ sub process { WARN("Use of volatile is usually wrong: see Documentation/volatile-considered-harmful.txt\n" . $herecurr); } -# SPIN_LOCK_UNLOCKED & RW_LOCK_UNLOCKED are deprecated - if ($line =~ /\b(SPIN_LOCK_UNLOCKED|RW_LOCK_UNLOCKED)/) { - ERROR("Use of $1 is deprecated: see Documentation/spinlocks.txt\n" . $herecurr); - } - # warn about #if 0 if ($line =~ /^.\s*\#\s*if\s+0\b/) { CHK("if this code is redundant consider removing it\n" . @@ -2809,9 +2804,9 @@ sub process { WARN("consider using a completion\n" . $herecurr); } -# recommend strict_strto* over simple_strto* +# recommend kstrto* over simple_strto* if ($line =~ /\bsimple_(strto.*?)\s*\(/) { - WARN("consider using strict_$1 in preference to simple_$1\n" . $herecurr); + WARN("consider using kstrto* in preference to simple_$1\n" . $herecurr); } # check for __initcall(), use device_initcall() explicitly please if ($line =~ /^.\s*__initcall\s*\(/) { @@ -2907,6 +2902,11 @@ sub process { $line =~ /DEVICE_ATTR.*S_IWUGO/ ) { WARN("Exporting world writable files is usually an error. Consider more restrictive permissions.\n" . $herecurr); } + + # Check for memset with swapped arguments + if ($line =~ /memset.*\,(\ |)(0x|)0(\ |0|)\);/) { + ERROR("memset size is 3rd argument, not the second.\n" . $herecurr); + } } # If we have no input at all, then there is nothing to report on @@ -2949,6 +2949,7 @@ sub process { if ($rpt_cleaners) { print "NOTE: whitespace errors detected, you may wish to use scripts/cleanpatch or\n"; print " scripts/cleanfile\n\n"; + $rpt_cleaners = 0; } } diff --git a/scripts/dtc/libfdt/libfdt.h b/scripts/dtc/libfdt/libfdt.h index ce80e4fb41b2..ff6246f000ce 100644 --- a/scripts/dtc/libfdt/libfdt.h +++ b/scripts/dtc/libfdt/libfdt.h @@ -61,7 +61,7 @@ #define FDT_ERR_NOTFOUND 1 /* FDT_ERR_NOTFOUND: The requested node or property does not exist */ #define FDT_ERR_EXISTS 2 - /* FDT_ERR_EXISTS: Attemped to create a node or property which + /* FDT_ERR_EXISTS: Attempted to create a node or property which * already exists */ #define FDT_ERR_NOSPACE 3 /* FDT_ERR_NOSPACE: Operation needed to expand the device diff --git a/scripts/dtc/livetree.c b/scripts/dtc/livetree.c index c9209d5c999e..26d0e1e60c0c 100644 --- a/scripts/dtc/livetree.c +++ b/scripts/dtc/livetree.c @@ -155,7 +155,7 @@ struct node *merge_nodes(struct node *old_node, struct node *new_node) } } - /* if no collision occured, add child to the old node. */ + /* if no collision occurred, add child to the old node. */ if (new_child) add_child(old_node, new_child); } diff --git a/scripts/extract-ikconfig b/scripts/extract-ikconfig index 1512c0a755ac..e1862429ccda 100755 --- a/scripts/extract-ikconfig +++ b/scripts/extract-ikconfig @@ -56,10 +56,11 @@ trap "rm -f $tmp1 $tmp2" 0 dump_config "$img" # That didn't work, so retry after decompression. -try_decompress '\037\213\010' xy gunzip -try_decompress 'BZh' xy bunzip2 -try_decompress '\135\0\0\0' xxx unlzma -try_decompress '\211\114\132' xy 'lzop -d' +try_decompress '\037\213\010' xy gunzip +try_decompress '\3757zXZ\000' abcde unxz +try_decompress 'BZh' xy bunzip2 +try_decompress '\135\0\0\0' xxx unlzma +try_decompress '\211\114\132' xy 'lzop -d' # Bail out: echo "$me: Cannot find kernel config." >&2 diff --git a/scripts/gen_initramfs_list.sh b/scripts/gen_initramfs_list.sh index 55caecdad995..e12b1a7525cf 100644 --- a/scripts/gen_initramfs_list.sh +++ b/scripts/gen_initramfs_list.sh @@ -284,7 +284,7 @@ while [ $# -gt 0 ]; do done # If output_file is set we will generate cpio archive and compress it -# we are carefull to delete tmp files +# we are careful to delete tmp files if [ ! -z ${output_file} ]; then if [ -z ${cpio_file} ]; then cpio_tfile="$(mktemp ${TMPDIR:-/tmp}/cpiofile.XXXXXX)" diff --git a/scripts/genksyms/Makefile b/scripts/genksyms/Makefile index e420fe440019..13d03cf05d95 100644 --- a/scripts/genksyms/Makefile +++ b/scripts/genksyms/Makefile @@ -28,9 +28,9 @@ $(obj)/keywords.c: $(obj)/keywords.gperf FORCE # flex quiet_cmd_lex.c = FLEX $@ - cmd_lex.c = flex -o$@ -d $< $(obj)/parse.h + cmd_lex.c = flex -o$@ -d $< -$(obj)/lex.c: $(obj)/lex.l $(obj)/parse.h $(obj)/keywords.c FORCE +$(obj)/lex.c: $(obj)/lex.l $(obj)/keywords.c FORCE $(call if_changed,lex.c) cp $@ $@_shipped diff --git a/scripts/genksyms/genksyms.c b/scripts/genksyms/genksyms.c index f99115ebe925..f9e75531ea03 100644 --- a/scripts/genksyms/genksyms.c +++ b/scripts/genksyms/genksyms.c @@ -53,12 +53,22 @@ static int nsyms; static struct symbol *expansion_trail; static struct symbol *visited_symbols; -static const char *const symbol_type_name[] = { - "normal", "typedef", "enum", "struct", "union" +static const struct { + int n; + const char *name; +} symbol_types[] = { + [SYM_NORMAL] = { 0, NULL}, + [SYM_TYPEDEF] = {'t', "typedef"}, + [SYM_ENUM] = {'e', "enum"}, + [SYM_STRUCT] = {'s', "struct"}, + [SYM_UNION] = {'u', "union"}, + [SYM_ENUM_CONST] = {'E', "enum constant"}, }; static int equal_list(struct string_list *a, struct string_list *b); static void print_list(FILE * f, struct string_list *list); +static struct string_list *concat_list(struct string_list *start, ...); +static struct string_list *mk_node(const char *string); static void print_location(void); static void print_type_name(enum symbol_type type, const char *name); @@ -140,14 +150,20 @@ static unsigned long crc32(const char *s) static enum symbol_type map_to_ns(enum symbol_type t) { - if (t == SYM_TYPEDEF) - t = SYM_NORMAL; - else if (t == SYM_UNION) - t = SYM_STRUCT; + switch (t) { + case SYM_ENUM_CONST: + case SYM_NORMAL: + case SYM_TYPEDEF: + return SYM_NORMAL; + case SYM_ENUM: + case SYM_STRUCT: + case SYM_UNION: + return SYM_STRUCT; + } return t; } -struct symbol *find_symbol(const char *name, enum symbol_type ns) +struct symbol *find_symbol(const char *name, enum symbol_type ns, int exact) { unsigned long h = crc32(name) % HASH_BUCKETS; struct symbol *sym; @@ -158,6 +174,8 @@ struct symbol *find_symbol(const char *name, enum symbol_type ns) sym->is_declared) break; + if (exact && sym && sym->type != ns) + return NULL; return sym; } @@ -180,10 +198,47 @@ static struct symbol *__add_symbol(const char *name, enum symbol_type type, struct string_list *defn, int is_extern, int is_reference) { - unsigned long h = crc32(name) % HASH_BUCKETS; + unsigned long h; struct symbol *sym; enum symbol_status status = STATUS_UNCHANGED; + /* The parser adds symbols in the order their declaration completes, + * so it is safe to store the value of the previous enum constant in + * a static variable. + */ + static int enum_counter; + static struct string_list *last_enum_expr; + + if (type == SYM_ENUM_CONST) { + if (defn) { + free_list(last_enum_expr, NULL); + last_enum_expr = copy_list_range(defn, NULL); + enum_counter = 1; + } else { + struct string_list *expr; + char buf[20]; + + snprintf(buf, sizeof(buf), "%d", enum_counter++); + if (last_enum_expr) { + expr = copy_list_range(last_enum_expr, NULL); + defn = concat_list(mk_node("("), + expr, + mk_node(")"), + mk_node("+"), + mk_node(buf), NULL); + } else { + defn = mk_node(buf); + } + } + } else if (type == SYM_ENUM) { + free_list(last_enum_expr, NULL); + last_enum_expr = NULL; + enum_counter = 0; + if (!name) + /* Anonymous enum definition, nothing more to do */ + return NULL; + } + h = crc32(name) % HASH_BUCKETS; for (sym = symtab[h]; sym; sym = sym->hash_next) { if (map_to_ns(sym->type) == map_to_ns(type) && strcmp(name, sym->name) == 0) { @@ -247,8 +302,12 @@ static struct symbol *__add_symbol(const char *name, enum symbol_type type, sym->is_override = 0; if (flag_debug) { - fprintf(debugfile, "Defn for %s %s == <", - symbol_type_name[type], name); + if (symbol_types[type].name) + fprintf(debugfile, "Defn for %s %s == <", + symbol_types[type].name, name); + else + fprintf(debugfile, "Defn for type%d %s == <", + type, name); if (is_extern) fputs("extern ", debugfile); print_list(debugfile, defn); @@ -288,6 +347,35 @@ void free_list(struct string_list *s, struct string_list *e) } } +static struct string_list *mk_node(const char *string) +{ + struct string_list *newnode; + + newnode = xmalloc(sizeof(*newnode)); + newnode->string = xstrdup(string); + newnode->tag = SYM_NORMAL; + newnode->next = NULL; + + return newnode; +} + +static struct string_list *concat_list(struct string_list *start, ...) +{ + va_list ap; + struct string_list *n, *n2; + + if (!start) + return NULL; + for (va_start(ap, start); (n = va_arg(ap, struct string_list *));) { + for (n2 = n; n2->next; n2 = n2->next) + ; + n2->next = start; + start = n; + } + va_end(ap); + return start; +} + struct string_list *copy_node(struct string_list *node) { struct string_list *newnode; @@ -299,6 +387,22 @@ struct string_list *copy_node(struct string_list *node) return newnode; } +struct string_list *copy_list_range(struct string_list *start, + struct string_list *end) +{ + struct string_list *res, *n; + + if (start == end) + return NULL; + n = res = copy_node(start); + for (start = start->next; start != end; start = start->next) { + n->next = copy_node(start); + n = n->next; + } + n->next = NULL; + return res; +} + static int equal_list(struct string_list *a, struct string_list *b) { while (a && b) { @@ -346,8 +450,8 @@ static struct string_list *read_node(FILE *f) if (node.string[1] == '#') { int n; - for (n = 0; n < ARRAY_SIZE(symbol_type_name); n++) { - if (node.string[0] == symbol_type_name[n][0]) { + for (n = 0; n < ARRAY_SIZE(symbol_types); n++) { + if (node.string[0] == symbol_types[n].n) { node.tag = n; node.string += 2; return copy_node(&node); @@ -397,8 +501,8 @@ static void read_reference(FILE *f) static void print_node(FILE * f, struct string_list *list) { - if (list->tag != SYM_NORMAL) { - putc(symbol_type_name[list->tag][0], f); + if (symbol_types[list->tag].n) { + putc(symbol_types[list->tag].n, f); putc('#', f); } fputs(list->string, f); @@ -468,8 +572,9 @@ static unsigned long expand_and_crc_sym(struct symbol *sym, unsigned long crc) crc = partial_crc32_one(' ', crc); break; + case SYM_ENUM_CONST: case SYM_TYPEDEF: - subsym = find_symbol(cur->string, cur->tag); + subsym = find_symbol(cur->string, cur->tag, 0); /* FIXME: Bad reference files can segfault here. */ if (subsym->expansion_trail) { if (flag_dump_defs) @@ -486,55 +591,30 @@ static unsigned long expand_and_crc_sym(struct symbol *sym, unsigned long crc) case SYM_STRUCT: case SYM_UNION: case SYM_ENUM: - subsym = find_symbol(cur->string, cur->tag); + subsym = find_symbol(cur->string, cur->tag, 0); if (!subsym) { - struct string_list *n, *t = NULL; + struct string_list *n; error_with_pos("expand undefined %s %s", - symbol_type_name[cur->tag], + symbol_types[cur->tag].name, cur->string); - - n = xmalloc(sizeof(*n)); - n->string = xstrdup(symbol_type_name[cur->tag]); - n->tag = SYM_NORMAL; - n->next = t; - t = n; - - n = xmalloc(sizeof(*n)); - n->string = xstrdup(cur->string); - n->tag = SYM_NORMAL; - n->next = t; - t = n; - - n = xmalloc(sizeof(*n)); - n->string = xstrdup("{"); - n->tag = SYM_NORMAL; - n->next = t; - t = n; - - n = xmalloc(sizeof(*n)); - n->string = xstrdup("UNKNOWN"); - n->tag = SYM_NORMAL; - n->next = t; - t = n; - - n = xmalloc(sizeof(*n)); - n->string = xstrdup("}"); - n->tag = SYM_NORMAL; - n->next = t; - t = n; - + n = concat_list(mk_node + (symbol_types[cur->tag].name), + mk_node(cur->string), + mk_node("{"), + mk_node("UNKNOWN"), + mk_node("}"), NULL); subsym = add_symbol(cur->string, cur->tag, n, 0); } if (subsym->expansion_trail) { if (flag_dump_defs) { fprintf(debugfile, "%s %s ", - symbol_type_name[cur->tag], + symbol_types[cur->tag].name, cur->string); } - crc = partial_crc32(symbol_type_name[cur->tag], + crc = partial_crc32(symbol_types[cur->tag].name, crc); crc = partial_crc32_one(' ', crc); crc = partial_crc32(cur->string, crc); @@ -565,7 +645,7 @@ void export_symbol(const char *name) { struct symbol *sym; - sym = find_symbol(name, SYM_NORMAL); + sym = find_symbol(name, SYM_NORMAL, 0); if (!sym) error_with_pos("export undefined symbol %s", name); else { @@ -624,8 +704,8 @@ static void print_location(void) static void print_type_name(enum symbol_type type, const char *name) { - if (type != SYM_NORMAL) - fprintf(stderr, "%s %s", symbol_type_name[type], name); + if (symbol_types[type].name) + fprintf(stderr, "%s %s", symbol_types[type].name, name); else fprintf(stderr, "%s", name); } @@ -771,8 +851,8 @@ int main(int argc, char **argv) if (sym->is_override) fputs("override ", dumpfile); - if (sym->type != SYM_NORMAL) { - putc(symbol_type_name[sym->type][0], dumpfile); + if (symbol_types[sym->type].n) { + putc(symbol_types[sym->type].n, dumpfile); putc('#', dumpfile); } fputs(sym->name, dumpfile); diff --git a/scripts/genksyms/genksyms.h b/scripts/genksyms/genksyms.h index 25c4d40cefc1..7ec52ae3846a 100644 --- a/scripts/genksyms/genksyms.h +++ b/scripts/genksyms/genksyms.h @@ -26,7 +26,8 @@ #include <stdio.h> enum symbol_type { - SYM_NORMAL, SYM_TYPEDEF, SYM_ENUM, SYM_STRUCT, SYM_UNION + SYM_NORMAL, SYM_TYPEDEF, SYM_ENUM, SYM_STRUCT, SYM_UNION, + SYM_ENUM_CONST }; enum symbol_status { @@ -58,7 +59,7 @@ typedef struct string_list **yystype; extern int cur_line; extern char *cur_filename; -struct symbol *find_symbol(const char *name, enum symbol_type ns); +struct symbol *find_symbol(const char *name, enum symbol_type ns, int exact); struct symbol *add_symbol(const char *name, enum symbol_type type, struct string_list *defn, int is_extern); void export_symbol(const char *); @@ -66,6 +67,8 @@ void export_symbol(const char *); void free_node(struct string_list *list); void free_list(struct string_list *s, struct string_list *e); struct string_list *copy_node(struct string_list *); +struct string_list *copy_list_range(struct string_list *start, + struct string_list *end); int yylex(void); int yyparse(void); diff --git a/scripts/genksyms/lex.c_shipped b/scripts/genksyms/lex.c_shipped index 2ac23bcca5b5..af4939041e4b 100644 --- a/scripts/genksyms/lex.c_shipped +++ b/scripts/genksyms/lex.c_shipped @@ -79,6 +79,7 @@ typedef int flex_int32_t; |
