Back to index

cell-binutils  2.17cvs20070401
Defines | Typedefs | Functions | Variables
unwind-ia64.c File Reference
#include "unwind-ia64.h"
#include <stdio.h>
#include <string.h>
#include "bfd.h"

Go to the source code of this file.

Defines

#define UNW_REG_BSP   "bsp"
#define UNW_REG_BSPSTORE   "bspstore"
#define UNW_REG_FPSR   "fpsr"
#define UNW_REG_LC   "lc"
#define UNW_REG_PFS   "pfs"
#define UNW_REG_PR   "pr"
#define UNW_REG_PSP   "psp"
#define UNW_REG_RNAT   "rnat"
#define UNW_REG_RP   "rp"
#define UNW_REG_UNAT   "unat"
#define UNW_DEC_BAD_CODE(code)   printf ("Unknown code 0x%02x\n", code)
#define UNW_DEC_PROLOGUE(fmt, body, rlen, arg)
#define UNW_DEC_PROLOGUE_GR(fmt, rlen, mask, grsave, arg)
#define UNW_DEC_FR_MEM(fmt, frmask, arg)
#define UNW_DEC_GR_MEM(fmt, grmask, arg)
#define UNW_DEC_FRGR_MEM(fmt, grmask, frmask, arg)
#define UNW_DEC_BR_MEM(fmt, brmask, arg)
#define UNW_DEC_BR_GR(fmt, brmask, gr, arg)
#define UNW_DEC_REG_GR(fmt, src, dst, arg)   printf ("\t%s:%s_gr(reg=r%u)\n", fmt, src, dst)
#define UNW_DEC_RP_BR(fmt, dst, arg)   printf ("\t%s:rp_br(reg=b%u)\n", fmt, dst)
#define UNW_DEC_REG_WHEN(fmt, reg, t, arg)   printf ("\t%s:%s_when(t=%lu)\n", fmt, reg, (unsigned long) t)
#define UNW_DEC_REG_SPREL(fmt, reg, spoff, arg)
#define UNW_DEC_REG_PSPREL(fmt, reg, pspoff, arg)
#define UNW_DEC_GR_GR(fmt, grmask, gr, arg)
#define UNW_DEC_ABI(fmt, abi, context, arg)
#define UNW_DEC_PRIUNAT_GR(fmt, r, arg)   printf ("\t%s:priunat_gr(reg=r%u)\n", fmt, r)
#define UNW_DEC_PRIUNAT_WHEN_GR(fmt, t, arg)   printf ("\t%s:priunat_when_gr(t=%lu)\n", fmt, (unsigned long) t)
#define UNW_DEC_PRIUNAT_WHEN_MEM(fmt, t, arg)   printf ("\t%s:priunat_when_mem(t=%lu)\n", fmt, (unsigned long) t)
#define UNW_DEC_PRIUNAT_PSPREL(fmt, pspoff, arg)
#define UNW_DEC_PRIUNAT_SPREL(fmt, spoff, arg)
#define UNW_DEC_MEM_STACK_F(fmt, t, size, arg)
#define UNW_DEC_MEM_STACK_V(fmt, t, arg)   printf ("\t%s:mem_stack_v(t=%lu)\n", fmt, (unsigned long) t)
#define UNW_DEC_SPILL_BASE(fmt, pspoff, arg)
#define UNW_DEC_SPILL_MASK(fmt, dp, arg)
#define UNW_DEC_SPILL_SPREL(fmt, t, abreg, spoff, arg)
#define UNW_DEC_SPILL_PSPREL(fmt, t, abreg, pspoff, arg)
#define UNW_DEC_RESTORE(fmt, t, abreg, arg)
#define UNW_DEC_SPILL_REG(fmt, t, abreg, x, ytreg, arg)
#define UNW_DEC_SPILL_SPREL_P(fmt, qp, t, abreg, spoff, arg)
#define UNW_DEC_SPILL_PSPREL_P(fmt, qp, t, abreg, pspoff, arg)
#define UNW_DEC_RESTORE_P(fmt, qp, t, abreg, arg)
#define UNW_DEC_SPILL_REG_P(fmt, qp, t, abreg, x, ytreg, arg)
#define UNW_DEC_LABEL_STATE(fmt, label, arg)   printf ("\t%s:label_state(label=%lu)\n", fmt, (unsigned long) label)
#define UNW_DEC_COPY_STATE(fmt, label, arg)   printf ("\t%s:copy_state(label=%lu)\n", fmt, (unsigned long) label)
#define UNW_DEC_EPILOGUE(fmt, t, ecount, arg)

Typedefs

typedef bfd_vma unw_word
typedef const unsigned char *(* unw_decoder )(const unsigned char *, unsigned int, void *)

Functions

