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