Pin
 All Classes Files Functions Variables Typedefs Enumerations Enumerator Groups Pages
Macros | Typedefs | Enumerations | Functions | Variables
pin_client.cpp File Reference
#include "level_base.H"
#include "level_core.H"
#include "level_imgio.H"
#include "level_vmclient.H"
#include "level_pinclient.H"
#include <set>
#include <map>
#include <algorithm>
#include <stdlib.h>
#include "my_elf.h"
#include "my_unistd.H"
#include <sys/syscall.h>
#include <iostream>

Macros

#define EnterPinClientSlaveMode()   CheckPinClientLock(__FUNCTION__)
 
#define ExitPinClientSlaveMode()   CheckPinClientLock(__FUNCTION__)
 
#define LOG_IMAGE(s)   if(MessageTypeLogImage.on()) ClientInt()->_VmLog("IMAGE", s);
 
#define LOG_SYM(s)   if(MessageTypeLogSym.on()) ClientInt()->_VmLog("SYMBOLS", s);
 
#define LOG_PROBE(s)   if(MessageTypeLogProbe.on()) ClientInt()->_VmLog("PROBE", s);
 
#define LOG_FETCH_RTN_INS(s)   if(MessageTypeLogFetchRtnIns.on()) ClientInt()->_VmLog("FETCH_RTN_INS", s);
 
#define LOG_UNWIND(s)   if(MessageTypeLogUnwind.on()) ClientInt()->_VmLog("UNWIND", s);
 
#define LOG_BUFFER(s)   if(MessageTypeLogBuffer.on()) ClientInt()->_VmLog("BUFFER", s);
 

Typedefs

typedef TRACE_CLASS * LEVEL_PINCLIENT::TRACE
 
typedef COMPLEX_CALLBACKVAL_BASE * LEVEL_PINCLIENT::PIN_CALLBACK
 
typedef VOID(* LEVEL_PINCLIENT::REMOVE_INSTRUMENTATION_CALLBACK )(VOID *v)
 
typedef VOID(* LEVEL_PINCLIENT::DETACH_CALLBACK )(VOID *v)
 
typedef VOID(* LEVEL_PINCLIENT::DETACH_PROBED_CALLBACK )(VOID *v)
 
typedef VOID(* LEVEL_PINCLIENT::ATTACH_PROBED_CALLBACK )(VOID *v)
 
typedef VOID(* LEVEL_PINCLIENT::APPLICATION_START_CALLBACK )(VOID *v)
 
typedef VOID(* LEVEL_PINCLIENT::FINI_CALLBACK )(INT32 code, VOID *v)
 
typedef size_t(* LEVEL_PINCLIENT::FETCH_CALLBACK )(void *buf, ADDRINT addr, size_t size, EXCEPTION_INFO *pExceptInfo, VOID *v)
 
typedef VOID(* LEVEL_PINCLIENT::OUT_OF_MEMORY_CALLBACK )(size_t size, VOID *v)
 
typedef VOID(* LEVEL_PINCLIENT::PREPARE_FOR_ATEXIT_CALLBACK )(VOID *v)
 
typedef ADDRINT(PIN_FAST_ANALYSIS_CALLLEVEL_PINCLIENT::MEMORY_ADDR_TRANS_CALLBACK )(PIN_MEM_TRANS_INFO *memTransInfo, VOID *v)
 
typedef VOID(* LEVEL_PINCLIENT::FORK_CALLBACK )(THREADID threadid, const CONTEXT *ctxt, VOID *v)
 
typedef VOID(* LEVEL_PINCLIENT::THREAD_START_CALLBACK )(THREADID threadIndex, CONTEXT *ctxt, INT32 flags, VOID *v)
 
typedef VOID(* LEVEL_PINCLIENT::THREAD_FINI_CALLBACK )(THREADID threadIndex, const CONTEXT *ctxt, INT32 code, VOID *v)
 
typedef VOID(* LEVEL_PINCLIENT::CONTEXT_CHANGE_CALLBACK )(THREADID threadIndex, CONTEXT_CHANGE_REASON reason, const CONTEXT *from, CONTEXT *to, INT32 info, VOID *v)
 
typedef VOID(* LEVEL_PINCLIENT::SYSCALL_ENTRY_CALLBACK )(THREADID threadIndex, CONTEXT *ctxt, SYSCALL_STANDARD std, VOID *v)
 
typedef VOID(* LEVEL_PINCLIENT::SYSCALL_EXIT_CALLBACK )(THREADID threadIndex, CONTEXT *ctxt, SYSCALL_STANDARD std, VOID *v)
 
typedef BOOL(* LEVEL_PINCLIENT::INTERCEPT_SIGNAL_CALLBACK )(THREADID tid, INT32 sig, CONTEXT *ctxt, BOOL hasHandler, const EXCEPTION_INFO *pExceptInfo, VOID *v)
 
typedef VOID(* LEVEL_PINCLIENT::PROBES_INSERTED_CALLBACK )(IMG img, VOID *v)
 
typedef VOID *(* LEVEL_PINCLIENT::TRACE_BUFFER_CALLBACK )(BUFFER_ID id, THREADID tid, const CONTEXT *ctxt, VOID *buf, UINT64 numElements, VOID *v)
 
typedef VOID(* LEVEL_PINCLIENT::INS_INSTRUMENT_CALLBACK )(INS ins, VOID *v)
 
typedef VOID(* LEVEL_PINCLIENT::TRACE_INSTRUMENT_CALLBACK )(TRACE trace, VOID *v)
 
typedef VOID(* LEVEL_PINCLIENT::RTN_INSTRUMENT_CALLBACK )(RTN rtn, VOID *v)
 

Enumerations

enum  REPLAY_MODE {
  REPLAY_MODE_NONE = 0x00,
  LEVEL_PINCLIENT::REPLAY_MODE_IMAGEOPS = 0x01,
  REPLAY_MODE_ALL = REPLAY_MODE_IMAGEOPS
}
 
enum  LEVEL_PINCLIENT::PROBE_MODE {
  PROBE_MODE_DEFAULT = 0,
  PROBE_MODE_ALLOW_RELOCATION = (1<<0)
}
 
