Lines Matching defs:bb
314 static Bool is_stack_access(IRSB* const bb, IRExpr* const addr_expr)
321 for (i = 0; i < bb->stmts_used; i++)
323 if (bb->stmts[i]
324 && bb->stmts[i]->tag == Ist_WrTmp
325 && bb->stmts[i]->Ist.WrTmp.tmp == addr_expr->Iex.RdTmp.tmp)
327 IRExpr* e = bb->stmts[i]->Ist.WrTmp.data;
352 static IRExpr* instr_trace_mem_load(IRSB* const bb, IRExpr* addr_expr,
358 tmp = newIRTemp(bb->tyenv, typeOfIRExpr(bb->tyenv, addr_expr));
359 addStmtToIRSB(bb, IRStmt_WrTmp(tmp, addr_expr));
368 addStmtToIRSB(bb, IRStmt_Dirty(di));
376 static void instr_trace_mem_store(IRSB* const bb, IRExpr* const addr_expr,
384 tl_assert(!data_expr_hi || typeOfIRExpr(bb->tyenv, data_expr_hi) == Ity_I32);
386 ty_data_expr = typeOfIRExpr(bb->tyenv, data_expr_lo);
392 IRTemp tmp = newIRTemp(bb->tyenv, Ity_F32);
394 addStmtToIRSB(bb, IRStmt_WrTmp(tmp, data_expr_lo));
398 IRTemp tmp = newIRTemp(bb->tyenv, Ity_F64);
400 addStmtToIRSB(bb, IRStmt_WrTmp(tmp, data_expr_lo));
407 IRTemp tmp = newIRTemp(bb->tyenv, Ity_I32);
408 addStmtToIRSB(bb, IRStmt_WrTmp(tmp, IRExpr_Unop(Iop_ReinterpF32asI32,
413 IRTemp tmp = newIRTemp(bb->tyenv, Ity_I64);
414 addStmtToIRSB(bb, IRStmt_WrTmp(tmp, IRExpr_Unop(Iop_ReinterpF64asI64,
441 tmp = newIRTemp(bb->tyenv, sizeof(HWord) == 4 ? Ity_I32 : Ity_I64);
442 addStmtToIRSB(bb,
451 tmp = newIRTemp(bb->tyenv, Ity_I32);
452 addStmtToIRSB(bb,
456 tmp = newIRTemp(bb->tyenv, Ity_I32);
457 addStmtToIRSB(bb, IRStmt_WrTmp(tmp,
472 addStmtToIRSB(bb, IRStmt_Dirty(di) );
475 static void instrument_load(IRSB* const bb, IRExpr* const addr_expr,
483 if (!s_check_stack_accesses && is_stack_access(bb, addr_expr))
526 addStmtToIRSB(bb, IRStmt_Dirty(di));
529 static void instrument_store(IRSB* const bb, IRExpr* addr_expr,
538 size = sizeofIRType(typeOfIRExpr(bb->tyenv, data_expr));
541 IRTemp tmp = newIRTemp(bb->tyenv, typeOfIRExpr(bb->tyenv, addr_expr));
542 addStmtToIRSB(bb, IRStmt_WrTmp(tmp, addr_expr));
544 instr_trace_mem_store(bb, addr_expr, NULL, data_expr, guard_expr);
547 if (!s_check_stack_accesses && is_stack_access(bb, addr_expr))
590 addStmtToIRSB(bb, IRStmt_Dirty(di));
603 IRSB* bb;
607 /* Set up BB */
608 bb = emptyIRSB();
609 bb->tyenv = deepCopyIRTypeEnv(bb_in->tyenv);
610 bb->next = deepCopyIRExpr(bb_in->next);
611 bb->jumpkind = bb_in->jumpkind;
612 bb->offsIP = bb_in->offsIP;
631 addStmtToIRSB(bb, st);
644 addStmtToIRSB(bb, st);
649 instrument_store(bb, st->Ist.Store.addr, st->Ist.Store.data,
651 addStmtToIRSB(bb, st);
659 instrument_store(bb, addr, data, sg->guard);
660 addStmtToIRSB(bb, st);
672 addr_expr = instr_trace_mem_load(bb, addr_expr,
675 instrument_load(bb, lg->addr,
677 addStmtToIRSB(bb, st);
687 addr_expr = instr_trace_mem_load(bb, addr_expr,
691 instrument_load(bb, addr_expr, sizeofIRType(data->Iex.Load.ty),
695 addStmtToIRSB(bb, st);
717 addStmtToIRSB(bb, IRStmt_Dirty(di));
726 addStmtToIRSB(bb, IRStmt_Dirty(di));
733 addStmtToIRSB(bb, st);
751 dataSize = sizeofIRType(typeOfIRExpr(bb->tyenv, cas->dataLo));
756 instr_trace_mem_store(bb, cas->addr, cas->dataHi, cas->dataLo,
759 instrument_load(bb, cas->addr, dataSize, NULL/*no guard*/);
761 addStmtToIRSB(bb, st);
777 addr_expr = instr_trace_mem_load(bb, addr_expr,
781 instrument_load(bb, addr_expr, sizeofIRType(dataTy),
786 instr_trace_mem_store(bb, st->Ist.LLSC.addr, NULL,
790 addStmtToIRSB(bb, st);
800 addStmtToIRSB(bb, st);
809 return bb;