mirror of
git://sourceware.org/git/glibc.git
synced 2024-12-27 04:41:02 +08:00
* sysdeps/unix/sysv/linux/alpha/register-dump.h (regnames): Align. (linefeed): Remove. (register_dump): Rewrite to generate into a flat buffer instead of into iovecs.
2004-11-04 Richard Henderson <rth@redhat.com> * sysdeps/unix/sysv/linux/alpha/register-dump.h (regnames): Align. (linefeed): Remove. (register_dump): Rewrite to generate into a flat buffer instead of into iovecs.
This commit is contained in:
parent
c4d7bd3907
commit
a129c4fe72
@ -1,3 +1,10 @@
|
||||
2004-11-04 Richard Henderson <rth@redhat.com>
|
||||
|
||||
* sysdeps/unix/sysv/linux/alpha/register-dump.h (regnames): Align.
|
||||
(linefeed): Remove.
|
||||
(register_dump): Rewrite to generate into a flat buffer instead
|
||||
of into iovecs.
|
||||
|
||||
2004-11-02 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
* debug/tst-chk1.c (ret): New volatile variable.
|
||||
|
@ -18,7 +18,7 @@
|
||||
02111-1307 USA. */
|
||||
|
||||
#include <stddef.h>
|
||||
#include <sys/uio.h>
|
||||
#include <string.h>
|
||||
|
||||
/* We will print the register dump in this format:
|
||||
|
||||
@ -51,7 +51,7 @@
|
||||
|
||||
#define NREGS (32+32+3)
|
||||
|
||||
static const char regnames[NREGS][8] =
|
||||
static const char __attribute__((aligned(8))) regnames[NREGS][8] =
|
||||
{
|
||||
" V0: ", " T0: ", " T1: ",
|
||||
" T2: ", " T3: ", " T4: ",
|
||||
@ -113,49 +113,45 @@ static const int offsets[NREGS] =
|
||||
|
||||
#undef O
|
||||
|
||||
static const char linefeed[2] = "\n\n";
|
||||
|
||||
static void
|
||||
register_dump (int fd, struct sigcontext *ctx)
|
||||
{
|
||||
char regs[NREGS][16];
|
||||
struct iovec iov[2*NREGS+24];
|
||||
size_t iov_i = 0, i, j;
|
||||
char buf[NREGS*(8+16) + 25 + 80];
|
||||
char *p = buf;
|
||||
size_t i;
|
||||
|
||||
#define ADD_MEM(str, len) \
|
||||
(iov[iov_i].iov_base = (void *)(str), \
|
||||
iov[iov_i].iov_len = len, \
|
||||
++iov_i)
|
||||
|
||||
#define ADD_STRING(str) ADD_MEM(str, strlen(str))
|
||||
|
||||
ADD_STRING ("Register dump:\n\n");
|
||||
p = stpcpy (p, "Register dump:\n\n");
|
||||
|
||||
for (i = 0; i < NREGS; ++i)
|
||||
{
|
||||
int this_offset, this_lf;
|
||||
unsigned long val;
|
||||
signed long j;
|
||||
|
||||
this_offset = offsets[i];
|
||||
this_lf = this_offset & 7;
|
||||
this_offset &= -8;
|
||||
|
||||
val = *(unsigned long *)((char *)ctx + this_offset);
|
||||
val = *(unsigned long *)(((size_t)ctx + this_offset) & -8);
|
||||
|
||||
for (j = 0; j < 16; ++j)
|
||||
memcpy (p, regnames[i], 8);
|
||||
p += 8;
|
||||
|
||||
for (j = 60; j >= 0; j -= 4)
|
||||
{
|
||||
unsigned long x = (val >> (64 - (j + 1) * 4)) & 15;
|
||||
unsigned long x = (val >> j) & 15;
|
||||
x += x < 10 ? '0' : 'a' - 10;
|
||||
regs[i][j] = x;
|
||||
*p++ = x;
|
||||
}
|
||||
|
||||
ADD_MEM (regnames[i], 8);
|
||||
ADD_MEM (regs[i], 16);
|
||||
if (this_lf)
|
||||
ADD_MEM (linefeed, this_lf);
|
||||
if (this_lf > 0)
|
||||
{
|
||||
if (this_lf > 1)
|
||||
*p++ = '\n';
|
||||
*p++ = '\n';
|
||||
}
|
||||
}
|
||||
|
||||
writev (fd, iov, iov_i);
|
||||
write (fd, buf, p - buf);
|
||||
}
|
||||
|
||||
#define REGISTER_DUMP register_dump (fd, ctx)
|
||||
|
Loading…
Reference in New Issue
Block a user