enum  LEVEL_PINCLIENT::FPOINT {
  LEVEL_PINCLIENT::FPOINT_BEFORE,
  LEVEL_PINCLIENT::FPOINT_AFTER_IN_PARENT,
  LEVEL_PINCLIENT::FPOINT_AFTER_IN_CHILD
}
 
enum  CONDINSTSTATE {
  CONDINST_NORMAL,
  CONDINST_IF,
  CONDINST_THEN
}
 

Functions

GLOBALCONST PIN_CALLBACK LEVEL_PINCLIENT::PIN_CALLBACK_INVALID (0)
 
VOID LEVEL_PINCLIENT::VmFunctionNotInitialized ()
 
LOCALFUN VOID LEVEL_PINCLIENT::PIN_RemoveToolCallbacks ()
 
LOCALVAR KNOB< BOOL > LEVEL_PINCLIENT::KnobProfile (KNOB_MODE_WRITEONCE,"supported:stat","profile","0","print amount of memory dynamically allocated but not yet freed by the tool")
 
BOOL LEVEL_PINCLIENT::IsThreadInFiniCallback (OS_THREAD_ID sysId)
 
LOCALFUN VOID LEVEL_PINCLIENT::SetProcessExiting ()
 
LOCALFUN VOID LEVEL_PINCLIENT::Shutdown (INT32 exitCode, BOOL waitToolThreads)
 
LOCALFUN VOID LEVEL_PINCLIENT::DoInstructions (TRACE trace)
 
LOCALFUN BOOL LEVEL_PINCLIENT::CheckNoJITCallbacks ()
 
LOCALFUN BOOL LEVEL_PINCLIENT::CheckNoProbeCallbacks ()
 
LOCALINLINE OS_THREAD_ID LEVEL_PINCLIENT::GetCurrentSysId ()
 
OS_THREAD_ID LEVEL_PINCLIENT::GetCurrentSysIdById (THREADID tid)
 
LOCALVAR KNOB< BOOL > LEVEL_PINCLIENT::KnobCheckLocks (KNOB_MODE_WRITEONCE,"supported:message","checklocks","1","Check locks are used correctly")
 
LOCALFUN VOID LEVEL_PINCLIENT::InitClientLock ()
 
VOID LEVEL_PINCLIENT::CheckPinClientLock (const CHAR *funname)
 
VOID LEVEL_PINCLIENT::PIN_LockClient ()
 
VOID LEVEL_PINCLIENT::PIN_UnlockClient ()
 
BOOL LEVEL_PINCLIENT::PIN_TryClientLock ()
 
BOOL LEVEL_PINCLIENT::PIN_CallerOwnsClientMutex (OS_THREAD_ID osid)
 
VOID LEVEL_PINCLIENT::EnterPinClientMasterMode ()
 
VOID LEVEL_PINCLIENT::ExitPinClientMasterMode ()
 
GLOBALDLLFUN PINCLIENTINT * LEVEL_PINCLIENT::ClientInt ()
 
GLOBALDLLCFUN PINCLIENTINT * LEVEL_PINCLIENT::ClientIntC ()
 
LOCALFUN BOOL LEVEL_PINCLIENT::TraceWithFunctionReplacement (TRACE trace)
 
LOCALFUN size_t LEVEL_PINCLIENT::InstFetcher (void *copyBuf, const VOID *address, size_t maxSizeToCopy, EXCEPTION_INFO *pExceptInfo)
 
LOCALFUN VOID LEVEL_PINCLIENT::SetInTraceCallbacks ()
 
LOCALFUN VOID LEVEL_PINCLIENT::ReSetInTraceCallbacks ()
 
BOOL LEVEL_PINCLIENT::GetInTraceCallbacks ()
 
VOID LEVEL_PINCLIENT::CallTraceCallbacks (REGION *region)
 
INS LEVEL_PINCLIENT::TraceFirstIns (ADDRINT currTraceAddr)
 
LOCALFUN VOID LEVEL_PINCLIENT::DoTraceInserted (REGION *region)
 
LOCALFUN VOID LEVEL_PINCLIENT::CallFinis (INT32 code)
 
LOCALFUN VOID LEVEL_PINCLIENT::NotifyOutOfMemory (size_t size)
 
LOCALFUN VOID LEVEL_PINCLIENT::NotifyPrepareForAtExit ()
 
LOCALFUN ADDRINT
PIN_FAST_ANALYSIS_CALL 
LEVEL_PINCLIENT::CallMemoryAddrTrans (PIN_MEM_TRANS_INFO *memTransInfo, void *)
 
LOCALFUN VOID LEVEL_PINCLIENT::CallForksBefore (THREADID threadId, const CONTEXT *ctxt)
 
LOCALFUN VOID LEVEL_PINCLIENT::CallForksAfterInParent (THREADID threadId, const CONTEXT *ctxt)
 
LOCALFUN VOID LEVEL_PINCLIENT::CallForksAfterInChild (THREADID threadId, const CONTEXT *ctxt)
 
VOID LEVEL_PINCLIENT::DoDetachs ()
 
VOID LEVEL_PINCLIENT::NotifyDetachCompletedJitMode ()
 
LOCALFUN VOID LEVEL_PINCLIENT::ImageInitializeFirst ()
 
LOCALFUN VOID LEVEL_PINCLIENT::CallApplicationStart ()
 
VOID LEVEL_PINCLIENT::DoDetachsProbed ()
 
VOID LEVEL_PINCLIENT::CallDetachCompletionCallback ()
 
VOID LEVEL_PINCLIENT::DoAttachsProbed ()
 
LOCALFUN VOID LEVEL_PINCLIENT::InitializeClientTls (THREADID threadIndex)
 
LOCALFUN VOID LEVEL_PINCLIENT::DestroyClientTls (THREADID threadIndex)
 
LOCALFUN VOID LEVEL_PINCLIENT::CallThreadStarts (THREADID threadIndex, CONTEXT *ctxt, INT32 flags)
 
LOCALFUN VOID LEVEL_PINCLIENT::CallThreadFinis (THREADID threadIndex, const CONTEXT *ctxt, INT32 code)
 
