File: filter_gdb

package info (click to toggle)
valgrind 1%3A3.16.1-1
  • links: PTS, VCS
  • area: main
  • in suites: bullseye
  • size: 158,568 kB
  • sloc: ansic: 746,130; exp: 26,134; xml: 22,708; asm: 13,570; cpp: 7,691; makefile: 6,177; perl: 5,965; sh: 5,665; javascript: 929
file content (229 lines) | stat: -rwxr-xr-x 8,275 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
#! /bin/sh

# filter the output of gdb.

PATTERNFILE=$(mktemp filter_gdb.tmp.XXXXXXXXXX)
cat > $PATTERNFILE <<EOF
#       delete the initial lines between the launch of vgdb and the
#         output of the echo command telling it is launched.
#         This removes a whole lot of uninteresting lines varying
#         with OS/glibc/gdb dep
/Remote debugging using/,/vgdb launched process attached/d

#       general way to delete uninteresting and varying lines.
/filter_gdb BEGIN drop/,/filter_gdb END drop/d

#       initial tty control character sent by gdb 7.0
s/^\[?1034hReading symbols/Reading symbols/

#       remove message about missing debuginfos
/^Missing separate debuginfo/d

#       suppress lines telling file _exit.c does not exist
/\/_exit.c: No such file or directory/d

#       Remove some Suse package manager messages
/^Try: zypper install -C/d

#       Remove vgdb message
/relaying data between gdb and process/d

#       Anonymise pid numbers
s/pid [0-9][0-9]*/pid ..../g

#       filter 'remote target killed' messages (produced by gdb >= 8.2)
/(Remote target) killed/d

#       Anonymise Thread numbers
s/Thread [0-9][0-9]*/Thread ..../g

#       delete thread switches
/\[Switching to Thread ....\]/d

#       ??? Probably we had a 'Switching ' message in front of
#        a frame line ?
s/\(\[Switching to thread [1234] (Thread ....)\]\)#0/\1\n#0/

#       Anonymise info threads output (e.g. which thread is running and syscall)
s/^\([ \* ] [0-9] Thread .... (tid [0-9] VgTs_WaitSys)  0x........ in\).*$/\1 syscall .../

#       Newer gdb say Thread .... hit Breakpoint, we expect just Breakpoint.
s/^Thread .... hit Breakpoint /Breakpoint /

#       We expect "Program received" instead of "Thread .... received"
s/^Thread .... received /Program received /

s/#[0-9]\(  0x........ in sleeper_or_burner\)/#.\1/

#	Some gdb versions don't show the source line:number after switching
#		threads in #0  0x........ in do_burn ().
s/\(#0  0x........ in do_burn ()\) at sleepers.c:41/\1/


#       delete Reading symbols file lines
#       Note: The 'done.' in "Reading symbols from <exe>...done."
#         is optional (bugzilla 406357).
/^Reading symbols from .*\.\.\.\(done\.\)\?/d

#       delete Loaded symbols file lines
/^Loaded symbols for .*$/d

#       delete language switch messages.
/^Current language.*/d
/^The current source language is.*/d

#       'exited with code' and 'exited normally' are printed slightly
#       differently between gdb versions, normalize to "Program exited...".
s/^.*\( exited with code [0-9]\+\).$/Program\1\./g
s/^.*\( exited normally\).$/Program\1\./g

#       remove gdb prompts.
s/(gdb) //g

#       remove gdb continuation prompts.
s/^>[> ]*//

#       remove gdb done prompts.
/^done\.$/d

#       anonymise a 'general' system calls stack trace part
s/in _dl_sysinfo_int80 () from \/lib\/ld-linux.so.*/in syscall .../

#       anonymise kill syscall.
s/in kill ().*$/in syscall .../

#       anonymise syscall on ppc64 (bugzilla #284305)
s/in .*kill ().*$/in syscall .../


s/in _dl_sysinfo_int80 ()/in syscall .../
/^   from \/lib\/ld-linux.so.*$/d
s/\(0x........\) in ?? () from \/lib.*$/\1 in syscall .../
s/\(0x........\) in ?? ()$/\1 in syscall .../

#       4 expressions to cover glibc 2.27 way to do a select, such as
#          * 1    Thread 5548 (tid 1 VgTs_WaitSys) 0x0000000004f6203f in __GI___select (
#              nfds=0, readfds=0x0, writefds=0x0, exceptfds=0x0, timeout=0x30a0e0 <t>)
#              at ../sysdeps/unix/sysv/linux/select.c:41
#         If select.c sources are present, we can also get a line containing:
#              return SYSCALL_CANCEL....
s/in __select .*/in syscall .../
/exceptfds/d
/sysv\/linux\/select\.c/d
/return SYSCALL_CANCEL /d

#       a more specialised system call select stack trace part
#             (on 32 bits, we have an int_80, on 64 bits, directly select)
s/in \(.__\)\{0,1\}select () from \/.*$/in syscall .../

/^   from \/lib\/libc.so.*$/d
/^   from \/lib64\/libc.so.*$/d
/^   from \/lib64\/.*\/libc.so.*$/d

#       and yet another (gdb 7.0 way) to get a system call
s/in select ()$/in syscall .../

#       and yet another (gdb 7.0 arm way) to get a system call
s/in \.__select ()$/in syscall .../

#           + yet another way to get a select system call
s/in select () at \.\.\/sysdeps\/unix\/syscall-template\.S.*$/in syscall .../

#      filter out names which starts with a "."
#      such names are used for "function descriptors" on ppc64
#      bugzilla 406561
s/in \.__select () at \.\.\/sysdeps\/unix\/syscall-template\.S.*$/in syscall .../

#       cleanup some lines for a system call (on ubuntu 10 64 bits)
#           (pay attention : there are tab characters there in)
/^[ 	]*at \.\.\/sysdeps\/unix\/syscall-template\.S/d
/^[ 	]*in \.\.\/sysdeps\/unix\/syscall-template\.S/d

/^[1-9][0-9]*[ 	]*\.\.\/sysdeps\/unix\/syscall-template\.S/d
/^[1-9][0-9]*[ 	]in *\.\.\/sysdeps\/unix\/syscall-template\.S/d
/^[1-9][0-9]*[ 	]T_PSEUDO (SYSCALL_SYMBOL, SYSCALL_NAME, SYSCALL_NARGS)/d

#       and yet another (Solaris way) to get a poll system call
#             (on 32 bits, we have /lib/libc.so.*, on 64 bits, /lib/64/libc.so.*)
s/in __pollsys () from \/.*$/in syscall .../
/^   from \/lib\/64\/libc.so.*$/d

#       which registers can't be modified
s/\(Could not write register \)".*"/\1 "xxx"/
s/\(ERROR changing register \).*$/\1 xxx regno y/

#       special transform for arm/ppc watchpoints which have an additional address
#              at the beginning
s/0x........ in \(main (argc=1, argv=0x........) at watchpoints.c:[24][3689]\)/\1/

s/0x........ in \(main () at clean_after_fork.c:34\)/\1/

#       SIGFPE backtrace is varying so much that we just remove all lines
#       after the signal trapping using an expr in this sed, followed by another sed.
s/\(^.*signal SIGFPE.*$\)/\1\nafter trap SIGFPE/

#	gdb might also try to show the "entry value" p=p@entry=0x...
s/p=p@entry=0x/p=0x/

#       for hgtls the breakpoint p=... address might show var location.
s/\(^Breakpoint 1, tls_ptr (p=0x........\) <tests[0-9+]*>\() at tls.c:55\)/\1\2/

/Id   Target Id *Frame/d
s/^\([ \*] [1234] \) *Thread /\1Thread /

#	Ordering of '  Thread .... (tid .' might differ between gdb version,
#	so remove all such lines except the "current" one (starts with '*').
s/^  [0-9] Thread .... (tid [0-9] .*$//

#       transform info thread of 7.3 into the layout of 7.2 and before.
s/VgTs_WaitSys) 0x/VgTs_WaitSys)  0x/

#       delete lines telling that some memory can't be accessed: this is
#         a.o. produced by gdb 7.2 on arm (same with standard gdbserver)
/Cannot access memory at address 0x......../d

#       Filter 'New thread' lines
#       gdb 7.9 reports new threads at different moment than the previous versions.
#       Filter these new threads lines so as to not be dependent on this
#       gdb aspect.
/\[New Thread/d

#       406355
#       adjust filtering for the new gdb output
#       mcsigpass and mcsignopass tests fails due to the slightly different
#       gdb output. Filter the tests output to make it the same for different
#       gdb version. Change mcsigpass and mcsignopass .exp to fit filtered
#       .out.
s/^0x........ in \(\w\+ (\)/\1/

#       delete empty lines (the last line (only made of prompts) sometimes
#           finishes with a new line, sometimes not ???).
/^$/d


EOF

dir=`dirname $0`

$dir/filter_stderr                                                  |

# Anonymise addresses
$dir/../tests/filter_addresses                                      |

# memcheck stuff
$dir/filter_memcheck_monitor "$@"                                   |

# memcheck filter might leave some "..." lines, we are not interested
sed -e '/^\ \ \ \ \.\.\.$/d'                                        |

# Anonymise or remove, using the big list of PATTERN prepared above
sed -f $PATTERNFILE |

# remove all the lines telling where the SIGFPE was trapped.
sed -e '/after trap SIGFPE/,/after continue SIGFPE/d'                                              |

# join together two lines that gdb 7.1 splits in two (???)
# (in a separate sed, as the below influences the behaviour of the other expressions)
sed    -e :a -e '$!N;s/\n    at sleepers.c:39/ at sleepers.c:39/;ta' -e 'P;D' 

rm $PATTERNFILE