Blame sysdeps/unix/sysv/linux/x86_64/register-dump.h

Packit 6c4009
/* Dump registers.
Packit 6c4009
   Copyright (C) 2001-2018 Free Software Foundation, Inc.
Packit 6c4009
   This file is part of the GNU C Library.
Packit 6c4009
Packit 6c4009
   The GNU C Library is free software; you can redistribute it and/or
Packit 6c4009
   modify it under the terms of the GNU Lesser General Public
Packit 6c4009
   License as published by the Free Software Foundation; either
Packit 6c4009
   version 2.1 of the License, or (at your option) any later version.
Packit 6c4009
Packit 6c4009
   The GNU C Library is distributed in the hope that it will be useful,
Packit 6c4009
   but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit 6c4009
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
Packit 6c4009
   Lesser General Public License for more details.
Packit 6c4009
Packit 6c4009
   You should have received a copy of the GNU Lesser General Public
Packit 6c4009
   License along with the GNU C Library; if not, see
Packit 6c4009
   <http://www.gnu.org/licenses/>.  */
Packit 6c4009
Packit 6c4009
#include <sys/uio.h>
Packit 6c4009
#include <_itoa.h>
Packit 6c4009
Packit 6c4009
/* We will print the register dump in this format:
Packit 6c4009
Packit 6c4009
 RAX: XXXXXXXXXXXXXXXX   RBX: XXXXXXXXXXXXXXXX  RCX: XXXXXXXXXXXXXXXX
Packit 6c4009
 RDX: XXXXXXXXXXXXXXXX   RSI: XXXXXXXXXXXXXXXX  RDI: XXXXXXXXXXXXXXXX
Packit 6c4009
 RBP: XXXXXXXXXXXXXXXX   R8 : XXXXXXXXXXXXXXXX  R9 : XXXXXXXXXXXXXXXX
Packit 6c4009
 R10: XXXXXXXXXXXXXXXX   R11: XXXXXXXXXXXXXXXX  R12: XXXXXXXXXXXXXXXX
Packit 6c4009
 R13: XXXXXXXXXXXXXXXX   R14: XXXXXXXXXXXXXXXX  R15: XXXXXXXXXXXXXXXX
Packit 6c4009
 RSP: XXXXXXXXXXXXXXXX
Packit 6c4009
Packit 6c4009
 RIP: XXXXXXXXXXXXXXXX   EFLAGS: XXXXXXXX
Packit 6c4009
Packit 6c4009
 CS:  XXXX   DS: XXXX   ES: XXXX   FS: XXXX   GS: XXXX
Packit 6c4009
Packit 6c4009
 Trap:  XXXXXXXX   Error: XXXXXXXX   OldMask: XXXXXXXX
Packit 6c4009
 RSP/SIGNAL: XXXXXXXXXXXXXXXX  CR2: XXXXXXXX
Packit 6c4009
Packit 6c4009
 FPUCW: XXXXXXXX   FPUSW: XXXXXXXX   TAG: XXXXXXXX
Packit 6c4009
 IPOFF: XXXXXXXX   CSSEL: XXXX   DATAOFF: XXXXXXXX   DATASEL: XXXX
Packit 6c4009
Packit 6c4009
 ST(0) XXXX XXXXXXXXXXXXXXXX   ST(1) XXXX XXXXXXXXXXXXXXXX
Packit 6c4009
 ST(2) XXXX XXXXXXXXXXXXXXXX   ST(3) XXXX XXXXXXXXXXXXXXXX
Packit 6c4009
 ST(4) XXXX XXXXXXXXXXXXXXXX   ST(5) XXXX XXXXXXXXXXXXXXXX
Packit 6c4009
 ST(6) XXXX XXXXXXXXXXXXXXXX   ST(7) XXXX XXXXXXXXXXXXXXXX
Packit 6c4009
Packit 6c4009
 mxcsr: XXXX
Packit 6c4009
 XMM0 : XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XMM1 : XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit 6c4009
 XMM2 : XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XMM3 : XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit 6c4009
 XMM4 : XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XMM5 : XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit 6c4009
 XMM6 : XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XMM7 : XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit 6c4009
 XMM8 : XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XMM9 : XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit 6c4009
 XMM10: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XMM11: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit 6c4009
 XMM12: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XMM13: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit 6c4009
 XMM14: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XMM15: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Packit 6c4009
Packit 6c4009
 */
