- Main Page
- Modules
- Classes

- Search for |

# 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

ADDRINT LEVEL_PINCLIENT::BBL_Address | ( | BBL | bbl | ) |

Returns:
  Address of a bbl

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

BOOL LEVEL_PINCLIENT::BBL_HasFallThrough | ( | BBL | bbl | ) |

| Refer 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 return FALSE.

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

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

| Insert call relative to a bbl.

Parameters:

  | bbl | BBL to instrument
  | action | Specifies before, after, etc. IPOINT_BEFORE is always valid for all instructions. IPOINT_AFTER is valid only when a fall-through exists (i.e. Calls and unconditional branches will fail). IPOINT_ANYWHERE will put the instrumentation at a place inside the bbl for best performance
  IPOINT_TAKEN_BRANCH is invalid for non-branches.
  | funptr | Analysis function to call
  | ... | IARG_TYPE. Arguments to pass to funptr

Availability:
  Mode: JIT
  O/S: Linux, Windows & MacOS
  CPU: All

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:

  | bbl | BBL to instrument
  | action | Specifies before, after, etc. IPOINT_BEFORE is always valid for all instructions. IPOINT_AFTER is valid only when a fall-through exists (i.e. Calls and unconditional branches will fail). IPOINT_TAKEN_BRANCH is invalid for non-branches.
  | funptr | Analysis 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

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:

  | bbl | BBL to instrument
  | action | Specifies before, after, etc. IPOINT_BEFORE is always valid for all instructions. IPOINT_AFTER is valid only when a fall-through exists (i.e. Calls and unconditional branches will fail). IPOINT_TAKEN_BRANCH is invalid for non-branches.
  | funptr | Analysis function to call
  | ... | IARG_TYPE. Arguments to pass to funptr

Availability:
  Mode: JIT
  O/S: Linux, Windows & MacOS
  CPU: All

INS LEVEL_PINCLIENT::BBL_InsHead | ( | BBL | x | ) |

Returns:
  First instruction of bbl

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

INS LEVEL_PINCLIENT::BBL_InsTail | ( | BBL | x | ) |

Returns:
  Last instruction of bbl

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

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 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

UINT32 LEVEL_CORE::BBL_NumIns | ( | BBL | bbl | ) |

| Number of INSs within a BBL.

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

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 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

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

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