static void unw_print_brmask (char *, unsigned int)
static void unw_print_grmask (char *, unsigned int)
static void unw_print_frmask (char *, unsigned int)
static void unw_print_abreg (char *, unsigned int)
static void unw_print_xyreg (char *, unsigned int, unsigned int)
static unw_word unw_decode_uleb128 (const unsigned char **)
static const unsigned char * unw_decode_x1 (const unsigned char *, unsigned int, void *)
static const unsigned char * unw_decode_x2 (const unsigned char *, unsigned int, void *)
static const unsigned char * unw_decode_x3 (const unsigned char *, unsigned int, void *)
static const unsigned char * unw_decode_x4 (const unsigned char *, unsigned int, void *)
static const unsigned char * unw_decode_r1 (const unsigned char *, unsigned int, void *)
static const unsigned char * unw_decode_r2 (const unsigned char *, unsigned int, void *)
static const unsigned char * unw_decode_r3 (const unsigned char *, unsigned int, void *)
static const unsigned char * unw_decode_p1 (const unsigned char *, unsigned int, void *)
static const unsigned char * unw_decode_p2_p5 (const unsigned char *, unsigned int, void *)
static const unsigned char * unw_decode_p6 (const unsigned char *, unsigned int, void *)
static const unsigned char * unw_decode_p7_p10 (const unsigned char *, unsigned int, void *)
static const unsigned char * unw_decode_b1 (const unsigned char *, unsigned int, void *)
static const unsigned char * unw_decode_b2 (const unsigned char *, unsigned int, void *)
static const unsigned char * unw_decode_b3_x4 (const unsigned char *, unsigned int, void *)
static const unsigned char * unw_decode_x1 (const unsigned char *dp, unsigned int code ATTRIBUTE_UNUSED, void *arg ATTRIBUTE_UNUSED)
static const unsigned char * unw_decode_x2 (const unsigned char *dp, unsigned int code ATTRIBUTE_UNUSED, void *arg ATTRIBUTE_UNUSED)
static const unsigned char * unw_decode_x3 (const unsigned char *dp, unsigned int code ATTRIBUTE_UNUSED, void *arg ATTRIBUTE_UNUSED)
static const unsigned char * unw_decode_x4 (const unsigned char *dp, unsigned int code ATTRIBUTE_UNUSED, void *arg ATTRIBUTE_UNUSED)
static const unsigned char * unw_decode_p1 (const unsigned char *dp, unsigned int code, void *arg ATTRIBUTE_UNUSED)
static const unsigned char * unw_decode_p2_p5 (const unsigned char *dp, unsigned int code, void *arg ATTRIBUTE_UNUSED)
static const unsigned char * unw_decode_p6 (const unsigned char *dp, unsigned int code, void *arg ATTRIBUTE_UNUSED)
static const unsigned char * unw_decode_b1 (const unsigned char *dp, unsigned int code, void *arg ATTRIBUTE_UNUSED)
static const unsigned char * unw_decode_b2 (const unsigned char *dp, unsigned int code, void *arg ATTRIBUTE_UNUSED)
const unsigned char * unw_decode (const unsigned char *dp, int inside_body, void *ptr_inside_body)

Variables

static bfd_vma unw_rlen = 0
static unw_decoder unw_decode_table [2][8]

Define Documentation

#define UNW_DEC_ABI (   fmt,
  abi,
  context,
  arg 
)
Value:
do                                                      \
    {                                                   \
      static const char *abiname[] =                           \
      {                                                        \
       "@svr4", "@hpux", "@nt"                                 \
      };                                                \
      char buf[20];                                     \
      const char *abistr = buf;                                \
								\
      if (abi < 3)                                      \
       abistr = abiname[abi];                                  \
      else                                              \
       sprintf (buf, "0x%x", abi);                      \
      printf ("\t%s:unwabi(abi=%s,context=0x%02x)\n",          \
             fmt, abistr, context);                            \
    }                                                   \
  while (0)

Definition at line 302 of file unwind-ia64.c.

#define UNW_DEC_BAD_CODE (   code)    printf ("Unknown code 0x%02x\n", code)

Definition at line 173 of file unwind-ia64.c.

#define UNW_DEC_BR_GR (   fmt,
  brmask,
  gr,
  arg 
)
Value:
do                                                             \
    {                                                          \
      char brstr[20];                                                 \
									\
      unw_print_brmask (brstr, brmask);                               \
      printf ("\t%s:br_gr(brmask=[%s],gr=r%u)\n", fmt, brstr, gr);    \
    }                                                          \
  while (0)

Definition at line 265 of file unwind-ia64.c.

#define UNW_DEC_BR_MEM (   fmt,
  brmask,
  arg 
)
Value:
do                                                             \
    {                                                          \
      char brstr[20];                                                 \
									\
      unw_print_brmask (brstr, brmask);                               \
      printf ("\t%s:br_mem(brmask=[%s])\n", fmt, brstr);              \
    }                                                          \
  while (0)

Definition at line 255 of file unwind-ia64.c.

#define UNW_DEC_COPY_STATE (   fmt,
  label,
  arg 
)    printf ("\t%s:copy_state(label=%lu)\n", fmt, (unsigned long) label)

Definition at line 464 of file unwind-ia64.c.

#define UNW_DEC_EPILOGUE (   fmt,
  t,
  ecount,
  arg 
)
Value:
printf ("\t%s:epilogue(t=%lu,ecount=%lu)\n",            \
         fmt, (unsigned long) t, (unsigned long) ecount)

Definition at line 467 of file unwind-ia64.c.

#define UNW_DEC_FR_MEM (   fmt,
  frmask,
  arg 
)
Value:
do                                                      \
    {                                                   \
      char frstr[200];                                         \
								\
      unw_print_frmask (frstr, frmask);                        \
      printf ("\t%s:fr_mem(frmask=[%s])\n", fmt, frstr);       \
    }                                                   \
  while (0)

Definition at line 224 of file unwind-ia64.c.

#define UNW_DEC_FRGR_MEM (   fmt,
  grmask,
  frmask,
  arg 
)
Value:
do                                                                    \
    {                                                                 \
      char frstr[200], grstr[20];                                     \
										\
      unw_print_grmask (grstr, grmask);                                      \
      unw_print_frmask (frstr, frmask);                                      \
      printf ("\t%s:frgr_mem(grmask=[%s],frmask=[%s])\n", fmt, grstr, frstr);       \
    }                                                                 \
  while (0)

Definition at line 244 of file unwind-ia64.c.

