ea263c86ea4618ef7bd3d91c8c1322dabd462276
[openbsd] /
1 #! /bin/sh
2
3 linux_check_core_pattern()
4 {
5     if grep -q '^|' </proc/sys/kernel/core_pattern; then
6         cat <<EOF
7 Your system uses a crash report tool ($(cat /proc/sys/kernel/core_pattern)). Core files
8 will not be generated.  Please reset /proc/sys/kernel/core_pattern (requires root
9 privileges) to enable core generation.
10 EOF
11         exit 1
12     fi
13 }
14
15 OS=$(uname -s)
16 case "$OS" in
17 FreeBSD)
18     core_pattern=$(sysctl -n kern.corefile)
19     ;;
20 Linux)
21     core_pattern=$(cat /proc/sys/kernel/core_pattern)
22     ;;
23 *)
24     echo "OS $OS not supported" >&2
25     exit 1
26     ;;
27 esac
28
29 set -e -x
30
31 if [ "$OS" = Linux ]; then
32     linux_check_core_pattern
33 fi
34
35 ulimit -c 1000
36 real_limit=$(ulimit -c)
37 if [ $real_limit -lt 100 ]; then
38     cat <<EOF
39 Unable to increase the core file limit. Core file may be truncated!
40 To fix this, increase HARD core file limit (ulimit -H -c 1000). This may require root
41 privileges.
42 EOF
43 fi
44
45 rm -f a.out
46 make -f main.mk
47
48 cat <<EOF
49 Executable file is in a.out.
50 Core file will be saved according to pattern $core_pattern.
51 EOF
52
53 # Save stack size and core_dump_filter
54 stack_size=`ulimit -s`
55 ulimit -Ss 32 # Decrease stack size to 32k => smaller core files.
56
57 core_dump_filter=`cat /proc/self/coredump_filter`
58 echo 0 > /proc/self/coredump_filter
59
60 exec ./a.out
61
62 # Reset stack size and core_dump_filter
63 echo core_dump_filter > /proc/self/coredump_filter
64 ulimit -s $stack_size