LOCALFUN VOID LEVEL_PINCLIENT::CallContextChanges (THREADID threadIndex, CONTEXT_CHANGE_REASON reason, const CONTEXT *from, CONTEXT *to, INT32 info)
 
LOCALFUN VOID LEVEL_PINCLIENT::CallSyscallEntry (THREADID threadIndex, CONTEXT *ctxt, SYSCALL_STANDARD std)
 
LOCALFUN VOID LEVEL_PINCLIENT::CallSyscallExit (THREADID threadIndex, CONTEXT *ctxt, SYSCALL_STANDARD std)
 
LOCALFUN BOOL LEVEL_PINCLIENT::CallInterceptSignal (THREADID tid, INT32 sig, CONTEXT *ctxt, BOOL hasHandler, const EXCEPTION_INFO *pExceptInfo)
 
VOID LEVEL_PINCLIENT::CallProbesInserted (IMG img)
 
VOID LEVEL_PINCLIENT::PIN_WriteErrorMessage (const char *msg, INT32 type, PIN_ERR_SEVERITY_TYPE severity, INT32 num,...)
 
LOCALFUN VOID LEVEL_PINCLIENT::DoReplaceFunByNativeCall (INS ins, VOID *v)
 
LOCALFUN VOID LEVEL_PINCLIENT::DoInstrumentForFunReplacement (REGION *region, BOOL firstInstIsReplaceable)
 
AFUNPTR LEVEL_PINCLIENT::RTN_Replace (RTN replacedRtn, AFUNPTR replacementFun)
 
AFUNPTR LEVEL_PINCLIENT::RTN_ReplaceSignature (RTN replacedRtn, AFUNPTR replacementFun,...)
 
AFUNPTR LEVEL_PINCLIENT::RTN_ReplaceProbed (RTN replacedRtn, AFUNPTR replacementFun)
 
AFUNPTR LEVEL_PINCLIENT::RTN_ReplaceProbedEx (RTN replacedRtn, PROBE_MODE mode, AFUNPTR replacementFun)
 
VOID LEVEL_PINCLIENT::CheckNotInCallback (THREADID tid, const char *function)
 
VOID LEVEL_PINCLIENT::PIN_CallApplicationFunction (const CONTEXT *ctxt, THREADID tid, CALLINGSTD_TYPE cstype, AFUNPTR origFunPtr,...)
 
BOOL LEVEL_PINCLIENT::INS_IsAddedForFunctionReplacement (INS ins)
 
PIN_DEPRECATED_API VOID LEVEL_PINCLIENT::PIN_RegisterItcAuxCallBackPushFun (AFUNPTR callBackPushFun)
 
PIN_DEPRECATED_API VOID LEVEL_PINCLIENT::RTN_ComplexReplaceWithUninstrumentedRoutine (RTN replacedRtn, AFUNPTR replacementFun)
 
PIN_DEPRECATED_API ADDRINT LEVEL_PINCLIENT::PIN_FindAlternateAppStack ()
 
LOCALFUN VOID LEVEL_PINCLIENT::InitializeCallBacks ()
 
VOID LEVEL_PINCLIENT::CALLBACK_SetExecutionPriority (PIN_CALLBACK callback, INT32 priority)
 
INT32 LEVEL_PINCLIENT::CALLBACK_GetExecutionPriority (PIN_CALLBACK callback)
 
PIN_CALLBACK LEVEL_PINCLIENT::TRACE_AddInstrumentFunction (TRACE_INSTRUMENT_CALLBACK fun, VOID *val)
 
PIN_CALLBACK LEVEL_PINCLIENT::CODECACHE_AddTraceInsertedFunction (TRACE_INSTRUMENT_CALLBACK fun, VOID *val)
 
PIN_CALLBACK LEVEL_PINCLIENT::INS_AddInstrumentFunction (INS_INSTRUMENT_CALLBACK fun, VOID *val)
 
PIN_CALLBACK LEVEL_PINCLIENT::PIN_AddFiniFunction (FINI_CALLBACK fun, VOID *val)
 
PIN_CALLBACK LEVEL_PINCLIENT::PIN_AddFiniUnlockedFunction (FINI_CALLBACK fun, VOID *val)
 
VOID LEVEL_PINCLIENT::PIN_AddFetchFunction (FETCH_CALLBACK fun, VOID *val)
 
size_t LEVEL_PINCLIENT::PIN_FetchCode (void *copyBuf, const VOID *address, size_t maxSize, EXCEPTION_INFO *pExceptInfo)
 
VOID LEVEL_PINCLIENT::PIN_AddOutOfMemoryFunction (OUT_OF_MEMORY_CALLBACK fun, VOID *val)
 
VOID LEVEL_PINCLIENT::PIN_AddPrepareForAtExitFunction (PREPARE_FOR_ATEXIT_CALLBACK fun, VOID *val)
 
VOID LEVEL_PINCLIENT::PIN_AddMemoryAddressTransFunction (MEMORY_ADDR_TRANS_CALLBACK fun, VOID *val)
 
MEMORY_ADDR_TRANS_CALLBACK LEVEL_PINCLIENT::PIN_GetMemoryAddressTransFunction ()
 
PIN_CALLBACK LEVEL_PINCLIENT::PIN_AddDetachFunction (DETACH_CALLBACK fun, VOID *val)
 
PIN_CALLBACK LEVEL_PINCLIENT::PIN_AddDetachFunctionProbed (DETACH_PROBED_CALLBACK fun, VOID *val)
 
PIN_CALLBACK LEVEL_PINCLIENT::PIN_AddThreadStartFunction (THREAD_START_CALLBACK fun, VOID *val)
 
PIN_CALLBACK LEVEL_PINCLIENT::PIN_AddThreadAttachProbedFunction (THREAD_ATTACH_PROBED_CALLBACK fun, VOID *val)
 
PIN_CALLBACK LEVEL_PINCLIENT::PIN_AddThreadDetachProbedFunction (THREAD_DETACH_PROBED_CALLBACK fun, VOID *val)
 