#define UNW_DEC_GR_GR (   fmt,
  grmask,
  gr,
  arg 
)
Value:
do                                                             \
    {                                                          \
      char grstr[20];                                                 \
									\
      unw_print_grmask (grstr, grmask);                               \
      printf ("\t%s:gr_gr(grmask=[%s],r%u)\n", fmt, grstr, gr);              \
    }                                                          \
  while (0)

Definition at line 292 of file unwind-ia64.c.

#define UNW_DEC_GR_MEM (   fmt,
  grmask,
  arg 
)
Value:
do                                                      \
    {                                                   \
      char grstr[200];                                         \
								\
      unw_print_grmask (grstr, grmask);                        \
      printf ("\t%s:gr_mem(grmask=[%s])\n", fmt, grstr);       \
    }                                                   \
  while (0)

Definition at line 234 of file unwind-ia64.c.

#define UNW_DEC_LABEL_STATE (   fmt,
  label,
  arg 
)    printf ("\t%s:label_state(label=%lu)\n", fmt, (unsigned long) label)

Definition at line 461 of file unwind-ia64.c.

#define UNW_DEC_MEM_STACK_F (   fmt,
  t,
  size,
  arg 
)
Value:
printf ("\t%s:mem_stack_f(t=%lu,size=%lu)\n",           \
         fmt, (unsigned long) t, 16*(unsigned long)size)

Definition at line 338 of file unwind-ia64.c.

#define UNW_DEC_MEM_STACK_V (   fmt,
  t,
  arg 
)    printf ("\t%s:mem_stack_v(t=%lu)\n", fmt, (unsigned long) t)

Definition at line 342 of file unwind-ia64.c.

#define UNW_DEC_PRIUNAT_GR (   fmt,
  r,
  arg 
)    printf ("\t%s:priunat_gr(reg=r%u)\n", fmt, r)

Definition at line 321 of file unwind-ia64.c.

#define UNW_DEC_PRIUNAT_PSPREL (   fmt,
  pspoff,
  arg 
)
Value:
printf ("\t%s:priunat_psprel(pspoff=0x10-0x%lx)\n",            \
         fmt, 4*(unsigned long)pspoff)

Definition at line 330 of file unwind-ia64.c.

#define UNW_DEC_PRIUNAT_SPREL (   fmt,
  spoff,
  arg 
)
Value:
printf ("\t%s:priunat_sprel(spoff=0x%lx)\n",            \
         fmt, 4*(unsigned long)spoff)

Definition at line 334 of file unwind-ia64.c.

#define UNW_DEC_PRIUNAT_WHEN_GR (   fmt,
  t,
  arg 
)    printf ("\t%s:priunat_when_gr(t=%lu)\n", fmt, (unsigned long) t)

Definition at line 324 of file unwind-ia64.c.

#define UNW_DEC_PRIUNAT_WHEN_MEM (   fmt,
  t,
  arg 
)    printf ("\t%s:priunat_when_mem(t=%lu)\n", fmt, (unsigned long) t)

Definition at line 327 of file unwind-ia64.c.

#define UNW_DEC_PROLOGUE (   fmt,
  body,
  rlen,
  arg 
)
Value:
do                                                                    \
    {                                                                 \
      unw_rlen = rlen;                                                       \
      *(int *)arg = body;                                             \
      printf ("    %s:%s(rlen=%lu)\n",                                       \
             fmt, body ? "body" : "prologue", (unsigned long) rlen);         \
    }                                                                 \
  while (0)

Definition at line 176 of file unwind-ia64.c.

#define UNW_DEC_PROLOGUE_GR (   fmt,
  rlen,
  mask,
  grsave,
  arg 
)

Definition at line 186 of file unwind-ia64.c.

#define UNW_DEC_REG_GR (   fmt,
  src,
  dst,
  arg 
)    printf ("\t%s:%s_gr(reg=r%u)\n", fmt, src, dst)

Definition at line 275 of file unwind-ia64.c.

#define UNW_DEC_REG_PSPREL (   fmt,
  reg,
  pspoff,
  arg 
)
Value:
printf ("\t%s:%s_psprel(pspoff=0x10-0x%lx)\n",          \
         fmt, reg, 4*(unsigned long)pspoff)

Definition at line 288 of file unwind-ia64.c.

#define UNW_DEC_REG_SPREL (   fmt,
  reg,
  spoff,
  arg 
)
Value:
printf ("\t%s:%s_sprel(spoff=0x%lx)\n",          \
         fmt, reg, 4*(unsigned long)spoff)

Definition at line 284 of file unwind-ia64.c.

#define UNW_DEC_REG_WHEN (   fmt,
  reg,
  t,
  arg 
)    printf ("\t%s:%s_when(t=%lu)\n", fmt, reg, (unsigned long) t)

Definition at line 281 of file unwind-ia64.c.

#define UNW_DEC_RESTORE (   fmt,
  t,
  abreg,
  arg 
)
Value:
do                                                      \
    {                                                   \
      char regname[20];                                        \
								\
      unw_print_abreg (regname, abreg);                        \
      printf ("\t%s:restore(t=%lu,reg=%s)\n",                  \
             fmt, (unsigned long) t, regname);                 \
    }                                                   \
  while (0)

Definition at line 393 of file unwind-ia64.c.

#define UNW_DEC_RESTORE_P (   fmt,
  qp,
  t,
  abreg,
  arg 
)
Value:
do                                                             \
    {                                                          \
      char regname[20];                                               \
									\
      unw_print_abreg (regname, abreg);                               \
      printf ("\t%s:restore_p(qp=p%u,t=%lu,reg=%s)\n",                \
             fmt, qp, (unsigned long) t, regname);                    \
    }                                                          \
  while (0)

