]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blame - gdb/regformats/regdat.sh
2010-04-08 Stan Shebs <stan@codesourcery.com>
[thirdparty/binutils-gdb.git] / gdb / regformats / regdat.sh
CommitLineData
3cf384d4
DJ
1#!/bin/sh -u
2
3# Register protocol definitions for GDB, the GNU debugger.
4c38e0a4 4# Copyright 2001, 2002, 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
3cf384d4
DJ
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
50efebf8 10# the Free Software Foundation; either version 3 of the License, or
3cf384d4
DJ
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
50efebf8 19# along with this program. If not, see <http://www.gnu.org/licenses/>.
3cf384d4
DJ
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
dcf7800b 103 the Free Software Foundation; either version 3 of the License, or
3cf384d4
DJ
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
dcf7800b 112 along with this program. If not, see <http://www.gnu.org/licenses/>. */
3cf384d4
DJ
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 "regdef.h"'
0a30fbc4 123echo '#include "regcache.h"'
3cf384d4
DJ
124echo
125offset=0
126i=0
127name=x
9b4b61c8 128xmltarget=x
08d16641
PA
129xmlarch=x
130xmlosabi=x
3cf384d4
DJ
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
9b4b61c8
UW
139 elif test "${type}" = "xmltarget"; then
140 xmltarget="${entry}"
141 continue
142 elif test "${type}" = "xmlarch"; then
08d16641
PA
143 xmlarch="${entry}"
144 continue
145 elif test "${type}" = "osabi"; then
146 xmlosabi="${entry}"
9b4b61c8 147 continue
3cf384d4
DJ
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
c638789f 163echo "const char *expedite_regs_${name}[] = { \"`echo ${expedite} | sed 's/,/", "/g'`\", 0 };"
9b4b61c8 164if test "${xmltarget}" = x; then
08d16641
PA
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
9b4b61c8
UW
177else
178 echo "const char *xmltarget_${name} = \"${xmltarget}\";"
179fi
0a30fbc4
DJ
180echo
181
182cat <<EOF
183void
d05b4ac3 184init_registers_${name} ()
0a30fbc4
DJ
185{
186 set_register_cache (regs_${name},
187 sizeof (regs_${name}) / sizeof (regs_${name}[0]));
188 gdbserver_expedite_regs = expedite_regs_${name};
9b4b61c8 189 gdbserver_xmltarget = xmltarget_${name};
0a30fbc4
DJ
190}
191EOF
3cf384d4
DJ
192
193# close things off
194exec 1>&2
195move_if_change $2