stack[++stack_elt] = result;
stack[stack_elt++] = result;
execute_stack_op (const unsigned char *op_ptr, const unsigned char *op_end,		  struct _Unwind_Context *context, _Unwind_Word initial){  _Unwind_Word stack[64];	/* ??? Assume this is enough.  */  int stack_elt;  stack[0] = initial;  stack_elt = 1;  while (op_ptr < op_end)    {      enum dwarf_location_atom op = *op_ptr++;      _Unwind_Word result, reg, utmp;      _Unwind_Sword offset, stmp;      switch (op)	{	case DW_OP_lit0:	case DW_OP_lit1:	case DW_OP_lit2:	case DW_OP_lit3:	case DW_OP_lit4:	case DW_OP_lit5:	case DW_OP_lit6:	case DW_OP_lit7:	case DW_OP_lit8:	case DW_OP_lit9:	case DW_OP_lit10:	case DW_OP_lit11:	case DW_OP_lit12:	case DW_OP_lit13:	case DW_OP_lit14:	case DW_OP_lit15:	case DW_OP_lit16:	case DW_OP_lit17:	case DW_OP_lit18:	case DW_OP_lit19:	case DW_OP_lit20:	case DW_OP_lit21:	case DW_OP_lit22:	case DW_OP_lit23:	case DW_OP_lit24:	case DW_OP_lit25:	case DW_OP_lit26:	case DW_OP_lit27:	case DW_OP_lit28:	case DW_OP_lit29:	case DW_OP_lit30:	case DW_OP_lit31:	  result = op - DW_OP_lit0;	  break;	case DW_OP_addr:	  result = (_Unwind_Word) (_Unwind_Ptr) read_pointer (op_ptr);	  op_ptr += sizeof (void *);	  break;	case DW_OP_const1u:	  result = read_1u (op_ptr);	  op_ptr += 1;	  break;	case DW_OP_const1s:	  result = read_1s (op_ptr);	  op_ptr += 1;	  break;	case DW_OP_const2u:	  result = read_2u (op_ptr);	  op_ptr += 2;	  break;	case DW_OP_const2s:	  result = read_2s (op_ptr);	  op_ptr += 2;	  break;	case DW_OP_const4u:	  result = read_4u (op_ptr);	  op_ptr += 4;	  break;	case DW_OP_const4s:	  result = read_4s (op_ptr);	  op_ptr += 4;	  break;	case DW_OP_const8u:	  result = read_8u (op_ptr);	  op_ptr += 8;	  break;	case DW_OP_const8s:	  result = read_8s (op_ptr);	  op_ptr += 8;	  break;	case DW_OP_constu:	  op_ptr = read_uleb128 (op_ptr, &result);	  break;	case DW_OP_consts:	  op_ptr = read_sleb128 (op_ptr, &stmp);	  result = stmp;	  break;	case DW_OP_reg0:	case DW_OP_reg1:	case DW_OP_reg2:	case DW_OP_reg3:	case DW_OP_reg4:	case DW_OP_reg5:	case DW_OP_reg6:	case DW_OP_reg7:	case DW_OP_reg8:	case DW_OP_reg9:	case DW_OP_reg10:	case DW_OP_reg11:	case DW_OP_reg12:	case DW_OP_reg13:	case DW_OP_reg14:	case DW_OP_reg15:	case DW_OP_reg16:	case DW_OP_reg17:	case DW_OP_reg18:	case DW_OP_reg19:	case DW_OP_reg20:	case DW_OP_reg21:	case DW_OP_reg22:	case DW_OP_reg23:	case DW_OP_reg24:	case DW_OP_reg25:	case DW_OP_reg26:	case DW_OP_reg27:	case DW_OP_reg28:	case DW_OP_reg29:	case DW_OP_reg30:	case DW_OP_reg31:	  result = _Unwind_GetGR (context, op - DW_OP_reg0);	  break;	case DW_OP_regx:	  op_ptr = read_uleb128 (op_ptr, &reg);	  result = _Unwind_GetGR (context, reg);	  break;	case DW_OP_breg0:	case DW_OP_breg1:	case DW_OP_breg2:	case DW_OP_breg3:	case DW_OP_breg4:	case DW_OP_breg5:	case DW_OP_breg6:	case DW_OP_breg7:	case DW_OP_breg8:	case DW_OP_breg9:	case DW_OP_breg10:	case DW_OP_breg11:	case DW_OP_breg12:	case DW_OP_breg13:	case DW_OP_breg14:	case DW_OP_breg15:	case DW_OP_breg16:	case DW_OP_breg17:	case DW_OP_breg18:	case DW_OP_breg19:	case DW_OP_breg20:	case DW_OP_breg21:	case DW_OP_breg22:	case DW_OP_breg23:	case DW_OP_breg24:	case DW_OP_breg25:	case DW_OP_breg26:	case DW_OP_breg27:	case DW_OP_breg28:	case DW_OP_breg29:	case DW_OP_breg30:	case DW_OP_breg31:	  op_ptr = read_sleb128 (op_ptr, &offset);	  result = _Unwind_GetGR (context, op - DW_OP_breg0) + offset;	  break;	case DW_OP_bregx:	  op_ptr = read_uleb128 (op_ptr, &reg);	  op_ptr = read_sleb128 (op_ptr, &offset);	  result = _Unwind_GetGR (context, reg) + offset;	  break;	case DW_OP_dup:	  if (stack_elt < 1)	    abort ();	  result = stack[stack_elt - 1];	  break;	case DW_OP_drop:	  if (--stack_elt < 0)	    abort ();	  goto no_push;	case DW_OP_pick:	  offset = *op_ptr++;	  if (offset >= stack_elt - 1)	    abort ();	  result = stack[stack_elt - 1 - offset];	  break;	case DW_OP_over:	  if (stack_elt < 2)	    abort ();	  result = stack[stack_elt - 2];	  break;	case DW_OP_rot:	  {	    _Unwind_Word t1, t2, t3;	    if (stack_elt < 3)	      abort ();	    t1 = stack[stack_elt - 1];	    t2 = stack[stack_elt - 2];	    t3 = stack[stack_elt - 3];	    stack[stack_elt - 1] = t2;	    stack[stack_elt - 2] = t3;	    stack[stack_elt - 3] = t1;	    goto no_push;	  }	case DW_OP_deref:	case DW_OP_deref_size:	case DW_OP_abs:	case DW_OP_neg:	case DW_OP_not:	case DW_OP_plus_uconst:	  /* Unary operations.  */	  if (--stack_elt < 0)	    abort ();	  result = stack[stack_elt];	  switch (op)	    {	    case DW_OP_deref:	      {		void *ptr = (void *) (_Unwind_Ptr) result;		result = (_Unwind_Ptr) read_pointer (ptr);	      }	      break;	    case DW_OP_deref_size:	      {		void *ptr = (void *) (_Unwind_Ptr) result;		switch (*op_ptr++)		  {		  case 1:		    result = read_1u (ptr);		    break;		  case 2:		    result = read_2u (ptr);		    break;		  case 4:		    result = read_4u (ptr);		    break;		  case 8:		    result = read_8u (ptr);		    break;		  default:		    abort ();		  }	      }	      break;	    case DW_OP_abs:	      if ((_Unwind_Sword) result < 0)		result = -result;	      break;	    case DW_OP_neg:	      result = -result;	      break;	    case DW_OP_not:	      result = ~result;	      break;	    case DW_OP_plus_uconst:	      op_ptr = read_uleb128 (op_ptr, &utmp);	      result += utmp;	      break;	    default:	      abort ();	    }	  break;	case DW_OP_and:	case DW_OP_div:	case DW_OP_minus:	case DW_OP_mod:	case DW_OP_mul:	case DW_OP_or:	case DW_OP_plus:	case DW_OP_le:	case DW_OP_ge:	case DW_OP_eq:	case DW_OP_lt:	case DW_OP_gt:	case DW_OP_ne:	  {	    /* Binary operations.  */	    _Unwind_Word first, second;	    if ((stack_elt -= 2) < 0)	      abort ();	    second = stack[stack_elt];	    first = stack[stack_elt + 1];	    switch (op)	      {	      case DW_OP_and:		result = second & first;		break;	      case DW_OP_div:		result = (_Unwind_Sword) second / (_Unwind_Sword) first;		break;	      case DW_OP_minus:		result = second - first;		break;	      case DW_OP_mod:		result = (_Unwind_Sword) second % (_Unwind_Sword) first;		break;	      case DW_OP_mul:		result = second * first;		break;	      case DW_OP_or:		result = second | first;		break;	      case DW_OP_plus:		result = second + first;		break;	      case DW_OP_shl:		result = second << first;		break;	      case DW_OP_shr:		result = second >> first;		break;	      case DW_OP_shra:		result = (_Unwind_Sword) second >> first;		break;	      case DW_OP_xor:		result = second ^ first;		break;	      case DW_OP_le:		result = (_Unwind_Sword) first <= (_Unwind_Sword) second;		break;	      case DW_OP_ge:		result = (_Unwind_Sword) first >= (_Unwind_Sword) second;		break;	      case DW_OP_eq:		result = (_Unwind_Sword) first == (_Unwind_Sword) second;		break;	      case DW_OP_lt:		result = (_Unwind_Sword) first < (_Unwind_Sword) second;		break;	      case DW_OP_gt:		result = (_Unwind_Sword) first > (_Unwind_Sword) second;		break;	      case DW_OP_ne:		result = (_Unwind_Sword) first != (_Unwind_Sword) second;		break;	      default:		abort ();	      }	  }	  break;	case DW_OP_skip:	  offset = read_2s (op_ptr);	  op_ptr += 2;	  op_ptr += offset;	  goto no_push;	case DW_OP_bra:	  if (--stack_elt < 0)	    abort ();	  offset = read_2s (op_ptr);	  op_ptr += 2;	  if (stack[stack_elt] != 0)	    op_ptr += offset;	  goto no_push;	case DW_OP_nop:	  goto no_push;	default:	  abort ();	}      /* Most things push a result value.  */      if ((size_t) stack_elt >= sizeof(stack)/sizeof(*stack))	abort ();      stack[++stack_elt] = result;    no_push:;    }  /* We were executing this program to get a value.  It should be     at top of stack.  */  if (--stack_elt < 0)    abort ();  return stack[stack_elt];}