src/developer/debug/zxdb/symbols/dwarf_expr_eval.cc
// 1 parameter: Signed LEB128 offset from frame base pointer.
1 parameter: Signed LEB128 offset from frame base pointer.
1 parameter : Signed LEB128 offset from frame base pointer .
DwarfExprEval::Completion DwarfExprEval::OpFbreg() {
  result_is_constant_ = false;
  SignedStackEntry offset = 0;
  if (!ReadLEBSigned(&offset))
    return Completion::kSync;
  if (auto bp = data_provider_->GetFrameBase()) {
    if (*bp == 0)
      ReportError("Base Pointer is 0, can't evaluate.");
    result_type_ = ResultType::kPointer;
    Push(*bp + offset);
    return Completion::kSync;
  }
  data_provider_->GetFrameBaseAsync(
      [weak_eval = weak_factory_.GetWeakPtr(), offset](const Err& err, StackEntry value) {
        if (!weak_eval)
          return;
        if (err.has_error()) {
          weak_eval->ReportError(err);
          return;
        }
        if (value == 0) {
          weak_eval->ReportError("Base Pointer is 0, can't evaluate.");
          return;
        }
        weak_eval->result_type_ = ResultType::kPointer;
        weak_eval->Push(static_cast<StackEntry>(value + offset));
        weak_eval->ContinueEval();
      });
  return Completion::kAsync;
}
DwarfExprEval :: Completion DwarfExprEval :: OpFbreg ( ) { result_is_constant_ = false ; SignedStackEntry offset = 0 ; if ( ! ReadLEBSigned ( & offset ) ) return Completion :: kSync ; if ( auto bp = data_provider_ -> GetFrameBase ( ) ) { if ( * bp == 0 ) ReportError ( " " ) ; result_type_ = ResultType :: kPointer ; Push ( * bp + offset ) ; return Completion :: kSync ; } data_provider_ -> GetFrameBaseAsync ( [ weak_eval = weak_factory_ . GetWeakPtr ( ) , offset ] ( const Err & err , StackEntry value ) { if ( ! weak_eval ) return ; if ( err . has_error ( ) ) { weak_eval -> ReportError ( err ) ; return ; } if ( value == 0 ) { weak_eval -> ReportError ( " " ) ; return ; } weak_eval -> result_type_ = ResultType :: kPointer ; weak_eval -> Push ( static_cast < StackEntry > ( value + offset ) ) ; weak_eval -> ContinueEval ( ) ; } ) ; return Completion :: kAsync ; }
1 parameter: Signed LEB128 offset from frame base pointer.
1 parameter : Signed LEB128 offset from frame base pointer .
// Reading the frame base means the result is not constant. // Available synchronously. // Certain problems can cause the BP to be set to 0 which is obviously // invalid, report that error specifically. // Must request async. // Picks up processing at the next instruction.