xref: /linux/scripts/stackusage (revision 56d4a3814690a62a3fd9724844e23ea152ce938c)
1*56d4a381SRasmus Villemoes#!/bin/sh
2*56d4a381SRasmus Villemoes
3*56d4a381SRasmus Villemoesoutfile=""
4*56d4a381SRasmus Villemoesnow=`date +%s`
5*56d4a381SRasmus Villemoes
6*56d4a381SRasmus Villemoeswhile [ $# -gt 0 ]
7*56d4a381SRasmus Villemoesdo
8*56d4a381SRasmus Villemoes    case "$1" in
9*56d4a381SRasmus Villemoes        -o)
10*56d4a381SRasmus Villemoes	    outfile="$2"
11*56d4a381SRasmus Villemoes	    shift 2;;
12*56d4a381SRasmus Villemoes	-h)
13*56d4a381SRasmus Villemoes	    echo "usage: $0 [-o outfile] <make options/args>"
14*56d4a381SRasmus Villemoes	    exit 0;;
15*56d4a381SRasmus Villemoes	*)  break;;
16*56d4a381SRasmus Villemoes    esac
17*56d4a381SRasmus Villemoesdone
18*56d4a381SRasmus Villemoes
19*56d4a381SRasmus Villemoesif [ -z "$outfile" ]
20*56d4a381SRasmus Villemoesthen
21*56d4a381SRasmus Villemoes    outfile=`mktemp --tmpdir stackusage.$$.XXXX`
22*56d4a381SRasmus Villemoesfi
23*56d4a381SRasmus Villemoes
24*56d4a381SRasmus VillemoesKCFLAGS="${KCFLAGS} -fstack-usage" make "$@"
25*56d4a381SRasmus Villemoes
26*56d4a381SRasmus Villemoes# Prepend directory name to file names, remove column information,
27*56d4a381SRasmus Villemoes# make file:line/function/size/type properly tab-separated.
28*56d4a381SRasmus Villemoesfind . -name '*.su' -newermt "@${now}" -print |                     \
29*56d4a381SRasmus Villemoes    xargs perl -MFile::Basename -pe                                 \
30*56d4a381SRasmus Villemoes        '$d = dirname($ARGV); s#([^:]+:[0-9]+):[0-9]+:#$d/$1\t#;' | \
31*56d4a381SRasmus Villemoes    sort -k3,3nr > "${outfile}"
32*56d4a381SRasmus Villemoes
33*56d4a381SRasmus Villemoesecho "$0: output written to ${outfile}"
34