diff options
Diffstat (limited to 'scripts')
-rw-r--r-- | scripts/bootgraph.pl | 4 | ||||
-rwxr-xr-x | scripts/checkpatch.pl | 26 | ||||
-rw-r--r-- | scripts/kconfig/conf.c | 16 | ||||
-rw-r--r-- | scripts/kconfig/confdata.c | 51 | ||||
-rwxr-xr-x | scripts/kernel-doc | 40 | ||||
-rw-r--r-- | scripts/markup_oops.pl | 161 | ||||
-rw-r--r-- | scripts/mod/file2alias.c | 1 | ||||
-rw-r--r-- | scripts/package/Makefile | 3 | ||||
-rwxr-xr-x | scripts/package/mkspec | 10 | ||||
-rwxr-xr-x | scripts/setlocalversion | 9 | ||||
-rwxr-xr-x | scripts/tags.sh | 12 | ||||
-rw-r--r-- | scripts/unifdef.c | 6 |
12 files changed, 284 insertions, 55 deletions
diff --git a/scripts/bootgraph.pl b/scripts/bootgraph.pl index b0246307aac4..12caa822a232 100644 --- a/scripts/bootgraph.pl +++ b/scripts/bootgraph.pl | |||
@@ -51,7 +51,7 @@ my %pidctr; | |||
51 | 51 | ||
52 | while (<>) { | 52 | while (<>) { |
53 | my $line = $_; | 53 | my $line = $_; |
54 | if ($line =~ /([0-9\.]+)\] calling ([a-zA-Z0-9\_]+)\+/) { | 54 | if ($line =~ /([0-9\.]+)\] calling ([a-zA-Z0-9\_\.]+)\+/) { |
55 | my $func = $2; | 55 | my $func = $2; |
56 | if ($done == 0) { | 56 | if ($done == 0) { |
57 | $start{$func} = $1; | 57 | $start{$func} = $1; |
@@ -87,7 +87,7 @@ while (<>) { | |||
87 | $count = $count + 1; | 87 | $count = $count + 1; |
88 | } | 88 | } |
89 | 89 | ||
90 | if ($line =~ /([0-9\.]+)\] initcall ([a-zA-Z0-9\_]+)\+.*returned/) { | 90 | if ($line =~ /([0-9\.]+)\] initcall ([a-zA-Z0-9\_\.]+)\+.*returned/) { |
91 | if ($done == 0) { | 91 | if ($done == 0) { |
92 | $end{$2} = $1; | 92 | $end{$2} = $1; |
93 | $maxtime = $1; | 93 | $maxtime = $1; |
diff --git a/scripts/checkpatch.pl b/scripts/checkpatch.pl index 45eb0ae98eba..2d5ece798c4c 100755 --- a/scripts/checkpatch.pl +++ b/scripts/checkpatch.pl | |||
@@ -10,7 +10,7 @@ use strict; | |||
10 | my $P = $0; | 10 | my $P = $0; |
11 | $P =~ s@.*/@@g; | 11 | $P =~ s@.*/@@g; |
12 | 12 | ||
13 | my $V = '0.27'; | 13 | my $V = '0.28'; |
14 | 14 | ||
15 | use Getopt::Long qw(:config no_auto_abbrev); | 15 | use Getopt::Long qw(:config no_auto_abbrev); |
16 | 16 | ||
@@ -110,7 +110,8 @@ our $Sparse = qr{ | |||
110 | __iomem| | 110 | __iomem| |
111 | __must_check| | 111 | __must_check| |
112 | __init_refok| | 112 | __init_refok| |
113 | __kprobes | 113 | __kprobes| |
114 | __ref | ||
114 | }x; | 115 | }x; |
115 | our $Attribute = qr{ | 116 | our $Attribute = qr{ |
116 | const| | 117 | const| |
@@ -1240,7 +1241,8 @@ sub process { | |||
1240 | $realfile =~ s@^([^/]*)/@@; | 1241 | $realfile =~ s@^([^/]*)/@@; |
1241 | 1242 | ||
1242 | $p1_prefix = $1; | 1243 | $p1_prefix = $1; |
1243 | if ($tree && $p1_prefix ne '' && -e "$root/$p1_prefix") { | 1244 | if (!$file && $tree && $p1_prefix ne '' && |
1245 | -e "$root/$p1_prefix") { | ||
1244 | WARN("patch prefix '$p1_prefix' exists, appears to be a -p0 patch\n"); | 1246 | WARN("patch prefix '$p1_prefix' exists, appears to be a -p0 patch\n"); |
1245 | } | 1247 | } |
1246 | 1248 | ||
@@ -1583,9 +1585,9 @@ sub process { | |||
1583 | } | 1585 | } |
1584 | # TEST: allow direct testing of the attribute matcher. | 1586 | # TEST: allow direct testing of the attribute matcher. |
1585 | if ($dbg_attr) { | 1587 | if ($dbg_attr) { |
1586 | if ($line =~ /^.\s*$Attribute\s*$/) { | 1588 | if ($line =~ /^.\s*$Modifier\s*$/) { |
1587 | ERROR("TEST: is attr\n" . $herecurr); | 1589 | ERROR("TEST: is attr\n" . $herecurr); |
1588 | } elsif ($dbg_attr > 1 && $line =~ /^.+($Attribute)/) { | 1590 | } elsif ($dbg_attr > 1 && $line =~ /^.+($Modifier)/) { |
1589 | ERROR("TEST: is not attr ($1 is)\n". $herecurr); | 1591 | ERROR("TEST: is not attr ($1 is)\n". $herecurr); |
1590 | } | 1592 | } |
1591 | next; | 1593 | next; |
@@ -1657,7 +1659,7 @@ sub process { | |||
1657 | 1659 | ||
1658 | # * goes on variable not on type | 1660 | # * goes on variable not on type |
1659 | # (char*[ const]) | 1661 | # (char*[ const]) |
1660 | if ($line =~ m{\($NonptrType(\s*\*[\s\*]*(?:$Modifier\s*)*)\)}) { | 1662 | if ($line =~ m{\($NonptrType(\s*(?:$Modifier\b\s*|\*\s*)+)\)}) { |
1661 | my ($from, $to) = ($1, $1); | 1663 | my ($from, $to) = ($1, $1); |
1662 | 1664 | ||
1663 | # Should start with a space. | 1665 | # Should start with a space. |
@@ -1672,7 +1674,7 @@ sub process { | |||
1672 | if ($from ne $to) { | 1674 | if ($from ne $to) { |
1673 | ERROR("\"(foo$from)\" should be \"(foo$to)\"\n" . $herecurr); | 1675 | ERROR("\"(foo$from)\" should be \"(foo$to)\"\n" . $herecurr); |
1674 | } | 1676 | } |
1675 | } elsif ($line =~ m{\b$NonptrType(\s*\*[\s\*]*(?:$Modifier\s*)?)($Ident)}) { | 1677 | } elsif ($line =~ m{\b$NonptrType(\s*(?:$Modifier\b\s*|\*\s*)+)($Ident)}) { |
1676 | my ($from, $to, $ident) = ($1, $1, $2); | 1678 | my ($from, $to, $ident) = ($1, $1, $2); |
1677 | 1679 | ||
1678 | # Should start with a space. | 1680 | # Should start with a space. |
@@ -1685,8 +1687,8 @@ sub process { | |||
1685 | # Modifiers should have spaces. | 1687 | # Modifiers should have spaces. |
1686 | $to =~ s/(\b$Modifier$)/$1 /; | 1688 | $to =~ s/(\b$Modifier$)/$1 /; |
1687 | 1689 | ||
1688 | #print "from<$from> to<$to>\n"; | 1690 | #print "from<$from> to<$to> ident<$ident>\n"; |
1689 | if ($from ne $to) { | 1691 | if ($from ne $to && $ident !~ /^$Modifier$/) { |
1690 | ERROR("\"foo${from}bar\" should be \"foo${to}bar\"\n" . $herecurr); | 1692 | ERROR("\"foo${from}bar\" should be \"foo${to}bar\"\n" . $herecurr); |
1691 | } | 1693 | } |
1692 | } | 1694 | } |
@@ -1885,11 +1887,11 @@ sub process { | |||
1885 | if ($ctx !~ /[WEBC]x./ && $ca !~ /(?:\)|!|~|\*|-|\&|\||\+\+|\-\-|\{)$/) { | 1887 | if ($ctx !~ /[WEBC]x./ && $ca !~ /(?:\)|!|~|\*|-|\&|\||\+\+|\-\-|\{)$/) { |
1886 | ERROR("space required before that '$op' $at\n" . $hereptr); | 1888 | ERROR("space required before that '$op' $at\n" . $hereptr); |
1887 | } | 1889 | } |
1888 | if ($op eq '*' && $cc =~/\s*const\b/) { | 1890 | if ($op eq '*' && $cc =~/\s*$Modifier\b/) { |
1889 | # A unary '*' may be const | 1891 | # A unary '*' may be const |
1890 | 1892 | ||
1891 | } elsif ($ctx =~ /.xW/) { | 1893 | } elsif ($ctx =~ /.xW/) { |
1892 | ERROR("space prohibited after that '$op' $at\n" . $hereptr); | 1894 | ERROR("Aspace prohibited after that '$op' $at\n" . $hereptr); |
1893 | } | 1895 | } |
1894 | 1896 | ||
1895 | # unary ++ and unary -- are allowed no space on one side. | 1897 | # unary ++ and unary -- are allowed no space on one side. |
@@ -2560,7 +2562,7 @@ sub process { | |||
2560 | if ($line =~ /\bin_atomic\s*\(/) { | 2562 | if ($line =~ /\bin_atomic\s*\(/) { |
2561 | if ($realfile =~ m@^drivers/@) { | 2563 | if ($realfile =~ m@^drivers/@) { |
2562 | ERROR("do not use in_atomic in drivers\n" . $herecurr); | 2564 | ERROR("do not use in_atomic in drivers\n" . $herecurr); |
2563 | } else { | 2565 | } elsif ($realfile !~ m@^kernel/@) { |
2564 | WARN("use of in_atomic() is incorrect outside core kernel code\n" . $herecurr); | 2566 | WARN("use of in_atomic() is incorrect outside core kernel code\n" . $herecurr); |
2565 | } | 2567 | } |
2566 | } | 2568 | } |
diff --git a/scripts/kconfig/conf.c b/scripts/kconfig/conf.c index 3e1057f885c6..d190092c3b6e 100644 --- a/scripts/kconfig/conf.c +++ b/scripts/kconfig/conf.c | |||
@@ -11,6 +11,7 @@ | |||
11 | #include <time.h> | 11 | #include <time.h> |
12 | #include <unistd.h> | 12 | #include <unistd.h> |
13 | #include <sys/stat.h> | 13 | #include <sys/stat.h> |
14 | #include <sys/time.h> | ||
14 | 15 | ||
15 | #define LKC_DIRECT_LINK | 16 | #define LKC_DIRECT_LINK |
16 | #include "lkc.h" | 17 | #include "lkc.h" |
@@ -464,9 +465,22 @@ int main(int ac, char **av) | |||
464 | input_mode = set_yes; | 465 | input_mode = set_yes; |
465 | break; | 466 | break; |
466 | case 'r': | 467 | case 'r': |
468 | { | ||
469 | struct timeval now; | ||
470 | unsigned int seed; | ||
471 | |||
472 | /* | ||
473 | * Use microseconds derived seed, | ||
474 | * compensate for systems where it may be zero | ||
475 | */ | ||
476 | gettimeofday(&now, NULL); | ||
477 | |||
478 | seed = (unsigned int)((now.tv_sec + 1) * (now.tv_usec + 1)); | ||
479 | srand(seed); | ||
480 | |||
467 | input_mode = set_random; | 481 | input_mode = set_random; |
468 | srand(time(NULL)); | ||
469 | break; | 482 | break; |
483 | } | ||
470 | case 'h': | 484 | case 'h': |
471 | printf(_("See README for usage info\n")); | 485 | printf(_("See README for usage info\n")); |
472 | exit(0); | 486 | exit(0); |
diff --git a/scripts/kconfig/confdata.c b/scripts/kconfig/confdata.c index 830d9eae11f9..273d73888f9d 100644 --- a/scripts/kconfig/confdata.c +++ b/scripts/kconfig/confdata.c | |||
@@ -843,7 +843,7 @@ void conf_set_all_new_symbols(enum conf_def_mode mode) | |||
843 | default: | 843 | default: |
844 | continue; | 844 | continue; |
845 | } | 845 | } |
846 | if (!sym_is_choice(sym) || mode != def_random) | 846 | if (!(sym_is_choice(sym) && mode == def_random)) |
847 | sym->flags |= SYMBOL_DEF_USER; | 847 | sym->flags |= SYMBOL_DEF_USER; |
848 | break; | 848 | break; |
849 | default: | 849 | default: |
@@ -856,28 +856,49 @@ void conf_set_all_new_symbols(enum conf_def_mode mode) | |||
856 | 856 | ||
857 | if (mode != def_random) | 857 | if (mode != def_random) |
858 | return; | 858 | return; |
859 | 859 | /* | |
860 | * We have different type of choice blocks. | ||
861 | * If curr.tri equal to mod then we can select several | ||
862 | * choice symbols in one block. | ||
863 | * In this case we do nothing. | ||
864 | * If curr.tri equal yes then only one symbol can be | ||
865 | * selected in a choice block and we set it to yes, | ||
866 | * and the rest to no. | ||
867 | */ | ||
860 | for_all_symbols(i, csym) { | 868 | for_all_symbols(i, csym) { |
861 | if (sym_has_value(csym) || !sym_is_choice(csym)) | 869 | if (sym_has_value(csym) || !sym_is_choice(csym)) |
862 | continue; | 870 | continue; |
863 | 871 | ||
864 | sym_calc_value(csym); | 872 | sym_calc_value(csym); |
873 | |||
874 | if (csym->curr.tri != yes) | ||
875 | continue; | ||
876 | |||
865 | prop = sym_get_choice_prop(csym); | 877 | prop = sym_get_choice_prop(csym); |
866 | def = -1; | 878 | |
867 | while (1) { | 879 | /* count entries in choice block */ |
868 | cnt = 0; | 880 | cnt = 0; |
869 | expr_list_for_each_sym(prop->expr, e, sym) { | 881 | expr_list_for_each_sym(prop->expr, e, sym) |
870 | if (sym->visible == no) | 882 | cnt++; |
871 | continue; | 883 | |
872 | if (def == cnt++) { | 884 | /* |
873 | csym->def[S_DEF_USER].val = sym; | 885 | * find a random value and set it to yes, |
874 | break; | 886 | * set the rest to no so we have only one set |
875 | } | 887 | */ |
888 | def = (rand() % cnt); | ||
889 | |||
890 | cnt = 0; | ||
891 | expr_list_for_each_sym(prop->expr, e, sym) { | ||
892 | if (def == cnt++) { | ||
893 | sym->def[S_DEF_USER].tri = yes; | ||
894 | csym->def[S_DEF_USER].val = sym; | ||
895 | } | ||
896 | else { | ||
897 | sym->def[S_DEF_USER].tri = no; | ||
876 | } | 898 | } |
877 | if (def >= 0 || cnt < 2) | ||
878 | break; | ||
879 | def = (rand() % cnt) + 1; | ||
880 | } | 899 | } |
881 | csym->flags |= SYMBOL_DEF_USER; | 900 | csym->flags |= SYMBOL_DEF_USER; |
901 | /* clear VALID to get value calculated */ | ||
902 | csym->flags &= ~(SYMBOL_VALID); | ||
882 | } | 903 | } |
883 | } | 904 | } |
diff --git a/scripts/kernel-doc b/scripts/kernel-doc index 8bb83a100edb..0f11870116dc 100755 --- a/scripts/kernel-doc +++ b/scripts/kernel-doc | |||
@@ -1827,6 +1827,40 @@ sub reset_state { | |||
1827 | $state = 0; | 1827 | $state = 0; |
1828 | } | 1828 | } |
1829 | 1829 | ||
1830 | sub syscall_munge() { | ||
1831 | my $void = 0; | ||
1832 | |||
1833 | $prototype =~ s@[\r\n\t]+@ @gos; # strip newlines/CR's/tabs | ||
1834 | ## if ($prototype =~ m/SYSCALL_DEFINE0\s*\(\s*(a-zA-Z0-9_)*\s*\)/) { | ||
1835 | if ($prototype =~ m/SYSCALL_DEFINE0/) { | ||
1836 | $void = 1; | ||
1837 | ## $prototype = "long sys_$1(void)"; | ||
1838 | } | ||
1839 | |||
1840 | $prototype =~ s/SYSCALL_DEFINE.*\(/long sys_/; # fix return type & func name | ||
1841 | if ($prototype =~ m/long (sys_.*?),/) { | ||
1842 | $prototype =~ s/,/\(/; | ||
1843 | } elsif ($void) { | ||
1844 | $prototype =~ s/\)/\(void\)/; | ||
1845 | } | ||
1846 | |||
1847 | # now delete all of the odd-number commas in $prototype | ||
1848 | # so that arg types & arg names don't have a comma between them | ||
1849 | my $count = 0; | ||
1850 | my $len = length($prototype); | ||
1851 | if ($void) { | ||
1852 | $len = 0; # skip the for-loop | ||
1853 | } | ||
1854 | for (my $ix = 0; $ix < $len; $ix++) { | ||
1855 | if (substr($prototype, $ix, 1) eq ',') { | ||
1856 | $count++; | ||
1857 | if ($count % 2 == 1) { | ||
1858 | substr($prototype, $ix, 1) = ' '; | ||
1859 | } | ||
1860 | } | ||
1861 | } | ||
1862 | } | ||
1863 | |||
1830 | sub process_state3_function($$) { | 1864 | sub process_state3_function($$) { |
1831 | my $x = shift; | 1865 | my $x = shift; |
1832 | my $file = shift; | 1866 | my $file = shift; |
@@ -1839,11 +1873,15 @@ sub process_state3_function($$) { | |||
1839 | elsif ($x =~ /([^\{]*)/) { | 1873 | elsif ($x =~ /([^\{]*)/) { |
1840 | $prototype .= $1; | 1874 | $prototype .= $1; |
1841 | } | 1875 | } |
1876 | |||
1842 | if (($x =~ /\{/) || ($x =~ /\#\s*define/) || ($x =~ /;/)) { | 1877 | if (($x =~ /\{/) || ($x =~ /\#\s*define/) || ($x =~ /;/)) { |
1843 | $prototype =~ s@/\*.*?\*/@@gos; # strip comments. | 1878 | $prototype =~ s@/\*.*?\*/@@gos; # strip comments. |
1844 | $prototype =~ s@[\r\n]+@ @gos; # strip newlines/cr's. | 1879 | $prototype =~ s@[\r\n]+@ @gos; # strip newlines/cr's. |
1845 | $prototype =~ s@^\s+@@gos; # strip leading spaces | 1880 | $prototype =~ s@^\s+@@gos; # strip leading spaces |
1846 | dump_function($prototype,$file); | 1881 | if ($prototype =~ /SYSCALL_DEFINE/) { |
1882 | syscall_munge(); | ||
1883 | } | ||
1884 | dump_function($prototype, $file); | ||
1847 | reset_state(); | 1885 | reset_state(); |
1848 | } | 1886 | } |
1849 | } | 1887 | } |
diff --git a/scripts/markup_oops.pl b/scripts/markup_oops.pl index d40449cafa84..528492bcba5b 100644 --- a/scripts/markup_oops.pl +++ b/scripts/markup_oops.pl | |||
@@ -1,4 +1,4 @@ | |||
1 | #!/usr/bin/perl -w | 1 | #!/usr/bin/perl |
2 | 2 | ||
3 | use File::Basename; | 3 | use File::Basename; |
4 | 4 | ||
@@ -29,27 +29,151 @@ my $filename = $vmlinux_name; | |||
29 | my $target = "0"; | 29 | my $target = "0"; |
30 | my $function; | 30 | my $function; |
31 | my $module = ""; | 31 | my $module = ""; |
32 | my $func_offset; | 32 | my $func_offset = 0; |
33 | my $vmaoffset = 0; | 33 | my $vmaoffset = 0; |
34 | 34 | ||
35 | my %regs; | ||
36 | |||
37 | |||
38 | sub parse_x86_regs | ||
39 | { | ||
40 | my ($line) = @_; | ||
41 | if ($line =~ /EAX: ([0-9a-f]+) EBX: ([0-9a-f]+) ECX: ([0-9a-f]+) EDX: ([0-9a-f]+)/) { | ||
42 | $regs{"%eax"} = $1; | ||
43 | $regs{"%ebx"} = $2; | ||
44 | $regs{"%ecx"} = $3; | ||
45 | $regs{"%edx"} = $4; | ||
46 | } | ||
47 | if ($line =~ /ESI: ([0-9a-f]+) EDI: ([0-9a-f]+) EBP: ([0-9a-f]+) ESP: ([0-9a-f]+)/) { | ||
48 | $regs{"%esi"} = $1; | ||
49 | $regs{"%edi"} = $2; | ||
50 | $regs{"%esp"} = $4; | ||
51 | } | ||
52 | if ($line =~ /RAX: ([0-9a-f]+) RBX: ([0-9a-f]+) RCX: ([0-9a-f]+)/) { | ||
53 | $regs{"%eax"} = $1; | ||
54 | $regs{"%ebx"} = $2; | ||
55 | $regs{"%ecx"} = $3; | ||
56 | } | ||
57 | if ($line =~ /RDX: ([0-9a-f]+) RSI: ([0-9a-f]+) RDI: ([0-9a-f]+)/) { | ||
58 | $regs{"%edx"} = $1; | ||
59 | $regs{"%esi"} = $2; | ||
60 | $regs{"%edi"} = $3; | ||
61 | } | ||
62 | if ($line =~ /RBP: ([0-9a-f]+) R08: ([0-9a-f]+) R09: ([0-9a-f]+)/) { | ||
63 | $regs{"%r08"} = $2; | ||
64 | $regs{"%r09"} = $3; | ||
65 | } | ||
66 | if ($line =~ /R10: ([0-9a-f]+) R11: ([0-9a-f]+) R12: ([0-9a-f]+)/) { | ||
67 | $regs{"%r10"} = $1; | ||
68 | $regs{"%r11"} = $2; | ||
69 | $regs{"%r12"} = $3; | ||
70 | } | ||
71 | if ($line =~ /R13: ([0-9a-f]+) R14: ([0-9a-f]+) R15: ([0-9a-f]+)/) { | ||
72 | $regs{"%r13"} = $1; | ||
73 | $regs{"%r14"} = $2; | ||
74 | $regs{"%r15"} = $3; | ||
75 | } | ||
76 | } | ||
77 | |||
78 | sub reg_name | ||
79 | { | ||
80 | my ($reg) = @_; | ||
81 | $reg =~ s/r(.)x/e\1x/; | ||
82 | $reg =~ s/r(.)i/e\1i/; | ||
83 | $reg =~ s/r(.)p/e\1p/; | ||
84 | return $reg; | ||
85 | } | ||
86 | |||
87 | sub process_x86_regs | ||
88 | { | ||
89 | my ($line, $cntr) = @_; | ||
90 | my $str = ""; | ||
91 | if (length($line) < 40) { | ||
92 | return ""; # not an asm istruction | ||
93 | } | ||
94 | |||
95 | # find the arguments to the instruction | ||
96 | if ($line =~ /([0-9a-zA-Z\,\%\(\)\-\+]+)$/) { | ||
97 | $lastword = $1; | ||
98 | } else { | ||
99 | return ""; | ||
100 | } | ||
101 | |||
102 | # we need to find the registers that get clobbered, | ||
103 | # since their value is no longer relevant for previous | ||
104 | # instructions in the stream. | ||
105 | |||
106 | $clobber = $lastword; | ||
107 | # first, remove all memory operands, they're read only | ||
108 | $clobber =~ s/\([a-z0-9\%\,]+\)//g; | ||
109 | # then, remove everything before the comma, thats the read part | ||
110 | $clobber =~ s/.*\,//g; | ||
111 | |||
112 | # if this is the instruction that faulted, we haven't actually done | ||
113 | # the write yet... nothing is clobbered. | ||
114 | if ($cntr == 0) { | ||
115 | $clobber = ""; | ||
116 | } | ||
117 | |||
118 | foreach $reg (keys(%regs)) { | ||
119 | my $clobberprime = reg_name($clobber); | ||
120 | my $lastwordprime = reg_name($lastword); | ||
121 | my $val = $regs{$reg}; | ||
122 | if ($val =~ /^[0]+$/) { | ||
123 | $val = "0"; | ||
124 | } else { | ||
125 | $val =~ s/^0*//; | ||
126 | } | ||
127 | |||
128 | # first check if we're clobbering this register; if we do | ||
129 | # we print it with a =>, and then delete its value | ||
130 | if ($clobber =~ /$reg/ || $clobberprime =~ /$reg/) { | ||
131 | if (length($val) > 0) { | ||
132 | $str = $str . " $reg => $val "; | ||
133 | } | ||
134 | $regs{$reg} = ""; | ||
135 | $val = ""; | ||
136 | } | ||
137 | # now check if we're reading this register | ||
138 | if ($lastword =~ /$reg/ || $lastwordprime =~ /$reg/) { | ||
139 | if (length($val) > 0) { | ||
140 | $str = $str . " $reg = $val "; | ||
141 | } | ||
142 | } | ||
143 | } | ||
144 | return $str; | ||
145 | } | ||
146 | |||
147 | # parse the oops | ||
35 | while (<STDIN>) { | 148 | while (<STDIN>) { |
36 | my $line = $_; | 149 | my $line = $_; |
37 | if ($line =~ /EIP: 0060:\[\<([a-z0-9]+)\>\]/) { | 150 | if ($line =~ /EIP: 0060:\[\<([a-z0-9]+)\>\]/) { |
38 | $target = $1; | 151 | $target = $1; |
39 | } | 152 | } |
153 | if ($line =~ /RIP: 0010:\[\<([a-z0-9]+)\>\]/) { | ||
154 | $target = $1; | ||
155 | } | ||
40 | if ($line =~ /EIP is at ([a-zA-Z0-9\_]+)\+(0x[0-9a-f]+)\/0x[a-f0-9]/) { | 156 | if ($line =~ /EIP is at ([a-zA-Z0-9\_]+)\+(0x[0-9a-f]+)\/0x[a-f0-9]/) { |
41 | $function = $1; | 157 | $function = $1; |
42 | $func_offset = $2; | 158 | $func_offset = $2; |
43 | } | 159 | } |
160 | if ($line =~ /RIP: 0010:\[\<[0-9a-f]+\>\] \[\<[0-9a-f]+\>\] ([a-zA-Z0-9\_]+)\+(0x[0-9a-f]+)\/0x[a-f0-9]/) { | ||
161 | $function = $1; | ||
162 | $func_offset = $2; | ||
163 | } | ||
44 | 164 | ||
45 | # check if it's a module | 165 | # check if it's a module |
46 | if ($line =~ /EIP is at ([a-zA-Z0-9\_]+)\+(0x[0-9a-f]+)\/0x[a-f0-9]+\W\[([a-zA-Z0-9\_\-]+)\]/) { | 166 | if ($line =~ /EIP is at ([a-zA-Z0-9\_]+)\+(0x[0-9a-f]+)\/0x[a-f0-9]+\W\[([a-zA-Z0-9\_\-]+)\]/) { |
47 | $module = $3; | 167 | $module = $3; |
48 | } | 168 | } |
169 | if ($line =~ /RIP: 0010:\[\<[0-9a-f]+\>\] \[\<[0-9a-f]+\>\] ([a-zA-Z0-9\_]+)\+(0x[0-9a-f]+)\/0x[a-f0-9]+\W\[([a-zA-Z0-9\_\-]+)\]/) { | ||
170 | $module = $3; | ||
171 | } | ||
172 | parse_x86_regs($line); | ||
49 | } | 173 | } |
50 | 174 | ||
51 | my $decodestart = hex($target) - hex($func_offset); | 175 | my $decodestart = hex($target) - hex($func_offset); |
52 | my $decodestop = $decodestart + 8192; | 176 | my $decodestop = hex($target) + 8192; |
53 | if ($target eq "0") { | 177 | if ($target eq "0") { |
54 | print "No oops found!\n"; | 178 | print "No oops found!\n"; |
55 | print "Usage: \n"; | 179 | print "Usage: \n"; |
@@ -84,6 +208,7 @@ my $counter = 0; | |||
84 | my $state = 0; | 208 | my $state = 0; |
85 | my $center = 0; | 209 | my $center = 0; |
86 | my @lines; | 210 | my @lines; |
211 | my @reglines; | ||
87 | 212 | ||
88 | sub InRange { | 213 | sub InRange { |
89 | my ($address, $target) = @_; | 214 | my ($address, $target) = @_; |
@@ -188,16 +313,36 @@ while ($finish < $counter) { | |||
188 | 313 | ||
189 | my $i; | 314 | my $i; |
190 | 315 | ||
191 | my $fulltext = ""; | 316 | |
317 | # start annotating the registers in the asm. | ||
318 | # this goes from the oopsing point back, so that the annotator | ||
319 | # can track (opportunistically) which registers got written and | ||
320 | # whos value no longer is relevant. | ||
321 | |||
322 | $i = $center; | ||
323 | while ($i >= $start) { | ||
324 | $reglines[$i] = process_x86_regs($lines[$i], $center - $i); | ||
325 | $i = $i - 1; | ||
326 | } | ||
327 | |||
192 | $i = $start; | 328 | $i = $start; |
193 | while ($i < $finish) { | 329 | while ($i < $finish) { |
330 | my $line; | ||
194 | if ($i == $center) { | 331 | if ($i == $center) { |
195 | $fulltext = $fulltext . "*$lines[$i] <----- faulting instruction\n"; | 332 | $line = "*$lines[$i] "; |
196 | } else { | 333 | } else { |
197 | $fulltext = $fulltext . " $lines[$i]\n"; | 334 | $line = " $lines[$i] "; |
335 | } | ||
336 | print $line; | ||
337 | if (defined($reglines[$i]) && length($reglines[$i]) > 0) { | ||
338 | my $c = 60 - length($line); | ||
339 | while ($c > 0) { print " "; $c = $c - 1; }; | ||
340 | print "| $reglines[$i]"; | ||
198 | } | 341 | } |
342 | if ($i == $center) { | ||
343 | print "<--- faulting instruction"; | ||
344 | } | ||
345 | print "\n"; | ||
199 | $i = $i +1; | 346 | $i = $i +1; |
200 | } | 347 | } |
201 | 348 | ||
202 | print $fulltext; | ||
203 | |||
diff --git a/scripts/mod/file2alias.c b/scripts/mod/file2alias.c index 491b8b1b6abf..4eea60b1693e 100644 --- a/scripts/mod/file2alias.c +++ b/scripts/mod/file2alias.c | |||
@@ -210,6 +210,7 @@ static void do_usb_table(void *symval, unsigned long size, | |||
210 | static int do_hid_entry(const char *filename, | 210 | static int do_hid_entry(const char *filename, |
211 | struct hid_device_id *id, char *alias) | 211 | struct hid_device_id *id, char *alias) |
212 | { | 212 | { |
213 | id->bus = TO_NATIVE(id->bus); | ||
213 | id->vendor = TO_NATIVE(id->vendor); | 214 | id->vendor = TO_NATIVE(id->vendor); |
214 | id->product = TO_NATIVE(id->product); | 215 | id->product = TO_NATIVE(id->product); |
215 | 216 | ||
diff --git a/scripts/package/Makefile b/scripts/package/Makefile index 8c6b7b09606a..fa4a0a17b7e0 100644 --- a/scripts/package/Makefile +++ b/scripts/package/Makefile | |||
@@ -35,9 +35,10 @@ $(objtree)/kernel.spec: $(MKSPEC) $(srctree)/Makefile | |||
35 | rpm-pkg rpm: $(objtree)/kernel.spec FORCE | 35 | rpm-pkg rpm: $(objtree)/kernel.spec FORCE |
36 | $(MAKE) clean | 36 | $(MAKE) clean |
37 | $(PREV) ln -sf $(srctree) $(KERNELPATH) | 37 | $(PREV) ln -sf $(srctree) $(KERNELPATH) |
38 | $(CONFIG_SHELL) $(srctree)/scripts/setlocalversion > $(objtree)/.scmversion | ||
38 | $(PREV) tar -cz $(RCS_TAR_IGNORE) -f $(KERNELPATH).tar.gz $(KERNELPATH)/. | 39 | $(PREV) tar -cz $(RCS_TAR_IGNORE) -f $(KERNELPATH).tar.gz $(KERNELPATH)/. |
39 | $(PREV) rm $(KERNELPATH) | 40 | $(PREV) rm $(KERNELPATH) |
40 | 41 | rm -f $(objtree)/.scmversion | |
41 | set -e; \ | 42 | set -e; \ |
42 | $(CONFIG_SHELL) $(srctree)/scripts/mkversion > $(objtree)/.tmp_version | 43 | $(CONFIG_SHELL) $(srctree)/scripts/mkversion > $(objtree)/.tmp_version |
43 | set -e; \ | 44 | set -e; \ |
diff --git a/scripts/package/mkspec b/scripts/package/mkspec index 2500886fb90a..3d93f8c81252 100755 --- a/scripts/package/mkspec +++ b/scripts/package/mkspec | |||
@@ -86,9 +86,17 @@ echo "%endif" | |||
86 | echo 'cp System.map $RPM_BUILD_ROOT'"/boot/System.map-$KERNELRELEASE" | 86 | echo 'cp System.map $RPM_BUILD_ROOT'"/boot/System.map-$KERNELRELEASE" |
87 | 87 | ||
88 | echo 'cp .config $RPM_BUILD_ROOT'"/boot/config-$KERNELRELEASE" | 88 | echo 'cp .config $RPM_BUILD_ROOT'"/boot/config-$KERNELRELEASE" |
89 | |||
90 | echo "%ifnarch ppc64" | ||
91 | echo 'cp vmlinux vmlinux.orig' | ||
92 | echo 'bzip2 -9 vmlinux' | ||
93 | echo 'mv vmlinux.bz2 $RPM_BUILD_ROOT'"/boot/vmlinux-$KERNELRELEASE.bz2" | ||
94 | echo 'mv vmlinux.orig vmlinux' | ||
95 | echo "%endif" | ||
96 | |||
89 | echo "" | 97 | echo "" |
90 | echo "%clean" | 98 | echo "%clean" |
91 | echo '#echo -rf $RPM_BUILD_ROOT' | 99 | echo 'rm -rf $RPM_BUILD_ROOT' |
92 | echo "" | 100 | echo "" |
93 | echo "%files" | 101 | echo "%files" |
94 | echo '%defattr (-, root, root)' | 102 | echo '%defattr (-, root, root)' |
diff --git a/scripts/setlocalversion b/scripts/setlocalversion index f6946cf99ce1..f1c4b35bc324 100755 --- a/scripts/setlocalversion +++ b/scripts/setlocalversion | |||
@@ -58,14 +58,7 @@ fi | |||
58 | # Check for svn and a svn repo. | 58 | # Check for svn and a svn repo. |
59 | if rev=`svn info 2>/dev/null | grep '^Last Changed Rev'`; then | 59 | if rev=`svn info 2>/dev/null | grep '^Last Changed Rev'`; then |
60 | rev=`echo $rev | awk '{print $NF}'` | 60 | rev=`echo $rev | awk '{print $NF}'` |
61 | changes=`svn status 2>/dev/null | grep '^[AMD]' | wc -l` | 61 | printf -- '-svn%s' "$rev" |
62 | |||
63 | # Are there uncommitted changes? | ||
64 | if [ $changes != 0 ]; then | ||
65 | printf -- '-svn%s%s' "$rev" -dirty | ||
66 | else | ||
67 | printf -- '-svn%s' "$rev" | ||
68 | fi | ||
69 | 62 | ||
70 | # All done with svn | 63 | # All done with svn |
71 | exit | 64 | exit |
diff --git a/scripts/tags.sh b/scripts/tags.sh index fdbe78bb5e2b..5bd8b1003d44 100755 --- a/scripts/tags.sh +++ b/scripts/tags.sh | |||
@@ -76,7 +76,10 @@ all_sources() | |||
76 | 76 | ||
77 | all_kconfigs() | 77 | all_kconfigs() |
78 | { | 78 | { |
79 | find_sources $ALLSOURCE_ARCHS 'Kconfig*' | 79 | for arch in $ALLSOURCE_ARCHS; do |
80 | find_sources $arch 'Kconfig*' | ||
81 | done | ||
82 | find_other_sources 'Kconfig*' | ||
80 | } | 83 | } |
81 | 84 | ||
82 | all_defconfigs() | 85 | all_defconfigs() |
@@ -99,7 +102,8 @@ exuberant() | |||
99 | -I ____cacheline_internodealigned_in_smp \ | 102 | -I ____cacheline_internodealigned_in_smp \ |
100 | -I EXPORT_SYMBOL,EXPORT_SYMBOL_GPL \ | 103 | -I EXPORT_SYMBOL,EXPORT_SYMBOL_GPL \ |
101 | --extra=+f --c-kinds=+px \ | 104 | --extra=+f --c-kinds=+px \ |
102 | --regex-asm='/^ENTRY\(([^)]*)\).*/\1/' | 105 | --regex-asm='/^ENTRY\(([^)]*)\).*/\1/' \ |
106 | --regex-c='/^SYSCALL_DEFINE[[:digit:]]?\(([^,)]*).*/sys_\1/' | ||
103 | 107 | ||
104 | all_kconfigs | xargs $1 -a \ | 108 | all_kconfigs | xargs $1 -a \ |
105 | --langdef=kconfig --language-force=kconfig \ | 109 | --langdef=kconfig --language-force=kconfig \ |
@@ -117,7 +121,9 @@ exuberant() | |||
117 | 121 | ||
118 | emacs() | 122 | emacs() |
119 | { | 123 | { |
120 | all_sources | xargs $1 -a | 124 | all_sources | xargs $1 -a \ |
125 | --regex='/^ENTRY(\([^)]*\)).*/\1/' \ | ||
126 | --regex='/^SYSCALL_DEFINE[0-9]?(\([^,)]*\).*/sys_\1/' | ||
121 | 127 | ||
122 | all_kconfigs | xargs $1 -a \ | 128 | all_kconfigs | xargs $1 -a \ |
123 | --regex='/^[ \t]*\(\(menu\)*config\)[ \t]+\([a-zA-Z0-9_]+\)/\3/' | 129 | --regex='/^[ \t]*\(\(menu\)*config\)[ \t]+\([a-zA-Z0-9_]+\)/\3/' |
diff --git a/scripts/unifdef.c b/scripts/unifdef.c index 552025e72acb..05a31a6c7e1b 100644 --- a/scripts/unifdef.c +++ b/scripts/unifdef.c | |||
@@ -206,7 +206,7 @@ static void done(void); | |||
206 | static void error(const char *); | 206 | static void error(const char *); |
207 | static int findsym(const char *); | 207 | static int findsym(const char *); |
208 | static void flushline(bool); | 208 | static void flushline(bool); |
209 | static Linetype getline(void); | 209 | static Linetype get_line(void); |
210 | static Linetype ifeval(const char **); | 210 | static Linetype ifeval(const char **); |
211 | static void ignoreoff(void); | 211 | static void ignoreoff(void); |
212 | static void ignoreon(void); | 212 | static void ignoreon(void); |
@@ -512,7 +512,7 @@ process(void) | |||
512 | 512 | ||
513 | for (;;) { | 513 | for (;;) { |
514 | linenum++; | 514 | linenum++; |
515 | lineval = getline(); | 515 | lineval = get_line(); |
516 | trans_table[ifstate[depth]][lineval](); | 516 | trans_table[ifstate[depth]][lineval](); |
517 | debug("process %s -> %s depth %d", | 517 | debug("process %s -> %s depth %d", |
518 | linetype_name[lineval], | 518 | linetype_name[lineval], |
@@ -526,7 +526,7 @@ process(void) | |||
526 | * help from skipcomment(). | 526 | * help from skipcomment(). |
527 | */ | 527 | */ |
528 | static Linetype | 528 | static Linetype |
529 | getline(void) | 529 | get_line(void) |
530 | { | 530 | { |
531 | const char *cp; | 531 | const char *cp; |
532 | int cursym; | 532 | int cursym; |