Pin
Functions
BBL: Single entrance, single exit sequence of instructions

Functions

VOID LEVEL_CORE::BBL_MoveAllAttributes (BBL fromBbl, BBL toBbl)
 
UINT32 LEVEL_CORE::BBL_NumIns (BBL bbl)
 
INS LEVEL_PINCLIENT::BBL_InsHead (BBL x)
 
INS LEVEL_PINCLIENT::BBL_InsTail (BBL x)
 
BBL LEVEL_PINCLIENT::BBL_Next (BBL x)
 
BBL LEVEL_PINCLIENT::BBL_Prev (BBL x)
 
BOOL LEVEL_PINCLIENT::BBL_Valid (BBL x)
 
BOOL LEVEL_PINCLIENT::BBL_Original (BBL bbl)
 
ADDRINT LEVEL_PINCLIENT::BBL_Address (BBL bbl)
 
USIZE LEVEL_PINCLIENT::BBL_Size (BBL bbl)
 
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)
 

Detailed Description

Sequence of instructions that is always entered at the top and exited at the bottom by a fall through and/or taken branch. If Pin detects a jump to an instruction in the middle of a bbl, it will create a new bbl beginning at the target. See Instrumentation Granularity.

Function Documentation

◆ BBL_Address()

ADDRINT LEVEL_PINCLIENT::BBL_Address ( BBL  bbl)
Returns
Address of a bbl
Availability:
Mode: JIT & Probe
O/S: Linux, Windows & macOS*
CPU: All

◆ BBL_HasFallThrough()

BOOL LEVEL_PINCLIENT::BBL_HasFallThrough ( BBL  bbl)

Refer to INS_HasFallThrough for checking if an instruction could have a fall-through path based on the opcode.

Returns
TRUE if the BBL has a fall-through bbl within the trace, else returns FALSE.
Availability:
Mode: JIT & Probe
O/S: Linux, Windows & macOS*
CPU: All

◆ BBL_InsertCall()

VOID LEVEL_PINCLIENT::BBL_InsertCall ( BBL  bbl,
IPOINT  action,
AFUNPTR  funptr,
  ... 
)

Insert call relative to a bbl.

Parameters
bblBBL to instrument
actionSpecifies before, after, etc.
IPOINT_BEFORE is always valid for all BBLs.
IPOINT_AFTER is valid only when a fall-through exists. Can only be used if BBL_HasFallThrough is true.
IPOINT_ANYWHERE will put the instrumentation at a place inside the bbl for best performance.
IPOINT_TAKEN_BRANCH is valid only when the BBL ends with a control-flow instruction. Can only be used if INS_IsValidForIpointTakenBranch(BBL_ins_tail(bbl)) is true.
funptrAnalysis function to call
...IARG_TYPE. Arguments to pass to funptr
Availability:
Mode: JIT
O/S: Linux, Windows & macOS*
CPU: All

◆ BBL_InsertIfCall()

VOID LEVEL_PINCLIENT::BBL_InsertIfCall ( BBL  bbl,
IPOINT  action,
AFUNPTR  funptr,
  ... 
)

Insert a call to funptr relative to a BBL. If funptr returns a non-zero ADDRINT, then the immediately following "then" analysis call is executed. Note that if CALL_ORDER is used, Both "if" and "then" analysis calls must have the same order.

Parameters
bblBBL to instrument
actionSpecifies when the analysis call executes. See the documentation in BBL_InsertCall().
funptrAnalysis function to call. Its return type must be ADDRINT
...IARG_TYPE. Arguments to pass to funptr
Availability:
Mode: JIT
O/S: Linux, Windows & macOS*
CPU: All

◆ BBL_InsertThenCall()

VOID LEVEL_PINCLIENT::BBL_InsertThenCall ( BBL  bbl,
IPOINT  action,
AFUNPTR  funptr,
  ... 
)

Insert a call to funptr relative to a BBL. The function is called only if the immediately preceding "if" analysis call returns a non-zero value. Note that if CALL_ORDER is used, Both "if" and "then" analysis calls must have the same order.

Parameters
bblBBL to instrument
actionSpecifies when the analysis call executes. See the documentation in BBL_InsertCall().
funptrAnalysis function to call
...IARG_TYPE. Arguments to pass to funptr
Availability:
Mode: JIT
O/S: Linux, Windows & macOS*
CPU: All

◆ BBL_InsHead()

INS LEVEL_PINCLIENT::BBL_InsHead ( BBL  x)
Returns
First instruction of bbl
Availability:
Mode: JIT & Probe
O/S: Linux, Windows & macOS*
CPU: All

◆ BBL_InsTail()

INS LEVEL_PINCLIENT::BBL_InsTail ( BBL  x)
Returns
Last instruction of bbl
Availability:
Mode: JIT & Probe
O/S: Linux, Windows & macOS*
CPU: All

◆ BBL_MoveAllAttributes()

VOID LEVEL_CORE::BBL_MoveAllAttributes ( BBL  fromBbl,
BBL  toBbl 
)

Move all attributes from one BBL to another

Availability:
Mode: JIT & Probe
O/S: Linux, Windows & macOS*
CPU: All

◆ BBL_Next()

BBL LEVEL_PINCLIENT::BBL_Next ( BBL  x)
Returns
Next bbl or BBL_INVALID() if this is the end of trace or rtn
Availability:
Mode: JIT & Probe
O/S: Linux, Windows & macOS*
CPU: All

◆ BBL_NumIns()

UINT32 LEVEL_CORE::BBL_NumIns ( BBL  bbl)

Number of INSs within a BBL.

Availability:
Mode: JIT & Probe
O/S: Linux, Windows & macOS*
CPU: All

◆ BBL_Original()

BOOL LEVEL_PINCLIENT::BBL_Original ( BBL  bbl)
Returns
Whether the BBL data structure has been instrumented or optimized since it was created
Availability:
Mode: JIT & Probe
O/S: Linux, Windows & macOS*
CPU: All

◆ BBL_Prev()

BBL LEVEL_PINCLIENT::BBL_Prev ( BBL  x)
Returns
Previous bbl or BBL_INVALID() if this is the beginning of trace or rtn
Availability:
Mode: JIT & Probe
O/S: Linux, Windows & macOS*
CPU: All

◆ BBL_Size()

USIZE LEVEL_PINCLIENT::BBL_Size ( BBL  bbl)
Returns
Size of bbl code, in bytes
Availability:
Mode: JIT & Probe
O/S: Linux, Windows & macOS*
CPU: All

◆ BBL_Valid()

BOOL LEVEL_PINCLIENT::BBL_Valid ( BBL  x)
Returns
True if x is not BBL_INVALID()
Availability:
Mode: JIT & Probe
O/S: Linux, Windows & macOS*
CPU: All