PIN_CALLBACK LEVEL_PINCLIENT::PIN_AddApplicationStartFunction (APPLICATION_START_CALLBACK fun, VOID *val)
 
PIN_CALLBACK LEVEL_PINCLIENT::PIN_AddThreadFiniFunction (THREAD_FINI_CALLBACK fun, VOID *val)
 
PIN_CALLBACK LEVEL_PINCLIENT::PIN_AddContextChangeFunction (CONTEXT_CHANGE_CALLBACK fun, VOID *val)
 
PIN_CALLBACK LEVEL_PINCLIENT::PIN_AddSyscallEntryFunction (SYSCALL_ENTRY_CALLBACK fun, VOID *val)
 
PIN_CALLBACK LEVEL_PINCLIENT::PIN_AddSyscallExitFunction (SYSCALL_EXIT_CALLBACK fun, VOID *val)
 
BOOL LEVEL_PINCLIENT::PIN_InterceptSignal (INT32 sig, INTERCEPT_SIGNAL_CALLBACK fun, VOID *val)
 
BOOL LEVEL_PINCLIENT::PIN_UnblockSignal (INT32 sig, BOOL enable)
 
PIN_CALLBACK LEVEL_PINCLIENT::PIN_AddProbesInsertedFunction (PROBES_INSERTED_CALLBACK fun, VOID *val)
 
PIN_CALLBACK LEVEL_PINCLIENT::PIN_AddForkFunction (FPOINT point, FORK_CALLBACK fun, VOID *val)
 
VOID LEVEL_PINCLIENT::PIN_RemoveInstrumentation ()
 
VOID LEVEL_PINCLIENT::PIN_RemoveFiniFunctions ()
 
VOID LEVEL_PINCLIENT::PIN_Detach ()
 
VOID LEVEL_PINCLIENT::PIN_DetachProbed ()
 
VOID LEVEL_PINCLIENT::PIN_AttachProbed (ATTACH_PROBED_CALLBACK fun, VOID *val)
 
LOCALFUN VOID LEVEL_PINCLIENT::CheckAndUpdateCondInstState (char const *typeName, CONDINSTSTATE &lastState, CONDINSTSTATE currState)
 
VOID LEVEL_PINCLIENT::INS_InsertPredicatedCall (INS ins, IPOINT ipoint, AFUNPTR funptr,...)
 
VOID LEVEL_PINCLIENT::INS_InsertCall (INS ins, IPOINT action, AFUNPTR funptr,...)
 
VOID LEVEL_PINCLIENT::INS_InsertIfCall (INS ins, IPOINT action, AFUNPTR funptr,...)
 
VOID LEVEL_PINCLIENT::INS_InsertThenCall (INS ins, IPOINT action, AFUNPTR funptr,...)
 
VOID LEVEL_PINCLIENT::INS_InsertIfPredicatedCall (INS ins, IPOINT action, AFUNPTR funptr,...)
 
VOID LEVEL_PINCLIENT::INS_InsertThenPredicatedCall (INS ins, IPOINT action, AFUNPTR funptr,...)
 
VOID LEVEL_PINCLIENT::AInsertCall (INS ins, IPOINT ipoint, PREDICATE pred, COND_CALL_TYPE condCallType, AFUNPTR funptr, va_list ap)
 
VOID LEVEL_PINCLIENT::AInsertVersionCase (INS ins, REG reg, INT32 case_value, ADDRINT version, va_list ap)
 
LOCALFUN VOID LEVEL_PINCLIENT::StartProgram ()
 
VOID LEVEL_PINCLIENT::PIN_StartProgram ()
 
VOID LEVEL_PINCLIENT::PIN_StartProgramProbed ()
 
LOCALFUN VOID LEVEL_PINCLIENT::DumpCharmVersion ()
 
LOCALVAR KNOB_COMMENT LEVEL_PINCLIENT::KnobPintoolFamily ("pintool","Pin tools switches")
 
LOCALVAR KNOB_COMMENT LEVEL_PINCLIENT::KnobGeneralFamily ("supported","General developer switches")
 
LOCALVAR KNOB_COMMENT LEVEL_PINCLIENT::KnobBasicFamily ("supported:basic","Basic switches")
 
LOCALVAR KNOB_COMMENT LEVEL_PINCLIENT::KnobDebugFamily ("supported:debug","General switches")
 
LOCALVAR KNOB_COMMENT LEVEL_PINCLIENT::KnobMessageFamily ("supported:message","Message switches")
 
LOCALVAR KNOB_COMMENT LEVEL_PINCLIENT::KnobRegionFamily ("supported:region","Region generation switches")
 
LOCALVAR KNOB_COMMENT LEVEL_PINCLIENT::KnobRegAllocFamily ("supported:regalloc","Register allocation switches")
 
LOCALVAR KNOB< string > LEVEL_PINCLIENT::KnobLogFile (KNOB_MODE_WRITEONCE,"pintool","logfile","pintool.log","The log file path and file name")
 
LOCALVAR KNOB< BOOL > LEVEL_PINCLIENT::KnobUniqueLogFiles (KNOB_MODE_WRITEONCE,"pintool","unique_logfile","0","The log file names will contain the pid")
 
LOCALVAR KNOB< BOOL > LEVEL_PINCLIENT::KnobHelp1 (KNOB_MODE_WRITEONCE,"pintool","help","0","Print help message (Return failure of PIN_Init() in order to allow the tool\ to print help message)")
 
LOCALVAR KNOB< BOOL > LEVEL_PINCLIENT::KnobHelp2 (KNOB_MODE_WRITEONCE,"pintool","h","0","Print help message (Return failure of PIN_Init() in order to allow the tool\ to print help message)")
 
KNOB< BOOL > LEVEL_PINCLIENT::KnobAppendLogFile (KNOB_MODE_WRITEONCE,"supported","append_logfile","0","Append to the end of the log file if it already exists")
 
MESSAGE_TYPE LEVEL_PINCLIENT::MessageTypeLogImage ("log_image","", false, false, false, false, LOGTYPE_LOGFILE,"pin log: image API")
 
MESSAGE_TYPE LEVEL_PINCLIENT::MessageTypeLogSym ("log_sym","", false, false, false, false, LOGTYPE_LOGFILE,"pin log: symbol API")
 
