Dmitry V. Levin | e96cb62 | 2015-02-15 15:52:02 +0000 | [diff] [blame] | 1 | #!/bin/sh |
| 2 | |
| 3 | # Check -i option. |
| 4 | |
| 5 | . "${srcdir=.}/init.sh" |
| 6 | |
| 7 | check_prog grep |
| 8 | |
| 9 | OUT="$LOG.out" |
| 10 | |
| 11 | ./pc > /dev/null || |
| 12 | framework_skip_ 'munmap/fork/wait do not behave as expected' |
| 13 | |
| 14 | args="-if ./pc" |
| 15 | $STRACE $args > "$OUT" 2> "$LOG" || { |
| 16 | cat "$LOG" |
| 17 | fail_ "$STRACE $args does not work" |
| 18 | } |
| 19 | |
| 20 | len="$(sed -n 's/^\[[[:xdigit:]]\+\] write(-1, NULL, \([[:digit:]]\{1,2\}\))[[:space:]]\+= -1 .*/\1/p' "$LOG")" && |
| 21 | [ -n "$len" ] && |
Dmitry V. Levin | 1c5fead | 2015-02-23 22:37:40 +0000 | [diff] [blame] | 22 | pid="$(sed -n 's/^\[[[:xdigit:]]\{'"$len"'\}\] --- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_\(KILLED\|DUMPED\), si_pid=\([[:digit:]]\+\), .*/\2/p' "$LOG")" && |
Dmitry V. Levin | e96cb62 | 2015-02-15 15:52:02 +0000 | [diff] [blame] | 23 | [ -n "$pid" ] && |
| 24 | ip="$(sed -n 's/^\[pid \+'"$pid"'\] \[\([[:xdigit:]]\{'"$len"'\}\)] --- SIGSEGV {.*} ---$/\1/p' "$LOG")" && |
| 25 | [ -n "$ip" ] && |
| 26 | addr="$(echo "$ip" |sed 's/^0\+//')" && |
| 27 | [ -n "$addr" ] || { |
Dmitry V. Levin | 1c5fead | 2015-02-23 22:37:40 +0000 | [diff] [blame] | 28 | cat "$OUT" "$LOG" |
Dmitry V. Levin | e96cb62 | 2015-02-15 15:52:02 +0000 | [diff] [blame] | 29 | fail_ "$STRACE $args output mismatch" |
| 30 | } |
| 31 | |
| 32 | grep_log() |
| 33 | { |
| 34 | LC_ALL=C grep -x -e "$*" < "$LOG" > /dev/null || { |
Dmitry V. Levin | 1c5fead | 2015-02-23 22:37:40 +0000 | [diff] [blame] | 35 | cat "$OUT" "$LOG" |
Dmitry V. Levin | e96cb62 | 2015-02-15 15:52:02 +0000 | [diff] [blame] | 36 | fail_ "$STRACE $args output mismatch" |
| 37 | } |
| 38 | } |
| 39 | |
| 40 | grep_log '\[[[:xdigit:]]\{'"$len"'\}\] munmap(0x[[:xdigit:]]\+, 0)[[:space:]]\+= -1 .*' |
| 41 | grep_log '\[pid \+'"$pid"'\] \['"$ip"'\] --- SIGSEGV {si_signo=SIGSEGV, si_code=SEGV_MAPERR, si_addr=0x'"$addr"'} ---' |
Dmitry V. Levin | 1c5fead | 2015-02-23 22:37:40 +0000 | [diff] [blame] | 42 | grep_log '\[pid \+'"$pid"'\] \[?\{'"$len"'\}\] +++ killed by SIGSEGV\( (core dumped)\)\? +++' |
Dmitry V. Levin | e96cb62 | 2015-02-15 15:52:02 +0000 | [diff] [blame] | 43 | grep_log '\[?\{'"$len"'\}\] +++ exited with 0 +++' |
| 44 | |
| 45 | rm -f "$OUT" |
| 46 | |
| 47 | exit 0 |