Definition at line 438 of file unwind-ia64.c.

#define UNW_DEC_RP_BR (   fmt,
  dst,
  arg 
)    printf ("\t%s:rp_br(reg=b%u)\n", fmt, dst)

Definition at line 278 of file unwind-ia64.c.

#define UNW_DEC_SPILL_BASE (   fmt,
  pspoff,
  arg 
)
Value:
printf ("\t%s:spill_base(pspoff=0x10-0x%lx)\n",         \
         fmt, 4*(unsigned long)pspoff)

Definition at line 345 of file unwind-ia64.c.

#define UNW_DEC_SPILL_MASK (   fmt,
  dp,
  arg 
)
Value:
do                                                                    \
    {                                                                 \
      static const char *spill_type = "-frb";                                \
      unsigned const char *imaskp = dp;                               \
      unsigned char mask = 0;                                                \
      bfd_vma insn = 0;                                                      \
										\
      printf ("\t%s:spill_mask(imask=[", fmt);                               \
      for (insn = 0; insn < unw_rlen; ++insn)                                \
       {                                                              \
         if ((insn % 4) == 0)                                                \
           mask = *imaskp++;                                                 \
         if (insn > 0 && (insn % 3) == 0)                             \
           putchar (',');                                             \
         putchar (spill_type[(mask >> (2 * (3 - (insn & 0x3)))) & 0x3]);     \
       }                                                              \
      printf ("])\n");                                                       \
      dp = imaskp;                                                    \
    }                                                                 \
  while (0)

Definition at line 349 of file unwind-ia64.c.

#define UNW_DEC_SPILL_PSPREL (   fmt,
  t,
  abreg,
  pspoff,
  arg 
)
Value:
do                                                                    \
    {                                                                 \
      char regname[20];                                                      \
										\
      unw_print_abreg (regname, abreg);                                      \
      printf ("\t%s:spill_psprel(reg=%s,t=%lu,pspoff=0x10-0x%lx)\n",         \
             fmt, regname, (unsigned long) t, 4*(unsigned long)pspoff);      \
    }                                                                 \
  while (0)

Definition at line 382 of file unwind-ia64.c.

#define UNW_DEC_SPILL_PSPREL_P (   fmt,
  qp,
  t,
  abreg,
  pspoff,
  arg 
)
Value:
do                                                             \
    {                                                          \
      char regname[20];                                               \
									\
      unw_print_abreg (regname, abreg);                               \
      printf ("\t%s:spill_psprel_p(qp=p%u,t=%lu,reg=%s,pspoff=0x10-0x%lx)\n",\
             fmt, qp, (unsigned long) t, regname, 4*(unsigned long)pspoff);\
    }                                                          \
  while (0)

Definition at line 427 of file unwind-ia64.c.

#define UNW_DEC_SPILL_REG (   fmt,
  t,
  abreg,
  x,
  ytreg,
  arg 
)
Value:
do                                                      \
    {                                                   \
      char abregname[20], tregname[20];                        \
								\
      unw_print_abreg (abregname, abreg);               \
      unw_print_xyreg (tregname, x, ytreg);                    \
      printf ("\t%s:spill_reg(t=%lu,reg=%s,treg=%s)\n",        \
             fmt, (unsigned long) t, abregname, tregname);     \
    }                                                   \
  while (0)

Definition at line 404 of file unwind-ia64.c.

#define UNW_DEC_SPILL_REG_P (   fmt,
  qp,
  t,
  abreg,
  x,
  ytreg,
  arg 
)
Value:
do                                                             \
    {                                                          \
      char regname[20], tregname[20];                                 \
									\
      unw_print_abreg (regname, abreg);                               \
      unw_print_xyreg (tregname, x, ytreg);                           \
      printf ("\t%s:spill_reg_p(qp=p%u,t=%lu,reg=%s,treg=%s)\n",      \
             fmt, qp, (unsigned long) t, regname, tregname);          \
    }                                                          \
  while (0)

Definition at line 449 of file unwind-ia64.c.

#define UNW_DEC_SPILL_SPREL (   fmt,
  t,
  abreg,
  spoff,
  arg 
)
Value:
do                                                                    \
    {                                                                 \
      char regname[20];                                                      \
										\
      unw_print_abreg (regname, abreg);                                      \
      printf ("\t%s:spill_sprel(reg=%s,t=%lu,spoff=0x%lx)\n",                \
             fmt, regname, (unsigned long) t, 4*(unsigned long)off);         \
    }                                                                 \
  while (0)

Definition at line 371 of file unwind-ia64.c.

#define UNW_DEC_SPILL_SPREL_P (   fmt,
  qp,
  t,
  abreg,
  spoff,
  arg 
)
Value:
do                                                                        \
    {                                                                     \
      char regname[20];                                                          \
										    \
      unw_print_abreg (regname, abreg);                                          \
      printf ("\t%s:spill_sprel_p(qp=p%u,t=%lu,reg=%s,spoff=0x%lx)\n",                  \
             fmt, qp, (unsigned long) t, regname, 4 * (unsigned long)spoff);     \
    }                                                                     \
  while (0)

Definition at line 416 of file unwind-ia64.c.

#define UNW_REG_BSP   "bsp"

Definition at line 160 of file unwind-ia64.c.

#define UNW_REG_BSPSTORE   "bspstore"

Definition at line 161 of file unwind-ia64.c.

#define UNW_REG_FPSR   "fpsr"

Definition at line 162 of file unwind-ia64.c.

#define UNW_REG_LC   "lc"

Definition at line 163 of file unwind-ia64.c.

