#! /bin/sh

# This filter should be applied to *every* stderr result.  It removes
# Valgrind startup stuff and pid numbers.
#
# Nb: The GNU and BSD implementations of 'sed' are quite different, so
# anything remotely complicated (e.g. "\(a\|b\)" alternatives) can't be
# easily done.  Use Perl instead for any such cases.

dir=`dirname $0`

# Remove ==pid== and --pid-- and **pid** strings 
perl -p -e 's/(==|--|\*\*)[0-9]{1,7}\1 //' |

# Do NOT remove debug level output, i.e. lines beginning with --pid:
# Doing so would also remove asserts from the address space manager
# and we always to see those.

# Remove "Command: line".  (If wrapping occurs, it won't remove the
# subsequent lines...)
sed "/^Command: .*$/d" |

# Remove "WARNING: assuming toc 0x.." strings
sed "/^WARNING: assuming toc 0x*/d" |

# Remove "Using Valgrind-$VERSION and LibVEX..." line.
# Tools have to filter their own line themselves.
sed "/^Using Valgrind-.* and LibVEX; rerun with -h for copyright info/ d" |

# Anonymise line numbers in vg_replace_malloc.c, remove dirname if present
perl -p -e "s/(m_replacemalloc\/)?vg_replace_malloc.c:\d+\)/vg_replace_malloc.c:...\)/" |

# Likewise for valgrind.h
perl -p -e "s/valgrind\.h:\d+\)/valgrind\.h:...\)/" |

# Hide suppressed error counts
sed "s/^\(ERROR SUMMARY[^(]*(suppressed: \)[0-9]*\( from \)[0-9]*)$/\10\20)/" |

# Reduce some libc incompatibility
$dir/filter_libc |

# Remove line info out of order warnings
sed "/warning: line info addresses out of order/d" |

# Older bash versions print abnormal termination messages on the stderr
# of the bash process. Newer bash versions redirect such messages properly.
# Suppress any redirected abnormal termination messages. You can find the
# complete list of messages in the bash source file siglist.c.
perl -n -e 'print if !/^(Segmentation fault|Alarm clock|Aborted|Bus error|Killed)( \(core dumped\))?$/' |

# Similar as above, but for ksh on Solaris/illumos.
perl -n -e 'print if !/^(Memory fault|Killed) $/' |

# Translate intercepted glibc functions back to their canonical name
perl -p -e "s/: memcpy\@\@?GLIBC_[.1-9]+ \(vg_replace_strmem.c:.*?\)/: memcpy \(vg_replace_strmem.c:...\)/" |
sed -e "s/: \(__GI_\|__\|\)\(memcmp\|memcpy\|strcpy\|strncpy\|strchr\|strrchr\)\(\|_sse4_1\|_sse42\|_sse2_unaligned\|_sse2\) (vg_replace_strmem.c:/: \2 (vg_replace_strmem.c:/" |

# Remove any ": dumping core" message as the user might have a
# limit set that prevents the core dump
sed "s/\(signal [0-9]* (SIG[A-Z]*)\): dumping core/\1/" |

# Remove the size in "The main thread stack size..." message.
sed "s/The main thread stack size used in this run was [0-9]*/The main thread stack size used in this run was .../" |

# Remove the size in "10482464 bytes below stack pointer" message.
sed "s/[0-9][0-9]* bytes below stack pointer/.... bytes below stack pointer/" |

# Suppress warnings from incompatible debug info
sed '/warning: the debug information found in "[^"]*" does not match/d' |

# Suppress warnings from Dwarf reader
sed '/warning: evaluate_Dwarf3_Expr: unhandled DW_OP_/d'
