diff options
Diffstat (limited to 'scripts')
-rw-r--r-- | scripts/Makefile.build | 5 | ||||
-rw-r--r-- | scripts/Makefile.clean | 16 | ||||
-rw-r--r-- | scripts/Makefile.kasan | 25 | ||||
-rw-r--r-- | scripts/Makefile.lib | 10 | ||||
-rw-r--r-- | scripts/asn1_compiler.c | 30 | ||||
-rwxr-xr-x | scripts/checkpatch.pl | 147 | ||||
-rwxr-xr-x | scripts/diffconfig | 1 | ||||
-rw-r--r-- | scripts/module-common.lds | 23 | ||||
-rwxr-xr-x | scripts/recordmcount.pl | 10 |
9 files changed, 206 insertions, 61 deletions
diff --git a/scripts/Makefile.build b/scripts/Makefile.build index 649ce6844033..01df30af4d4a 100644 --- a/scripts/Makefile.build +++ b/scripts/Makefile.build | |||
@@ -234,8 +234,9 @@ sub_cmd_record_mcount = set -e ; perl $(srctree)/scripts/recordmcount.pl "$(ARCH | |||
234 | "$(if $(part-of-module),1,0)" "$(@)"; | 234 | "$(if $(part-of-module),1,0)" "$(@)"; |
235 | recordmcount_source := $(srctree)/scripts/recordmcount.pl | 235 | recordmcount_source := $(srctree)/scripts/recordmcount.pl |
236 | endif | 236 | endif |
237 | cmd_record_mcount = \ | 237 | cmd_record_mcount = \ |
238 | if [ "$(findstring -pg,$(_c_flags))" = "-pg" ]; then \ | 238 | if [ "$(findstring $(CC_FLAGS_FTRACE),$(_c_flags))" = \ |
239 | "$(CC_FLAGS_FTRACE)" ]; then \ | ||
239 | $(sub_cmd_record_mcount) \ | 240 | $(sub_cmd_record_mcount) \ |
240 | fi; | 241 | fi; |
241 | endif | 242 | endif |
diff --git a/scripts/Makefile.clean b/scripts/Makefile.clean index 1bca180db8ad..627f8cbbedb8 100644 --- a/scripts/Makefile.clean +++ b/scripts/Makefile.clean | |||
@@ -42,19 +42,19 @@ __clean-files := $(extra-y) $(extra-m) $(extra-) \ | |||
42 | 42 | ||
43 | __clean-files := $(filter-out $(no-clean-files), $(__clean-files)) | 43 | __clean-files := $(filter-out $(no-clean-files), $(__clean-files)) |
44 | 44 | ||
45 | # as clean-files is given relative to the current directory, this adds | 45 | # clean-files is given relative to the current directory, unless it |
46 | # a $(obj) prefix, except for absolute paths | 46 | # starts with $(objtree)/ (which means "./", so do not add "./" unless |
47 | # you want to delete a file from the toplevel object directory). | ||
47 | 48 | ||
48 | __clean-files := $(wildcard \ | 49 | __clean-files := $(wildcard \ |
49 | $(addprefix $(obj)/, $(filter-out /%, $(__clean-files))) \ | 50 | $(addprefix $(obj)/, $(filter-out $(objtree)/%, $(__clean-files))) \ |
50 | $(filter /%, $(__clean-files))) | 51 | $(filter $(objtree)/%, $(__clean-files))) |
51 | 52 | ||
52 | # as clean-dirs is given relative to the current directory, this adds | 53 | # same as clean-files |
53 | # a $(obj) prefix, except for absolute paths | ||
54 | 54 | ||
55 | __clean-dirs := $(wildcard \ | 55 | __clean-dirs := $(wildcard \ |
56 | $(addprefix $(obj)/, $(filter-out /%, $(clean-dirs))) \ | 56 | $(addprefix $(obj)/, $(filter-out $(objtree)/%, $(clean-dirs))) \ |
57 | $(filter /%, $(clean-dirs))) | 57 | $(filter $(objtree)/%, $(clean-dirs))) |
58 | 58 | ||
59 | # ========================================================================== | 59 | # ========================================================================== |
60 | 60 | ||
diff --git a/scripts/Makefile.kasan b/scripts/Makefile.kasan new file mode 100644 index 000000000000..631619b2b118 --- /dev/null +++ b/scripts/Makefile.kasan | |||
@@ -0,0 +1,25 @@ | |||
1 | ifdef CONFIG_KASAN | ||
2 | ifdef CONFIG_KASAN_INLINE | ||
3 | call_threshold := 10000 | ||
4 | else | ||
5 | call_threshold := 0 | ||
6 | endif | ||
7 | |||
8 | CFLAGS_KASAN_MINIMAL := -fsanitize=kernel-address | ||
9 | |||
10 | CFLAGS_KASAN := $(call cc-option, -fsanitize=kernel-address \ | ||
11 | -fasan-shadow-offset=$(CONFIG_KASAN_SHADOW_OFFSET) \ | ||
12 | --param asan-stack=1 --param asan-globals=1 \ | ||
13 | --param asan-instrumentation-with-call-threshold=$(call_threshold)) | ||
14 | |||
15 | ifeq ($(call cc-option, $(CFLAGS_KASAN_MINIMAL) -Werror),) | ||
16 | $(warning Cannot use CONFIG_KASAN: \ | ||
17 | -fsanitize=kernel-address is not supported by compiler) | ||
18 | else | ||
19 | ifeq ($(CFLAGS_KASAN),) | ||
20 | $(warning CONFIG_KASAN: compiler does not support all options.\ | ||
21 | Trying minimal configuration) | ||
22 | CFLAGS_KASAN := $(CFLAGS_KASAN_MINIMAL) | ||
23 | endif | ||
24 | endif | ||
25 | endif | ||
diff --git a/scripts/Makefile.lib b/scripts/Makefile.lib index 511755200634..044eb4f89a91 100644 --- a/scripts/Makefile.lib +++ b/scripts/Makefile.lib | |||
@@ -119,6 +119,16 @@ _c_flags += $(if $(patsubst n%,, \ | |||
119 | $(CFLAGS_GCOV)) | 119 | $(CFLAGS_GCOV)) |
120 | endif | 120 | endif |
121 | 121 | ||
122 | # | ||
123 | # Enable address sanitizer flags for kernel except some files or directories | ||
124 | # we don't want to check (depends on variables KASAN_SANITIZE_obj.o, KASAN_SANITIZE) | ||
125 | # | ||
126 | ifeq ($(CONFIG_KASAN),y) | ||
127 | _c_flags += $(if $(patsubst n%,, \ | ||
128 | $(KASAN_SANITIZE_$(basetarget).o)$(KASAN_SANITIZE)y), \ | ||
129 | $(CFLAGS_KASAN)) | ||
130 | endif | ||
131 | |||
122 | # If building the kernel in a separate objtree expand all occurrences | 132 | # If building the kernel in a separate objtree expand all occurrences |
123 | # of -Idir to -I$(srctree)/dir except for absolute paths (starting with '/'). | 133 | # of -Idir to -I$(srctree)/dir except for absolute paths (starting with '/'). |
124 | 134 | ||
diff --git a/scripts/asn1_compiler.c b/scripts/asn1_compiler.c index 91c4117637ae..7750e9c31483 100644 --- a/scripts/asn1_compiler.c +++ b/scripts/asn1_compiler.c | |||
@@ -311,6 +311,9 @@ struct token { | |||
311 | 311 | ||
312 | static struct token *token_list; | 312 | static struct token *token_list; |
313 | static unsigned nr_tokens; | 313 | static unsigned nr_tokens; |
314 | static _Bool verbose; | ||
315 | |||
316 | #define debug(fmt, ...) do { if (verbose) printf(fmt, ## __VA_ARGS__); } while (0) | ||
314 | 317 | ||
315 | static int directive_compare(const void *_key, const void *_pdir) | 318 | static int directive_compare(const void *_key, const void *_pdir) |
316 | { | 319 | { |
@@ -322,21 +325,21 @@ static int directive_compare(const void *_key, const void *_pdir) | |||
322 | dlen = strlen(dir); | 325 | dlen = strlen(dir); |
323 | clen = (dlen < token->size) ? dlen : token->size; | 326 | clen = (dlen < token->size) ? dlen : token->size; |
324 | 327 | ||
325 | //printf("cmp(%*.*s,%s) = ", | 328 | //debug("cmp(%*.*s,%s) = ", |
326 | // (int)token->size, (int)token->size, token->value, | 329 | // (int)token->size, (int)token->size, token->value, |
327 | // dir); | 330 | // dir); |
328 | 331 | ||
329 | val = memcmp(token->value, dir, clen); | 332 | val = memcmp(token->value, dir, clen); |
330 | if (val != 0) { | 333 | if (val != 0) { |
331 | //printf("%d [cmp]\n", val); | 334 | //debug("%d [cmp]\n", val); |
332 | return val; | 335 | return val; |
333 | } | 336 | } |
334 | 337 | ||
335 | if (dlen == token->size) { | 338 | if (dlen == token->size) { |
336 | //printf("0\n"); | 339 | //debug("0\n"); |
337 | return 0; | 340 | return 0; |
338 | } | 341 | } |
339 | //printf("%d\n", (int)dlen - (int)token->size); | 342 | //debug("%d\n", (int)dlen - (int)token->size); |
340 | return dlen - token->size; /* shorter -> negative */ | 343 | return dlen - token->size; /* shorter -> negative */ |
341 | } | 344 | } |
342 | 345 | ||
@@ -515,13 +518,13 @@ static void tokenise(char *buffer, char *end) | |||
515 | } | 518 | } |
516 | 519 | ||
517 | nr_tokens = tix; | 520 | nr_tokens = tix; |
518 | printf("Extracted %u tokens\n", nr_tokens); | 521 | debug("Extracted %u tokens\n", nr_tokens); |
519 | 522 | ||
520 | #if 0 | 523 | #if 0 |
521 | { | 524 | { |
522 | int n; | 525 | int n; |
523 | for (n = 0; n < nr_tokens; n++) | 526 | for (n = 0; n < nr_tokens; n++) |
524 | printf("Token %3u: '%*.*s'\n", | 527 | debug("Token %3u: '%*.*s'\n", |
525 | n, | 528 | n, |
526 | (int)token_list[n].size, (int)token_list[n].size, | 529 | (int)token_list[n].size, (int)token_list[n].size, |
527 | token_list[n].value); | 530 | token_list[n].value); |
@@ -542,6 +545,7 @@ int main(int argc, char **argv) | |||
542 | ssize_t readlen; | 545 | ssize_t readlen; |
543 | FILE *out, *hdr; | 546 | FILE *out, *hdr; |
544 | char *buffer, *p; | 547 | char *buffer, *p; |
548 | char *kbuild_verbose; | ||
545 | int fd; | 549 | int fd; |
546 | 550 | ||
547 | if (argc != 4) { | 551 | if (argc != 4) { |
@@ -550,6 +554,10 @@ int main(int argc, char **argv) | |||
550 | exit(2); | 554 | exit(2); |
551 | } | 555 | } |
552 | 556 | ||
557 | kbuild_verbose = getenv("KBUILD_VERBOSE"); | ||
558 | if (kbuild_verbose) | ||
559 | verbose = atoi(kbuild_verbose); | ||
560 | |||
553 | filename = argv[1]; | 561 | filename = argv[1]; |
554 | outputname = argv[2]; | 562 | outputname = argv[2]; |
555 | headername = argv[3]; | 563 | headername = argv[3]; |
@@ -748,11 +756,11 @@ static void build_type_list(void) | |||
748 | 756 | ||
749 | qsort(type_index, nr, sizeof(type_index[0]), type_index_compare); | 757 | qsort(type_index, nr, sizeof(type_index[0]), type_index_compare); |
750 | 758 | ||
751 | printf("Extracted %u types\n", nr_types); | 759 | debug("Extracted %u types\n", nr_types); |
752 | #if 0 | 760 | #if 0 |
753 | for (n = 0; n < nr_types; n++) { | 761 | for (n = 0; n < nr_types; n++) { |
754 | struct type *type = type_index[n]; | 762 | struct type *type = type_index[n]; |
755 | printf("- %*.*s\n", | 763 | debug("- %*.*s\n", |
756 | (int)type->name->size, | 764 | (int)type->name->size, |
757 | (int)type->name->size, | 765 | (int)type->name->size, |
758 | type->name->value); | 766 | type->name->value); |
@@ -793,7 +801,7 @@ static void parse(void) | |||
793 | 801 | ||
794 | } while (type++, !(type->flags & TYPE_STOP_MARKER)); | 802 | } while (type++, !(type->flags & TYPE_STOP_MARKER)); |
795 | 803 | ||
796 | printf("Extracted %u actions\n", nr_actions); | 804 | debug("Extracted %u actions\n", nr_actions); |
797 | } | 805 | } |
798 | 806 | ||
799 | static struct element *element_list; | 807 | static struct element *element_list; |
@@ -1284,7 +1292,7 @@ static void render(FILE *out, FILE *hdr) | |||
1284 | } | 1292 | } |
1285 | 1293 | ||
1286 | /* We do two passes - the first one calculates all the offsets */ | 1294 | /* We do two passes - the first one calculates all the offsets */ |
1287 | printf("Pass 1\n"); | 1295 | debug("Pass 1\n"); |
1288 | nr_entries = 0; | 1296 | nr_entries = 0; |
1289 | root = &type_list[0]; | 1297 | root = &type_list[0]; |
1290 | render_element(NULL, root->element, NULL); | 1298 | render_element(NULL, root->element, NULL); |
@@ -1295,7 +1303,7 @@ static void render(FILE *out, FILE *hdr) | |||
1295 | e->flags &= ~ELEMENT_RENDERED; | 1303 | e->flags &= ~ELEMENT_RENDERED; |
1296 | 1304 | ||
1297 | /* And then we actually render */ | 1305 | /* And then we actually render */ |
1298 | printf("Pass 2\n"); | 1306 | debug("Pass 2\n"); |
1299 | fprintf(out, "\n"); | 1307 | fprintf(out, "\n"); |
1300 | fprintf(out, "static const unsigned char %s_machine[] = {\n", | 1308 | fprintf(out, "static const unsigned char %s_machine[] = {\n", |
1301 | grammar_name); | 1309 | grammar_name); |
diff --git a/scripts/checkpatch.pl b/scripts/checkpatch.pl index f0bb6d60c07b..d12435992dea 100755 --- a/scripts/checkpatch.pl +++ b/scripts/checkpatch.pl | |||
@@ -278,6 +278,7 @@ our $Attribute = qr{ | |||
278 | __noreturn| | 278 | __noreturn| |
279 | __used| | 279 | __used| |
280 | __cold| | 280 | __cold| |
281 | __pure| | ||
281 | __noclone| | 282 | __noclone| |
282 | __deprecated| | 283 | __deprecated| |
283 | __read_mostly| | 284 | __read_mostly| |
@@ -298,6 +299,7 @@ our $Binary = qr{(?i)0b[01]+$Int_type?}; | |||
298 | our $Hex = qr{(?i)0x[0-9a-f]+$Int_type?}; | 299 | our $Hex = qr{(?i)0x[0-9a-f]+$Int_type?}; |
299 | our $Int = qr{[0-9]+$Int_type?}; | 300 | our $Int = qr{[0-9]+$Int_type?}; |
300 | our $Octal = qr{0[0-7]+$Int_type?}; | 301 | our $Octal = qr{0[0-7]+$Int_type?}; |
302 | our $String = qr{"[X\t]*"}; | ||
301 | our $Float_hex = qr{(?i)0x[0-9a-f]+p-?[0-9]+[fl]?}; | 303 | our $Float_hex = qr{(?i)0x[0-9a-f]+p-?[0-9]+[fl]?}; |
302 | our $Float_dec = qr{(?i)(?:[0-9]+\.[0-9]*|[0-9]*\.[0-9]+)(?:e-?[0-9]+)?[fl]?}; | 304 | our $Float_dec = qr{(?i)(?:[0-9]+\.[0-9]*|[0-9]*\.[0-9]+)(?:e-?[0-9]+)?[fl]?}; |
303 | our $Float_int = qr{(?i)[0-9]+e-?[0-9]+[fl]?}; | 305 | our $Float_int = qr{(?i)[0-9]+e-?[0-9]+[fl]?}; |
@@ -337,6 +339,11 @@ our $UTF8 = qr{ | |||
337 | | $NON_ASCII_UTF8 | 339 | | $NON_ASCII_UTF8 |
338 | }x; | 340 | }x; |
339 | 341 | ||
342 | our $typeOtherOSTypedefs = qr{(?x: | ||
343 | u_(?:char|short|int|long) | # bsd | ||
344 | u(?:nchar|short|int|long) # sysv | ||
345 | )}; | ||
346 | |||
340 | our $typeTypedefs = qr{(?x: | 347 | our $typeTypedefs = qr{(?x: |
341 | (?:__)?(?:u|s|be|le)(?:8|16|32|64)| | 348 | (?:__)?(?:u|s|be|le)(?:8|16|32|64)| |
342 | atomic_t | 349 | atomic_t |
@@ -473,6 +480,7 @@ sub build_types { | |||
473 | (?:$Modifier\s+|const\s+)* | 480 | (?:$Modifier\s+|const\s+)* |
474 | (?: | 481 | (?: |
475 | (?:typeof|__typeof__)\s*\([^\)]*\)| | 482 | (?:typeof|__typeof__)\s*\([^\)]*\)| |
483 | (?:$typeOtherOSTypedefs\b)| | ||
476 | (?:$typeTypedefs\b)| | 484 | (?:$typeTypedefs\b)| |
477 | (?:${all}\b) | 485 | (?:${all}\b) |
478 | ) | 486 | ) |
@@ -490,6 +498,7 @@ sub build_types { | |||
490 | (?: | 498 | (?: |
491 | (?:typeof|__typeof__)\s*\([^\)]*\)| | 499 | (?:typeof|__typeof__)\s*\([^\)]*\)| |
492 | (?:$typeTypedefs\b)| | 500 | (?:$typeTypedefs\b)| |
501 | (?:$typeOtherOSTypedefs\b)| | ||
493 | (?:${allWithAttr}\b) | 502 | (?:${allWithAttr}\b) |
494 | ) | 503 | ) |
495 | (?:\s+$Modifier|\s+const)* | 504 | (?:\s+$Modifier|\s+const)* |
@@ -517,7 +526,7 @@ our $Typecast = qr{\s*(\(\s*$NonptrType\s*\)){0,1}\s*}; | |||
517 | 526 | ||
518 | our $balanced_parens = qr/(\((?:[^\(\)]++|(?-1))*\))/; | 527 | our $balanced_parens = qr/(\((?:[^\(\)]++|(?-1))*\))/; |
519 | our $LvalOrFunc = qr{((?:[\&\*]\s*)?$Lval)\s*($balanced_parens{0,1})\s*}; | 528 | our $LvalOrFunc = qr{((?:[\&\*]\s*)?$Lval)\s*($balanced_parens{0,1})\s*}; |
520 | our $FuncArg = qr{$Typecast{0,1}($LvalOrFunc|$Constant)}; | 529 | our $FuncArg = qr{$Typecast{0,1}($LvalOrFunc|$Constant|$String)}; |
521 | 530 | ||
522 | our $declaration_macros = qr{(?x: | 531 | our $declaration_macros = qr{(?x: |
523 | (?:$Storage\s+)?(?:[A-Z_][A-Z0-9]*_){0,2}(?:DEFINE|DECLARE)(?:_[A-Z0-9]+){1,2}\s*\(| | 532 | (?:$Storage\s+)?(?:[A-Z_][A-Z0-9]*_){0,2}(?:DEFINE|DECLARE)(?:_[A-Z0-9]+){1,2}\s*\(| |
@@ -632,6 +641,8 @@ sub git_commit_info { | |||
632 | $output =~ s/^\s*//gm; | 641 | $output =~ s/^\s*//gm; |
633 | my @lines = split("\n", $output); | 642 | my @lines = split("\n", $output); |
634 | 643 | ||
644 | return ($id, $desc) if ($#lines < 0); | ||
645 | |||
635 | if ($lines[0] =~ /^error: short SHA1 $commit is ambiguous\./) { | 646 | if ($lines[0] =~ /^error: short SHA1 $commit is ambiguous\./) { |
636 | # Maybe one day convert this block of bash into something that returns | 647 | # Maybe one day convert this block of bash into something that returns |
637 | # all matching commit ids, but it's very slow... | 648 | # all matching commit ids, but it's very slow... |
@@ -2159,6 +2170,13 @@ sub process { | |||
2159 | } | 2170 | } |
2160 | } | 2171 | } |
2161 | 2172 | ||
2173 | # Check email subject for common tools that don't need to be mentioned | ||
2174 | if ($in_header_lines && | ||
2175 | $line =~ /^Subject:.*\b(?:checkpatch|sparse|smatch)\b[^:]/i) { | ||
2176 | WARN("EMAIL_SUBJECT", | ||
2177 | "A patch subject line should describe the change not the tool that found it\n" . $herecurr); | ||
2178 | } | ||
2179 | |||
2162 | # Check for old stable address | 2180 | # Check for old stable address |
2163 | if ($line =~ /^\s*cc:\s*.*<?\bstable\@kernel\.org\b>?.*$/i) { | 2181 | if ($line =~ /^\s*cc:\s*.*<?\bstable\@kernel\.org\b>?.*$/i) { |
2164 | ERROR("STABLE_ADDRESS", | 2182 | ERROR("STABLE_ADDRESS", |
@@ -2171,21 +2189,49 @@ sub process { | |||
2171 | "Remove Gerrit Change-Id's before submitting upstream.\n" . $herecurr); | 2189 | "Remove Gerrit Change-Id's before submitting upstream.\n" . $herecurr); |
2172 | } | 2190 | } |
2173 | 2191 | ||
2174 | # Check for improperly formed commit descriptions | 2192 | # Check for git id commit length and improperly formed commit descriptions |
2175 | if ($in_commit_log && | 2193 | if ($in_commit_log && $line =~ /\b(c)ommit\s+([0-9a-f]{5,})/i) { |
2176 | $line =~ /\bcommit\s+[0-9a-f]{5,}/i && | ||
2177 | !($line =~ /\b[Cc]ommit [0-9a-f]{12,40} \("/ || | ||
2178 | ($line =~ /\b[Cc]ommit [0-9a-f]{12,40}\s*$/ && | ||
2179 | defined $rawlines[$linenr] && | ||
2180 | $rawlines[$linenr] =~ /^\s*\("/))) { | ||
2181 | $line =~ /\b(c)ommit\s+([0-9a-f]{5,})/i; | ||
2182 | my $init_char = $1; | 2194 | my $init_char = $1; |
2183 | my $orig_commit = lc($2); | 2195 | my $orig_commit = lc($2); |
2184 | my $id = '01234567890ab'; | 2196 | my $short = 1; |
2185 | my $desc = 'commit description'; | 2197 | my $long = 0; |
2186 | ($id, $desc) = git_commit_info($orig_commit, $id, $desc); | 2198 | my $case = 1; |
2187 | ERROR("GIT_COMMIT_ID", | 2199 | my $space = 1; |
2188 | "Please use 12 or more chars for the git commit ID like: '${init_char}ommit $id (\"$desc\")'\n" . $herecurr); | 2200 | my $hasdesc = 0; |
2201 | my $hasparens = 0; | ||
2202 | my $id = '0123456789ab'; | ||
2203 | my $orig_desc = "commit description"; | ||
2204 | my $description = ""; | ||
2205 | |||
2206 | $short = 0 if ($line =~ /\bcommit\s+[0-9a-f]{12,40}/i); | ||
2207 | $long = 1 if ($line =~ /\bcommit\s+[0-9a-f]{41,}/i); | ||
2208 | $space = 0 if ($line =~ /\bcommit [0-9a-f]/i); | ||
2209 | $case = 0 if ($line =~ /\b[Cc]ommit\s+[0-9a-f]{5,40}[^A-F]/); | ||
2210 | if ($line =~ /\bcommit\s+[0-9a-f]{5,}\s+\("([^"]+)"\)/i) { | ||
2211 | $orig_desc = $1; | ||
2212 | $hasparens = 1; | ||
2213 | } elsif ($line =~ /\bcommit\s+[0-9a-f]{5,}\s*$/i && | ||
2214 | defined $rawlines[$linenr] && | ||
2215 | $rawlines[$linenr] =~ /^\s*\("([^"]+)"\)/) { | ||
2216 | $orig_desc = $1; | ||
2217 | $hasparens = 1; | ||
2218 | } elsif ($line =~ /\bcommit\s+[0-9a-f]{5,}\s+\("[^"]+$/i && | ||
2219 | defined $rawlines[$linenr] && | ||
2220 | $rawlines[$linenr] =~ /^\s*[^"]+"\)/) { | ||
2221 | $line =~ /\bcommit\s+[0-9a-f]{5,}\s+\("([^"]+)$/i; | ||
2222 | $orig_desc = $1; | ||
2223 | $rawlines[$linenr] =~ /^\s*([^"]+)"\)/; | ||
2224 | $orig_desc .= " " . $1; | ||
2225 | $hasparens = 1; | ||
2226 | } | ||
2227 | |||
2228 | ($id, $description) = git_commit_info($orig_commit, | ||
2229 | $id, $orig_desc); | ||
2230 | |||
2231 | if ($short || $long || $space || $case || ($orig_desc ne $description) || !$hasparens) { | ||
2232 | ERROR("GIT_COMMIT_ID", | ||
2233 | "Please use git commit description style 'commit <12+ chars of sha1> (\"<title line>\")' - ie: '${init_char}ommit $id (\"$description\")'\n" . $herecurr); | ||
2234 | } | ||
2189 | } | 2235 | } |
2190 | 2236 | ||
2191 | # Check for added, moved or deleted files | 2237 | # Check for added, moved or deleted files |
@@ -2355,6 +2401,13 @@ sub process { | |||
2355 | "Use of CONFIG_EXPERIMENTAL is deprecated. For alternatives, see https://lkml.org/lkml/2012/10/23/580\n"); | 2401 | "Use of CONFIG_EXPERIMENTAL is deprecated. For alternatives, see https://lkml.org/lkml/2012/10/23/580\n"); |
2356 | } | 2402 | } |
2357 | 2403 | ||
2404 | # discourage the use of boolean for type definition attributes of Kconfig options | ||
2405 | if ($realfile =~ /Kconfig/ && | ||
2406 | $line =~ /^\+\s*\bboolean\b/) { | ||
2407 | WARN("CONFIG_TYPE_BOOLEAN", | ||
2408 | "Use of boolean is deprecated, please use bool instead.\n" . $herecurr); | ||
2409 | } | ||
2410 | |||
2358 | if (($realfile =~ /Makefile.*/ || $realfile =~ /Kbuild.*/) && | 2411 | if (($realfile =~ /Makefile.*/ || $realfile =~ /Kbuild.*/) && |
2359 | ($line =~ /\+(EXTRA_[A-Z]+FLAGS).*/)) { | 2412 | ($line =~ /\+(EXTRA_[A-Z]+FLAGS).*/)) { |
2360 | my $flag = $1; | 2413 | my $flag = $1; |
@@ -2499,7 +2552,7 @@ sub process { | |||
2499 | } | 2552 | } |
2500 | } | 2553 | } |
2501 | 2554 | ||
2502 | if ($line =~ /^\+.*(\w+\s*)?\(\s*$Type\s*\)[ \t]+(?!$Assignment|$Arithmetic|[,;\({\[\<\>])/ && | 2555 | if ($line =~ /^\+.*(\w+\s*)?\(\s*$Type\s*\)[ \t]+(?!$Assignment|$Arithmetic|[,;:\?\(\{\}\[\<\>]|&&|\|\||\\$)/ && |
2503 | (!defined($1) || $1 !~ /sizeof\s*/)) { | 2556 | (!defined($1) || $1 !~ /sizeof\s*/)) { |
2504 | if (CHK("SPACING", | 2557 | if (CHK("SPACING", |
2505 | "No space is necessary after a cast\n" . $herecurr) && | 2558 | "No space is necessary after a cast\n" . $herecurr) && |
@@ -3124,6 +3177,7 @@ sub process { | |||
3124 | $line !~ /\btypedef\s+$Type\s*\(\s*\*?$Ident\s*\)\s*\(/ && | 3177 | $line !~ /\btypedef\s+$Type\s*\(\s*\*?$Ident\s*\)\s*\(/ && |
3125 | $line !~ /\btypedef\s+$Type\s+$Ident\s*\(/ && | 3178 | $line !~ /\btypedef\s+$Type\s+$Ident\s*\(/ && |
3126 | $line !~ /\b$typeTypedefs\b/ && | 3179 | $line !~ /\b$typeTypedefs\b/ && |
3180 | $line !~ /\b$typeOtherOSTypedefs\b/ && | ||
3127 | $line !~ /\b__bitwise(?:__|)\b/) { | 3181 | $line !~ /\b__bitwise(?:__|)\b/) { |
3128 | WARN("NEW_TYPEDEFS", | 3182 | WARN("NEW_TYPEDEFS", |
3129 | "do not add new typedefs\n" . $herecurr); | 3183 | "do not add new typedefs\n" . $herecurr); |
@@ -3200,7 +3254,7 @@ sub process { | |||
3200 | # check for uses of printk_ratelimit | 3254 | # check for uses of printk_ratelimit |
3201 | if ($line =~ /\bprintk_ratelimit\s*\(/) { | 3255 | if ($line =~ /\bprintk_ratelimit\s*\(/) { |
3202 | WARN("PRINTK_RATELIMITED", | 3256 | WARN("PRINTK_RATELIMITED", |
3203 | "Prefer printk_ratelimited or pr_<level>_ratelimited to printk_ratelimit\n" . $herecurr); | 3257 | "Prefer printk_ratelimited or pr_<level>_ratelimited to printk_ratelimit\n" . $herecurr); |
3204 | } | 3258 | } |
3205 | 3259 | ||
3206 | # printk should use KERN_* levels. Note that follow on printk's on the | 3260 | # printk should use KERN_* levels. Note that follow on printk's on the |
@@ -3646,7 +3700,22 @@ sub process { | |||
3646 | $op eq '*' or $op eq '/' or | 3700 | $op eq '*' or $op eq '/' or |
3647 | $op eq '%') | 3701 | $op eq '%') |
3648 | { | 3702 | { |
3649 | if ($ctx =~ /Wx[^WCE]|[^WCE]xW/) { | 3703 | if ($check) { |
3704 | if (defined $fix_elements[$n + 2] && $ctx !~ /[EW]x[EW]/) { | ||
3705 | if (CHK("SPACING", | ||
3706 | "spaces preferred around that '$op' $at\n" . $hereptr)) { | ||
3707 | $good = rtrim($fix_elements[$n]) . " " . trim($fix_elements[$n + 1]) . " "; | ||
3708 | $fix_elements[$n + 2] =~ s/^\s+//; | ||
3709 | $line_fixed = 1; | ||
3710 | } | ||
3711 | } elsif (!defined $fix_elements[$n + 2] && $ctx !~ /Wx[OE]/) { | ||
3712 | if (CHK("SPACING", | ||
3713 | "space preferred before that '$op' $at\n" . $hereptr)) { | ||
3714 | $good = rtrim($fix_elements[$n]) . " " . trim($fix_elements[$n + 1]); | ||
3715 | $line_fixed = 1; | ||
3716 | } | ||
3717 | } | ||
3718 | } elsif ($ctx =~ /Wx[^WCE]|[^WCE]xW/) { | ||
3650 | if (ERROR("SPACING", | 3719 | if (ERROR("SPACING", |
3651 | "need consistent spacing around '$op' $at\n" . $hereptr)) { | 3720 | "need consistent spacing around '$op' $at\n" . $hereptr)) { |
3652 | $good = rtrim($fix_elements[$n]) . " " . trim($fix_elements[$n + 1]) . " "; | 3721 | $good = rtrim($fix_elements[$n]) . " " . trim($fix_elements[$n + 1]) . " "; |
@@ -4251,6 +4320,7 @@ sub process { | |||
4251 | $ctx = $dstat; | 4320 | $ctx = $dstat; |
4252 | 4321 | ||
4253 | $dstat =~ s/\\\n.//g; | 4322 | $dstat =~ s/\\\n.//g; |
4323 | $dstat =~ s/$;/ /g; | ||
4254 | 4324 | ||
4255 | if ($dstat =~ /^\+\s*#\s*define\s+$Ident\s*${balanced_parens}\s*do\s*{(.*)\s*}\s*while\s*\(\s*0\s*\)\s*([;\s]*)\s*$/) { | 4325 | if ($dstat =~ /^\+\s*#\s*define\s+$Ident\s*${balanced_parens}\s*do\s*{(.*)\s*}\s*while\s*\(\s*0\s*\)\s*([;\s]*)\s*$/) { |
4256 | my $stmts = $2; | 4326 | my $stmts = $2; |
@@ -4417,12 +4487,18 @@ sub process { | |||
4417 | 4487 | ||
4418 | # check for unnecessary blank lines around braces | 4488 | # check for unnecessary blank lines around braces |
4419 | if (($line =~ /^.\s*}\s*$/ && $prevrawline =~ /^.\s*$/)) { | 4489 | if (($line =~ /^.\s*}\s*$/ && $prevrawline =~ /^.\s*$/)) { |
4420 | CHK("BRACES", | 4490 | if (CHK("BRACES", |
4421 | "Blank lines aren't necessary before a close brace '}'\n" . $hereprev); | 4491 | "Blank lines aren't necessary before a close brace '}'\n" . $hereprev) && |
4492 | $fix && $prevrawline =~ /^\+/) { | ||
4493 | fix_delete_line($fixlinenr - 1, $prevrawline); | ||
4494 | } | ||
4422 | } | 4495 | } |
4423 | if (($rawline =~ /^.\s*$/ && $prevline =~ /^..*{\s*$/)) { | 4496 | if (($rawline =~ /^.\s*$/ && $prevline =~ /^..*{\s*$/)) { |
4424 | CHK("BRACES", | 4497 | if (CHK("BRACES", |
4425 | "Blank lines aren't necessary after an open brace '{'\n" . $hereprev); | 4498 | "Blank lines aren't necessary after an open brace '{'\n" . $hereprev) && |
4499 | $fix) { | ||
4500 | fix_delete_line($fixlinenr, $rawline); | ||
4501 | } | ||
4426 | } | 4502 | } |
4427 | 4503 | ||
4428 | # no volatiles please | 4504 | # no volatiles please |
@@ -4545,7 +4621,7 @@ sub process { | |||
4545 | } | 4621 | } |
4546 | 4622 | ||
4547 | # check for logging functions with KERN_<LEVEL> | 4623 | # check for logging functions with KERN_<LEVEL> |
4548 | if ($line !~ /printk\s*\(/ && | 4624 | if ($line !~ /printk(?:_ratelimited|_once)?\s*\(/ && |
4549 | $line =~ /\b$logFunctions\s*\(.*\b(KERN_[A-Z]+)\b/) { | 4625 | $line =~ /\b$logFunctions\s*\(.*\b(KERN_[A-Z]+)\b/) { |
4550 | my $level = $1; | 4626 | my $level = $1; |
4551 | if (WARN("UNNECESSARY_KERN_LEVEL", | 4627 | if (WARN("UNNECESSARY_KERN_LEVEL", |
@@ -4804,7 +4880,8 @@ sub process { | |||
4804 | # check for seq_printf uses that could be seq_puts | 4880 | # check for seq_printf uses that could be seq_puts |
4805 | if ($sline =~ /\bseq_printf\s*\(.*"\s*\)\s*;\s*$/) { | 4881 | if ($sline =~ /\bseq_printf\s*\(.*"\s*\)\s*;\s*$/) { |
4806 | my $fmt = get_quoted_string($line, $rawline); | 4882 | my $fmt = get_quoted_string($line, $rawline); |
4807 | if ($fmt ne "" && $fmt !~ /[^\\]\%/) { | 4883 | $fmt =~ s/%%//g; |
4884 | if ($fmt !~ /%/) { | ||
4808 | if (WARN("PREFER_SEQ_PUTS", | 4885 | if (WARN("PREFER_SEQ_PUTS", |
4809 | "Prefer seq_puts to seq_printf\n" . $herecurr) && | 4886 | "Prefer seq_puts to seq_printf\n" . $herecurr) && |
4810 | $fix) { | 4887 | $fix) { |
@@ -5089,6 +5166,12 @@ sub process { | |||
5089 | } | 5166 | } |
5090 | } | 5167 | } |
5091 | 5168 | ||
5169 | # check for uses of __DATE__, __TIME__, __TIMESTAMP__ | ||
5170 | while ($line =~ /\b(__(?:DATE|TIME|TIMESTAMP)__)\b/g) { | ||
5171 | ERROR("DATE_TIME", | ||
5172 | "Use of the '$1' macro makes the build non-deterministic\n" . $herecurr); | ||
5173 | } | ||
5174 | |||
5092 | # check for use of yield() | 5175 | # check for use of yield() |
5093 | if ($line =~ /\byield\s*\(\s*\)/) { | 5176 | if ($line =~ /\byield\s*\(\s*\)/) { |
5094 | WARN("YIELD", | 5177 | WARN("YIELD", |
@@ -5140,8 +5223,9 @@ sub process { | |||
5140 | "please use device_initcall() or more appropriate function instead of __initcall() (see include/linux/init.h)\n" . $herecurr); | 5223 | "please use device_initcall() or more appropriate function instead of __initcall() (see include/linux/init.h)\n" . $herecurr); |
5141 | } | 5224 | } |
5142 | 5225 | ||
5143 | # check for various ops structs, ensure they are const. | 5226 | # check for various structs that are normally const (ops, kgdb, device_tree) |
5144 | my $struct_ops = qr{acpi_dock_ops| | 5227 | my $const_structs = qr{ |
5228 | acpi_dock_ops| | ||
5145 | address_space_operations| | 5229 | address_space_operations| |
5146 | backlight_ops| | 5230 | backlight_ops| |
5147 | block_device_operations| | 5231 | block_device_operations| |
@@ -5164,6 +5248,7 @@ sub process { | |||
5164 | mtrr_ops| | 5248 | mtrr_ops| |
5165 | neigh_ops| | 5249 | neigh_ops| |
5166 | nlmsvc_binding| | 5250 | nlmsvc_binding| |
5251 | of_device_id| | ||
5167 | pci_raw_ops| | 5252 | pci_raw_ops| |
5168 | pipe_buf_operations| | 5253 | pipe_buf_operations| |
5169 | platform_hibernation_ops| | 5254 | platform_hibernation_ops| |
@@ -5179,7 +5264,7 @@ sub process { | |||
5179 | usb_mon_operations| | 5264 | usb_mon_operations| |
5180 | wd_ops}x; | 5265 | wd_ops}x; |
5181 | if ($line !~ /\bconst\b/ && | 5266 | if ($line !~ /\bconst\b/ && |
5182 | $line =~ /\bstruct\s+($struct_ops)\b/) { | 5267 | $line =~ /\bstruct\s+($const_structs)\b/) { |
5183 | WARN("CONST_STRUCT", | 5268 | WARN("CONST_STRUCT", |
5184 | "struct $1 should normally be const\n" . | 5269 | "struct $1 should normally be const\n" . |
5185 | $herecurr); | 5270 | $herecurr); |
@@ -5204,6 +5289,13 @@ sub process { | |||
5204 | "#define of '$1' is wrong - use Kconfig variables or standard guards instead\n" . $herecurr); | 5289 | "#define of '$1' is wrong - use Kconfig variables or standard guards instead\n" . $herecurr); |
5205 | } | 5290 | } |
5206 | 5291 | ||
5292 | # likely/unlikely comparisons similar to "(likely(foo) > 0)" | ||
5293 | if ($^V && $^V ge 5.10.0 && | ||
5294 | $line =~ /\b((?:un)?likely)\s*\(\s*$FuncArg\s*\)\s*$Compare/) { | ||
5295 | WARN("LIKELY_MISUSE", | ||
5296 | "Using $1 should generally have parentheses around the comparison\n" . $herecurr); | ||
5297 | } | ||
5298 | |||
5207 | # whine mightly about in_atomic | 5299 | # whine mightly about in_atomic |
5208 | if ($line =~ /\bin_atomic\s*\(/) { | 5300 | if ($line =~ /\bin_atomic\s*\(/) { |
5209 | if ($realfile =~ m@^drivers/@) { | 5301 | if ($realfile =~ m@^drivers/@) { |
@@ -5255,6 +5347,9 @@ sub process { | |||
5255 | length($val) ne 4)) { | 5347 | length($val) ne 4)) { |
5256 | ERROR("NON_OCTAL_PERMISSIONS", | 5348 | ERROR("NON_OCTAL_PERMISSIONS", |
5257 | "Use 4 digit octal (0777) not decimal permissions\n" . $herecurr); | 5349 | "Use 4 digit octal (0777) not decimal permissions\n" . $herecurr); |
5350 | } elsif ($val =~ /^$Octal$/ && (oct($val) & 02)) { | ||
5351 | ERROR("EXPORTED_WORLD_WRITABLE", | ||
5352 | "Exporting writable files is usually an error. Consider more restrictive permissions.\n" . $herecurr); | ||
5258 | } | 5353 | } |
5259 | } | 5354 | } |
5260 | } | 5355 | } |
diff --git a/scripts/diffconfig b/scripts/diffconfig index 6d672836e187..0db267d0adc9 100755 --- a/scripts/diffconfig +++ b/scripts/diffconfig | |||
@@ -28,7 +28,6 @@ If no config files are specified, .config and .config.old are used. | |||
28 | Example usage: | 28 | Example usage: |
29 | $ diffconfig .config config-with-some-changes | 29 | $ diffconfig .config config-with-some-changes |
30 | -EXT2_FS_XATTR n | 30 | -EXT2_FS_XATTR n |
31 | -EXT2_FS_XIP n | ||
32 | CRAMFS n -> y | 31 | CRAMFS n -> y |
33 | EXT2_FS y -> n | 32 | EXT2_FS y -> n |
34 | LOG_BUF_SHIFT 14 -> 16 | 33 | LOG_BUF_SHIFT 14 -> 16 |
diff --git a/scripts/module-common.lds b/scripts/module-common.lds index 0865b3e752be..73a2c7da0e55 100644 --- a/scripts/module-common.lds +++ b/scripts/module-common.lds | |||
@@ -6,14 +6,17 @@ | |||
6 | SECTIONS { | 6 | SECTIONS { |
7 | /DISCARD/ : { *(.discard) } | 7 | /DISCARD/ : { *(.discard) } |
8 | 8 | ||
9 | __ksymtab : { *(SORT(___ksymtab+*)) } | 9 | __ksymtab 0 : { *(SORT(___ksymtab+*)) } |
10 | __ksymtab_gpl : { *(SORT(___ksymtab_gpl+*)) } | 10 | __ksymtab_gpl 0 : { *(SORT(___ksymtab_gpl+*)) } |
11 | __ksymtab_unused : { *(SORT(___ksymtab_unused+*)) } | 11 | __ksymtab_unused 0 : { *(SORT(___ksymtab_unused+*)) } |
12 | __ksymtab_unused_gpl : { *(SORT(___ksymtab_unused_gpl+*)) } | 12 | __ksymtab_unused_gpl 0 : { *(SORT(___ksymtab_unused_gpl+*)) } |
13 | __ksymtab_gpl_future : { *(SORT(___ksymtab_gpl_future+*)) } | 13 | __ksymtab_gpl_future 0 : { *(SORT(___ksymtab_gpl_future+*)) } |
14 | __kcrctab : { *(SORT(___kcrctab+*)) } | 14 | __kcrctab 0 : { *(SORT(___kcrctab+*)) } |
15 | __kcrctab_gpl : { *(SORT(___kcrctab_gpl+*)) } | 15 | __kcrctab_gpl 0 : { *(SORT(___kcrctab_gpl+*)) } |
16 | __kcrctab_unused : { *(SORT(___kcrctab_unused+*)) } | 16 | __kcrctab_unused 0 : { *(SORT(___kcrctab_unused+*)) } |
17 | __kcrctab_unused_gpl : { *(SORT(___kcrctab_unused_gpl+*)) } | 17 | __kcrctab_unused_gpl 0 : { *(SORT(___kcrctab_unused_gpl+*)) } |
18 | __kcrctab_gpl_future : { *(SORT(___kcrctab_gpl_future+*)) } | 18 | __kcrctab_gpl_future 0 : { *(SORT(___kcrctab_gpl_future+*)) } |
19 | |||
20 | . = ALIGN(8); | ||
21 | .init_array 0 : { *(SORT(.init_array.*)) *(.init_array) } | ||
19 | } | 22 | } |
diff --git a/scripts/recordmcount.pl b/scripts/recordmcount.pl index 56ea99a12ab7..826470d7f000 100755 --- a/scripts/recordmcount.pl +++ b/scripts/recordmcount.pl | |||
@@ -242,8 +242,13 @@ if ($arch eq "x86_64") { | |||
242 | $cc .= " -m32"; | 242 | $cc .= " -m32"; |
243 | 243 | ||
244 | } elsif ($arch eq "s390" && $bits == 64) { | 244 | } elsif ($arch eq "s390" && $bits == 64) { |
245 | $mcount_regex = "^\\s*([0-9a-fA-F]+):\\s*R_390_(PC|PLT)32DBL\\s+_mcount\\+0x2\$"; | 245 | if ($cc =~ /-DCC_USING_HOTPATCH/) { |
246 | $mcount_adjust = -14; | 246 | $mcount_regex = "^\\s*([0-9a-fA-F]+):\\s*c0 04 00 00 00 00\\s*brcl\\s*0,[0-9a-f]+ <([^\+]*)>\$"; |
247 | $mcount_adjust = 0; | ||
248 | } else { | ||
249 | $mcount_regex = "^\\s*([0-9a-fA-F]+):\\s*R_390_(PC|PLT)32DBL\\s+_mcount\\+0x2\$"; | ||
250 | $mcount_adjust = -14; | ||
251 | } | ||
247 | $alignment = 8; | 252 | $alignment = 8; |
248 | $type = ".quad"; | 253 | $type = ".quad"; |
249 | $ld .= " -m elf64_s390"; | 254 | $ld .= " -m elf64_s390"; |
@@ -255,7 +260,6 @@ if ($arch eq "x86_64") { | |||
255 | # force flags for this arch | 260 | # force flags for this arch |
256 | $ld .= " -m shlelf_linux"; | 261 | $ld .= " -m shlelf_linux"; |
257 | $objcopy .= " -O elf32-sh-linux"; | 262 | $objcopy .= " -O elf32-sh-linux"; |
258 | $cc .= " -m32"; | ||
259 | 263 | ||
260 | } elsif ($arch eq "powerpc") { | 264 | } elsif ($arch eq "powerpc") { |
261 | $local_regex = "^[0-9a-fA-F]+\\s+t\\s+(\\.?\\S+)"; | 265 | $local_regex = "^[0-9a-fA-F]+\\s+t\\s+(\\.?\\S+)"; |