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

📄 irdefs.c

📁 The Valgrind distribution has multiple tools. The most popular is the memory checking tool (called M
💻 C
📖 第 1 页 / 共 5 页
字号:
      default:               vpanic("ppIRJumpKind");   }}void ppIRStmt ( IRStmt* s ){   if (!s) {      vex_printf("!!! IRStmt* which is NULL !!!");      return;   }   switch (s->tag) {      case Ist_NoOp:         vex_printf("IR-NoOp");         break;      case Ist_IMark:         vex_printf( "------ IMark(0x%llx, %d) ------",                      s->Ist.IMark.addr, s->Ist.IMark.len);         break;      case Ist_AbiHint:         vex_printf("====== AbiHint(");         ppIRExpr(s->Ist.AbiHint.base);         vex_printf(", %d) ======", s->Ist.AbiHint.len);         break;      case Ist_Put:         vex_printf( "PUT(%d) = ", s->Ist.Put.offset);         ppIRExpr(s->Ist.Put.data);         break;      case Ist_PutI:         vex_printf( "PUTI" );         ppIRArray(s->Ist.PutI.descr);         vex_printf("[");         ppIRExpr(s->Ist.PutI.ix);         vex_printf(",%d] = ", s->Ist.PutI.bias);         ppIRExpr(s->Ist.PutI.data);         break;      case Ist_Tmp:         ppIRTemp(s->Ist.Tmp.tmp);         vex_printf( " = " );         ppIRExpr(s->Ist.Tmp.data);         break;      case Ist_Store:         vex_printf( "ST%s(", s->Ist.Store.end==Iend_LE ? "le" : "be" );         ppIRExpr(s->Ist.Store.addr);         vex_printf( ") = ");         ppIRExpr(s->Ist.Store.data);         break;      case Ist_Dirty:         ppIRDirty(s->Ist.Dirty.details);         break;      case Ist_MFence:         vex_printf("IR-MFence");         break;      case Ist_Exit:         vex_printf( "if (" );         ppIRExpr(s->Ist.Exit.guard);         vex_printf( ") goto {");         ppIRJumpKind(s->Ist.Exit.jk);         vex_printf("} ");         ppIRConst(s->Ist.Exit.dst);         break;      default:          vpanic("ppIRStmt");   }}void ppIRTypeEnv ( IRTypeEnv* env ) {   UInt i;   for (i = 0; i < env->types_used; i++) {      if (i % 8 == 0)         vex_printf( "   ");      ppIRTemp(i);      vex_printf( ":");      ppIRType(env->types[i]);      if (i % 8 == 7)          vex_printf( "\n");       else          vex_printf( "   ");   }   if (env->types_used > 0 && env->types_used % 8 != 7)       vex_printf( "\n"); }void ppIRBB ( IRBB* bb ){   Int i;   vex_printf("IRBB {\n");   ppIRTypeEnv(bb->tyenv);   vex_printf("\n");   for (i = 0; i < bb->stmts_used; i++) {      vex_printf( "   ");      ppIRStmt(bb->stmts[i]);      vex_printf( "\n");   }   vex_printf( "   goto {");   ppIRJumpKind(bb->jumpkind);   vex_printf( "} ");   ppIRExpr( bb->next );   vex_printf( "\n}\n");}/*---------------------------------------------------------------*//*--- Constructors                                            ---*//*---------------------------------------------------------------*//* Constructors -- IRConst */IRConst* IRConst_U1 ( Bool bit ){   IRConst* c = LibVEX_Alloc(sizeof(IRConst));   c->tag     = Ico_U1;   c->Ico.U1  = bit;   /* call me paranoid; I don't care :-) */   vassert(bit == False || bit == True);   return c;}IRConst* IRConst_U8 ( UChar u8 ){   IRConst* c = LibVEX_Alloc(sizeof(IRConst));   c->tag     = Ico_U8;   c->Ico.U8  = u8;   return c;}IRConst* IRConst_U16 ( UShort u16 ){   IRConst* c = LibVEX_Alloc(sizeof(IRConst));   c->tag     = Ico_U16;   c->Ico.U16 = u16;   return c;}IRConst* IRConst_U32 ( UInt u32 ){   IRConst* c = LibVEX_Alloc(sizeof(IRConst));   c->tag     = Ico_U32;   c->Ico.U32 = u32;   return c;}IRConst* IRConst_U64 ( ULong u64 ){   IRConst* c = LibVEX_Alloc(sizeof(IRConst));   c->tag     = Ico_U64;   c->Ico.U64 = u64;   return c;}IRConst* IRConst_F64 ( Double f64 ){   IRConst* c = LibVEX_Alloc(sizeof(IRConst));   c->tag     = Ico_F64;   c->Ico.F64 = f64;   return c;}IRConst* IRConst_F64i ( ULong f64i ){   IRConst* c  = LibVEX_Alloc(sizeof(IRConst));   c->tag      = Ico_F64i;   c->Ico.F64i = f64i;   return c;}IRConst* IRConst_V128 ( UShort con ){   IRConst* c  = LibVEX_Alloc(sizeof(IRConst));   c->tag      = Ico_V128;   c->Ico.V128 = con;   return c;}/* Constructors -- IRCallee */IRCallee* mkIRCallee ( Int regparms, HChar* name, void* addr ){   IRCallee* ce = LibVEX_Alloc(sizeof(IRCallee));   ce->regparms = regparms;   ce->name     = name;   ce->addr     = addr;   ce->mcx_mask = 0;   vassert(regparms >= 0 && regparms <= 3);   vassert(name != NULL);   vassert(addr != 0);   return ce;}/* Constructors -- IRArray */IRArray* mkIRArray ( Int base, IRType elemTy, Int nElems ){   IRArray* arr = LibVEX_Alloc(sizeof(IRArray));   arr->base    = base;   arr->elemTy  = elemTy;   arr->nElems  = nElems;   vassert(!(arr->base < 0 || arr->base > 10000 /* somewhat arbitrary */));   vassert(!(arr->elemTy == Ity_I1));   vassert(!(arr->nElems <= 0 || arr->nElems > 500 /* somewhat arbitrary */));   return arr;}/* Constructors -- IRExpr */IRExpr* IRExpr_Binder ( Int binder ) {   IRExpr* e            = LibVEX_Alloc(sizeof(IRExpr));   e->tag               = Iex_Binder;   e->Iex.Binder.binder = binder;   return e;}IRExpr* IRExpr_Get ( Int off, IRType ty ) {   IRExpr* e         = LibVEX_Alloc(sizeof(IRExpr));   e->tag            = Iex_Get;   e->Iex.Get.offset = off;   e->Iex.Get.ty     = ty;   return e;}IRExpr* IRExpr_GetI ( IRArray* descr, IRExpr* ix, Int bias ) {   IRExpr* e         = LibVEX_Alloc(sizeof(IRExpr));   e->tag            = Iex_GetI;   e->Iex.GetI.descr = descr;   e->Iex.GetI.ix    = ix;   e->Iex.GetI.bias  = bias;   return e;}IRExpr* IRExpr_Tmp ( IRTemp tmp ) {   IRExpr* e      = LibVEX_Alloc(sizeof(IRExpr));   e->tag         = Iex_Tmp;   e->Iex.Tmp.tmp = tmp;   return e;}IRExpr* IRExpr_Qop ( IROp op, IRExpr* arg1, IRExpr* arg2,                               IRExpr* arg3, IRExpr* arg4 ) {   IRExpr* e       = LibVEX_Alloc(sizeof(IRExpr));   e->tag          = Iex_Qop;   e->Iex.Qop.op   = op;   e->Iex.Qop.arg1 = arg1;   e->Iex.Qop.arg2 = arg2;   e->Iex.Qop.arg3 = arg3;   e->Iex.Qop.arg4 = arg4;   return e;}IRExpr* IRExpr_Triop  ( IROp op, IRExpr* arg1,                                  IRExpr* arg2, IRExpr* arg3 ) {   IRExpr* e         = LibVEX_Alloc(sizeof(IRExpr));   e->tag            = Iex_Triop;   e->Iex.Triop.op   = op;   e->Iex.Triop.arg1 = arg1;   e->Iex.Triop.arg2 = arg2;   e->Iex.Triop.arg3 = arg3;   return e;}IRExpr* IRExpr_Binop ( IROp op, IRExpr* arg1, IRExpr* arg2 ) {   IRExpr* e         = LibVEX_Alloc(sizeof(IRExpr));   e->tag            = Iex_Binop;   e->Iex.Binop.op   = op;   e->Iex.Binop.arg1 = arg1;   e->Iex.Binop.arg2 = arg2;   return e;}IRExpr* IRExpr_Unop ( IROp op, IRExpr* arg ) {   IRExpr* e       = LibVEX_Alloc(sizeof(IRExpr));   e->tag          = Iex_Unop;   e->Iex.Unop.op  = op;   e->Iex.Unop.arg = arg;   return e;}IRExpr* IRExpr_Load ( IREndness end, IRType ty, IRExpr* addr ) {   IRExpr* e        = LibVEX_Alloc(sizeof(IRExpr));   e->tag           = Iex_Load;   e->Iex.Load.end  = end;   e->Iex.Load.ty   = ty;   e->Iex.Load.addr = addr;   vassert(end == Iend_LE || end == Iend_BE);   return e;}IRExpr* IRExpr_Const ( IRConst* con ) {   IRExpr* e        = LibVEX_Alloc(sizeof(IRExpr));   e->tag           = Iex_Const;   e->Iex.Const.con = con;   return e;}IRExpr* IRExpr_CCall ( IRCallee* cee, IRType retty, IRExpr** args ) {   IRExpr* e          = LibVEX_Alloc(sizeof(IRExpr));   e->tag             = Iex_CCall;   e->Iex.CCall.cee   = cee;   e->Iex.CCall.retty = retty;   e->Iex.CCall.args  = args;   return e;}IRExpr* IRExpr_Mux0X ( IRExpr* cond, IRExpr* expr0, IRExpr* exprX ) {   IRExpr* e          = LibVEX_Alloc(sizeof(IRExpr));   e->tag             = Iex_Mux0X;   e->Iex.Mux0X.cond  = cond;   e->Iex.Mux0X.expr0 = expr0;   e->Iex.Mux0X.exprX = exprX;   return e;}/* Constructors for NULL-terminated IRExpr expression vectors,   suitable for use as arg lists in clean/dirty helper calls. */IRExpr** mkIRExprVec_0 ( void ) {   IRExpr** vec = LibVEX_Alloc(1 * sizeof(IRExpr*));   vec[0] = NULL;   return vec;}IRExpr** mkIRExprVec_1 ( IRExpr* arg1 ) {   IRExpr** vec = LibVEX_Alloc(2 * sizeof(IRExpr*));   vec[0] = arg1;   vec[1] = NULL;   return vec;}IRExpr** mkIRExprVec_2 ( IRExpr* arg1, IRExpr* arg2 ) {   IRExpr** vec = LibVEX_Alloc(3 * sizeof(IRExpr*));   vec[0] = arg1;   vec[1] = arg2;   vec[2] = NULL;   return vec;}IRExpr** mkIRExprVec_3 ( IRExpr* arg1, IRExpr* arg2, IRExpr* arg3 ) {   IRExpr** vec = LibVEX_Alloc(4 * sizeof(IRExpr*));   vec[0] = arg1;   vec[1] = arg2;   vec[2] = arg3;   vec[3] = NULL;   return vec;}IRExpr** mkIRExprVec_4 ( IRExpr* arg1, IRExpr* arg2,                          IRExpr* arg3, IRExpr* arg4 ) {   IRExpr** vec = LibVEX_Alloc(5 * sizeof(IRExpr*));   vec[0] = arg1;   vec[1] = arg2;   vec[2] = arg3;   vec[3] = arg4;   vec[4] = NULL;   return vec;}IRExpr** mkIRExprVec_5 ( IRExpr* arg1, IRExpr* arg2,                          IRExpr* arg3, IRExpr* arg4, IRExpr* arg5 ) {   IRExpr** vec = LibVEX_Alloc(6 * sizeof(IRExpr*));   vec[0] = arg1;   vec[1] = arg2;   vec[2] = arg3;   vec[3] = arg4;   vec[4] = arg5;   vec[5] = NULL;   return vec;}/* Constructors -- IRDirty */IRDirty* emptyIRDirty ( void ) {   IRDirty* d = LibVEX_Alloc(sizeof(IRDirty));   d->cee      = NULL;   d->guard    = NULL;   d->args     = NULL;   d->tmp      = IRTemp_INVALID;   d->mFx      = Ifx_None;   d->mAddr    = NULL;   d->mSize    = 0;   d->needsBBP = False;   d->nFxState = 0;   return d;}

⌨️ 快捷键说明

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