1#!/bin/sh -u 2 3# Register protocol definitions for GDB, the GNU debugger. 4# Copyright (C) 2001-2013 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 (C) 2001-2013 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 3 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, see <http://www.gnu.org/licenses/>. */ 113 114/* This file was created with the aid of \`\`regdat.sh'' and \`\`$1''. */ 115 116EOF 117} 118 119 120exec > new-$2 121copyright $1 122echo '#include "server.h"' 123echo '#include "regdef.h"' 124echo 125offset=0 126i=0 127name=x 128xmltarget=x 129xmlarch=x 130xmlosabi=x 131expedite=x 132exec < $1 133while do_read 134do 135 if test "${type}" = "name"; then 136 name="${entry}" 137 echo "struct reg regs_${name}[] = {" 138 continue 139 elif test "${type}" = "xmltarget"; then 140 xmltarget="${entry}" 141 continue 142 elif test "${type}" = "xmlarch"; then 143 xmlarch="${entry}" 144 continue 145 elif test "${type}" = "osabi"; then 146 xmlosabi="${entry}" 147 continue 148 elif test "${type}" = "expedite"; then 149 expedite="${entry}" 150 continue 151 elif test "${name}" = x; then 152 echo "$0: $1 does not specify \`\`name''." 1>&2 153 exit 1 154 else 155 echo " { \"${entry}\", ${offset}, ${type} }," 156 offset=`expr ${offset} + ${type}` 157 i=`expr $i + 1` 158 fi 159done 160 161echo "};" 162echo 163echo "const char *expedite_regs_${name}[] = { \"`echo ${expedite} | sed 's/,/", "/g'`\", 0 };" 164if test "${xmltarget}" = x; then 165 if test "${xmlarch}" = x && test "${xmlosabi}" = x; then 166 echo "const char *xmltarget_${name} = 0;" 167 else 168 echo "const char *xmltarget_${name} = \"@<target>\\" 169 if test "${xmlarch}" != x; then 170 echo "<architecture>${xmlarch}</architecture>\\" 171 fi 172 if test "${xmlosabi}" != x; then 173 echo "<osabi>${xmlosabi}</osabi>\\" 174 fi 175 echo "</target>\";" 176 fi 177else 178 echo "const char *xmltarget_${name} = \"${xmltarget}\";" 179fi 180echo 181 182cat <<EOF 183void 184init_registers_${name} () 185{ 186 set_register_cache (regs_${name}, 187 sizeof (regs_${name}) / sizeof (regs_${name}[0])); 188 gdbserver_expedite_regs = expedite_regs_${name}; 189 gdbserver_xmltarget = xmltarget_${name}; 190} 191EOF 192 193# close things off 194exec 1>&2 195move_if_change $2 196