]> sourceware.org Git - glibc.git/commitdiff
Add 64-bit support to MIPS register-dump.h (bug 14893).
authorJoseph Myers <joseph@codesourcery.com>
Thu, 29 Nov 2012 23:03:48 +0000 (23:03 +0000)
committerJoseph Myers <joseph@codesourcery.com>
Thu, 29 Nov 2012 23:03:48 +0000 (23:03 +0000)
NEWS
ports/ChangeLog.mips
ports/sysdeps/mips/mips64/n32/_itoa.h [new file with mode: 0644]
ports/sysdeps/unix/sysv/linux/mips/register-dump.h

diff --git a/NEWS b/NEWS
index e0552315dfd9bf3e472f64e5dfe7d0ea478e1140..79d29709a5be0bd278768812dab3da94ff1a9476 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -22,7 +22,7 @@ Version 2.17
   14661, 14669, 14672, 14683, 14694, 14716, 14719, 14743, 14767, 14783,
   14784, 14785, 14793, 14796, 14797, 14801, 14803, 14805, 14807, 14811,
   14815, 14821, 14822, 14824, 14828, 14831, 14835, 14838, 14856, 14863,
-  14865, 14866, 14868, 14869, 14871, 14879, 14889.
+  14865, 14866, 14868, 14869, 14871, 14879, 14889, 14893.
 
 * CVE-2011-4609 svc_run() produces high cpu usage when accept fails with
   EMFILE has been fixed (Bugzilla #14889).
index 6034fd041b6bfbe2a66e05959e8c825c83b2fa30..b6886af92cbc46226c55839e4bb5eb5bc7112c32 100644 (file)
@@ -1,3 +1,20 @@
+2012-11-29  Joseph Myers  <joseph@codesourcery.com>
+
+       [BZ #14893]
+       * sysdeps/mips/mips64/n32/_itoa.h: New file.
+       * sysdeps/unix/sysv/linux/mips/register-dump.h: Include
+       <sgidefs.h>.
+       (CTX_TYPE): New macro.
+       (CTX_REG): Likewise.
+       (CTX_PC): Likewise.
+       (CTX_MDHI): Likewise.
+       (CTX_MDLO): Likewise.
+       (REG_HEX_SIZE): Likewise.
+       (hexvalue): Take _ITOA_WORD_TYPE argument.
+       (register_dump): Use these macros instead of hardcoding struct
+       sigcontext * type and accesses and 8-byte textual output for
+       registers.
+
 2012-11-22  Joseph Myers  <joseph@codesourcery.com>
 
        [BZ #14822]
diff --git a/ports/sysdeps/mips/mips64/n32/_itoa.h b/ports/sysdeps/mips/mips64/n32/_itoa.h
new file mode 100644 (file)
index 0000000..363cdfe
--- /dev/null
@@ -0,0 +1,4 @@
+/* MIPS n32 uses 64-bit _itoa_word and _itoa is mapped to _itoa_word.  */
+#define _ITOA_NEEDED           0
+#define _ITOA_WORD_TYPE                unsigned long long int
+#include_next <_itoa.h>
index 186228119fe3c9194ca7ba0cfcded6352584a0e7..0156910e4028fdd193731687c0a4c83a3815d7e4 100644 (file)
    License along with the GNU C Library.  If not, see
    <http://www.gnu.org/licenses/>.  */
 
+#include <sgidefs.h>
 #include <sys/uio.h>
 #include <_itoa.h>
 
+#if _MIPS_SIM == _ABIO32
+# define CTX_TYPE      struct sigcontext *
+# define CTX_REG(ctx, i)       ((ctx)->sc_regs[(i)])
+# define CTX_PC(ctx)   ((ctx)->sc_pc)
+# define CTX_MDHI(ctx) ((ctx)->sc_mdhi)
+# define CTX_MDLO(ctx) ((ctx)->sc_mdlo)
+# define REG_HEX_SIZE  8
+#else
+# define CTX_TYPE      ucontext_t *
+# define CTX_REG(ctx, i)       ((ctx)->uc_mcontext.gregs[(i)])
+# define CTX_PC(ctx)   ((ctx)->uc_mcontext.pc)
+# define CTX_MDHI(ctx) ((ctx)->uc_mcontext.mdhi)
+# define CTX_MDLO(ctx) ((ctx)->uc_mcontext.mdhi)
+# define REG_HEX_SIZE  16
+#endif
+
 /* We will print the register dump in this format:
 
  R0   XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX
@@ -32,7 +49,7 @@
 */
 
 static void
-hexvalue (unsigned long int value, char *buf, size_t len)
+hexvalue (_ITOA_WORD_TYPE value, char *buf, size_t len)
 {
   char *cp = _itoa_word (value, buf + len, 16, 0);
   while (cp > buf)
@@ -40,9 +57,9 @@ hexvalue (unsigned long int value, char *buf, size_t len)
 }
 
 static void
-register_dump (int fd, struct sigcontext *ctx)
+register_dump (int fd, CTX_TYPE ctx)
 {
-  char regs[38][8];
+  char regs[38][REG_HEX_SIZE];
   struct iovec iov[38 * 2 + 10];
   size_t nr = 0;
   int i;
@@ -58,40 +75,40 @@ register_dump (int fd, struct sigcontext *ctx)
 
   /* Generate strings of register contents.  */
   for (i = 0; i < 32; i++)
-    hexvalue (ctx->sc_regs[i], regs[i], 8);
-  hexvalue (ctx->sc_pc, regs[32], 8);
-  hexvalue (ctx->sc_mdhi, regs[33], 8);
-  hexvalue (ctx->sc_mdlo, regs[34], 8);
+    hexvalue (CTX_REG (ctx, i), regs[i], REG_HEX_SIZE);
+  hexvalue (CTX_PC (ctx), regs[32], REG_HEX_SIZE);
+  hexvalue (CTX_MDHI (ctx), regs[33], REG_HEX_SIZE);
+  hexvalue (CTX_MDLO (ctx), regs[34], REG_HEX_SIZE);
 
   /* Generate the output.  */
   ADD_STRING ("Register dump:\n\n R0   ");
   for (i = 0; i < 8; i++)
     {
-      ADD_MEM (regs[i], 8);
+      ADD_MEM (regs[i], REG_HEX_SIZE);
       ADD_STRING (" ");
     }
   ADD_STRING ("\n R8   ");
   for (i = 8; i < 16; i++)
     {
-      ADD_MEM (regs[i], 8);
+      ADD_MEM (regs[i], REG_HEX_SIZE);
       ADD_STRING (" ");
     }
   ADD_STRING ("\n R16  ");
   for (i = 16; i < 24; i++)
     {
-      ADD_MEM (regs[i], 8);
+      ADD_MEM (regs[i], REG_HEX_SIZE);
       ADD_STRING (" ");
     }
   ADD_STRING ("\n R24  ");
   for (i = 24; i < 32; i++)
     {
-      ADD_MEM (regs[i], 8);
+      ADD_MEM (regs[i], REG_HEX_SIZE);
       ADD_STRING (" ");
     }
   ADD_STRING ("\n            pc       lo       hi\n      ");
   for (i = 32; i < 35; i++)
     {
-      ADD_MEM (regs[i], 8);
+      ADD_MEM (regs[i], REG_HEX_SIZE);
       ADD_STRING (" ");
     }
   ADD_STRING ("\n");
This page took 0.057386 seconds and 5 git commands to generate.