1#!/bin/sh -u 2 3# Register protocol definitions for GDB, the GNU debugger. 4# Copyright 2001, 2002, 2007, 2008, 2009 Free Software Foundation, Inc. 5# 6# This file is part of GDB. 7# 8# This program is free software; you can redistribute it and/or modify 9# it under the terms of the GNU General Public License as published by 10# the Free Software Foundation; either version 3 of the License, or 11# (at your option) any later version. 12# 13# This program is distributed in the hope that it will be useful, 14# but WITHOUT ANY WARRANTY; without even the implied warranty of 15# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16# GNU General Public License for more details. 17# 18# You should have received a copy of the GNU General Public License 19# along with this program. If not, see <http://www.gnu.org/licenses/>. 20 21move_if_change () 22{ 23 file=$1 24 if test -r ${file} && cmp -s "${file}" new-"${file}" 25 then 26 echo "${file} unchanged." 1>&2 27 else 28 mv new-"${file}" "${file}" 29 echo "${file} updated." 1>&2 30 fi 31} 32 33# Format of the input files 34read="type entry" 35 36do_read () 37{ 38 type="" 39 entry="" 40 while read line 41 do 42 if test "${line}" = "" 43 then 44 continue 45 elif test "${line}" = "#" -a "${comment}" = "" 46 then 47 continue 48 elif expr "${line}" : "#" > /dev/null 49 then 50 comment="${comment} 51${line}" 52 else 53 54 # The semantics of IFS varies between different SH's. Some 55 # treat ``::' as three fields while some treat it as just too. 56 # Work around this by eliminating ``::'' .... 57 line="`echo "${line}" | sed -e 's/::/: :/g' -e 's/::/: :/g'`" 58 59 OFS="${IFS}" ; IFS="[:]" 60 eval read ${read} <<EOF 61${line} 62EOF 63 IFS="${OFS}" 64 65 # .... and then going back through each field and strip out those 66 # that ended up with just that space character. 67 for r in ${read} 68 do 69 if eval test \"\${${r}}\" = \"\ \" 70 then 71 eval ${r}="" 72 fi 73 done 74 75 break 76 fi 77 done 78 if [ -n "${type}" ] 79 then 80 true 81 else 82 false 83 fi 84} 85 86if test ! -r $1; then 87 echo "$0: Could not open $1." 1>&2 88 exit 1 89fi 90 91copyright () 92{ 93cat <<EOF 94/* *INDENT-OFF* */ /* THIS FILE IS GENERATED */ 95 96/* A register protocol for GDB, the GNU debugger. 97 Copyright 2001, 2002 Free Software Foundation, Inc. 98 99 This file is part of GDB. 100 101 This program is free software; you can redistribute it and/or modify 102 it under the terms of the GNU General Public License as published by 103 the Free Software Foundation; either version 2 of the License, or 104 (at your option) any later version. 105 106 This program is distributed in the hope that it will be useful, 107 but WITHOUT ANY WARRANTY; without even the implied warranty of 108 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 109 GNU General Public License for more details. 110 111 You should have received a copy of the GNU General Public License 112 along with this program; if not, write to the Free Software 113 Foundation, Inc., 59 Temple Place - Suite 330, 114 Boston, MA 02111-1307, USA. */ 115 116/* This file was created with the aid of \`\`regdat.sh'' and \`\`$1''. */ 117 118EOF 119} 120 121 122exec > new-$2 123copyright $1 124echo '#include "regdef.h"' 125echo '#include "regcache.h"' 126echo 127offset=0 128i=0 129name=x 130xmltarget=x 131xmlarch=x 132xmlosabi=x 133expedite=x 134exec < $1 135while do_read 136do 137 if test "${type}" = "name"; then 138 name="${entry}" 139 echo "struct reg regs_${name}[] = {" 140 continue 141 elif test "${type}" = "xmltarget"; then 142 xmltarget="${entry}" 143 continue 144 elif test "${type}" = "xmlarch"; then 145 xmlarch="${entry}" 146 continue 147 elif test "${type}" = "osabi"; then 148 xmlosabi="${entry}" 149 continue 150 elif test "${type}" = "expedite"; then 151 expedite="${entry}" 152 continue 153 elif test "${name}" = x; then 154 echo "$0: $1 does not specify \`\`name''." 1>&2 155 exit 1 156 else 157 echo " { \"${entry}\", ${offset}, ${type} }," 158 offset=`expr ${offset} + ${type}` 159 i=`expr $i + 1` 160 fi 161done 162 163echo "};" 164echo 165echo "const char *expedite_regs_${name}[] = { \"`echo ${expedite} | sed 's/,/", "/g'`\", 0 };" 166if test "${xmltarget}" = x; then 167 if test "${xmlarch}" = x && test "${xmlosabi}" = x; then 168 echo "const char *xmltarget_${name} = 0;" 169 else 170 echo "const char *xmltarget_${name} = \"@<target>\\" 171 if test "${xmlarch}" != x; then 172 echo "<architecture>${xmlarch}</architecture>\\" 173 fi 174 if test "${xmlosabi}" != x; then 175 echo "<osabi>${xmlosabi}</osabi>\\" 176 fi 177 echo "</target>\";" 178 fi 179else 180 echo "const char *xmltarget_${name} = \"${xmltarget}\";" 181fi 182echo 183 184cat <<EOF 185void 186init_registers_${name} () 187{ 188 set_register_cache (regs_${name}, 189 sizeof (regs_${name}) / sizeof (regs_${name}[0])); 190 gdbserver_expedite_regs = expedite_regs_${name}; 191 gdbserver_xmltarget = xmltarget_${name}; 192} 193EOF 194 195# close things off 196exec 1>&2 197move_if_change $2 198