MESSAGE_TYPE LEVEL_PINCLIENT::MessageTypeLogProbe ("log_probe","", false, false, false, false, LOGTYPE_LOGFILE,"pin log: probe information")
 
MESSAGE_TYPE LEVEL_PINCLIENT::MessageTypeLogBuffer ("log_buffer","", false, false, false, true, LOGTYPE_LOGFILE,"pin log: buffering")
 
MESSAGE_TYPE LEVEL_PINCLIENT::MessageTypeLogUnwind ("log_unwind","", false, false, false, false, LOGTYPE_LOGFILE,"pin log: unwind")
 
MESSAGE_TYPE LEVEL_PINCLIENT::MessageTypeLogFetchRtnIns ("log_fetch_rtn_ins","", false, false, false, false, LOGTYPE_LOGFILE,"pin log: fetch rtn ins information")
 
PIN_DEPRECATED_API BOOL LEVEL_PINCLIENT::ParseCommandLine (int xargc, CHAR **xargv)
 
LOCALFUN BOOL LEVEL_PINCLIENT::PIN_ParseCommandLine (int xargc, CHAR **xargv, BOOL standAlone)
 
BOOL LEVEL_PINCLIENT::PIN_Init (INT32 argc, CHAR **argv)
 
VOID LEVEL_PINCLIENT::PIN_SetReplayMode (UINT32 flags)
 
TRACE LEVEL_PINCLIENT::TRACE_Allocate (ADDRINT addr)
 
TRACE LEVEL_PINCLIENT::TRACE_AllocateForProbe (PROBE_TYPE probeType, ADDRINT addr, RTN rtn, USIZE probeSize, BOOL mustReadAtLeastProbesizeBytes)
 
ADDRINT LEVEL_PINCLIENT::TRACE_RelocateOriginalInsAddr (ADDRINT addr)
 
VOID LEVEL_PINCLIENT::TRACE_Deallocate (TRACE trace)
 
RTN LEVEL_PINCLIENT::TRACE_CodeRtn (TRACE trace)
 
VOID LEVEL_PINCLIENT::TRACE_InsertCall (TRACE trace, IPOINT action, AFUNPTR funptr,...)
 
VOID LEVEL_PINCLIENT::TRACE_InsertIfCall (TRACE trace, IPOINT action, AFUNPTR funptr,...)
 
VOID LEVEL_PINCLIENT::TRACE_InsertThenCall (TRACE trace, IPOINT action, AFUNPTR funptr,...)
 
BBL LEVEL_PINCLIENT::TRACE_BblHead (TRACE trace)
 
BBL LEVEL_PINCLIENT::TRACE_BblTail (TRACE trace)
 
BOOL LEVEL_PINCLIENT::TRACE_Original (TRACE trace)
 
ADDRINT LEVEL_PINCLIENT::TRACE_Address (TRACE trace)
 
USIZE LEVEL_PINCLIENT::TRACE_Size (TRACE trace)
 
RTN LEVEL_PINCLIENT::TRACE_Rtn (TRACE trace)
 
BOOL LEVEL_PINCLIENT::TRACE_HasFallThrough (TRACE trace)
 
UINT32 LEVEL_PINCLIENT::TRACE_NumBbl (TRACE trace)
 
UINT32 LEVEL_PINCLIENT::TRACE_NumIns (TRACE trace)
 
USIZE LEVEL_PINCLIENT::TRACE_StubSize (TRACE trace)
 
VOID LEVEL_PINCLIENT::BBL_InsertCall (BBL bbl, IPOINT action, AFUNPTR funptr,...)
 
VOID LEVEL_PINCLIENT::BBL_InsertIfCall (BBL bbl, IPOINT action, AFUNPTR funptr,...)
 
VOID LEVEL_PINCLIENT::BBL_InsertThenCall (BBL bbl, IPOINT action, AFUNPTR funptr,...)
 
BOOL LEVEL_PINCLIENT::BBL_HasFallThrough (BBL bbl)
 
BOOL LEVEL_PINCLIENT::PIN_SupportsProcessorState (PROCESSOR_STATE state)
 
BOOL LEVEL_PINCLIENT::PIN_ContextContainsState (CONTEXT *ctxt, PROCESSOR_STATE state)
 
VOID LEVEL_PINCLIENT::PIN_SetContextRegval (CONTEXT *ctxt, REG reg, const UINT8 *val)
 
VOID LEVEL_PINCLIENT::PIN_GetContextRegval (const CONTEXT *ctxt, REG reg, UINT8 *val)
 
VOID LEVEL_PINCLIENT::PIN_SetContextReg (CONTEXT *ctxt, REG reg, ADDRINT val)
 
ADDRINT LEVEL_PINCLIENT::PIN_GetContextReg (const CONTEXT *ctxt, REG reg)
 
VOID LEVEL_PINCLIENT::PIN_SetContextFPState (CONTEXT *ctxt, const FPSTATE *fpstate)
 
VOID LEVEL_PINCLIENT::PIN_GetContextFPState (const CONTEXT *ctxt, FPSTATE *fpstate)
 
VOID LEVEL_PINCLIENT::PIN_SaveContext (const CONTEXT *ctxtFrom, CONTEXT *ctxtTo)
 
VOID LEVEL_PINCLIENT::PIN_ExecuteAt (const CONTEXT *ctxt)
 
VOID LEVEL_PINCLIENT::PIN_SetSyscallArgument (CONTEXT *ctxt, SYSCALL_STANDARD std, UINT32 argNum, ADDRINT val)
 
ADDRINT LEVEL_PINCLIENT::PIN_GetSyscallArgument (const CONTEXT *ctxt, SYSCALL_STANDARD std, UINT32 argNum)
 
VOID LEVEL_PINCLIENT::PIN_SetSyscallNumber (CONTEXT *ctxt, SYSCALL_STANDARD std, ADDRINT val)
 
ADDRINT LEVEL_PINCLIENT::PIN_GetSyscallNumber (const CONTEXT *ctxt, SYSCALL_STANDARD std)
 