#define UNW_REG_PFS   "pfs"

Definition at line 164 of file unwind-ia64.c.

#define UNW_REG_PR   "pr"

Definition at line 165 of file unwind-ia64.c.

#define UNW_REG_PSP   "psp"

Definition at line 166 of file unwind-ia64.c.

#define UNW_REG_RNAT   "rnat"

Definition at line 167 of file unwind-ia64.c.

#define UNW_REG_RP   "rp"

Definition at line 168 of file unwind-ia64.c.

#define UNW_REG_UNAT   "unat"

Definition at line 169 of file unwind-ia64.c.


Typedef Documentation

typedef const unsigned char*(* unw_decoder)(const unsigned char *, unsigned int, void *)

Definition at line 1044 of file unwind-ia64.c.

typedef bfd_vma unw_word

Definition at line 171 of file unwind-ia64.c.


Function Documentation

const unsigned char* unw_decode ( const unsigned char *  dp,
int  inside_body,
void *  ptr_inside_body 
)

Definition at line 1073 of file unwind-ia64.c.

{
  unw_decoder decoder;
  unsigned char code;

  code = *dp++;
  decoder = unw_decode_table[inside_body][code >> 5];
  return (*decoder) (dp, code, ptr_inside_body);
}

Here is the caller graph for this function:

static const unsigned char* unw_decode_b1 ( const unsigned char *  ,
unsigned  int,
void *   
) [static]
static const unsigned char* unw_decode_b1 ( const unsigned char *  dp,
unsigned int  code,
void *arg  ATTRIBUTE_UNUSED 
) [static]

Definition at line 983 of file unwind-ia64.c.

{
  unw_word label = (code & 0x1f);

  if ((code & 0x20) != 0)
    UNW_DEC_COPY_STATE ("B1", label, arg);
  else
    UNW_DEC_LABEL_STATE ("B1", label, arg);
  return dp;
}
static const unsigned char* unw_decode_b2 ( const unsigned char *  ,
unsigned  int,
void *   
) [static]
static const unsigned char* unw_decode_b2 ( const unsigned char *  dp,
unsigned int  code,
void *arg  ATTRIBUTE_UNUSED 
) [static]

Definition at line 996 of file unwind-ia64.c.

{
  unw_word t;

  t = unw_decode_uleb128 (& dp);
  UNW_DEC_EPILOGUE ("B2", t, (code & 0x1f), arg);
  return dp;
}

Here is the call graph for this function:

static const unsigned char * unw_decode_b3_x4 ( const unsigned char *  dp,
unsigned int  code,
void *  arg 
) [static]

Definition at line 1007 of file unwind-ia64.c.

{
  unw_word t, ecount, label;

  if ((code & 0x10) == 0)
    {
      t = unw_decode_uleb128 (&dp);
      ecount = unw_decode_uleb128 (&dp);
      UNW_DEC_EPILOGUE ("B3", t, ecount, arg);
    }
  else if ((code & 0x07) == 0)
    {
      label = unw_decode_uleb128 (&dp);
      if ((code & 0x08) != 0)
       UNW_DEC_COPY_STATE ("B4", label, arg);
      else
       UNW_DEC_LABEL_STATE ("B4", label, arg);
    }
  else
    switch (code & 0x7)
      {
      case 1:
       return unw_decode_x1 (dp, code, arg);
      case 2:
       return unw_decode_x2 (dp, code, arg);
      case 3:
       return unw_decode_x3 (dp, code, arg);
      case 4:
       return unw_decode_x4 (dp, code, arg);
      default:
       UNW_DEC_BAD_CODE (code);
       break;
      }
  return dp;
}

Here is the call graph for this function:

static const unsigned char* unw_decode_p1 ( const unsigned char *  ,
unsigned  int,
void *   
) [static]
static const unsigned char* unw_decode_p1 ( const unsigned char *  dp,
unsigned int  code,
void *arg  ATTRIBUTE_UNUSED 
) [static]

Definition at line 707 of file unwind-ia64.c.

{
  unsigned char brmask = (code & 0x1f);

  UNW_DEC_BR_MEM ("P1", brmask, arg);
  return dp;
}
static const unsigned char* unw_decode_p2_p5 ( const unsigned char *  ,
unsigned  int,
void *   
) [static]
static const unsigned char* unw_decode_p2_p5 ( const unsigned char *  dp,
unsigned int  code,
void *arg  ATTRIBUTE_UNUSED 
) [static]

Definition at line 717 of file unwind-ia64.c.

