All addresses printed by checkstack have an extra incorrect 0 appended at the end. This was introduced with commit 677f1410e058 ("scripts/checkstack.pl: don't display $dre as different entity"): since then the address is taken from the line which contains the function name, instead of the line which contains stack consumption. E.g. on s390: 0000000000100a30 <do_one_initcall>: ... 100a44: e3 f0 ff 70 ff 71 lay %r15,-144(%r15) So the used regex which matches spaces and hexadecimal numbers to extract an address now matches a different substring. Subsequently replacing spaces with 0 appends a zero at the and, instead of replacing leading spaces. Fix this by using the proper regex, and simplify the code a bit.
Showing the changes to scripts/checkstack.pl (1 of 1 file). Show all
Unified · Split
| @@ -139,15 +139,11 @@ $total_size = 0; · 138 unmodified lines | ||
| 139 | 139 | while (my $line = <STDIN>) { |
| 140 | 140 | if ($line =~ m/$funcre/) { |
| 141 | 141 | $func = $1; |
| 142 | − next if $line !~ m/^($xs*)/; | |
| 142 | + next if $line !~ m/^($x*)/; | |
| 143 | 143 | if ($total_size > $min_stack) { |
| 144 | 144 | push @stack, "$intro$total_size\n"; |
| 145 | 145 | } |
| 146 | − | |
| 147 | − $addr = $1; | |
| 148 | − $addr =~ s/ /0/g; | |
| 149 | − $addr = "0x$addr"; | |
| 150 | − | |
| 146 | + $addr = "0x$1"; | |
| 151 | 147 | $intro = "$addr $func [$file]:"; |
| 152 | 148 | my $padlen = 56 - length($intro); |
| 153 | 149 | while ($padlen > 0) { |