ADDRINT LEVEL_PINCLIENT::PIN_GetSyscallReturn (const CONTEXT *ctxt, SYSCALL_STANDARD std)
 
ADDRINT LEVEL_PINCLIENT::PIN_GetSyscallErrno (const CONTEXT *ctxt, SYSCALL_STANDARD std)
 
VOID LEVEL_PINCLIENT::PIN_SetPhysicalContextReg (PHYSICAL_CONTEXT *pPhysCtxt, REG reg, ADDRINT val)
 
ADDRINT LEVEL_PINCLIENT::PIN_GetPhysicalContextReg (const PHYSICAL_CONTEXT *pPhysCtxt, REG reg)
 
VOID LEVEL_PINCLIENT::PIN_SetPhysicalContextFPState (PHYSICAL_CONTEXT *pPhysCtxt, const VOID *fpstate)
 
VOID LEVEL_PINCLIENT::PIN_GetPhysicalContextFPState (const PHYSICAL_CONTEXT *pPhysCtxt, VOID *fpstate)
 
VOID LEVEL_PINCLIENT::PIN_RaiseException (const CONTEXT *ctxt, THREADID tid, const EXCEPTION_INFO *pExceptInfo)
 
OS_THREAD_ID LEVEL_PINCLIENT::PIN_ClientFork ()
 
BOOL LEVEL_PINCLIENT::PIN_SpawnApplicationThread (const CONTEXT *ctxt)
 
LOCALFUN VOID LEVEL_PINCLIENT::RecordInstructionMutation (INS ins, EXT ext, BOOL noDuplicates)
 
PIN_DEPRECATED_API BOOL LEVEL_PINCLIENT::INS_ChangeMemOpToBaseRegisterAddressMode (INS ins, MEMORY_TYPE mtype, REG newBase)
 
PIN_DEPRECATED_API BOOL LEVEL_PINCLIENT::INS_RewriteMemoryAddressingToBaseRegisterOnly (INS ins, MEMORY_TYPE mtype, REG newBase)
 
VOID LEVEL_PINCLIENT::INS_RewriteMemoryOperand (INS ins, UINT32 memindex, REG reg)
 
VOID LEVEL_PINCLIENT::INS_InsertIndirectJump (INS ins, IPOINT ipoint, REG reg)
 
VOID LEVEL_PINCLIENT::INS_InsertDirectJump (INS ins, IPOINT ipoint, ADDRINT tgt)
 
VOID LEVEL_PINCLIENT::GetVmLock ()
 
VOID LEVEL_PINCLIENT::ReleaseVmLock ()
 
REG LEVEL_PINCLIENT::PIN_ClaimToolRegister ()
 
CHAR * LEVEL_PINCLIENT::PIN_VmFullPath ()
 
BOOL LEVEL_PINCLIENT::PIN_IsProcessExiting ()
 
NORETURN VOID LEVEL_PINCLIENT::PIN_ExitProcess (INT32 exitCode)
 
INT LEVEL_PINCLIENT::PIN_GetPid ()
 
VOID LEVEL_PINCLIENT::INS_Delete (INS ins)
 
VOID LEVEL_PINCLIENT::IARGLIST_AddArguments (IARGLIST args,...)
 
IARGLIST LEVEL_PINCLIENT::IARGLIST_Alloc ()
 
VOID LEVEL_PINCLIENT::IARGLIST_Free (IARGLIST args)
 
size_t LEVEL_PINCLIENT::PIN_SafeCopy (VOID *dst, const VOID *src, size_t size)
 
size_t LEVEL_PINCLIENT::PIN_SafeCopyEx (VOID *dst, const VOID *src, size_t size, EXCEPTION_INFO *pExceptInfo)
 
VOID LEVEL_PINCLIENT::Dummy ()
 
VOID LEVEL_PINCLIENT::CheckPinInitialized ()
 
VOID LEVEL_PINCLIENT::INS_InsertFillBuffer (INS ins, IPOINT action, BUFFER_ID id,...)
 
VOID LEVEL_PINCLIENT::INS_InsertFillBufferPredicated (INS ins, IPOINT action, BUFFER_ID id,...)
 
VOID LEVEL_PINCLIENT::INS_InsertFillBufferThen (INS ins, IPOINT action, BUFFER_ID id,...)
 
VOID LEVEL_PINCLIENT::BBL_InsertFillBuffer (BBL bbl, IPOINT action, BUFFER_ID id,...)
 
VOID LEVEL_PINCLIENT::RTN_InsertFillBuffer (RTN rtn, IPOINT action, BUFFER_ID id,...)
 
VOID * LEVEL_PINCLIENT::CallBufferFullCallback (BUFFER_ID id, THREADID tid, CONTEXT *ctxt, VOID *buf, UINT64 numElts)
 
VOID LEVEL_PINCLIENT::CallAllBufferFullCallbacks (THREADID tid, CONTEXT *ctxt)
 
BUFFER_ID LEVEL_PINCLIENT::PIN_DefineTraceBuffer (size_t recordSize, UINT32 numPages, TRACE_BUFFER_CALLBACK fun, VOID *val)
 
VOID * LEVEL_PINCLIENT::PIN_AllocateBuffer (BUFFER_ID id)
 
VOID LEVEL_PINCLIENT::PIN_DeallocateBuffer (BUFFER_ID id, VOID *buf)
 
BOOL LEVEL_PINCLIENT::PIN_IsActionPending (THREADID tid)
 
UINT32 LEVEL_PINCLIENT::PIN_GetInitialThreadCount ()
 
VOID * LEVEL_PINCLIENT::PIN_GetBufferPointer (CONTEXT *const ctxt, BUFFER_ID id)
 
BOOL LEVEL_PINCLIENT::PIN_CheckReadAccess (VOID *addr)
 
BOOL LEVEL_PINCLIENT::PIN_CheckWriteAccess (VOID *addr)
 

Variables

SECTION_END LOCALTYPE typedef
COMPLEX_CALLBACKVAL
< INS_INSTRUMENT_CALLBACK > 
LEVEL_PINCLIENT::INS_INSTRUMENT_CALLBACKVAL
 