{
  if ((code & 0x10) == 0)
    {
      unsigned char byte1 = *dp++;

      UNW_DEC_BR_GR ("P2", ((code & 0xf) << 1) | ((byte1 >> 7) & 1),
                   (byte1 & 0x7f), arg);
    }
  else if ((code & 0x08) == 0)
    {
      unsigned char byte1 = *dp++, r, dst;

      r = ((code & 0x7) << 1) | ((byte1 >> 7) & 1);
      dst = (byte1 & 0x7f);
      switch (r)
       {
       case 0:
         UNW_DEC_REG_GR ("P3", UNW_REG_PSP, dst, arg);
         break;
       case 1:
         UNW_DEC_REG_GR ("P3", UNW_REG_RP, dst, arg);
         break;
       case 2:
         UNW_DEC_REG_GR ("P3", UNW_REG_PFS, dst, arg);
         break;
       case 3:
         UNW_DEC_REG_GR ("P3", UNW_REG_PR, dst, arg);
         break;
       case 4:
         UNW_DEC_REG_GR ("P3", UNW_REG_UNAT, dst, arg);
         break;
       case 5:
         UNW_DEC_REG_GR ("P3", UNW_REG_LC, dst, arg);
         break;
       case 6:
         UNW_DEC_RP_BR ("P3", dst, arg);
         break;
       case 7:
         UNW_DEC_REG_GR ("P3", UNW_REG_RNAT, dst, arg);
         break;
       case 8:
         UNW_DEC_REG_GR ("P3", UNW_REG_BSP, dst, arg);
         break;
       case 9:
         UNW_DEC_REG_GR ("P3", UNW_REG_BSPSTORE, dst, arg);
         break;
       case 10:
         UNW_DEC_REG_GR ("P3", UNW_REG_FPSR, dst, arg);
         break;
       case 11:
         UNW_DEC_PRIUNAT_GR ("P3", dst, arg);
         break;
       default:
         UNW_DEC_BAD_CODE (r);
         break;
       }
    }
  else if ((code & 0x7) == 0)
    UNW_DEC_SPILL_MASK ("P4", dp, arg);
  else if ((code & 0x7) == 1)
    {
      unw_word grmask, frmask, byte1, byte2, byte3;

      byte1 = *dp++;
      byte2 = *dp++;
      byte3 = *dp++;
      grmask = ((byte1 >> 4) & 0xf);
      frmask = ((byte1 & 0xf) << 16) | (byte2 << 8) | byte3;
      UNW_DEC_FRGR_MEM ("P5", grmask, frmask, arg);
    }
  else
    UNW_DEC_BAD_CODE (code);

  return dp;
}
static const unsigned char* unw_decode_p6 ( const unsigned char *  ,
unsigned  int,
void *   
) [static]
static const unsigned char* unw_decode_p6 ( const unsigned char *  dp,
unsigned int  code,
void *arg  ATTRIBUTE_UNUSED 
) [static]

Definition at line 796 of file unwind-ia64.c.

{
  int gregs = (code & 0x10) != 0;
  unsigned char mask = (code & 0x0f);

  if (gregs)
    UNW_DEC_GR_MEM ("P6", mask, arg);
  else
    UNW_DEC_FR_MEM ("P6", mask, arg);
  return dp;
}
static const unsigned char * unw_decode_p7_p10 ( const unsigned char *  dp,
unsigned int  code,
void *  arg 
) [static]

Definition at line 810 of file unwind-ia64.c.

{
  unsigned char r, byte1, byte2;
  unw_word t, size;

  if ((code & 0x10) == 0)
    {
      r = (code & 0xf);
      t = unw_decode_uleb128 (&dp);
      switch (r)
       {
       case 0:
         size = unw_decode_uleb128 (&dp);
         UNW_DEC_MEM_STACK_F ("P7", t, size, arg);
         break;

       case 1:
         UNW_DEC_MEM_STACK_V ("P7", t, arg);
         break;
       case 2:
         UNW_DEC_SPILL_BASE ("P7", t, arg);
         break;
       case 3:
         UNW_DEC_REG_SPREL ("P7", UNW_REG_PSP, t, arg);
         break;
       case 4:
         UNW_DEC_REG_WHEN ("P7", UNW_REG_RP, t, arg);
         break;
       case 5:
         UNW_DEC_REG_PSPREL ("P7", UNW_REG_RP, t, arg);
         break;
       case 6:
         UNW_DEC_REG_WHEN ("P7", UNW_REG_PFS, t, arg);
         break;
       case 7:
         UNW_DEC_REG_PSPREL ("P7", UNW_REG_PFS, t, arg);
         break;
       case 8:
         UNW_DEC_REG_WHEN ("P7", UNW_REG_PR, t, arg);
         break;
       case 9:
         UNW_DEC_REG_PSPREL ("P7", UNW_REG_PR, t, arg);
         break;
       case 10:
         UNW_DEC_REG_WHEN ("P7", UNW_REG_LC, t, arg);
         break;
       case 11:
         UNW_DEC_REG_PSPREL ("P7", UNW_REG_LC, t, arg);
         break;
       case 12:
         UNW_DEC_REG_WHEN ("P7", UNW_REG_UNAT, t, arg);
         break;
       case 13:
         UNW_DEC_REG_PSPREL ("P7", UNW_REG_UNAT, t, arg);
         break;
       case 14:
         UNW_DEC_REG_WHEN ("P7", UNW_REG_FPSR, t, arg);
         break;
       case 15:
         UNW_DEC_REG_PSPREL ("P7", UNW_REG_FPSR, t, arg);
         break;
       default:
         UNW_DEC_BAD_CODE (r);
         break;
       }
    }
  else
    {
      switch (code & 0xf)
       {
       case 0x0:            /* p8 */
         {
           r = *dp++;
           t = unw_decode_uleb128 (&dp);
           switch (r)
             {
             case 1:
              UNW_DEC_REG_SPREL ("P8", UNW_REG_RP, t, arg);
              break;
             case 2:
              UNW_DEC_REG_SPREL ("P8", UNW_REG_PFS, t, arg);
              break;
             case 3:
              UNW_DEC_REG_SPREL ("P8", UNW_REG_PR, t, arg);
              break;
             case 4:
              UNW_DEC_REG_SPREL ("P8", UNW_REG_LC, t, arg);
              break;
             case 5:
              UNW_DEC_REG_SPREL ("P8", UNW_REG_UNAT, t, arg);
              break;
             case 6:
              UNW_DEC_REG_SPREL ("P8", UNW_REG_FPSR, t, arg);
              break;
             case 7:
              UNW_DEC_REG_WHEN ("P8", UNW_REG_BSP, t, arg);
              break;
             case 8:
              UNW_DEC_REG_PSPREL ("P8", UNW_REG_BSP, t, arg);
              break;
             case 9:
              UNW_DEC_REG_SPREL ("P8", UNW_REG_BSP, t, arg);
              break;
             case 10:
              UNW_DEC_REG_WHEN ("P8", UNW_REG_BSPSTORE, t, arg);
              break;
             case 11:
              UNW_DEC_REG_PSPREL ("P8", UNW_REG_BSPSTORE, t, arg);
              break;
             case 12:
              UNW_DEC_REG_SPREL ("P8", UNW_REG_BSPSTORE, t, arg);
              break;
             case 13:
              UNW_DEC_REG_WHEN ("P8", UNW_REG_RNAT, t, arg);
              break;
             case 14:
              UNW_DEC_REG_PSPREL ("P8", UNW_REG_RNAT, t, arg);
              break;
             case 15:
              UNW_DEC_REG_SPREL ("P8", UNW_REG_RNAT, t, arg);
              break;
             case 16:
              UNW_DEC_PRIUNAT_WHEN_GR ("P8", t, arg);
              break;
             case 17:
              UNW_DEC_PRIUNAT_PSPREL ("P8", t, arg);
              break;
             case 18:
              UNW_DEC_PRIUNAT_SPREL ("P8", t, arg);
              break;
             case 19:
              UNW_DEC_PRIUNAT_WHEN_MEM ("P8", t, arg);
              break;
             default:
              UNW_DEC_BAD_CODE (r);
              break;
             }
         }
         break;

       case 0x1:
         byte1 = *dp++;
         byte2 = *dp++;
         UNW_DEC_GR_GR ("P9", (byte1 & 0xf), (byte2 & 0x7f), arg);
         break;

       case 0xf:            /* p10 */
         byte1 = *dp++;
         byte2 = *dp++;
         UNW_DEC_ABI ("P10", byte1, byte2, arg);
         break;

       case 0x9:
         return unw_decode_x1 (dp, code, arg);

       case 0xa:
         return unw_decode_x2 (dp, code, arg);

       case 0xb:
         return unw_decode_x3 (dp, code, arg);

       case 0xc:
         return unw_decode_x4 (dp, code, arg);

       default:
         UNW_DEC_BAD_CODE (code);
         break;
       }
    }
  return dp;
}

