1#!/bin/sh 2############################################################################### 3# 4# Copyright (C) 2009-2014 Nintendo. All rights reserved. 5# 6# These coded instructions, statements, and computer programs contain 7# proprietary information of Nintendo of America Inc. and/or Nintendo 8# Company Ltd., and are protected by Federal copyright law. They may 9# not be disclosed to third parties or copied or duplicated in any form, 10# in whole or in part, without the prior written consent of Nintendo. 11# 12############################################################################### 13 14MULTI_ARG="core" 15MAKECORE_DIR=. 16DBG_SRC_ROOT=$CAFE_ROOT/system/ 17 18DO_MAKECORE=1 19LAUNCH_MULTI=1 20DISPLAY_HELP=0 21ERROR=0 22 23MIN_VER0=5 24MIN_VER1=3 25MIN_VER2=21 26MIN_VER="$MIN_VER0.$MIN_VER1.$MIN_VER2" 27PATCH="Core0 BETA" 28VER_TOO_OLD=0 29 30if [ -z $GHS_ROOT ] ; then 31 echo "Error: GHS_ROOT not defined. Exiting viewcore" 32 exit 1 33fi 34 35MULTI_DOS_PATH=`cygpath -d $GHS_ROOT/multi.exe` 36VERSION=`$GHS_ROOT/gversion -quiet $MULTI_DOS_PATH | cut -d',' -f 2` 37VER0=${VERSION:8:1} 38VER1=${VERSION:10:1} 39VER2=${VERSION:12:2} 40CORE=${VERSION:24:4} 41CORENUM=${VERSION:28:1} 42BETA=${VERSION:30:4} 43 44if [ $VER0 -lt 5 ] ; then 45 VER_TOO_OLD=1 46fi 47if [ $VER1 -lt 3 ] ; then 48 VER_TOO_OLD=1 49fi 50if [ $VER2 -lt 21 ] ; then 51 VER_TOO_OLD=1 52fi 53if [ $VER2 -eq 21 ] ; then 54 55 if [ "$CORE" != "Core" ] ; then 56 VER_TOO_OLD=1 57 CORE="" 58 CORENUM="" 59 else 60 if [ "$CORENUM" -lt 0 ] ; then 61 VER_TOO_OLD=1 62 fi 63 fi 64 65 if [ "$BETA" != "BETA" ] ; then 66 VER_TOO_OLD=1 67 BETA="" 68 fi 69fi 70if [ $VER2 -ge 22 ] ; then 71 if [ "$CORE" != "Core" ] ; then 72 CORE="" 73 CORENUM="" 74 fi 75 76 if [ "$BETA" != "BETA" ] ; then 77 BETA="" 78 fi 79fi 80 81if [ $VER_TOO_OLD -eq 1 ] ; then 82 echo "Error: MULTI version $MIN_VER $PATCH or later is needed. Current Version is $VER0.$VER1.$VER2 $CORE$CORENUM $BETA" 83 exit 1 84fi 85 86while [ $# -ge 1 ]; do 87 case $1 in 88 -o) shift; MULTI_ARG=$1 ;; 89 -i) shift; DO_MAKECORE=0; MULTI_ARG=$1;; 90 -d) shift; DBG_SRC_ROOT=$1 ;; 91 -a) DBG_SRC_ROOT="" ;; 92 -x) AGE_OLD_DUMPS=1;; 93 -h) DISPLAY_HELP=1; DO_MAKECORE=0; LAUNCH_MULTI=0;; 94 -help) DISPLAY_HELP=1; DO_MAKECORE=0; LAUNCH_MULTI=0;; 95 -*) echo "Error: $1 unrecognized options"; DISPLAY_HELP=1; DO_MAKECORE=0; LAUNCH_MULTI=0; ERROR=1;; 96 *) MAKECORE_DIR=$1;; 97 esac 98 shift 99done 100 101if [ -n "$AGE_OLD_DUMPS" ] ; then 102 if [ ${CAFE_CRASH_DUMP_LIMIT:=5} -gt 0 ] ; then 103 for old_dump in `ls -1rt ${MAKECORE_DIR}/.. | head -n -${CAFE_CRASH_DUMP_LIMIT}`; do 104 rm -r ${MAKECORE_DIR}/../$old_dump 105 done 106 fi 107fi 108 109if [ $DO_MAKECORE -ne 0 ]; then 110 if [ -n "${CAFE_CRASH_DUMP_NOMULTI}" ] ; then 111 if [ ${CAFE_CRASH_DUMP_NOMULTI} -ne 0 ] ; then 112 echo "Making a core dump file, but NOT automatically launching GHS MULTI!" 113 LAUNCH_MULTI=0 114 fi 115 fi 116fi 117 118if [ -z "$DBG_SRC_ROOT" ] ; then 119 echo "Message: Use absolute path for all rpl" 120else 121 DBG_SRC_ROOT_DOS_PATH=`cygpath -d $DBG_SRC_ROOT` 122 DBG_SRC_ROOT="-d $DBG_SRC_ROOT_DOS_PATH" 123fi 124 125MAKECORE_ARG=`find $MAKECORE_DIR -maxdepth 1 -name "BLK*_A*_SZ*.bin"` 126MAKECORE_ARG=`cygpath -m $MAKECORE_ARG 2>/dev/null` 127 128if [ $DO_MAKECORE -eq 1 ] ; then 129 if [ -z "$MAKECORE_ARG" ] ; then 130 echo "Error: No memory blocks found in $MAKECORE_DIR. Exiting viewcore." 1>&2 131 DISPLAY_HELP=1 132 ERROR=1 133 else 134 if [ -z "$MULTI_ARG" ] ; then 135 echo "Error: missing argument with option -o. Exiting viewcore." 1>&2 136 DISPLAY_HELP=1 137 ERROR=1 138 else 139 echo "Running makecore to process the following memory blocks:" 140 echo "$MAKECORE_ARG" 141 if makecore $MAKECORE_ARG -o $MULTI_ARG $DBG_SRC_ROOT; then 142 if [ ! $LAUNCH_MULTI == 0 ]; then 143 echo "MULTI v$VER0.$VER1.$VER2 $CORE$CORENUM $BETA is launching $MULTI_ARG" 1>&2 144 MULTI_ARG_DOS_PATH=`cygpath -d $MULTI_ARG` 145 $GHS_ROOT/multi $MULTI_ARG_DOS_PATH 146 fi 147 else 148 echo "Error: MULTI v$VER0.$VER1.$VER2 $CORE$CORENUM $BETA is not launched due to makecore error." 1>&2 149 DISPLAY_HELP=1 150 ERROR=1 151 fi 152 fi 153 fi 154else 155 if [ $LAUNCH_MULTI -eq 1 ] ; then 156 if [ -z "$MULTI_ARG" ] ; then 157 echo "Error: missing argument with option -i. Exiting viewcore." 158 DISPLAY_HELP=1 159 ERROR=1 160 else 161 MULTI_ARG_COPY=$MULTI_ARG 162 MULTI_ARG_DOS_PATH=`cygpath -d $MULTI_ARG` 163 MULTI_ARG=`find $MULTI_ARG_DOS_PATH -maxdepth 0 -type f` 164 if [ -z "$MULTI_ARG" ] ; then 165 echo "Error: $MULTI_ARG_COPY not found, or is a directory. Exiting viewcore." 166 DISPLAY_HELP=1 167 ERROR=1 168 else 169 echo "MULTI v$VER0.$VER1.$VER2 $CORE$CORENUM $BETA is launching $MULTI_ARG" 1>&2 170 $GHS_ROOT/multi $MULTI_ARG_DOS_PATH 171 fi 172 fi 173 fi 174fi 175 176if [ $DISPLAY_HELP -eq 1 ]; then 177 echo "" 178 echo "viewcore" 179 echo " Usage: viewcore [-o <file>] [-i <file>] [-d <dir>] [-a] [-h<elp>] [<directory>]" 180 echo " Options:" 181 echo " -o <file> Specify output core dump file name. If unspecified," 182 echo " \"core\" is used." 183 echo " -i <file> View core dump file \"file\". No memory" 184 echo " block files will be processed" 185 echo " -d <dir> Debug source root \"dir\". If unspecified," 186 echo " \"$CAFE_ROOT/system\" is used" 187 echo " -a Treat path info stored in RPLs as absolute path. 188 Use this option to process and view RPLs built 189 before SDK2.11.02. " 190 echo " -h<elp> Print this menu" 191 echo " <directory> Look for memory block files in <directory> to be parsed" 192 echo " If unspecified, current working directory is used." 193fi 194 195if [ $ERROR -eq 1 ]; then 196 exit 1 197else 198 exit 0 199fi