1 /* Copyright (C) 2011 Free Software Foundation, Inc.
2 This file is part of the GNU C Library.
3 Contributed by Chris Metcalf <cmetcalf@tilera.com>, 2011.
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.
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.
15 You should have received a copy of the GNU Lesser General Public
16 License along with the GNU C Library. If not, see
17 <http://www.gnu.org/licenses/>. */
22 /* We will print the register dump in this format:
24 R0: XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX
25 R4: XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX
26 R8: XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX
27 R12: XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX
28 R16: XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX
29 R20: XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX
30 R24: XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX
31 R28: XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX
32 R32: XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX
33 R36: XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX
34 R40: XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX
35 R44: XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX
36 R48: XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX
37 R52: XXXXXXXXXXXXXXXX TP: XXXXXXXXXXXXXXXX
38 SP: XXXXXXXXXXXXXXXX LR: XXXXXXXXXXXXXXXX
40 PC: XXXXXXXXXXXXXXXX ICS: X FAULTNUM: XX
45 hexvalue (unsigned long int value
, char *buf
, size_t len
)
47 char *cp
= _itoa_word (value
, buf
+ len
, 16, 0);
53 register_dump (int fd
, mcontext_t
*ctx
)
56 struct iovec iov
[132];
60 #define ADD_STRING(str) \
61 iov[nr].iov_base = (char *) str; \
62 iov[nr].iov_len = strlen (str); \
64 #define ADD_MEM(str, len) \
65 iov[nr].iov_base = str; \
66 iov[nr].iov_len = len; \
69 /* Generate strings of register contents. */
70 for (i
= 0; i
< 56; ++i
)
71 hexvalue (ctx
->gregs
[i
], regs
[i
], 16);
72 hexvalue (ctx
->pc
, regs
[56], 16);
73 hexvalue (ctx
->ics
, regs
[57], 1);
74 hexvalue (ctx
->faultnum
, regs
[58], 2);
76 /* Generate the output. */
79 const char *prefixes
[] = {
80 "Register dump:\n\n R0: ",
94 ADD_STRING (prefixes
[i
/ 4]);
97 ADD_MEM (regs
[i
], 16);
102 ADD_STRING ("\n R52: ");
103 ADD_MEM (regs
[52], 16);
104 ADD_STRING (" TP: ");
105 ADD_MEM (regs
[53], 16);
106 ADD_STRING ("\n SP: ");
107 ADD_MEM (regs
[54], 16);
108 ADD_STRING (" LR: ");
109 ADD_MEM (regs
[55], 16);
110 ADD_STRING ("\n\n PC: ");
111 ADD_MEM (regs
[56], 16);
112 ADD_STRING (" ICS: ");
113 ADD_MEM (regs
[57], 1);
114 ADD_STRING (" FAULTNUM: ");
115 ADD_MEM (regs
[58], 2);
118 /* Write the stuff out. */
119 writev (fd
, iov
, nr
);
123 #define REGISTER_DUMP register_dump (fd, &ctx->uc_mcontext)