sm64

A Super Mario 64 decompilation
Log | Files | Refs | README | LICENSE

calc_bss.sh (1049B)


      1 #!/bin/bash
      2 # Given a list of header files, compute the bss index that results from
      3 # including them. (See prevent_bss_reordering.h for more information.)
      4 
      5 TEMPC=$(mktemp -t bss.XXXXXXX.c)
      6 TEMPO=$(mktemp -t bss.XXXXXXX.o)
      7 trap "rm -f $TEMPC $TEMPO" EXIT
      8 
      9 set -e
     10 
     11 if [[ $# = 0 ]]; then
     12     echo "Usage: ./tools/calc_bss.sh file1.h file2.h ..." >&2
     13     exit 1
     14 fi
     15 
     16 if [ -z "$QEMU_IRIX" ]; then
     17     echo "env variable QEMU_IRIX should point to the qemu-mips binary" >&2
     18     exit 1
     19 fi
     20 
     21 if [ -z "$CROSS" ]; then
     22     CROSS=mips-linux-gnu-
     23 fi
     24 
     25 # bss indexing starts at 3
     26 for I in {3..255}; do
     27     echo "char bss$I;" >> $TEMPC
     28 done
     29 for I in {0..2}; do
     30     echo "char bss$I;" >> $TEMPC
     31 done
     32 
     33 while [[ $# -gt 0 ]]; do
     34     echo "#include \"$1\"" >> $TEMPC
     35     shift
     36 done
     37 
     38 echo "char measurement;" >> $TEMPC
     39 
     40 $QEMU_IRIX -silent -L $IRIX_ROOT $IRIX_ROOT/usr/bin/cc -c -non_shared -G 0 \
     41     -g -Xcpluscomm -mips2 -I $(pwd)/include/ $TEMPC -o $TEMPO
     42 
     43 LINE=$(${CROSS}objdump -t $TEMPO | grep measurement | cut -d' ' -f1)
     44 NUM=$((0x$LINE - 1))
     45 echo "bss index: $NUM"