#! /bin/sh

# filter the output of gdb.

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 :
#       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
#       initial tty control character sent by gdb 7.0
#       remove missing debuginfos
#       vgdb message
#       pid numbers
#       Thread numbers
#       delete thread switches
#       info threads output (e.g. which thread is running and syscall)
#       delete Reading symbols file lines
#       delete Loaded symbols file lines
#       delete language switch messages.
#       remove gdb prompts.
#       remove gdb continuation prompts.
#       remove gdb done prompts.
#       a 'general' system calls stack trace part
#       a more specialised system call select stack trace part
#             (on 32 bits, we have an int_80, on 64 bits, directly select)
#       and yet another (gdb 7.0 way) to get a system call
#       and yet another (gdb 7.0 arm way) to get a system call
#       and cleanup some lines for a system call (on ubuntu 10 64 bits)
#           (pay attention : there are tab characters there in)
#           + yet another way to get a select system call
#       which registers can't be modified
#       special transform for arm/ppc watchpoints which have an additional address
#              at the beginning
#       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.
#       transform info thread of 7.3 into the layout of 7.2 and before.
#       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)
#       delete empty lines (the last line (only made of prompts) sometimes
#           finishes with a new line, sometimes not ???).
#       'exited with code' and 'exited normally' are printed slightly
#       differently between gdb versions, normalize to "Program exited...".
sed -e '/Remote debugging using/,/vgdb launched process attached/d'                                   \
    -e 's/^\[?1034hReading symbols/Reading symbols/'                                                \
    -e '/^Missing separate debuginfo/d'                                                               \
    -e '/^Try: zypper install -C/d'                                                                   \
    -e 's/\(relaying data between gdb and process \)[0-9][0-9]*/\1..../'                              \
    -e 's/pid [0-9][0-9]*/pid ..../g'                                                                 \
    -e 's/Thread [0-9][0-9]*/Thread ..../g'                                                           \
    -e '/\[Switching to Thread ....\]/d'                                                              \
    -e 's/\(\[Switching to thread [1234] (Thread ....)\]\)#0/\1\n#0/'                                 \
    -e 's/^\([ \* ] [0-9] Thread .... (tid [0-9] VgTs_WaitSys)  0x........ in\).*$/\1 syscall .../'   \
    -e 's/#[0-9]\(  0x........ in sleeper_or_burner\)/#.\1/'                                          \
    -e '/^Reading symbols from .*\.\.\.done\./d'                                                      \
    -e '/^Loaded symbols for .*$/d'                                                                   \
    -e '/^Current language.*/d'                                                                       \
    -e '/^The current source language is.*/d'                                                         \
    -e 's/^.*\( exited with code [0-9]\+\).$/Program\1\./g'                              \
    -e 's/^.*\( exited normally\).$/Program\1\./g'                              \
    -e 's/(gdb) //g'                                                                                  \
    -e 's/^>[> ]*//'                                                                                  \
    -e '/^done\.$/d'                                                                                  \
    -e 's/in _dl_sysinfo_int80 () from \/lib\/ld-linux.so.*/in syscall .../'                          \
    -e 's/in kill ().*$/in syscall .../'                                                              \
    -e 's/in .*kill ().*$/in syscall .../'                                                            \
    -e 's/in _dl_sysinfo_int80 ()/in syscall .../'                                                    \
    -e '/^   from \/lib\/ld-linux.so.*$/d'                                                            \
    -e 's/\(0x........\) in ?? () from \/lib.*$/\1 in syscall .../'                                   \
    -e 's/\(0x........\) in ?? ()$/\1 in syscall .../'                                                \
    -e 's/in \(.__\)\{0,1\}select () from \/.*$/in syscall .../'                                      \
    -e '/^   from \/lib\/libc.so.*$/d'                                                                \
    -e '/^   from \/lib64\/libc.so.*$/d'                                                              \
    -e '/^   from \/lib64\/.*\/libc.so.*$/d'                                                         \
    -e 's/in select ()$/in syscall .../'                                                              \
    -e 's/in \.__select ()$/in syscall .../'                                                          \
    -e 's/in select () at \.\.\/sysdeps\/unix\/syscall-template\.S.*$/in syscall .../'                \
    -e '/^[ 	]*at \.\.\/sysdeps\/unix\/syscall-template\.S/d'                                      \
    -e '/^[ 	]*in \.\.\/sysdeps\/unix\/syscall-template\.S/d'                                      \
    -e '/^[1-9][0-9]*[ 	]*\.\.\/sysdeps\/unix\/syscall-template\.S/d'                                 \
    -e '/^[1-9][0-9]*[ 	]in *\.\.\/sysdeps\/unix\/syscall-template\.S/d'                              \
    -e '/^[1-9][0-9]*[ 	]T_PSEUDO (SYSCALL_SYMBOL, SYSCALL_NAME, SYSCALL_NARGS)/d'                    \
    -e 's/\(Could not write register \)".*"/\1 "xxx"/'                                                \
    -e 's/\(ERROR changing register \).*$/\1 xxx regno y/'                                            \
    -e 's/0x........ in \(main (argc=1, argv=0x........) at watchpoints.c:[24][3689]\)/\1/'           \
    -e 's/0x........ in \(main () at clean_after_fork.c:34\)/\1/'                                     \
    -e 's/\(^.*signal SIGFPE.*$\)/\1\nafter trap SIGFPE/'                                             \
    -e '/Id   Target Id         Frame/d'                                                              \
    -e 's/^\([ \*] [1234] \) *Thread /\1Thread /'                                                     \
    -e 's/VgTs_WaitSys) 0x/VgTs_WaitSys)  0x/'                                                        \
    -e '/Cannot access memory at address 0x......../d'                                                \
    -e '/^$/d'                                                                                        |

# 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' 