Packit 6c4009
Packit 6c4009
static void
Packit 6c4009
hexvalue (unsigned long int value, char *buf, size_t len)
Packit 6c4009
{
Packit 6c4009
  char *cp = _itoa_word (value, buf + len, 16, 0);
Packit 6c4009
  while (cp > buf)
Packit 6c4009
    *--cp = '0';
Packit 6c4009
}
Packit 6c4009
Packit 6c4009
static void
Packit 6c4009
register_dump (int fd, ucontext_t *ctx)
Packit 6c4009
{
Packit 6c4009
  char regs[25][16];
Packit 6c4009
  char fpregs[30][8];
Packit 6c4009
  char xmmregs[16][32];
Packit 6c4009
  struct iovec iov[147];
Packit 6c4009
  size_t nr = 0;
Packit 6c4009
  int i;
Packit 6c4009
Packit 6c4009
#define ADD_STRING(str) \
Packit 6c4009
  iov[nr].iov_base = (char *) str;					      \
Packit 6c4009
  iov[nr].iov_len = strlen (str);					      \
Packit 6c4009
  ++nr
Packit 6c4009
#define ADD_MEM(str, len) \
Packit 6c4009
  iov[nr].iov_base = str;						      \
Packit 6c4009
  iov[nr].iov_len = len;						      \
Packit 6c4009
  ++nr
Packit 6c4009
Packit 6c4009
  /* Generate strings of register contents.  */
Packit 6c4009
  hexvalue (ctx->uc_mcontext.gregs[REG_RAX], regs[0], 16);
Packit 6c4009
  hexvalue (ctx->uc_mcontext.gregs[REG_RBX], regs[1], 16);
Packit 6c4009
  hexvalue (ctx->uc_mcontext.gregs[REG_RCX], regs[2], 16);
Packit 6c4009
  hexvalue (ctx->uc_mcontext.gregs[REG_RDX], regs[3], 16);
Packit 6c4009
  hexvalue (ctx->uc_mcontext.gregs[REG_RSI], regs[4], 16);
Packit 6c4009
  hexvalue (ctx->uc_mcontext.gregs[REG_RDI], regs[5], 16);
Packit 6c4009
  hexvalue (ctx->uc_mcontext.gregs[REG_RBP], regs[6], 16);
Packit 6c4009
  hexvalue (ctx->uc_mcontext.gregs[REG_R8], regs[7], 16);
Packit 6c4009
  hexvalue (ctx->uc_mcontext.gregs[REG_R9], regs[8], 16);
Packit 6c4009
  hexvalue (ctx->uc_mcontext.gregs[REG_R10], regs[9], 16);
Packit 6c4009
  hexvalue (ctx->uc_mcontext.gregs[REG_R11], regs[10], 16);
Packit 6c4009
  hexvalue (ctx->uc_mcontext.gregs[REG_R12], regs[11], 16);
Packit 6c4009
  hexvalue (ctx->uc_mcontext.gregs[REG_R13], regs[12], 16);
Packit 6c4009
  hexvalue (ctx->uc_mcontext.gregs[REG_R14], regs[13], 16);
Packit 6c4009
  hexvalue (ctx->uc_mcontext.gregs[REG_R15], regs[14], 16);
Packit 6c4009
  hexvalue (ctx->uc_mcontext.gregs[REG_RSP], regs[15], 16);
Packit 6c4009
  hexvalue (ctx->uc_mcontext.gregs[REG_RIP], regs[16], 16);
Packit 6c4009
Packit 6c4009
  hexvalue (ctx->uc_mcontext.gregs[REG_EFL], regs[17], 8);
Packit 6c4009
  hexvalue (ctx->uc_mcontext.gregs[REG_CSGSFS] & 0xffff, regs[18], 4);
Packit 6c4009
  hexvalue ((ctx->uc_mcontext.gregs[REG_CSGSFS] >> 16) & 0xffff, regs[19], 4);
Packit 6c4009
  hexvalue ((ctx->uc_mcontext.gregs[REG_CSGSFS] >> 32) & 0xffff, regs[20], 4);
Packit 6c4009
  /* hexvalue (ctx->ss, regs[23], 4); */
Packit 6c4009
  hexvalue (ctx->uc_mcontext.gregs[REG_TRAPNO], regs[21], 8);
Packit 6c4009
  hexvalue (ctx->uc_mcontext.gregs[REG_ERR], regs[22], 8);
Packit 6c4009
  hexvalue (ctx->uc_mcontext.gregs[REG_OLDMASK], regs[23], 8);
Packit 6c4009
  hexvalue (ctx->uc_mcontext.gregs[REG_CR2], regs[24], 8);
Packit 6c4009
Packit 6c4009
  /* Generate the output.  */
Packit 6c4009
  ADD_STRING ("Register dump:\n\n RAX: ");
Packit 6c4009
  ADD_MEM (regs[0], 16);
Packit 6c4009
  ADD_STRING ("   RBX: ");
Packit 6c4009
  ADD_MEM (regs[1], 16);
Packit 6c4009
  ADD_STRING ("   RCX: ");
Packit 6c4009
  ADD_MEM (regs[2], 16);
Packit 6c4009
  ADD_STRING ("\n RDX: ");
Packit 6c4009
  ADD_MEM (regs[3], 16);
Packit 6c4009
  ADD_STRING ("   RSI: ");
Packit 6c4009
  ADD_MEM (regs[4], 16);
Packit 6c4009
  ADD_STRING ("   RDI: ");
Packit 6c4009
  ADD_MEM (regs[5], 16);
Packit 6c4009
  ADD_STRING ("\n RBP: ");
Packit 6c4009
  ADD_MEM (regs[6], 16);
Packit 6c4009
  ADD_STRING ("   R8 : ");
Packit 6c4009
  ADD_MEM (regs[7], 16);
Packit 6c4009
  ADD_STRING ("   R9 : ");
Packit 6c4009
  ADD_MEM (regs[8], 16);
Packit 6c4009
  ADD_STRING ("\n R10: ");
Packit 6c4009
  ADD_MEM (regs[9], 16);
Packit 6c4009
  ADD_STRING ("   R11: ");
Packit 6c4009
  ADD_MEM (regs[10], 16);
Packit 6c4009
  ADD_STRING ("   R12: ");
Packit 6c4009
  ADD_MEM (regs[11], 16);
Packit 6c4009
  ADD_STRING ("\n R13: ");
Packit 6c4009
  ADD_MEM (regs[12], 16);
Packit 6c4009
  ADD_STRING ("   R14: ");
Packit 6c4009
  ADD_MEM (regs[13], 16);
Packit 6c4009
  ADD_STRING ("   R15: ");
Packit 6c4009
  ADD_MEM (regs[14], 16);
Packit 6c4009
  ADD_STRING ("\n RSP: ");
Packit 6c4009
  ADD_MEM (regs[15], 16);
Packit 6c4009
  ADD_STRING ("\n\n RIP: ");
Packit 6c4009
  ADD_MEM (regs[16], 16);
Packit 6c4009
  ADD_STRING ("   EFLAGS: ");
Packit 6c4009
  ADD_MEM (regs[17], 8);
Packit 6c4009
  ADD_STRING ("\n\n CS: ");
Packit 6c4009
  ADD_MEM (regs[18], 4);
Packit 6c4009
  ADD_STRING ("   FS: ");
Packit 6c4009
  ADD_MEM (regs[19], 4);
Packit 6c4009
  ADD_STRING ("   GS: ");
Packit 6c4009
  ADD_MEM (regs[20], 4);
Packit 6c4009
  /*
Packit 6c4009
  ADD_STRING ("   SS: ");
Packit 6c4009
  ADD_MEM (regs[23], 4);
Packit 6c4009
  */
Packit 6c4009
  ADD_STRING ("\n\n Trap: ");
Packit 6c4009
  ADD_MEM (regs[21], 8);
Packit 6c4009
  ADD_STRING ("   Error: ");
Packit 6c4009
  ADD_MEM (regs[22], 8);
Packit 6c4009
  ADD_STRING ("   OldMask: ");
Packit 6c4009
  ADD_MEM (regs[23], 8);
Packit 6c4009
  ADD_STRING ("   CR2: ");
Packit 6c4009
  ADD_MEM (regs[24], 8);
Packit 6c4009
Packit 6c4009
  if (ctx->uc_mcontext.fpregs != NULL)
Packit 6c4009
    {
Packit 6c4009
Packit 6c4009
      /* Generate output for the FPU control/status registers.  */
Packit 6c4009
      hexvalue (ctx->uc_mcontext.fpregs->cwd, fpregs[0], 8);
Packit 6c4009
      hexvalue (ctx->uc_mcontext.fpregs->swd, fpregs[1], 8);
Packit 6c4009
      hexvalue (ctx->uc_mcontext.fpregs->ftw, fpregs[2], 8);
Packit 6c4009
      hexvalue (ctx->uc_mcontext.fpregs->rip, fpregs[3], 8);
Packit 6c4009
      hexvalue (ctx->uc_mcontext.fpregs->rdp, fpregs[4], 8);
Packit 6c4009
Packit 6c4009
      ADD_STRING ("\n\n FPUCW: ");
Packit 6c4009
      ADD_MEM (fpregs[0], 8);
Packit 6c4009
      ADD_STRING ("   FPUSW: ");
Packit 6c4009
      ADD_MEM (fpregs[1], 8);
Packit 6c4009
      ADD_STRING ("   TAG: ");
Packit 6c4009
      ADD_MEM (fpregs[2], 8);
Packit 6c4009
      ADD_STRING ("\n RIP: ");
Packit 6c4009
      ADD_MEM (fpregs[3], 8);
Packit 6c4009
      ADD_STRING ("   RDP: ");
Packit 6c4009
      ADD_MEM (fpregs[4], 8);
Packit 6c4009
Packit 6c4009
      /* Now the real FPU registers.  */
Packit 6c4009
      hexvalue (ctx->uc_mcontext.fpregs->_st[0].exponent, fpregs[5], 8);
Packit 6c4009
      hexvalue (ctx->uc_mcontext.fpregs->_st[0].significand[3] << 16
Packit 6c4009
		| ctx->uc_mcontext.fpregs->_st[0].significand[2], fpregs[6],
Packit 6c4009
		8);
Packit 6c4009
      hexvalue (ctx->uc_mcontext.fpregs->_st[0].significand[1] << 16
Packit 6c4009
		| ctx->uc_mcontext.fpregs->_st[0].significand[0], fpregs[7],
Packit 6c4009
		8);
Packit 6c4009
      hexvalue (ctx->uc_mcontext.fpregs->_st[1].exponent, fpregs[8], 8);
Packit 6c4009
      hexvalue (ctx->uc_mcontext.fpregs->_st[1].significand[3] << 16
Packit 6c4009
		| ctx->uc_mcontext.fpregs->_st[1].significand[2], fpregs[9],
Packit 6c4009
		8);
Packit 6c4009
      hexvalue (ctx->uc_mcontext.fpregs->_st[1].significand[1] << 16
Packit 6c4009
		| ctx->uc_mcontext.fpregs->_st[1].significand[0], fpregs[10],
Packit 6c4009
		8);
Packit 6c4009
      hexvalue (ctx->uc_mcontext.fpregs->_st[2].exponent, fpregs[11], 8);
Packit 6c4009
      hexvalue (ctx->uc_mcontext.fpregs->_st[2].significand[3] << 16
Packit 6c4009
		| ctx->uc_mcontext.fpregs->_st[2].significand[2], fpregs[12],
Packit 6c4009
		8);
Packit 6c4009
      hexvalue (ctx->uc_mcontext.fpregs->_st[2].significand[1] << 16
Packit 6c4009
		| ctx->uc_mcontext.fpregs->_st[2].significand[0], fpregs[13],
Packit 6c4009
		8);
Packit 6c4009
      hexvalue (ctx->uc_mcontext.fpregs->_st[3].exponent, fpregs[14], 8);
Packit 6c4009
      hexvalue (ctx->uc_mcontext.fpregs->_st[3].significand[3] << 16
Packit 6c4009
		| ctx->uc_mcontext.fpregs->_st[3].significand[2], fpregs[15],
Packit 6c4009
		8);
Packit 6c4009
      hexvalue (ctx->uc_mcontext.fpregs->_st[3].significand[1] << 16
Packit 6c4009
		| ctx->uc_mcontext.fpregs->_st[3].significand[0], fpregs[16],
Packit 6c4009
		8);
Packit 6c4009
      hexvalue (ctx->uc_mcontext.fpregs->_st[4].exponent, fpregs[17], 8);
Packit 6c4009
      hexvalue (ctx->uc_mcontext.fpregs->_st[4].significand[3] << 16
Packit 6c4009
		| ctx->uc_mcontext.fpregs->_st[4].significand[2], fpregs[18],
Packit 6c4009
		8);
Packit 6c4009
      hexvalue (ctx->uc_mcontext.fpregs->_st[4].significand[1] << 16
Packit 6c4009
		| ctx->uc_mcontext.fpregs->_st[4].significand[0], fpregs[19],
Packit 6c4009
		8);
Packit 6c4009
      hexvalue (ctx->uc_mcontext.fpregs->_st[5].exponent, fpregs[20], 8);
Packit 6c4009
      hexvalue (ctx->uc_mcontext.fpregs->_st[5].significand[3] << 16
Packit 6c4009
		| ctx->uc_mcontext.fpregs->_st[5].significand[2], fpregs[21],
Packit 6c4009
		8);
Packit 6c4009
      hexvalue (ctx->uc_mcontext.fpregs->_st[5].significand[1] << 16
Packit 6c4009
		| ctx->uc_mcontext.fpregs->_st[5].significand[0], fpregs[22],
Packit 6c4009
		8);
Packit 6c4009
      hexvalue (ctx->uc_mcontext.fpregs->_st[6].exponent, fpregs[23], 8);
Packit 6c4009
      hexvalue (ctx->uc_mcontext.fpregs->_st[6].significand[3] << 16
Packit 6c4009
		| ctx->uc_mcontext.fpregs->_st[6].significand[2], fpregs[24],
Packit 6c4009
		8);
Packit 6c4009
      hexvalue (ctx->uc_mcontext.fpregs->_st[6].significand[1] << 16
Packit 6c4009
		| ctx->uc_mcontext.fpregs->_st[6].significand[0], fpregs[25],
Packit 6c4009
		8);
Packit 6c4009
      hexvalue (ctx->uc_mcontext.fpregs->_st[7].exponent, fpregs[26], 8);
Packit 6c4009
      hexvalue (ctx->uc_mcontext.fpregs->_st[7].significand[3] << 16
Packit 6c4009
		| ctx->uc_mcontext.fpregs->_st[7].significand[2], fpregs[27],
Packit 6c4009
		8);
Packit 6c4009
      hexvalue (ctx->uc_mcontext.fpregs->_st[7].significand[1] << 16
Packit 6c4009
		| ctx->uc_mcontext.fpregs->_st[7].significand[0], fpregs[28],
Packit 6c4009
		8);
Packit 6c4009
Packit 6c4009
      hexvalue (ctx->uc_mcontext.fpregs->mxcsr, fpregs[29], 4);
Packit 6c4009
Packit 6c4009
      for (i = 0; i < 16; i++)
Packit 6c4009
	hexvalue (ctx->uc_mcontext.fpregs->_xmm[i].element[3] << 24
Packit 6c4009
		  | ctx->uc_mcontext.fpregs->_xmm[i].element[2] << 16
Packit 6c4009
		  | ctx->uc_mcontext.fpregs->_xmm[i].element[1] << 8
Packit 6c4009
		  | ctx->uc_mcontext.fpregs->_xmm[i].element[0], xmmregs[i],
Packit 6c4009
		  32);
Packit 6c4009
Packit 6c4009
Packit 6c4009
      ADD_STRING ("\n\n ST(0) ");
Packit 6c4009
      ADD_MEM (fpregs[5], 4);
Packit 6c4009
      ADD_STRING (" ");
Packit 6c4009
      ADD_MEM (fpregs[6], 8);
Packit 6c4009
      ADD_MEM (fpregs[7], 8);
Packit 6c4009
      ADD_STRING ("   ST(1) ");
Packit 6c4009
      ADD_MEM (fpregs[8], 4);
Packit 6c4009
      ADD_STRING (" ");
Packit 6c4009
      ADD_MEM (fpregs[9], 8);
Packit 6c4009
      ADD_MEM (fpregs[10], 8);
Packit 6c4009
      ADD_STRING ("\n ST(2) ");
Packit 6c4009
      ADD_MEM (fpregs[11], 4);
Packit 6c4009
      ADD_STRING (" ");
Packit 6c4009
      ADD_MEM (fpregs[12], 8);
Packit 6c4009
      ADD_MEM (fpregs[13], 8);
Packit 6c4009
      ADD_STRING ("   ST(3) ");
Packit 6c4009
      ADD_MEM (fpregs[14], 4);
Packit 6c4009
      ADD_STRING (" ");
Packit 6c4009
      ADD_MEM (fpregs[15], 8);
Packit 6c4009
      ADD_MEM (fpregs[16], 8);
Packit 6c4009
      ADD_STRING ("\n ST(4) ");
Packit 6c4009
      ADD_MEM (fpregs[17], 4);
Packit 6c4009
      ADD_STRING (" ");
Packit 6c4009
      ADD_MEM (fpregs[18], 8);
Packit 6c4009
      ADD_MEM (fpregs[19], 8);
Packit 6c4009
      ADD_STRING ("   ST(5) ");
Packit 6c4009
      ADD_MEM (fpregs[20], 4);
Packit 6c4009
      ADD_STRING (" ");
Packit 6c4009
      ADD_MEM (fpregs[21], 8);
Packit 6c4009
      ADD_MEM (fpregs[22], 8);
Packit 6c4009
      ADD_STRING ("\n ST(6) ");
Packit 6c4009
      ADD_MEM (fpregs[23], 4);
Packit 6c4009
      ADD_STRING (" ");
Packit 6c4009
      ADD_MEM (fpregs[24], 8);
Packit 6c4009
      ADD_MEM (fpregs[25], 8);
Packit 6c4009
      ADD_STRING ("   ST(7) ");
Packit 6c4009
      ADD_MEM (fpregs[27], 4);
Packit 6c4009
      ADD_STRING (" ");
Packit 6c4009
      ADD_MEM (fpregs[27], 8);
Packit 6c4009
      ADD_MEM (fpregs[28], 8);
Packit 6c4009
Packit 6c4009
      ADD_STRING ("\n mxcsr: ");
Packit 6c4009
      ADD_MEM (fpregs[29], 4);
Packit 6c4009
Packit 6c4009
      ADD_STRING ("\n XMM0:  ");
Packit 6c4009
      ADD_MEM (xmmregs[0], 32);
Packit 6c4009
      ADD_STRING (" XMM1:  ");
Packit 6c4009
      ADD_MEM (xmmregs[0], 32);
Packit 6c4009
      ADD_STRING ("\n XMM2:  ");
Packit 6c4009
      ADD_MEM (xmmregs[0], 32);
Packit 6c4009
      ADD_STRING (" XMM3:  ");
Packit 6c4009
      ADD_MEM (xmmregs[0], 32);
Packit 6c4009
      ADD_STRING ("\n XMM4:  ");
Packit 6c4009
      ADD_MEM (xmmregs[0], 32);
Packit 6c4009
      ADD_STRING (" XMM5:  ");
Packit 6c4009
      ADD_MEM (xmmregs[0], 32);
Packit 6c4009
      ADD_STRING ("\n XMM6:  ");
Packit 6c4009
      ADD_MEM (xmmregs[0], 32);
Packit 6c4009
      ADD_STRING (" XMM7:  ");
Packit 6c4009
      ADD_MEM (xmmregs[0], 32);
Packit 6c4009
      ADD_STRING ("\n XMM8:  ");
Packit 6c4009
      ADD_MEM (xmmregs[0], 32);
Packit 6c4009
      ADD_STRING (" XMM9:  ");
Packit 6c4009
      ADD_MEM (xmmregs[0], 32);
Packit 6c4009
      ADD_STRING ("\n XMM10: ");
Packit 6c4009
      ADD_MEM (xmmregs[0], 32);
Packit 6c4009
      ADD_STRING (" XMM11: ");
Packit 6c4009
      ADD_MEM (xmmregs[0], 32);
Packit 6c4009
      ADD_STRING ("\n XMM12: ");
Packit 6c4009
      ADD_MEM (xmmregs[0], 32);
Packit 6c4009
      ADD_STRING (" XMM13: ");
Packit 6c4009
      ADD_MEM (xmmregs[0], 32);
Packit 6c4009
      ADD_STRING ("\n XMM14: ");
Packit 6c4009
      ADD_MEM (xmmregs[0], 32);
Packit 6c4009
      ADD_STRING (" XMM15: ");
Packit 6c4009
      ADD_MEM (xmmregs[0], 32);
Packit 6c4009
Packit 6c4009
    }
Packit 6c4009
Packit 6c4009
  ADD_STRING ("\n");
Packit 6c4009
Packit 6c4009
  /* Write the stuff out.  */
Packit 6c4009
  writev (fd, iov, nr);
Packit 6c4009
}
Packit 6c4009
Packit 6c4009
Packit 6c4009
#define REGISTER_DUMP register_dump (fd, ctx)