⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 irdefs.c

📁 unix下调试内存泄露的工具源代码
💻 C
📖 第 1 页 / 共 5 页
字号:
         return IRExpr_Mux0X(dopyIRExpr(e->Iex.Mux0X.cond),                             dopyIRExpr(e->Iex.Mux0X.expr0),                             dopyIRExpr(e->Iex.Mux0X.exprX));      default:         vpanic("dopyIRExpr");   }}IRDirty* dopyIRDirty ( IRDirty* d ){   Int      i;   IRDirty* d2 = emptyIRDirty();   d2->cee   = dopyIRCallee(d->cee);   d2->guard = dopyIRExpr(d->guard);   d2->args  = dopyIRExprVec(d->args);   d2->tmp   = d->tmp;   d2->mFx   = d->mFx;   d2->mAddr = d->mAddr==NULL ? NULL : dopyIRExpr(d->mAddr);   d2->mSize = d->mSize;   d2->needsBBP = d->needsBBP;   d2->nFxState = d->nFxState;   for (i = 0; i < d2->nFxState; i++)      d2->fxState[i] = d->fxState[i];   return d2;}IRStmt* dopyIRStmt ( IRStmt* s ){   switch (s->tag) {      case Ist_NoOp:         return IRStmt_NoOp();      case Ist_AbiHint:         return IRStmt_AbiHint(dopyIRExpr(s->Ist.AbiHint.base),                               s->Ist.AbiHint.len);      case Ist_IMark:         return IRStmt_IMark(s->Ist.IMark.addr, s->Ist.IMark.len);      case Ist_Put:          return IRStmt_Put(s->Ist.Put.offset,                            dopyIRExpr(s->Ist.Put.data));      case Ist_PutI:          return IRStmt_PutI(dopyIRArray(s->Ist.PutI.descr),                            dopyIRExpr(s->Ist.PutI.ix),                            s->Ist.PutI.bias,                             dopyIRExpr(s->Ist.PutI.data));      case Ist_Tmp:         return IRStmt_Tmp(s->Ist.Tmp.tmp,                           dopyIRExpr(s->Ist.Tmp.data));      case Ist_Store:          return IRStmt_Store(s->Ist.Store.end,                             dopyIRExpr(s->Ist.Store.addr),                             dopyIRExpr(s->Ist.Store.data));      case Ist_Dirty:          return IRStmt_Dirty(dopyIRDirty(s->Ist.Dirty.details));      case Ist_MFence:         return IRStmt_MFence();      case Ist_Exit:          return IRStmt_Exit(dopyIRExpr(s->Ist.Exit.guard),                            s->Ist.Exit.jk,                            dopyIRConst(s->Ist.Exit.dst));      default:          vpanic("dopyIRStmt");   }}IRTypeEnv* dopyIRTypeEnv ( IRTypeEnv* src ){   Int        i;   IRTypeEnv* dst = LibVEX_Alloc(sizeof(IRTypeEnv));   dst->types_size = src->types_size;   dst->types_used = src->types_used;   dst->types = LibVEX_Alloc(dst->types_size * sizeof(IRType));   for (i = 0; i < src->types_used; i++)      dst->types[i] = src->types[i];   return dst;}IRBB* dopyIRBB ( IRBB* bb ){   Int      i;   IRStmt** sts2;   IRBB* bb2 = emptyIRBB();   bb2->tyenv = dopyIRTypeEnv(bb->tyenv);   bb2->stmts_used = bb2->stmts_size = bb->stmts_used;   sts2 = LibVEX_Alloc(bb2->stmts_used * sizeof(IRStmt*));   for (i = 0; i < bb2->stmts_used; i++)      sts2[i] = dopyIRStmt(bb->stmts[i]);   bb2->stmts    = sts2;   bb2->next     = dopyIRExpr(bb->next);   bb2->jumpkind = bb->jumpkind;   return bb2;}/*---------------------------------------------------------------*//*--- Primop types                                            ---*//*---------------------------------------------------------------*/staticvoid typeOfPrimop ( IROp op, IRType* t_dst, IRType* t_arg1, IRType* t_arg2 ){#  define UNARY(_td,_ta1)         \      *t_dst = (_td); *t_arg1 = (_ta1); break#  define BINARY(_td,_ta1,_ta2)   \     *t_dst = (_td); *t_arg1 = (_ta1); *t_arg2 = (_ta2); break#  define COMPARISON(_ta)         \     *t_dst = Ity_I1; *t_arg1 = *t_arg2 = (_ta); break;#  define UNARY_COMPARISON(_ta)         \     *t_dst = Ity_I1; *t_arg1 = (_ta); break;   *t_dst  = Ity_INVALID;   *t_arg1 = Ity_INVALID;   *t_arg2 = Ity_INVALID;   switch (op) {      case Iop_Add8: case Iop_Sub8: case Iop_Mul8:       case Iop_Or8:  case Iop_And8: case Iop_Xor8:         BINARY(Ity_I8, Ity_I8,Ity_I8);      case Iop_Add16: case Iop_Sub16: case Iop_Mul16:      case Iop_Or16:  case Iop_And16: case Iop_Xor16:         BINARY(Ity_I16, Ity_I16,Ity_I16);      case Iop_CmpORD32U:      case Iop_CmpORD32S:      case Iop_Add32: case Iop_Sub32: case Iop_Mul32:      case Iop_Or32:  case Iop_And32: case Iop_Xor32:         BINARY(Ity_I32, Ity_I32,Ity_I32);      case Iop_Add64: case Iop_Sub64: case Iop_Mul64:      case Iop_Or64:  case Iop_And64: case Iop_Xor64:      case Iop_Avg8Ux8: case Iop_Avg16Ux4:      case Iop_Add8x8: case Iop_Add16x4: case Iop_Add32x2:      case Iop_CmpEQ8x8: case Iop_CmpEQ16x4: case Iop_CmpEQ32x2:      case Iop_CmpGT8Sx8: case Iop_CmpGT16Sx4: case Iop_CmpGT32Sx2:      case Iop_InterleaveHI8x8: case Iop_InterleaveLO8x8:      case Iop_InterleaveHI16x4: case Iop_InterleaveLO16x4:      case Iop_InterleaveHI32x2: case Iop_InterleaveLO32x2:      case Iop_Max8Ux8: case Iop_Max16Sx4:      case Iop_Min8Ux8: case Iop_Min16Sx4:      case Iop_Mul16x4: case Iop_MulHi16Sx4: case Iop_MulHi16Ux4:      case Iop_QAdd8Sx8: case Iop_QAdd16Sx4:      case Iop_QAdd8Ux8: case Iop_QAdd16Ux4:      case Iop_QNarrow32Sx2:      case Iop_QNarrow16Sx4: case Iop_QNarrow16Ux4:      case Iop_Sub8x8: case Iop_Sub16x4: case Iop_Sub32x2:      case Iop_QSub8Sx8: case Iop_QSub16Sx4:      case Iop_QSub8Ux8: case Iop_QSub16Ux4:         BINARY(Ity_I64, Ity_I64,Ity_I64);      case Iop_ShlN32x2: case Iop_ShlN16x4:      case Iop_ShrN32x2: case Iop_ShrN16x4:      case Iop_SarN32x2: case Iop_SarN16x4:         BINARY(Ity_I64, Ity_I64,Ity_I8);      case Iop_Shl8: case Iop_Shr8: case Iop_Sar8:         BINARY(Ity_I8, Ity_I8,Ity_I8);      case Iop_Shl16: case Iop_Shr16: case Iop_Sar16:         BINARY(Ity_I16, Ity_I16,Ity_I8);      case Iop_Shl32: case Iop_Shr32: case Iop_Sar32:         BINARY(Ity_I32, Ity_I32,Ity_I8);      case Iop_Shl64: case Iop_Shr64: case Iop_Sar64:         BINARY(Ity_I64, Ity_I64,Ity_I8);      case Iop_Not8: case Iop_Neg8:         UNARY(Ity_I8,Ity_I8);      case Iop_Not16: case Iop_Neg16:         UNARY(Ity_I16,Ity_I16);      case Iop_Not32: case Iop_Neg32:         UNARY(Ity_I32,Ity_I32);      case Iop_Neg64:      case Iop_Not64:      case Iop_CmpNEZ32x2: case Iop_CmpNEZ16x4: case Iop_CmpNEZ8x8:         UNARY(Ity_I64,Ity_I64);      case Iop_CmpEQ8: case Iop_CmpNE8:         COMPARISON(Ity_I8);      case Iop_CmpEQ16: case Iop_CmpNE16:         COMPARISON(Ity_I16);      case Iop_CmpEQ32: case Iop_CmpNE32:      case Iop_CmpLT32S: case Iop_CmpLE32S:      case Iop_CmpLT32U: case Iop_CmpLE32U:         COMPARISON(Ity_I32);      case Iop_CmpEQ64: case Iop_CmpNE64:      case Iop_CmpLT64S: case Iop_CmpLE64S:      case Iop_CmpLT64U: case Iop_CmpLE64U:         COMPARISON(Ity_I64);      case Iop_CmpNEZ8:  UNARY_COMPARISON(Ity_I8);      case Iop_CmpNEZ16: UNARY_COMPARISON(Ity_I16);      case Iop_CmpNEZ32: UNARY_COMPARISON(Ity_I32);      case Iop_CmpNEZ64: UNARY_COMPARISON(Ity_I64);      case Iop_MullU8: case Iop_MullS8:         BINARY(Ity_I16, Ity_I8,Ity_I8);      case Iop_MullU16: case Iop_MullS16:         BINARY(Ity_I32, Ity_I16,Ity_I16);      case Iop_MullU32: case Iop_MullS32:         BINARY(Ity_I64, Ity_I32,Ity_I32);      case Iop_MullU64: case Iop_MullS64:         BINARY(Ity_I128, Ity_I64,Ity_I64);      case Iop_Clz32: case Iop_Ctz32:         UNARY(Ity_I32,Ity_I32);      case Iop_Clz64: case Iop_Ctz64:         UNARY(Ity_I64,Ity_I64);      case Iop_DivU32: case Iop_DivS32:         BINARY(Ity_I32, Ity_I32,Ity_I32);      case Iop_DivModU64to32: case Iop_DivModS64to32:         BINARY(Ity_I64, Ity_I64,Ity_I32);      case Iop_DivModU128to64: case Iop_DivModS128to64:         BINARY(Ity_I128, Ity_I128,Ity_I64);      case Iop_16HIto8: case Iop_16to8:         UNARY(Ity_I8,Ity_I16);      case Iop_8HLto16:         BINARY(Ity_I16, Ity_I8,Ity_I8);      case Iop_32HIto16: case Iop_32to16:         UNARY(Ity_I16,Ity_I32);      case Iop_16HLto32:         BINARY(Ity_I32, Ity_I16,Ity_I16);      case Iop_64HIto32: case Iop_64to32:         UNARY(Ity_I32, Ity_I64);      case Iop_32HLto64:         BINARY(Ity_I64, Ity_I32,Ity_I32);      case Iop_128HIto64: case Iop_128to64:         UNARY(Ity_I64, Ity_I128);      case Iop_64HLto128:         BINARY(Ity_I128, Ity_I64,Ity_I64);      case Iop_Not1:   UNARY(Ity_I1,Ity_I1);      case Iop_1Uto8:  UNARY(Ity_I8,Ity_I1);      case Iop_1Sto8:  UNARY(Ity_I8,Ity_I1);      case Iop_1Sto16: UNARY(Ity_I16,Ity_I1);      case Iop_1Uto32: case Iop_1Sto32: UNARY(Ity_I32,Ity_I1);      case Iop_1Sto64: case Iop_1Uto64: UNARY(Ity_I64,Ity_I1);      case Iop_32to1:  UNARY(Ity_I1,Ity_I32);      case Iop_64to1:  UNARY(Ity_I1,Ity_I64);      case Iop_8Uto32: case Iop_8Sto32:         UNARY(Ity_I32,Ity_I8);      case Iop_8Uto16: case Iop_8Sto16:         UNARY(Ity_I16,Ity_I8);      case Iop_16Uto32: case Iop_16Sto32:          UNARY(Ity_I32,Ity_I16);      case Iop_32Sto64: case Iop_32Uto64:         UNARY(Ity_I64,Ity_I32);      case Iop_8Uto64: case Iop_8Sto64:         UNARY(Ity_I64,Ity_I8);      case Iop_16Uto64: case Iop_16Sto64:         UNARY(Ity_I64,Ity_I16);      case Iop_64to16:         UNARY(Ity_I16, Ity_I64);      case Iop_32to8: UNARY(Ity_I8,Ity_I32);      case Iop_64to8: UNARY(Ity_I8,Ity_I64);      case Iop_ScaleF64: case Iop_PRemF64: case Iop_PRem1F64:      case Iop_AtanF64: case Iop_Yl2xF64:  case Iop_Yl2xp1F64:       case Iop_AddF64: case Iop_SubF64: case Iop_MulF64: case Iop_DivF64:         BINARY(Ity_F64,Ity_F64,Ity_F64);      case Iop_PRemC3210F64: case Iop_PRem1C3210F64:      case Iop_CmpF64:         BINARY(Ity_I32,Ity_F64,Ity_F64);      case Iop_NegF64: case Iop_AbsF64: case Iop_SqrtF64:      case Iop_SinF64: case Iop_CosF64: case Iop_TanF64: case Iop_2xm1F64:         UNARY(Ity_F64,Ity_F64);      case Iop_ReinterpI64asF64: UNARY(Ity_F64, Ity_I64);      case Iop_ReinterpF64asI64: UNARY(Ity_I64, Ity_F64);      case Iop_ReinterpI32asF32: UNARY(Ity_F32, Ity_I32);      case Iop_ReinterpF32asI32: UNARY(Ity_I32, Ity_F32);      case Iop_F64toI16: BINARY(Ity_I16, Ity_I32,Ity_F64);      case Iop_F64toI32: BINARY(Ity_I32, Ity_I32,Ity_F64);      case Iop_F64toI64: BINARY(Ity_I64, Ity_I32,Ity_F64);      case Iop_I16toF64: UNARY(Ity_F64, Ity_I16);      case Iop_I32toF64: UNARY(Ity_F64, Ity_I32);      case Iop_I64toF64: BINARY(Ity_F64, Ity_I32,Ity_I64);      case Iop_F32toF64: UNARY(Ity_F64, Ity_F32);      case Iop_F64toF32: BINARY(Ity_F32, Ity_I32,Ity_F64);      case Iop_RoundF64: BINARY(Ity_F64, Ity_I32,Ity_F64);      case Iop_64HLtoV128: BINARY(Ity_V128, Ity_I64,Ity_I64);      case Iop_V128to64: case Iop_V128HIto64:          UNARY(Ity_I64, Ity_V128);      case Iop_V128to32:    UNARY(Ity_I32, Ity_V128);      case Iop_32UtoV128:   UNARY(Ity_V128, Ity_I32);      case Iop_64UtoV128:   UNARY(Ity_V128, Ity_I64);      case Iop_SetV128lo32: BINARY(Ity_V128, Ity_V128,Ity_I32);      case Iop_SetV128lo64: BINARY(Ity_V128, Ity_V128,Ity_I64);      case Iop_CmpEQ32Fx4: case Iop_CmpLT32Fx4:      case Iop_CmpEQ64Fx2: case Iop_CmpLT64Fx2:      case Iop_CmpLE32Fx4: case Iop_CmpUN32Fx4:      case Iop_CmpLE64Fx2: case Iop_CmpUN64Fx2:      case Iop_CmpEQ32F0x4: case Iop_CmpLT32F0x4:      case Iop_CmpEQ64F0x2: case Iop_CmpLT64F0x2:      case Iop_CmpLE32F0x4: case Iop_CmpUN32F0x4:      case Iop_CmpLE64F0x2: case Iop_CmpUN64F0x2:      case Iop_Add32Fx4: case Iop_Add32F0x4:      case Iop_Add64Fx2: case Iop_Add64F0x2:      case Iop_Div32Fx4: case Iop_Div32F0x4:      case Iop_Div64Fx2: case Iop_Div64F0x2:      case Iop_Max32Fx4: case Iop_Max32F0x4:      case Iop_Max64Fx2: case Iop_Max64F0x2:      case Iop_Min32Fx4: case Iop_Min32F0x4:      case Iop_Min64Fx2: case Iop_Min64F0x2:      case Iop_Mul32Fx4: case Iop_Mul32F0x4:      case Iop_Mul64Fx2: case Iop_Mul64F0x2:      case Iop_Sub32Fx4: case Iop_Sub32F0x4:      case Iop_Sub64Fx2: case Iop_Sub64F0x2:      case Iop_AndV128: case Iop_OrV128: case Iop_XorV128:      case Iop_Add8x16:   case Iop_Add16x8:         case Iop_Add32x4:   case Iop_Add64x2:      case Iop_QAdd8Ux16: case Iop_QAdd16Ux8:      case Iop_QAdd8Sx16: case Iop_QAdd16Sx8:      case Iop_Sub8x16:   case Iop_Sub16x8:      case Iop_Sub32x4:   case Iop_Sub64x2:      case Iop_QSub8Ux16: case Iop_QSub16Ux8:      case Iop_QSub8Sx16: case Iop_QSub16Sx8:      case Iop_Mul16x8:      case Iop_MulHi16Ux8:      case Iop_MulHi16Sx8:      case Iop_Avg8Ux16:      case Iop_Avg16Ux8:      case Iop_Max16Sx8:      case Iop_Max8Ux16:      case Iop_Min16Sx8:      case Iop_Min8Ux16:      case Iop_CmpEQ8x16:  case Iop_CmpEQ16x8:  case Iop_CmpEQ32x4:      case Iop_CmpGT8Sx16: case Iop_CmpGT16Sx8: case Iop_CmpGT32Sx4:      case Iop_QNarrow16Ux8:      case Iop_QNarrow16Sx8: case Iop_QNarrow32Sx4:      case Iop_InterleaveHI8x16: case Iop_InterleaveHI16x8:      case Iop_InterleaveHI32x4: case Iop_InterleaveHI64x2:      case Iop_InterleaveLO8x16: case Iop_InterleaveLO16x8:       case Iop_InterleaveLO32x4: case Iop_InterleaveLO64x2:         BINARY(Ity_V128, Ity_V128,Ity_V128);      case Iop_NotV128:      case Iop_Recip32Fx4: case Iop_Recip32F0x4:      case Iop_Recip64Fx2: case Iop_Recip64F0x2:      case Iop_RSqrt32Fx4: case Iop_RSqrt32F0x4:      case Iop_RSqrt64Fx2: case Iop_RSqrt64F0x2:      case Iop_Sqrt32Fx4:  case Iop_Sqrt32F0x4:      case Iop_Sqrt64Fx2:  case Iop_Sqrt64F0x2:      case Iop_CmpNEZ8x16: case Iop_CmpNEZ16x8:      case Iop_CmpNEZ32x4: case Iop_CmpNEZ64x2:         UNARY(Ity_V128, Ity_V128);      case Iop_ShlN16x8: case Iop_ShlN32x4: case Iop_ShlN64x2:      case Iop_ShrN16x8: case Iop_ShrN32x4: case Iop_ShrN64x2:      case Iop_SarN16x8: case Iop_SarN32x4:         BINARY(Ity_V128, Ity_V128, Ity_I8);      default:         ppIROp(op);         vpanic("typeOfPrimop");   }#  undef UNARY#  undef BINARY#  undef COMPARISON#  undef UNARY_COMPARISON}/*---------------------------------------------------------------*//*--- Helper functions for the IR -- IR Basic Blocks          ---*/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -