c++ - What is Pc Materialization? -
i working tool called binary instrumentation called intel pin. encountered strange terminology while examining part of examples pin comes with. here relevant part:
void calltrace(trace trace, ins ins) { if (!knobtracecalls) return; if (ins_iscall(ins) && !ins_isdirectbranchorcall(ins)) { // indirect call string s = "call " + formataddress(ins_address(ins), trace_rtn(trace)); s += " -> "; ins_insertcall(ins, ipoint_before, afunptr(emitindirectcall), iarg_thread_id, iarg_ptr, new string(s), iarg_branch_target_addr, iarg_g_arg0_caller, iarg_g_arg1_caller, iarg_end); } else if (ins_isdirectbranchorcall(ins)) { // tail call? rtn sourcertn = trace_rtn(trace); rtn destrtn = rtn_findbyaddress(ins_directbranchorcalltargetaddress(ins)); if (ins_iscall(ins) // conventional call || sourcertn != destrtn // tail call ) { bool tailcall = !ins_iscall(ins); string s = ""; if (tailcall) { s += "tailcall "; } else { if( ins_isprocedurecall(ins) ) s += "call "; else { s += "pcmaterialization "; tailcall=1; } } //s += ins_mnemonic(ins) + " "; s += formataddress(ins_address(ins), trace_rtn(trace)); s += " -> "; addrint target = ins_directbranchorcalltargetaddress(ins); s += formataddress(target, rtn_findbyaddress(target)); ins_insertcall(ins, ipoint_before, afunptr(emitdirectcall), iarg_thread_id, iarg_ptr, new string(s), iarg_bool, tailcall, iarg_g_arg0_caller, iarg_g_arg1_caller, iarg_end); } } else if (ins_isret(ins)) { rtn rtn = trace_rtn(trace); #if defined(target_linux) && defined(target_ia32) // if( rtn_name(rtn) == "_dl_debug_state") return; if( rtn_valid(rtn) && rtn_name(rtn) == "_dl_runtime_resolve") return; #endif string tracestring = "return " + formataddress(ins_address(ins), rtn); ins_insertcall(ins, ipoint_before, afunptr(emitreturn), iarg_thread_id, iarg_ptr, new string(tracestring), iarg_g_result0, iarg_end); } }
this method determines instruction doing (direct call, indirect call, tail call, return , unknown pc materialization).
here full code.
so mean @ all? tried googling - no relevant results.
bool level_core::ins_ispcmaterialization ( ins ins )
returns: true if call next instruction, idiom materializing instruction pointer
Comments
Post a Comment