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

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