1 /* Copyright (C) 2011-2014 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)