Here is the call graph for this function:

static const unsigned char * unw_decode_r1 ( const unsigned char *  dp,
unsigned int  code,
void *  arg 
) [static]

Definition at line 671 of file unwind-ia64.c.

{
  int body = (code & 0x20) != 0;
  unw_word rlen;

  rlen = (code & 0x1f);
  UNW_DEC_PROLOGUE ("R1", body, rlen, arg);
  return dp;
}
static const unsigned char * unw_decode_r2 ( const unsigned char *  dp,
unsigned int  code,
void *  arg 
) [static]

Definition at line 682 of file unwind-ia64.c.

{
  unsigned char byte1, mask, grsave;
  unw_word rlen;

  byte1 = *dp++;

  mask = ((code & 0x7) << 1) | ((byte1 >> 7) & 1);
  grsave = (byte1 & 0x7f);
  rlen = unw_decode_uleb128 (& dp);
  UNW_DEC_PROLOGUE_GR ("R2", rlen, mask, grsave, arg);
  return dp;
}

Here is the call graph for this function:

static const unsigned char * unw_decode_r3 ( const unsigned char *  dp,
unsigned int  code,
void *  arg 
) [static]

Definition at line 697 of file unwind-ia64.c.

{
  unw_word rlen;

  rlen = unw_decode_uleb128 (& dp);
  UNW_DEC_PROLOGUE ("R3", ((code & 0x3) == 1), rlen, arg);
  return dp;
}

Here is the call graph for this function:

static unw_word unw_decode_uleb128 ( const unsigned char **  dpp) [static]

Definition at line 564 of file unwind-ia64.c.

{
  unsigned shift = 0;
  unw_word byte, result = 0;
  const unsigned char *bp = *dpp;

  while (1)
    {
      byte = *bp++;
      result |= (byte & 0x7f) << shift;

      if ((byte & 0x80) == 0)
       break;

      shift += 7;
    }

  *dpp = bp;

  return result;
}

Here is the caller graph for this function:

static const unsigned char* unw_decode_x1 ( const unsigned char *  ,
unsigned  int,
void *   
) [static]

Here is the caller graph for this function:

static const unsigned char* unw_decode_x1 ( const unsigned char *  dp,
unsigned int code  ATTRIBUTE_UNUSED,
void *arg  ATTRIBUTE_UNUSED 
) [static]

Definition at line 587 of file unwind-ia64.c.

{
  unsigned char byte1, abreg;
  unw_word t, off;

  byte1 = *dp++;
  t = unw_decode_uleb128 (&dp);
  off = unw_decode_uleb128 (&dp);
  abreg = (byte1 & 0x7f);
  if (byte1 & 0x80)
    UNW_DEC_SPILL_SPREL ("X1", t, abreg, off, arg);
  else
    UNW_DEC_SPILL_PSPREL ("X1", t, abreg, off, arg);
  return dp;
}

Here is the call graph for this function:

static const unsigned char* unw_decode_x2 ( const unsigned char *  ,
unsigned  int,
void *   
) [static]

Here is the caller graph for this function:

static const unsigned char* unw_decode_x2 ( const unsigned char *  dp,
unsigned int code  ATTRIBUTE_UNUSED,
void *arg  ATTRIBUTE_UNUSED 
) [static]

Definition at line 605 of file unwind-ia64.c.

