Commit | Line | Data |
---|---|---|
3cf384d4 DJ |
1 | #!/bin/sh -u |
2 | ||
3 | # Register protocol definitions for GDB, the GNU debugger. | |
0fb0cc75 | 4 | # Copyright 2001, 2002, 2007, 2008, 2009 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 | |
21 | move_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 | |
34 | read="type entry" | |
35 | ||
36 | do_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} | |
62 | EOF | |
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 | ||
86 | if test ! -r $1; then | |
87 | echo "$0: Could not open $1." 1>&2 | |
88 | exit 1 | |
89 | fi | |
90 | ||
91 | copyright () | |
92 | { | |
93 | cat <<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 | ||
118 | EOF | |
119 | } | |
120 | ||
121 | ||
122 | exec > new-$2 | |
123 | copyright $1 | |
124 | echo '#include "regdef.h"' | |
0a30fbc4 | 125 | echo '#include "regcache.h"' |
3cf384d4 DJ |
126 | echo |
127 | offset=0 | |
128 | i=0 | |
129 | name=x | |
9b4b61c8 | 130 | xmltarget=x |
08d16641 PA |
131 | xmlarch=x |
132 | xmlosabi=x | |
3cf384d4 DJ |
133 | expedite=x |
134 | exec < $1 | |
135 | while do_read | |
136 | do | |
137 | if test "${type}" = "name"; then | |
138 | name="${entry}" | |
139 | echo "struct reg regs_${name}[] = {" | |
140 | continue | |
9b4b61c8 UW |
141 | elif test "${type}" = "xmltarget"; then |
142 | xmltarget="${entry}" | |
143 | continue | |
144 | elif test "${type}" = "xmlarch"; then | |
08d16641 PA |
145 | xmlarch="${entry}" |
146 | continue | |
147 | elif test "${type}" = "osabi"; then | |
148 | xmlosabi="${entry}" | |
9b4b61c8 | 149 | continue |
3cf384d4 DJ |
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 | |
161 | done | |
162 | ||
163 | echo "};" | |
164 | echo | |
c638789f | 165 | echo "const char *expedite_regs_${name}[] = { \"`echo ${expedite} | sed 's/,/", "/g'`\", 0 };" |
9b4b61c8 | 166 | if test "${xmltarget}" = x; then |
08d16641 PA |
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 | |
9b4b61c8 UW |
179 | else |
180 | echo "const char *xmltarget_${name} = \"${xmltarget}\";" | |
181 | fi | |
0a30fbc4 DJ |
182 | echo |
183 | ||
184 | cat <<EOF | |
185 | void | |
d05b4ac3 | 186 | init_registers_${name} () |
0a30fbc4 DJ |
187 | { |
188 | set_register_cache (regs_${name}, | |
189 | sizeof (regs_${name}) / sizeof (regs_${name}[0])); | |
190 | gdbserver_expedite_regs = expedite_regs_${name}; | |
9b4b61c8 | 191 | gdbserver_xmltarget = xmltarget_${name}; |
0a30fbc4 DJ |
192 | } |
193 | EOF | |
3cf384d4 DJ |
194 | |
195 | # close things off | |
196 | exec 1>&2 | |
197 | move_if_change $2 |