LOCALTYPE typedef
INS_INSTRUMENT_CALLBACKVAL::FUNS 
LEVEL_PINCLIENT::INS_INSTRUMENT_CALLBACKFUNS
 
LOCALTYPE typedef
COMPLEX_CALLBACKVAL
< TRACE_INSTRUMENT_CALLBACK > 
LEVEL_PINCLIENT::TRACE_INSTRUMENT_CALLBACKVAL
 
LOCALTYPE typedef
TRACE_INSTRUMENT_CALLBACKVAL::FUNS 
LEVEL_PINCLIENT::TRACE_INSTRUMENT_CALLBACKFUNS
 
LOCALTYPE typedef
COMPLEX_CALLBACKVAL
< FINI_CALLBACK > 
LEVEL_PINCLIENT::FINI_CALLBACKVAL
 
LOCALTYPE typedef
FINI_CALLBACKVAL::FUNS 
LEVEL_PINCLIENT::FINI_CALLBACKFUNS
 
LOCALTYPE typedef
COMPLEX_CALLBACKVAL
< FORK_CALLBACK > 
LEVEL_PINCLIENT::FORK_CALLBACKVAL
 
LOCALTYPE typedef
FORK_CALLBACKVAL::FUNS 
LEVEL_PINCLIENT::FORK_CALLBACKFUNS
 
LOCALTYPE typedef
COMPLEX_CALLBACKVAL
< DETACH_CALLBACK > 
LEVEL_PINCLIENT::DETACH_CALLBACKVAL
 
LOCALTYPE typedef
DETACH_CALLBACKVAL::FUNS 
LEVEL_PINCLIENT::DETACH_CALLBACKFUNS
 
LOCALTYPE typedef
COMPLEX_CALLBACKVAL
< DETACH_PROBED_CALLBACK > 
LEVEL_PINCLIENT::DETACH_PROBED_CALLBACKVAL
 
LOCALTYPE typedef
DETACH_PROBED_CALLBACKVAL::FUNS 
LEVEL_PINCLIENT::DETACH_PROBED_CALLBACKFUNS
 
LOCALTYPE typedef
COMPLEX_CALLBACKVAL
< APPLICATION_START_CALLBACK > 
LEVEL_PINCLIENT::APPLICATION_START_CALLBACKVAL
 
LOCALTYPE typedef
APPLICATION_START_CALLBACKVAL::FUNS 
LEVEL_PINCLIENT::APPLICATION_START_CALLBACKFUNS
 
LOCALTYPE typedef
COMPLEX_CALLBACKVAL
< THREAD_START_CALLBACK > 
LEVEL_PINCLIENT::THREAD_START_CALLBACKVAL
 
LOCALTYPE typedef
THREAD_START_CALLBACKVAL::FUNS 
LEVEL_PINCLIENT::THREAD_START_CALLBACKFUNS
 
LOCALTYPE typedef
COMPLEX_CALLBACKVAL
< THREAD_ATTACH_PROBED_CALLBACK > 
LEVEL_PINCLIENT::THREAD_ATTACH_PROBED_CALLBACKVAL
 
LOCALTYPE typedef
THREAD_ATTACH_PROBED_CALLBACKVAL::FUNS 
LEVEL_PINCLIENT::THREAD_ATTACH_PROBED_CALLBACKFUNS
 
LOCALTYPE typedef
COMPLEX_CALLBACKVAL
< THREAD_DETACH_PROBED_CALLBACK > 
LEVEL_PINCLIENT::THREAD_DETACH_PROBED_CALLBACKVAL
 
LOCALTYPE typedef
THREAD_DETACH_PROBED_CALLBACKVAL::FUNS 
LEVEL_PINCLIENT::THREAD_DETACH_PROBED_CALLBACKFUNS
 
LOCALTYPE typedef
COMPLEX_CALLBACKVAL
< THREAD_FINI_CALLBACK > 
LEVEL_PINCLIENT::THREAD_FINI_CALLBACKVAL
 
LOCALTYPE typedef
THREAD_FINI_CALLBACKVAL::FUNS 
LEVEL_PINCLIENT::THREAD_FINI_CALLBACKFUNS
 
LOCALTYPE typedef
COMPLEX_CALLBACKVAL
< CONTEXT_CHANGE_CALLBACK > 
LEVEL_PINCLIENT::CONTEXT_CHANGE_CALLBACKVAL
 
LOCALTYPE typedef
CONTEXT_CHANGE_CALLBACKVAL::FUNS 
LEVEL_PINCLIENT::CONTEXT_CHANGE_CALLBACKFUNS
 
LOCALTYPE typedef
COMPLEX_CALLBACKVAL
< SYSCALL_ENTRY_CALLBACK > 
LEVEL_PINCLIENT::SYSCALL_ENTRY_CALLBACKVAL
 
LOCALTYPE typedef
SYSCALL_ENTRY_CALLBACKVAL::FUNS 
LEVEL_PINCLIENT::SYSCALL_ENTRY_CALLBACKFUNS
 
LOCALTYPE typedef
COMPLEX_CALLBACKVAL
< SYSCALL_EXIT_CALLBACK > 
LEVEL_PINCLIENT::SYSCALL_EXIT_CALLBACKVAL
 
LOCALTYPE typedef
SYSCALL_EXIT_CALLBACKVAL::FUNS 
LEVEL_PINCLIENT::SYSCALL_EXIT_CALLBACKFUNS
 
LOCALTYPE typedef
SIMPLE_CALLBACKVAL
< INTERCEPT_SIGNAL_CALLBACK > 
LEVEL_PINCLIENT::INTERCEPT_SIGNAL_CALLBACKVAL
 
LOCALTYPE typedef std::map
< int,
INTERCEPT_SIGNAL_CALLBACKVAL > 
LEVEL_PINCLIENT::INTERCEPT_SIGNAL_MAP
 
LOCALTYPE typedef
COMPLEX_CALLBACKVAL
< PROBES_INSERTED_CALLBACK > 
LEVEL_PINCLIENT::PROBES_INSERTED_CALLBACKVAL
 