{
  unsigned char byte1, byte2, abreg, x, ytreg;
  unw_word t;

  byte1 = *dp++;
  byte2 = *dp++;
  t = unw_decode_uleb128 (&dp);
  abreg = (byte1 & 0x7f);
  ytreg = byte2;
  x = (byte1 >> 7) & 1;
  if ((byte1 & 0x80) == 0 && ytreg == 0)
    UNW_DEC_RESTORE ("X2", t, abreg, arg);
  else
    UNW_DEC_SPILL_REG ("X2", t, abreg, x, ytreg, arg);
  return dp;
}

Here is the call graph for this function:

static const unsigned char* unw_decode_x3 ( const unsigned char *  ,
unsigned  int,
void *   
) [static]

Here is the caller graph for this function:

static const unsigned char* unw_decode_x3 ( const unsigned char *  dp,
unsigned int code  ATTRIBUTE_UNUSED,
void *arg  ATTRIBUTE_UNUSED 
) [static]

Definition at line 625 of file unwind-ia64.c.

{
  unsigned char byte1, byte2, abreg, qp;
  unw_word t, off;

  byte1 = *dp++;
  byte2 = *dp++;
  t = unw_decode_uleb128 (&dp);
  off = unw_decode_uleb128 (&dp);

  qp = (byte1 & 0x3f);
  abreg = (byte2 & 0x7f);

  if (byte1 & 0x80)
    UNW_DEC_SPILL_SPREL_P ("X3", qp, t, abreg, off, arg);
  else
    UNW_DEC_SPILL_PSPREL_P ("X3", qp, t, abreg, off, arg);
  return dp;
}

Here is the call graph for this function:

static const unsigned char* unw_decode_x4 ( const unsigned char *  ,
unsigned  int,
void *   
) [static]

Here is the caller graph for this function:

static const unsigned char* unw_decode_x4 ( const unsigned char *  dp,
unsigned int code  ATTRIBUTE_UNUSED,
void *arg  ATTRIBUTE_UNUSED 
) [static]

Definition at line 647 of file unwind-ia64.c.

{
  unsigned char byte1, byte2, byte3, qp, abreg, x, ytreg;
  unw_word t;

  byte1 = *dp++;
  byte2 = *dp++;
  byte3 = *dp++;
  t = unw_decode_uleb128 (&dp);

  qp = (byte1 & 0x3f);
  abreg = (byte2 & 0x7f);
  x = (byte2 >> 7) & 1;
  ytreg = byte3;

  if ((byte2 & 0x80) == 0 && byte3 == 0)
    UNW_DEC_RESTORE_P ("X4", qp, t, abreg, arg);
  else
    UNW_DEC_SPILL_REG_P ("X4", qp, t, abreg, x, ytreg, arg);
  return dp;
}

Here is the call graph for this function:

static void unw_print_abreg ( char *  cp,
unsigned int  abreg 
) [static]

Definition at line 112 of file unwind-ia64.c.

{
  static const char *special_reg[16] =
  {
    "pr", "psp", "@priunat", "rp", "ar.bsp", "ar.bspstore", "ar.rnat",
    "ar.unat", "ar.fpsr", "ar.pfs", "ar.lc",
    "Unknown11", "Unknown12", "Unknown13", "Unknown14", "Unknown15"
  };

  switch ((abreg >> 5) & 0x3)
    {
    case 0: /* gr */
      sprintf (cp, "r%u", (abreg & 0x1f));
      break;

    case 1: /* fr */
      sprintf (cp, "f%u", (abreg & 0x1f));
      break;

    case 2: /* br */
      sprintf (cp, "b%u", (abreg & 0x1f));
      break;

    case 3: /* special */
      strcpy (cp, special_reg[abreg & 0xf]);
      break;
    }
}
static void unw_print_brmask ( char *  cp,
unsigned int  mask 
) [static]

Definition at line 43 of file unwind-ia64.c.

{
  int sep = 0;
  int i;

  for (i = 0; mask && (i < 5); ++i)
    {
      if (mask & 1)
       {
         if (sep)
           *cp++ = ',';
         *cp++ = 'b';
         *cp++ = i + 1 + '0';
         sep = 1;
       }
      mask >>= 1;
    }
  *cp = '\0';
}
static void unw_print_frmask ( char *  cp,
unsigned int  mask 
) [static]

Definition at line 85 of file unwind-ia64.c.

{
  int sep = 0;
  int i;

  for (i = 0; i < 20; ++i)
    {
      if (mask & 1)
       {
         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_grmask ( char *  cp,
unsigned int  mask 
) [static]

Definition at line 64 of file unwind-ia64.c.

{
  int sep = 0;
  int i;

  for (i = 0; i < 4; ++i)
    {
      if (mask & 1)
       {
         if (sep)
           *cp++ = ',';
         *cp++ = 'r';
         *cp++ = i + 4 + '0';
         sep = 1;
       }
      mask >>= 1;
    }
  *cp = '\0';
}
static void unw_print_xyreg ( char *  cp,
unsigned int  x,
unsigned int  ytreg 
) [static]

Definition at line 142 of file unwind-ia64.c.

{
  switch ((x << 1) | ((ytreg >> 7) & 1))
    {
    case 0: /* gr */
      sprintf (cp, "r%u", (ytreg & 0x1f));
      break;

    case 1: /* fr */
      sprintf (cp, "f%u", (ytreg & 0x1f));
      break;

    case 2: /* br */
      sprintf (cp, "b%u", (ytreg & 0x1f));
      break;
    }
}

Variable Documentation

unw_decoder unw_decode_table[2][8] [static]
bfd_vma unw_rlen = 0 [static]

Definition at line 34 of file unwind-ia64.c.