( self, arch: Optional['architecture.Architecture'] = None, name: Optional[str] = None, handle=None, confidence: int = core.max_confidence )
| 54 | _registered_calling_conventions = [] |
| 55 | |
| 56 | def __init__( |
| 57 | self, arch: Optional['architecture.Architecture'] = None, name: Optional[str] = None, handle=None, |
| 58 | confidence: int = core.max_confidence |
| 59 | ): |
| 60 | if handle is None: |
| 61 | if arch is None or name is None: |
| 62 | raise ValueError("Must specify either handle or architecture and name") |
| 63 | self._arch = arch |
| 64 | self._pending_reg_lists = {} |
| 65 | self._cb = core.BNCustomCallingConvention() |
| 66 | self._cb.context = 0 |
| 67 | self._cb.getCallerSavedRegisters = self._cb.getCallerSavedRegisters.__class__(self._get_caller_saved_regs) |
| 68 | self._cb.getCalleeSavedRegisters = self._cb.getCalleeSavedRegisters.__class__(self._get_callee_saved_regs) |
| 69 | self._cb.getIntegerArgumentRegisters = self._cb.getIntegerArgumentRegisters.__class__( |
| 70 | self._get_int_arg_regs |
| 71 | ) |
| 72 | self._cb.getFloatArgumentRegisters = self._cb.getFloatArgumentRegisters.__class__(self._get_float_arg_regs) |
| 73 | self._cb.freeRegisterList = self._cb.freeRegisterList.__class__(self._free_register_list) |
| 74 | self._cb.areArgumentRegistersSharedIndex = self._cb.areArgumentRegistersSharedIndex.__class__( |
| 75 | self._arg_regs_share_index |
| 76 | ) |
| 77 | self._cb.areArgumentRegistersUsedForVarArgs = self._cb.areArgumentRegistersUsedForVarArgs.__class__( |
| 78 | self._arg_regs_used_for_varargs |
| 79 | ) |
| 80 | self._cb.isStackReservedForArgumentRegisters = self._cb.isStackReservedForArgumentRegisters.__class__( |
| 81 | self._stack_reserved_for_arg_regs |
| 82 | ) |
| 83 | self._cb.isStackAdjustedOnReturn = self._cb.isStackAdjustedOnReturn.__class__( |
| 84 | self._stack_adjusted_on_return |
| 85 | ) |
| 86 | self._cb.isEligibleForHeuristics = self._cb.isEligibleForHeuristics.__class__(self._eligible_for_heuristics) |
| 87 | self._cb.getIntegerReturnValueRegister = self._cb.getIntegerReturnValueRegister.__class__( |
| 88 | self._get_int_return_reg |
| 89 | ) |
| 90 | self._cb.getHighIntegerReturnValueRegister = self._cb.getHighIntegerReturnValueRegister.__class__( |
| 91 | self._get_high_int_return_reg |
| 92 | ) |
| 93 | self._cb.getFloatReturnValueRegister = self._cb.getFloatReturnValueRegister.__class__( |
| 94 | self._get_float_return_reg |
| 95 | ) |
| 96 | self._cb.getGlobalPointerRegister = self._cb.getGlobalPointerRegister.__class__( |
| 97 | self._get_global_pointer_reg |
| 98 | ) |
| 99 | self._cb.getImplicitlyDefinedRegisters = self._cb.getImplicitlyDefinedRegisters.__class__( |
| 100 | self._get_implicitly_defined_regs |
| 101 | ) |
| 102 | self._cb.getIncomingRegisterValue = self._cb.getIncomingRegisterValue.__class__( |
| 103 | self._get_incoming_reg_value |
| 104 | ) |
| 105 | self._cb.getIncomingFlagValue = self._cb.getIncomingFlagValue.__class__(self._get_incoming_flag_value) |
| 106 | self._cb.getIncomingVariableForParameterVariable = self._cb.getIncomingVariableForParameterVariable.__class__( |
| 107 | self._get_incoming_var_for_parameter_var |
| 108 | ) |
| 109 | self._cb.getParameterVariableForIncomingVariable = self._cb.getParameterVariableForIncomingVariable.__class__( |
| 110 | self._get_parameter_var_for_incoming_var |
| 111 | ) |
| 112 | _handle = core.BNCreateCallingConvention(arch.handle, name, self._cb) |
| 113 | self.__class__._registered_calling_conventions.append(self) |
nothing calls this directly
no test coverage detected