LOCALTYPE typedef
PROBES_INSERTED_CALLBACKVAL::FUNS 
LEVEL_PINCLIENT::PROBES_INSERTED_CALLBACKFUNS
 
LOCALTYPE typedef
SIMPLE_CALLBACKVAL
< TRACE_BUFFER_CALLBACK > 
LEVEL_PINCLIENT::TRACE_BUFFER_CALLBACKVAL
 
LOCALTYPE typedef std::map
< BUFFER_ID,
TRACE_BUFFER_CALLBACKVAL > 
LEVEL_PINCLIENT::TRACE_BUFFER_CALLBACK_MAP
 
LOCALVAR PINCLIENTINT LEVEL_PINCLIENT::ClientIntData
 
LOCALVAR
INS_INSTRUMENT_CALLBACKFUNS 
LEVEL_PINCLIENT::insList
 
LOCALVAR
TRACE_INSTRUMENT_CALLBACKFUNS 
LEVEL_PINCLIENT::traceList
 
LOCALVAR
TRACE_INSTRUMENT_CALLBACKFUNS 
LEVEL_PINCLIENT::traceInsertList
 
LOCALVAR OUT_OF_MEMORY_CALLBACK LEVEL_PINCLIENT::outOfMemoryFun = 0
 
LOCALVAR VOID * LEVEL_PINCLIENT::outOfMemoryVal = 0
 
LOCALVAR
PREPARE_FOR_ATEXIT_CALLBACK 
LEVEL_PINCLIENT::prepareForAtExitFun = 0
 
LOCALVAR VOID * LEVEL_PINCLIENT::prepareForAtExitVal = 0
 
LOCALVAR MEMORY_ADDR_TRANS_CALLBACK LEVEL_PINCLIENT::memoryAddrTransFun = 0
 
LOCALVAR VOID * LEVEL_PINCLIENT::memoryAddrTransVal = 0
 
LOCALVAR FINI_CALLBACKFUNS LEVEL_PINCLIENT::finiList
 
LOCALVAR FINI_CALLBACKFUNS LEVEL_PINCLIENT::finiUnlockedList
 
LOCALVAR FETCH_CALLBACK LEVEL_PINCLIENT::fetchCallbackFun = 0
 
LOCALVAR VOID * LEVEL_PINCLIENT::fetchCallbackVal = 0
 
LOCALVAR FORK_CALLBACKFUNS LEVEL_PINCLIENT::forkListBefore
 
LOCALVAR FORK_CALLBACKFUNS LEVEL_PINCLIENT::forkListAfterInParent
 
LOCALVAR FORK_CALLBACKFUNS LEVEL_PINCLIENT::forkListAfterInChild
 
LOCALVAR DETACH_CALLBACKFUNS LEVEL_PINCLIENT::detachList
 
LOCALVAR DETACH_PROBED_CALLBACKFUNS LEVEL_PINCLIENT::detachProbedList
 
LOCALVAR ATTACH_PROBED_CALLBACK LEVEL_PINCLIENT::attachProbedFun = 0
 
LOCALVAR VOID * LEVEL_PINCLIENT::attachProbedVal = 0
 
LOCALVAR
APPLICATION_START_CALLBACKFUNS 
LEVEL_PINCLIENT::appStartList
 
LOCALVAR THREAD_START_CALLBACKFUNS LEVEL_PINCLIENT::threadStartList
 
LOCALVAR
THREAD_ATTACH_PROBED_CALLBACKFUNS 
LEVEL_PINCLIENT::threadAttachProbedList
 
LOCALVAR
THREAD_DETACH_PROBED_CALLBACKFUNS 
LEVEL_PINCLIENT::threadDetachProbedList
 
LOCALVAR THREAD_FINI_CALLBACKFUNS LEVEL_PINCLIENT::threadFiniList
 
LOCALVAR
CONTEXT_CHANGE_CALLBACKFUNS 
LEVEL_PINCLIENT::contextChangeList
 
LOCALVAR SYSCALL_ENTRY_CALLBACKFUNS LEVEL_PINCLIENT::syscallEntryList
 
LOCALVAR SYSCALL_EXIT_CALLBACKFUNS LEVEL_PINCLIENT::syscallExitList
 
LOCALVAR INTERCEPT_SIGNAL_MAP LEVEL_PINCLIENT::interceptSignalMap
 
LOCALVAR
PROBES_INSERTED_CALLBACKFUNS 
LEVEL_PINCLIENT::probesInsertedList
 
LOCALVAR TRACE_BUFFER_CALLBACK_MAP LEVEL_PINCLIENT::traceBufferCallbackMap
 
LOCALVAR set< ADDRINT, less
< ADDRINT > > 
LEVEL_PINCLIENT::addrReferences
 
LOCALVAR UINT32 LEVEL_PINCLIENT::replayModeFlags
 
LOCALVAR INT32 LEVEL_PINCLIENT::ToolArgc
 
LOCALVAR CHAR ** LEVEL_PINCLIENT::ToolArgv
 
LOCALVAR volatile BOOL LEVEL_PINCLIENT::IsProcessExiting = FALSE
 
LOCALVAR OS_THREAD_ID LEVEL_PINCLIENT::IdOfThreadInFiniCallback = 0
 
LOCALVAR COMPLEX_LOCK
< OS_THREAD_ID,
1, INVALID_OS_THREAD_ID
LEVEL_PINCLIENT::PinClientMutex
 
LOCALVAR BOOL LEVEL_PINCLIENT::inTraceCallbacks = FALSE
 
LOCALVAR REPLACEDFUN::LIST LEVEL_PINCLIENT::replacedFunList
 
LOCALVAR CONDINSTSTATE LEVEL_PINCLIENT::condInstStateForIns = CONDINST_NORMAL
 
LOCALVAR PREDICATE LEVEL_PINCLIENT::insLastIfPredicate = PREDICATE_ALWAYS_TRUE
 
LOCALVAR CONDINSTSTATE LEVEL_PINCLIENT::condInstStateForTrace = CONDINST_NORMAL
 
LOCALVAR CONDINSTSTATE LEVEL_PINCLIENT::condInstStateForBbl = CONDINST_NORMAL
 

Detailed Description

Client side interface to pin vm.