* alpha-tdep.c (alpha_register_virtual_type): Use alpha-specific
[binutils-gdb.git] / binutils / unwind-ia64.c
index 826de56ff5fdec0ca1eea7699e321e99ae64ca72..803a5fa5415ee6b49e0ec3b78ace821e4b6f4f0f 100644 (file)
@@ -1,5 +1,5 @@
 /* unwind-ia64.c -- utility routines to dump IA-64 unwind info for readelf.
-   Copyright (c) 2000, 2001 Free Software Foundation, Inc.
+   Copyright 2000, 2001 Free Software Foundation, Inc.
        Contributed by David Mosberger-Tang <davidm@hpl.hp.com>
 
 This file is part of GNU Binutils.
@@ -33,20 +33,29 @@ Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
 
 static bfd_vma unw_rlen = 0;
 
+static void unw_print_brmask PARAMS ((char *, unsigned int));
+static void unw_print_grmask PARAMS ((char *, unsigned int));
+static void unw_print_frmask PARAMS ((char *, unsigned int));
+static void unw_print_abreg PARAMS ((char *, unsigned int));
+static void unw_print_xyreg PARAMS ((char *, unsigned int, unsigned int));
+
 static void
 unw_print_brmask (cp, mask)
      char * cp;
-     unsigned char mask;
+     unsigned int mask;
 {
-  char *sep = "";
+  int sep = 0;
   int i;
 
   for (i = 0; mask && (i < 5); ++i)
     {
       if (mask & 1)
        {
-         cp += sprintf (cp, "%sb%u", sep, i + 1);
-         sep = ",";
+         if (sep)
+           *cp++ = ',';
+         *cp++ = 'b';
+         *cp++ = i + 1 + '0';
+         sep = 1;
        }
       mask >>= 1;
     }
@@ -56,47 +65,59 @@ unw_print_brmask (cp, mask)
 static void
 unw_print_grmask (cp, mask)
      char * cp;
-     unsigned char mask;
+     unsigned int mask;
 {
-  char *sep = "";
+  int sep = 0;
   int i;
 
-  *cp = '\0';
   for (i = 0; i < 4; ++i)
     {
       if (mask & 1)
        {
-         cp += sprintf (cp, "%sr%u", sep, i + 4);
-         sep = ",";
+         if (sep)
+           *cp++ = ',';
+         *cp++ = 'r';
+         *cp++ = i + 4 + '0';
+         sep = 1;
        }
       mask >>= 1;
     }
+  *cp = '\0';
 }
 
 static void
 unw_print_frmask (cp, mask)
      char * cp;
-     unsigned long mask;
+     unsigned int mask;
 {
-  char *sep = "";
+  int sep = 0;
   int i;
 
-  *cp = '\0';
   for (i = 0; i < 20; ++i)
     {
       if (mask & 1)
        {
-         cp += sprintf (cp, "%sf%u", sep, (i < 4) ? (i + 2) : (i + 12));
-         sep = ",";
+         if (sep)
+           *cp++ = ',';
+         *cp++ = 'f';
+         if (i < 4)
+           *cp++ = i + 2 + '0';
+         else
+           {
+             *cp++ = (i + 2) / 10 + 1 + '0';
+             *cp++ = (i + 2) % 10 + '0';
+           }
+         sep = 1;
        }
       mask >>= 1;
     }
+  *cp = '\0';
 }
 
 static void
 unw_print_abreg (cp, abreg)
      char * cp;
-     unsigned char abreg;
+     unsigned int abreg;
 {
   static const char *special_reg[16] =
   {
@@ -128,8 +149,8 @@ unw_print_abreg (cp, abreg)
 static void
 unw_print_xyreg (cp, x, ytreg)
      char *        cp;
-     unsigned char x;
-     unsigned char ytreg;
+     unsigned int x;
+     unsigned int ytreg;
 {
   switch ((x << 1) | ((ytreg >> 7) & 1))
     {
@@ -469,7 +490,7 @@ typedef bfd_vma unw_word;
  * macros/constants before including this file:
  *
  *  Types:
- *     unw_word        Unsigned integer type with at least 64 bits 
+ *     unw_word        Unsigned integer type with at least 64 bits
  *
  *  Register names:
  *     UNW_REG_BSP
@@ -522,33 +543,33 @@ typedef bfd_vma unw_word;
 
 static unw_word unw_decode_uleb128 PARAMS ((const unsigned char **));
 static const unsigned char *unw_decode_x1 PARAMS ((const unsigned char *,
-                                                  unsigned char, void *));
+                                                  unsigned int, void *));
 static const unsigned char *unw_decode_x2 PARAMS ((const unsigned char *,
-                                                  unsigned char, void *));
+                                                  unsigned int, void *));
 static const unsigned char *unw_decode_x3 PARAMS ((const unsigned char *,
-                                                  unsigned char, void *));
+                                                  unsigned int, void *));
 static const unsigned char *unw_decode_x4 PARAMS ((const unsigned char *,
-                                                  unsigned char, void *));
+                                                  unsigned int, void *));
 static const unsigned char *unw_decode_r1 PARAMS ((const unsigned char *,
-                                                  unsigned char, void *));
+                                                  unsigned int, void *));
 static const unsigned char *unw_decode_r2 PARAMS ((const unsigned char *,
-                                                  unsigned char, void *));
+                                                  unsigned int, void *));
 static const unsigned char *unw_decode_r3 PARAMS ((const unsigned char *,
-                                                  unsigned char, void *));
+                                                  unsigned int, void *));
 static const unsigned char *unw_decode_p1 PARAMS ((const unsigned char *,
-                                                  unsigned char, void *));
+                                                  unsigned int, void *));
 static const unsigned char *unw_decode_p2_p5 PARAMS ((const unsigned char *,
-                                                     unsigned char, void *));
+                                                     unsigned int, void *));
 static const unsigned char *unw_decode_p6 PARAMS ((const unsigned char *,
-                                                  unsigned char, void *));
+                                                  unsigned int, void *));
 static const unsigned char *unw_decode_p7_p10 PARAMS ((const unsigned char *,
-                                                      unsigned char, void *));
+                                                      unsigned int, void *));
 static const unsigned char *unw_decode_b1 PARAMS ((const unsigned char *,
-                                                  unsigned char, void *));
+                                                  unsigned int, void *));
 static const unsigned char *unw_decode_b2 PARAMS ((const unsigned char *,
-                                                  unsigned char, void *));
+                                                  unsigned int, void *));
 static const unsigned char *unw_decode_b3_x4 PARAMS ((const unsigned char *,
-                                                     unsigned char, void *));
+                                                     unsigned int, void *));
 
 static unw_word
 unw_decode_uleb128 (dpp)
@@ -577,7 +598,7 @@ unw_decode_uleb128 (dpp)
 static const unsigned char *
 unw_decode_x1 (dp, code, arg)
      const unsigned char * dp;
-     unsigned char         code;
+     unsigned int         code ATTRIBUTE_UNUSED;
      void *                arg ATTRIBUTE_UNUSED;
 {
   unsigned char byte1, abreg;
@@ -597,7 +618,7 @@ unw_decode_x1 (dp, code, arg)
 static const unsigned char *
 unw_decode_x2 (dp, code, arg)
      const unsigned char * dp;
-     unsigned char         code;
+     unsigned int         code ATTRIBUTE_UNUSED;
      void *                arg ATTRIBUTE_UNUSED;
 {
   unsigned char byte1, byte2, abreg, x, ytreg;
@@ -619,7 +640,7 @@ unw_decode_x2 (dp, code, arg)
 static const unsigned char *
 unw_decode_x3 (dp, code, arg)
      const unsigned char * dp;
-     unsigned char         code;
+     unsigned int         code ATTRIBUTE_UNUSED;
      void *                arg ATTRIBUTE_UNUSED;
 {
   unsigned char byte1, byte2, abreg, qp;
@@ -643,7 +664,7 @@ unw_decode_x3 (dp, code, arg)
 static const unsigned char *
 unw_decode_x4 (dp, code, arg)
      const unsigned char * dp;
-     unsigned char         code;
+     unsigned int         code ATTRIBUTE_UNUSED;
      void *                arg ATTRIBUTE_UNUSED;
 {
   unsigned char byte1, byte2, byte3, qp, abreg, x, ytreg;
@@ -669,7 +690,7 @@ unw_decode_x4 (dp, code, arg)
 static const unsigned char *
 unw_decode_r1 (dp, code, arg)
      const unsigned char *dp;
-     unsigned char code;
+     unsigned int code;
      void *arg;
 {
   int body = (code & 0x20) != 0;
@@ -683,7 +704,7 @@ unw_decode_r1 (dp, code, arg)
 static const unsigned char *
 unw_decode_r2 (dp, code, arg)
      const unsigned char *dp;
-     unsigned char code;
+     unsigned int code;
      void *arg;
 {
   unsigned char byte1, mask, grsave;
@@ -701,7 +722,7 @@ unw_decode_r2 (dp, code, arg)
 static const unsigned char *
 unw_decode_r3 (dp, code, arg)
      const unsigned char *dp;
-     unsigned char code;
+     unsigned int code;
      void *arg;
 {
   unw_word rlen;
@@ -714,7 +735,7 @@ unw_decode_r3 (dp, code, arg)
 static const unsigned char *
 unw_decode_p1 (dp, code, arg)
      const unsigned char * dp;
-     unsigned char         code;
+     unsigned int         code;
      void *                arg ATTRIBUTE_UNUSED;
 {
   unsigned char brmask = (code & 0x1f);
@@ -726,7 +747,7 @@ unw_decode_p1 (dp, code, arg)
 static const unsigned char *
 unw_decode_p2_p5 (dp, code, arg)
      const unsigned char * dp;
-     unsigned char         code;
+     unsigned int         code;
      void *                arg ATTRIBUTE_UNUSED;
 {
   if ((code & 0x10) == 0)
@@ -807,7 +828,7 @@ unw_decode_p2_p5 (dp, code, arg)
 static const unsigned char *
 unw_decode_p6 (dp, code, arg)
      const unsigned char * dp;
-     unsigned char         code;
+     unsigned int         code;
      void *                arg ATTRIBUTE_UNUSED;
 {
   int gregs = (code & 0x10) != 0;
@@ -823,7 +844,7 @@ unw_decode_p6 (dp, code, arg)
 static const unsigned char *
 unw_decode_p7_p10 (dp, code, arg)
      const unsigned char *dp;
-     unsigned char code;
+     unsigned int code;
      void *arg;
 {
   unsigned char r, byte1, byte2;
@@ -999,7 +1020,7 @@ unw_decode_p7_p10 (dp, code, arg)
 static const unsigned char *
 unw_decode_b1 (dp, code, arg)
      const unsigned char * dp;
-     unsigned char         code;
+     unsigned int         code;
      void *                arg ATTRIBUTE_UNUSED;
 {
   unw_word label = (code & 0x1f);
@@ -1014,7 +1035,7 @@ unw_decode_b1 (dp, code, arg)
 static const unsigned char *
 unw_decode_b2 (dp, code, arg)
      const unsigned char * dp;
-     unsigned char         code;
+     unsigned int         code;
      void *                arg ATTRIBUTE_UNUSED;
 {
   unw_word t;
@@ -1027,7 +1048,7 @@ unw_decode_b2 (dp, code, arg)
 static const unsigned char *
 unw_decode_b3_x4 (dp, code, arg)
      const unsigned char *dp;
-     unsigned char code;
+     unsigned int code;
      void *arg;
 {
   unw_word t, ecount, label;
@@ -1065,7 +1086,7 @@ unw_decode_b3_x4 (dp, code, arg)
 }
 
 typedef const unsigned char *(*unw_decoder)
-     PARAMS ((const unsigned char *, unsigned char, void *));
+     PARAMS ((const unsigned char *, unsigned int, void *));
 
 static unw_decoder unw_decode_table[2][8] =
   {