]> git.ipfire.org Git - thirdparty/glibc.git/blame - sysdeps/unix/sysv/linux/mips/register-dump.h
Update copyright dates with scripts/update-copyrights.
[thirdparty/glibc.git] / sysdeps / unix / sysv / linux / mips / register-dump.h
CommitLineData
ede08404 1/* Dump registers.
f7a9f785 2 Copyright (C) 2000-2016 Free Software Foundation, Inc.
ede08404
AJ
3 This file is part of the GNU C Library.
4 Contributed by Andreas Jaeger <aj@suse.de>, 2000.
5
6 The GNU C Library is free software; you can redistribute it and/or
3214b89b
AJ
7 modify it under the terms of the GNU Lesser General Public
8 License as published by the Free Software Foundation; either
9 version 2.1 of the License, or (at your option) any later version.
ede08404
AJ
10
11 The GNU C Library is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
3214b89b 14 Lesser General Public License for more details.
ede08404 15
3214b89b 16 You should have received a copy of the GNU Lesser General Public
ab84e3ff
PE
17 License along with the GNU C Library. If not, see
18 <http://www.gnu.org/licenses/>. */
ede08404 19
1672585f 20#include <sgidefs.h>
ede08404 21#include <sys/uio.h>
1422b9df 22#include <_itoa.h>
ede08404 23
1672585f
JM
24#if _MIPS_SIM == _ABIO32
25# define CTX_TYPE struct sigcontext *
26# define CTX_REG(ctx, i) ((ctx)->sc_regs[(i)])
27# define CTX_PC(ctx) ((ctx)->sc_pc)
28# define CTX_MDHI(ctx) ((ctx)->sc_mdhi)
29# define CTX_MDLO(ctx) ((ctx)->sc_mdlo)
30# define REG_HEX_SIZE 8
31#else
32# define CTX_TYPE ucontext_t *
33# define CTX_REG(ctx, i) ((ctx)->uc_mcontext.gregs[(i)])
34# define CTX_PC(ctx) ((ctx)->uc_mcontext.pc)
35# define CTX_MDHI(ctx) ((ctx)->uc_mcontext.mdhi)
36# define CTX_MDLO(ctx) ((ctx)->uc_mcontext.mdhi)
37# define REG_HEX_SIZE 16
38#endif
39
ede08404
AJ
40/* We will print the register dump in this format:
41
42 R0 XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX
43 R8 XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX
44 R16 XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX
45 R24 XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX
42e36d16
DJ
46 pc lo hi
47 XXXXXXXX XXXXXXXX XXXXXXXX
ede08404
AJ
48 The FPU registers will not be printed.
49*/
50
51static void
1672585f 52hexvalue (_ITOA_WORD_TYPE value, char *buf, size_t len)
ede08404
AJ
53{
54 char *cp = _itoa_word (value, buf + len, 16, 0);
55 while (cp > buf)
56 *--cp = '0';
57}
58
59static void
1672585f 60register_dump (int fd, CTX_TYPE ctx)
ede08404 61{
1672585f 62 char regs[38][REG_HEX_SIZE];
d6749b4a 63 struct iovec iov[38 * 2 + 10];
ede08404
AJ
64 size_t nr = 0;
65 int i;
66
67#define ADD_STRING(str) \
68 iov[nr].iov_base = (char *) str; \
69 iov[nr].iov_len = strlen (str); \
70 ++nr
71#define ADD_MEM(str, len) \
72 iov[nr].iov_base = str; \
73 iov[nr].iov_len = len; \
74 ++nr
75
76 /* Generate strings of register contents. */
d6749b4a 77 for (i = 0; i < 32; i++)
1672585f
JM
78 hexvalue (CTX_REG (ctx, i), regs[i], REG_HEX_SIZE);
79 hexvalue (CTX_PC (ctx), regs[32], REG_HEX_SIZE);
80 hexvalue (CTX_MDHI (ctx), regs[33], REG_HEX_SIZE);
81 hexvalue (CTX_MDLO (ctx), regs[34], REG_HEX_SIZE);
ede08404
AJ
82
83 /* Generate the output. */
84 ADD_STRING ("Register dump:\n\n R0 ");
85 for (i = 0; i < 8; i++)
86 {
1672585f 87 ADD_MEM (regs[i], REG_HEX_SIZE);
ff75a64c 88 ADD_STRING (" ");
ede08404
AJ
89 }
90 ADD_STRING ("\n R8 ");
91 for (i = 8; i < 16; i++)
92 {
1672585f 93 ADD_MEM (regs[i], REG_HEX_SIZE);
ff75a64c 94 ADD_STRING (" ");
ede08404
AJ
95 }
96 ADD_STRING ("\n R16 ");
97 for (i = 16; i < 24; i++)
98 {
1672585f 99 ADD_MEM (regs[i], REG_HEX_SIZE);
ff75a64c 100 ADD_STRING (" ");
ede08404
AJ
101 }
102 ADD_STRING ("\n R24 ");
103 for (i = 24; i < 32; i++)
104 {
1672585f 105 ADD_MEM (regs[i], REG_HEX_SIZE);
ff75a64c 106 ADD_STRING (" ");
ede08404 107 }
42e36d16
DJ
108 ADD_STRING ("\n pc lo hi\n ");
109 for (i = 32; i < 35; i++)
ede08404 110 {
1672585f 111 ADD_MEM (regs[i], REG_HEX_SIZE);
ff75a64c 112 ADD_STRING (" ");
ede08404 113 }
ff75a64c 114 ADD_STRING ("\n");
ede08404
AJ
115
116 /* Write the stuff out. */
117 writev (fd, iov, nr);
118}
119
120
722a9309 121#define REGISTER_DUMP register_dump (fd, ctx)