]>
Commit | Line | Data |
---|---|---|
c9cf6dde | 1 | /* Dump registers. |
688903eb | 2 | Copyright (C) 2001-2018 Free Software Foundation, Inc. |
c9cf6dde AJ |
3 | This file is part of the GNU C Library. |
4 | ||
5 | The GNU C Library is free software; you can redistribute it and/or | |
6 | modify it under the terms of the GNU Lesser General Public | |
7 | License as published by the Free Software Foundation; either | |
8 | version 2.1 of the License, or (at your option) any later version. | |
9 | ||
10 | The GNU C Library is distributed in the hope that it will be useful, | |
11 | but WITHOUT ANY WARRANTY; without even the implied warranty of | |
12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
13 | Lesser General Public License for more details. | |
14 | ||
15 | You should have received a copy of the GNU Lesser General Public | |
59ba27a6 PE |
16 | License along with the GNU C Library; if not, see |
17 | <http://www.gnu.org/licenses/>. */ | |
c9cf6dde AJ |
18 | |
19 | #include <sys/uio.h> | |
eb96ffb0 | 20 | #include <_itoa.h> |
c9cf6dde AJ |
21 | |
22 | /* We will print the register dump in this format: | |
23 | ||
24 | RAX: XXXXXXXXXXXXXXXX RBX: XXXXXXXXXXXXXXXX RCX: XXXXXXXXXXXXXXXX | |
25 | RDX: XXXXXXXXXXXXXXXX RSI: XXXXXXXXXXXXXXXX RDI: XXXXXXXXXXXXXXXX | |
26 | RBP: XXXXXXXXXXXXXXXX R8 : XXXXXXXXXXXXXXXX R9 : XXXXXXXXXXXXXXXX | |
27 | R10: XXXXXXXXXXXXXXXX R11: XXXXXXXXXXXXXXXX R12: XXXXXXXXXXXXXXXX | |
28 | R13: XXXXXXXXXXXXXXXX R14: XXXXXXXXXXXXXXXX R15: XXXXXXXXXXXXXXXX | |
29 | RSP: XXXXXXXXXXXXXXXX | |
30 | ||
31 | RIP: XXXXXXXXXXXXXXXX EFLAGS: XXXXXXXX | |
32 | ||
33 | CS: XXXX DS: XXXX ES: XXXX FS: XXXX GS: XXXX | |
34 | ||
35 | Trap: XXXXXXXX Error: XXXXXXXX OldMask: XXXXXXXX | |
36 | RSP/SIGNAL: XXXXXXXXXXXXXXXX CR2: XXXXXXXX | |
37 | ||
38 | FPUCW: XXXXXXXX FPUSW: XXXXXXXX TAG: XXXXXXXX | |
39 | IPOFF: XXXXXXXX CSSEL: XXXX DATAOFF: XXXXXXXX DATASEL: XXXX | |
40 | ||
41 | ST(0) XXXX XXXXXXXXXXXXXXXX ST(1) XXXX XXXXXXXXXXXXXXXX | |
42 | ST(2) XXXX XXXXXXXXXXXXXXXX ST(3) XXXX XXXXXXXXXXXXXXXX | |
43 | ST(4) XXXX XXXXXXXXXXXXXXXX ST(5) XXXX XXXXXXXXXXXXXXXX | |
44 | ST(6) XXXX XXXXXXXXXXXXXXXX ST(7) XXXX XXXXXXXXXXXXXXXX | |
45 | ||
46 | mxcsr: XXXX | |
47 | XMM0 : XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XMM1 : XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX | |
48 | XMM2 : XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XMM3 : XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX | |
49 | XMM4 : XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XMM5 : XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX | |
50 | XMM6 : XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XMM7 : XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX | |
51 | XMM8 : XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XMM9 : XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX | |
52 | XMM10: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XMM11: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX | |
53 | XMM12: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XMM13: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX | |
54 | XMM14: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XMM15: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX | |
55 | ||
56 | */ | |
57 | ||
58 | static void | |
59 | hexvalue (unsigned long int value, char *buf, size_t len) | |
60 | { | |
61 | char *cp = _itoa_word (value, buf + len, 16, 0); | |
62 | while (cp > buf) | |
63 | *--cp = '0'; | |
64 | } | |
65 | ||
66 | static void | |
25128773 | 67 | register_dump (int fd, ucontext_t *ctx) |
c9cf6dde | 68 | { |
46a1b875 | 69 | char regs[25][16]; |
904e1ba9 | 70 | char fpregs[30][8]; |
c9cf6dde AJ |
71 | char xmmregs[16][32]; |
72 | struct iovec iov[147]; | |
73 | size_t nr = 0; | |
74 | int i; | |
75 | ||
76 | #define ADD_STRING(str) \ | |
77 | iov[nr].iov_base = (char *) str; \ | |
78 | iov[nr].iov_len = strlen (str); \ | |
79 | ++nr | |
80 | #define ADD_MEM(str, len) \ | |
81 | iov[nr].iov_base = str; \ | |
82 | iov[nr].iov_len = len; \ | |
83 | ++nr | |
84 | ||
85 | /* Generate strings of register contents. */ | |
2750c39c UD |
86 | hexvalue (ctx->uc_mcontext.gregs[REG_RAX], regs[0], 16); |
87 | hexvalue (ctx->uc_mcontext.gregs[REG_RBX], regs[1], 16); | |
88 | hexvalue (ctx->uc_mcontext.gregs[REG_RCX], regs[2], 16); | |
89 | hexvalue (ctx->uc_mcontext.gregs[REG_RDX], regs[3], 16); | |
90 | hexvalue (ctx->uc_mcontext.gregs[REG_RSI], regs[4], 16); | |
91 | hexvalue (ctx->uc_mcontext.gregs[REG_RDI], regs[5], 16); | |
92 | hexvalue (ctx->uc_mcontext.gregs[REG_RBP], regs[6], 16); | |
93 | hexvalue (ctx->uc_mcontext.gregs[REG_R8], regs[7], 16); | |
94 | hexvalue (ctx->uc_mcontext.gregs[REG_R9], regs[8], 16); | |
95 | hexvalue (ctx->uc_mcontext.gregs[REG_R10], regs[9], 16); | |
96 | hexvalue (ctx->uc_mcontext.gregs[REG_R11], regs[10], 16); | |
97 | hexvalue (ctx->uc_mcontext.gregs[REG_R12], regs[11], 16); | |
98 | hexvalue (ctx->uc_mcontext.gregs[REG_R13], regs[12], 16); | |
99 | hexvalue (ctx->uc_mcontext.gregs[REG_R14], regs[13], 16); | |
100 | hexvalue (ctx->uc_mcontext.gregs[REG_R15], regs[14], 16); | |
101 | hexvalue (ctx->uc_mcontext.gregs[REG_RSP], regs[15], 16); | |
102 | hexvalue (ctx->uc_mcontext.gregs[REG_RIP], regs[16], 16); | |
50441a98 | 103 | |
2750c39c UD |
104 | hexvalue (ctx->uc_mcontext.gregs[REG_EFL], regs[17], 8); |
105 | hexvalue (ctx->uc_mcontext.gregs[REG_CSGSFS] & 0xffff, regs[18], 4); | |
106 | hexvalue ((ctx->uc_mcontext.gregs[REG_CSGSFS] >> 16) & 0xffff, regs[19], 4); | |
107 | hexvalue ((ctx->uc_mcontext.gregs[REG_CSGSFS] >> 32) & 0xffff, regs[20], 4); | |
c9cf6dde | 108 | /* hexvalue (ctx->ss, regs[23], 4); */ |
2750c39c UD |
109 | hexvalue (ctx->uc_mcontext.gregs[REG_TRAPNO], regs[21], 8); |
110 | hexvalue (ctx->uc_mcontext.gregs[REG_ERR], regs[22], 8); | |
111 | hexvalue (ctx->uc_mcontext.gregs[REG_OLDMASK], regs[23], 8); | |
112 | hexvalue (ctx->uc_mcontext.gregs[REG_CR2], regs[24], 8); | |
c9cf6dde AJ |
113 | |
114 | /* Generate the output. */ | |
115 | ADD_STRING ("Register dump:\n\n RAX: "); | |
116 | ADD_MEM (regs[0], 16); | |
117 | ADD_STRING (" RBX: "); | |
118 | ADD_MEM (regs[1], 16); | |
119 | ADD_STRING (" RCX: "); | |
120 | ADD_MEM (regs[2], 16); | |
121 | ADD_STRING ("\n RDX: "); | |
122 | ADD_MEM (regs[3], 16); | |
123 | ADD_STRING (" RSI: "); | |
124 | ADD_MEM (regs[4], 16); | |
125 | ADD_STRING (" RDI: "); | |
126 | ADD_MEM (regs[5], 16); | |
127 | ADD_STRING ("\n RBP: "); | |
128 | ADD_MEM (regs[6], 16); | |
129 | ADD_STRING (" R8 : "); | |
130 | ADD_MEM (regs[7], 16); | |
131 | ADD_STRING (" R9 : "); | |
132 | ADD_MEM (regs[8], 16); | |
133 | ADD_STRING ("\n R10: "); | |
134 | ADD_MEM (regs[9], 16); | |
135 | ADD_STRING (" R11: "); | |
136 | ADD_MEM (regs[10], 16); | |
137 | ADD_STRING (" R12: "); | |
138 | ADD_MEM (regs[11], 16); | |
139 | ADD_STRING ("\n R13: "); | |
140 | ADD_MEM (regs[12], 16); | |
141 | ADD_STRING (" R14: "); | |
142 | ADD_MEM (regs[13], 16); | |
143 | ADD_STRING (" R15: "); | |
144 | ADD_MEM (regs[14], 16); | |
145 | ADD_STRING ("\n RSP: "); | |
146 | ADD_MEM (regs[15], 16); | |
147 | ADD_STRING ("\n\n RIP: "); | |
148 | ADD_MEM (regs[16], 16); | |
149 | ADD_STRING (" EFLAGS: "); | |
150 | ADD_MEM (regs[17], 8); | |
151 | ADD_STRING ("\n\n CS: "); | |
152 | ADD_MEM (regs[18], 4); | |
c9cf6dde | 153 | ADD_STRING (" FS: "); |
46a1b875 | 154 | ADD_MEM (regs[19], 4); |
c9cf6dde | 155 | ADD_STRING (" GS: "); |
46a1b875 | 156 | ADD_MEM (regs[20], 4); |
c9cf6dde AJ |
157 | /* |
158 | ADD_STRING (" SS: "); | |
159 | ADD_MEM (regs[23], 4); | |
160 | */ | |
161 | ADD_STRING ("\n\n Trap: "); | |
46a1b875 | 162 | ADD_MEM (regs[21], 8); |
c9cf6dde | 163 | ADD_STRING (" Error: "); |
46a1b875 | 164 | ADD_MEM (regs[22], 8); |
c9cf6dde | 165 | ADD_STRING (" OldMask: "); |
46a1b875 | 166 | ADD_MEM (regs[23], 8); |
c9cf6dde | 167 | ADD_STRING (" CR2: "); |
46a1b875 | 168 | ADD_MEM (regs[24], 8); |
c9cf6dde | 169 | |
2750c39c | 170 | if (ctx->uc_mcontext.fpregs != NULL) |
c9cf6dde AJ |
171 | { |
172 | ||
173 | /* Generate output for the FPU control/status registers. */ | |
2750c39c UD |
174 | hexvalue (ctx->uc_mcontext.fpregs->cwd, fpregs[0], 8); |
175 | hexvalue (ctx->uc_mcontext.fpregs->swd, fpregs[1], 8); | |
176 | hexvalue (ctx->uc_mcontext.fpregs->ftw, fpregs[2], 8); | |
177 | hexvalue (ctx->uc_mcontext.fpregs->rip, fpregs[3], 8); | |
178 | hexvalue (ctx->uc_mcontext.fpregs->rdp, fpregs[4], 8); | |
c9cf6dde AJ |
179 | |
180 | ADD_STRING ("\n\n FPUCW: "); | |
181 | ADD_MEM (fpregs[0], 8); | |
182 | ADD_STRING (" FPUSW: "); | |
183 | ADD_MEM (fpregs[1], 8); | |
184 | ADD_STRING (" TAG: "); | |
185 | ADD_MEM (fpregs[2], 8); | |
904e1ba9 | 186 | ADD_STRING ("\n RIP: "); |
c9cf6dde | 187 | ADD_MEM (fpregs[3], 8); |
904e1ba9 AJ |
188 | ADD_STRING (" RDP: "); |
189 | ADD_MEM (fpregs[4], 8); | |
c9cf6dde AJ |
190 | |
191 | /* Now the real FPU registers. */ | |
2750c39c UD |
192 | hexvalue (ctx->uc_mcontext.fpregs->_st[0].exponent, fpregs[5], 8); |
193 | hexvalue (ctx->uc_mcontext.fpregs->_st[0].significand[3] << 16 | |
194 | | ctx->uc_mcontext.fpregs->_st[0].significand[2], fpregs[6], | |
50441a98 | 195 | 8); |
2750c39c UD |
196 | hexvalue (ctx->uc_mcontext.fpregs->_st[0].significand[1] << 16 |
197 | | ctx->uc_mcontext.fpregs->_st[0].significand[0], fpregs[7], | |
50441a98 | 198 | 8); |
2750c39c UD |
199 | hexvalue (ctx->uc_mcontext.fpregs->_st[1].exponent, fpregs[8], 8); |
200 | hexvalue (ctx->uc_mcontext.fpregs->_st[1].significand[3] << 16 | |
201 | | ctx->uc_mcontext.fpregs->_st[1].significand[2], fpregs[9], | |
50441a98 | 202 | 8); |
2750c39c UD |
203 | hexvalue (ctx->uc_mcontext.fpregs->_st[1].significand[1] << 16 |
204 | | ctx->uc_mcontext.fpregs->_st[1].significand[0], fpregs[10], | |
50441a98 | 205 | 8); |
2750c39c UD |
206 | hexvalue (ctx->uc_mcontext.fpregs->_st[2].exponent, fpregs[11], 8); |
207 | hexvalue (ctx->uc_mcontext.fpregs->_st[2].significand[3] << 16 | |
208 | | ctx->uc_mcontext.fpregs->_st[2].significand[2], fpregs[12], | |
50441a98 | 209 | 8); |
2750c39c UD |
210 | hexvalue (ctx->uc_mcontext.fpregs->_st[2].significand[1] << 16 |
211 | | ctx->uc_mcontext.fpregs->_st[2].significand[0], fpregs[13], | |
50441a98 | 212 | 8); |
2750c39c UD |
213 | hexvalue (ctx->uc_mcontext.fpregs->_st[3].exponent, fpregs[14], 8); |
214 | hexvalue (ctx->uc_mcontext.fpregs->_st[3].significand[3] << 16 | |
215 | | ctx->uc_mcontext.fpregs->_st[3].significand[2], fpregs[15], | |
50441a98 | 216 | 8); |
2750c39c UD |
217 | hexvalue (ctx->uc_mcontext.fpregs->_st[3].significand[1] << 16 |
218 | | ctx->uc_mcontext.fpregs->_st[3].significand[0], fpregs[16], | |
50441a98 | 219 | 8); |
2750c39c UD |
220 | hexvalue (ctx->uc_mcontext.fpregs->_st[4].exponent, fpregs[17], 8); |
221 | hexvalue (ctx->uc_mcontext.fpregs->_st[4].significand[3] << 16 | |
222 | | ctx->uc_mcontext.fpregs->_st[4].significand[2], fpregs[18], | |
50441a98 | 223 | 8); |
2750c39c UD |
224 | hexvalue (ctx->uc_mcontext.fpregs->_st[4].significand[1] << 16 |
225 | | ctx->uc_mcontext.fpregs->_st[4].significand[0], fpregs[19], | |
50441a98 | 226 | 8); |
2750c39c UD |
227 | hexvalue (ctx->uc_mcontext.fpregs->_st[5].exponent, fpregs[20], 8); |
228 | hexvalue (ctx->uc_mcontext.fpregs->_st[5].significand[3] << 16 | |
229 | | ctx->uc_mcontext.fpregs->_st[5].significand[2], fpregs[21], | |
50441a98 | 230 | 8); |
2750c39c UD |
231 | hexvalue (ctx->uc_mcontext.fpregs->_st[5].significand[1] << 16 |
232 | | ctx->uc_mcontext.fpregs->_st[5].significand[0], fpregs[22], | |
50441a98 | 233 | 8); |
2750c39c UD |
234 | hexvalue (ctx->uc_mcontext.fpregs->_st[6].exponent, fpregs[23], 8); |
235 | hexvalue (ctx->uc_mcontext.fpregs->_st[6].significand[3] << 16 | |
236 | | ctx->uc_mcontext.fpregs->_st[6].significand[2], fpregs[24], | |
50441a98 | 237 | 8); |
2750c39c UD |
238 | hexvalue (ctx->uc_mcontext.fpregs->_st[6].significand[1] << 16 |
239 | | ctx->uc_mcontext.fpregs->_st[6].significand[0], fpregs[25], | |
50441a98 | 240 | 8); |
2750c39c UD |
241 | hexvalue (ctx->uc_mcontext.fpregs->_st[7].exponent, fpregs[26], 8); |
242 | hexvalue (ctx->uc_mcontext.fpregs->_st[7].significand[3] << 16 | |
243 | | ctx->uc_mcontext.fpregs->_st[7].significand[2], fpregs[27], | |
50441a98 | 244 | 8); |
2750c39c UD |
245 | hexvalue (ctx->uc_mcontext.fpregs->_st[7].significand[1] << 16 |
246 | | ctx->uc_mcontext.fpregs->_st[7].significand[0], fpregs[28], | |
50441a98 UD |
247 | 8); |
248 | ||
2750c39c | 249 | hexvalue (ctx->uc_mcontext.fpregs->mxcsr, fpregs[29], 4); |
c9cf6dde AJ |
250 | |
251 | for (i = 0; i < 16; i++) | |
2750c39c UD |
252 | hexvalue (ctx->uc_mcontext.fpregs->_xmm[i].element[3] << 24 |
253 | | ctx->uc_mcontext.fpregs->_xmm[i].element[2] << 16 | |
254 | | ctx->uc_mcontext.fpregs->_xmm[i].element[1] << 8 | |
255 | | ctx->uc_mcontext.fpregs->_xmm[i].element[0], xmmregs[i], | |
50441a98 | 256 | 32); |
c9cf6dde AJ |
257 | |
258 | ||
259 | ADD_STRING ("\n\n ST(0) "); | |
904e1ba9 | 260 | ADD_MEM (fpregs[5], 4); |
c9cf6dde | 261 | ADD_STRING (" "); |
904e1ba9 AJ |
262 | ADD_MEM (fpregs[6], 8); |
263 | ADD_MEM (fpregs[7], 8); | |
c9cf6dde | 264 | ADD_STRING (" ST(1) "); |
904e1ba9 | 265 | ADD_MEM (fpregs[8], 4); |
c9cf6dde | 266 | ADD_STRING (" "); |
904e1ba9 AJ |
267 | ADD_MEM (fpregs[9], 8); |
268 | ADD_MEM (fpregs[10], 8); | |
c9cf6dde | 269 | ADD_STRING ("\n ST(2) "); |
904e1ba9 | 270 | ADD_MEM (fpregs[11], 4); |
c9cf6dde | 271 | ADD_STRING (" "); |
904e1ba9 AJ |
272 | ADD_MEM (fpregs[12], 8); |
273 | ADD_MEM (fpregs[13], 8); | |
c9cf6dde | 274 | ADD_STRING (" ST(3) "); |
904e1ba9 | 275 | ADD_MEM (fpregs[14], 4); |
c9cf6dde | 276 | ADD_STRING (" "); |
904e1ba9 AJ |
277 | ADD_MEM (fpregs[15], 8); |
278 | ADD_MEM (fpregs[16], 8); | |
c9cf6dde | 279 | ADD_STRING ("\n ST(4) "); |
904e1ba9 | 280 | ADD_MEM (fpregs[17], 4); |
c9cf6dde | 281 | ADD_STRING (" "); |
904e1ba9 AJ |
282 | ADD_MEM (fpregs[18], 8); |
283 | ADD_MEM (fpregs[19], 8); | |
c9cf6dde | 284 | ADD_STRING (" ST(5) "); |
904e1ba9 | 285 | ADD_MEM (fpregs[20], 4); |
c9cf6dde | 286 | ADD_STRING (" "); |
904e1ba9 AJ |
287 | ADD_MEM (fpregs[21], 8); |
288 | ADD_MEM (fpregs[22], 8); | |
c9cf6dde | 289 | ADD_STRING ("\n ST(6) "); |
904e1ba9 | 290 | ADD_MEM (fpregs[23], 4); |
c9cf6dde | 291 | ADD_STRING (" "); |
904e1ba9 AJ |
292 | ADD_MEM (fpregs[24], 8); |
293 | ADD_MEM (fpregs[25], 8); | |
c9cf6dde | 294 | ADD_STRING (" ST(7) "); |
904e1ba9 | 295 | ADD_MEM (fpregs[27], 4); |
c9cf6dde | 296 | ADD_STRING (" "); |
904e1ba9 AJ |
297 | ADD_MEM (fpregs[27], 8); |
298 | ADD_MEM (fpregs[28], 8); | |
c9cf6dde AJ |
299 | |
300 | ADD_STRING ("\n mxcsr: "); | |
904e1ba9 | 301 | ADD_MEM (fpregs[29], 4); |
c9cf6dde | 302 | |
50441a98 | 303 | ADD_STRING ("\n XMM0: "); |
c9cf6dde | 304 | ADD_MEM (xmmregs[0], 32); |
50441a98 | 305 | ADD_STRING (" XMM1: "); |
c9cf6dde | 306 | ADD_MEM (xmmregs[0], 32); |
50441a98 | 307 | ADD_STRING ("\n XMM2: "); |
c9cf6dde | 308 | ADD_MEM (xmmregs[0], 32); |
50441a98 | 309 | ADD_STRING (" XMM3: "); |
c9cf6dde | 310 | ADD_MEM (xmmregs[0], 32); |
50441a98 | 311 | ADD_STRING ("\n XMM4: "); |
c9cf6dde | 312 | ADD_MEM (xmmregs[0], 32); |
50441a98 | 313 | ADD_STRING (" XMM5: "); |
c9cf6dde | 314 | ADD_MEM (xmmregs[0], 32); |
50441a98 | 315 | ADD_STRING ("\n XMM6: "); |
c9cf6dde | 316 | ADD_MEM (xmmregs[0], 32); |
50441a98 | 317 | ADD_STRING (" XMM7: "); |
c9cf6dde | 318 | ADD_MEM (xmmregs[0], 32); |
50441a98 | 319 | ADD_STRING ("\n XMM8: "); |
c9cf6dde | 320 | ADD_MEM (xmmregs[0], 32); |
50441a98 | 321 | ADD_STRING (" XMM9: "); |
c9cf6dde AJ |
322 | ADD_MEM (xmmregs[0], 32); |
323 | ADD_STRING ("\n XMM10: "); | |
324 | ADD_MEM (xmmregs[0], 32); | |
325 | ADD_STRING (" XMM11: "); | |
326 | ADD_MEM (xmmregs[0], 32); | |
327 | ADD_STRING ("\n XMM12: "); | |
328 | ADD_MEM (xmmregs[0], 32); | |
329 | ADD_STRING (" XMM13: "); | |
330 | ADD_MEM (xmmregs[0], 32); | |
331 | ADD_STRING ("\n XMM14: "); | |
332 | ADD_MEM (xmmregs[0], 32); | |
333 | ADD_STRING (" XMM15: "); | |
334 | ADD_MEM (xmmregs[0], 32); | |
335 | ||
336 | } | |
337 | ||
338 | ADD_STRING ("\n"); | |
339 | ||
340 | /* Write the stuff out. */ | |
341 | writev (fd, iov, nr); | |
342 | } | |
343 | ||
344 | ||
5fca38da | 345 | #define REGISTER_DUMP register_dump (fd, ctx) |