diff --git a/src/jit.rs b/src/jit.rs index 2428ff0b..9b95f58e 100644 --- a/src/jit.rs +++ b/src/jit.rs @@ -443,7 +443,7 @@ impl<'a, C: ContextObject> JitCompiler<'a, C> { match insn.opc { ebpf::LD_DW_IMM if !self.executable.get_sbpf_version().disable_lddw() => { - self.emit_validate_and_profile_instruction_count(Some(self.pc + 2)); + self.emit_validate_and_profile_instruction_count(self.pc + 2); self.pc += 1; self.result.pc_section[self.pc] = unsafe { self.anchors[ANCHOR_CALL_UNSUPPORTED_INSTRUCTION].offset_from(self.result.text_section.as_ptr()) as u32 }; ebpf::augment_lddw_unchecked(self.program, &mut insn); @@ -722,7 +722,7 @@ impl<'a, C: ContextObject> JitCompiler<'a, C> { // BPF_JMP class ebpf::JA => { - self.emit_validate_and_profile_instruction_count(Some(target_pc)); + self.emit_validate_and_profile_instruction_count(target_pc); let jump_offset = self.relative_to_target_pc(target_pc, 5); self.emit_ins(X86Instruction::jump_immediate(jump_offset)); }, @@ -792,7 +792,7 @@ impl<'a, C: ContextObject> JitCompiler<'a, C> { || (insn.opc == ebpf::RETURN && !self.executable.get_sbpf_version().static_syscalls()) { return Err(EbpfError::UnsupportedInstruction); } - self.emit_validate_and_profile_instruction_count(Some(0)); + self.emit_validate_and_profile_instruction_count(0); let call_depth_access = X86IndirectAccess::Offset(self.slot_in_vm(RuntimeEnvironmentSlot::CallDepth)); // If env.call_depth == 0, we've reached the exit instruction of the entry point @@ -817,7 +817,7 @@ impl<'a, C: ContextObject> JitCompiler<'a, C> { if self.offset_in_text_section + MAX_MACHINE_CODE_LENGTH_PER_INSTRUCTION * 2 >= self.result.text_section.len() { return Err(EbpfError::ExhaustedTextSegment(self.pc)); } - self.emit_validate_and_profile_instruction_count(Some(self.pc + 1)); + self.emit_validate_and_profile_instruction_count(self.pc + 1); self.emit_ins(X86Instruction::load_immediate(REGISTER_SCRATCH, self.pc as i64)); // Save pc self.emit_set_exception_kind(EbpfError::ExecutionOverrun); self.emit_ins(X86Instruction::jump_immediate(self.relative_to_anchor(ANCHOR_THROW_EXCEPTION, 5))); @@ -982,8 +982,7 @@ impl<'a, C: ContextObject> JitCompiler<'a, C> { } #[inline] - fn emit_validate_and_profile_instruction_count(&mut self, target_pc: Option) { - let target_pc = target_pc.unwrap(); + fn emit_validate_and_profile_instruction_count(&mut self, target_pc: usize) { self.last_instruction_meter_validation_pc = self.pc; self.emit_ins(X86Instruction::load_immediate(REGISTER_SCRATCH, (((target_pc << 32) | self.pc) as i64) ^ self.immediate_value_key)); self.emit_ins(X86Instruction::call_immediate(self.relative_to_anchor(ANCHOR_VALIDATE_AND_PROFILE_INSTRUCTION_COUNT, 5))); @@ -1143,7 +1142,7 @@ impl<'a, C: ContextObject> JitCompiler<'a, C> { #[inline] fn emit_syscall_dispatch(&mut self, function: BuiltinFunction) { - self.emit_validate_and_profile_instruction_count(Some(0)); + self.emit_validate_and_profile_instruction_count(0); self.emit_ins(X86Instruction::load_immediate(REGISTER_SCRATCH, function as usize as i64)); self.emit_ins(X86Instruction::call_immediate(self.relative_to_anchor(ANCHOR_EXTERNAL_FUNCTION_CALL, 5))); self.emit_undo_profile_instruction_count(0); @@ -1218,7 +1217,7 @@ impl<'a, C: ContextObject> JitCompiler<'a, C> { #[inline] fn emit_conditional_branch_reg(&mut self, op: u8, bitwise: bool, first_operand: X86Register, second_operand: X86Register, target_pc: usize) { - self.emit_validate_and_profile_instruction_count(Some(target_pc)); + self.emit_validate_and_profile_instruction_count(target_pc); if bitwise { // Logical self.emit_ins(X86Instruction::test(OperandSize::S64, first_operand, second_operand, None)); } else { // Arithmetic @@ -1231,7 +1230,7 @@ impl<'a, C: ContextObject> JitCompiler<'a, C> { #[inline] fn emit_conditional_branch_imm(&mut self, op: u8, bitwise: bool, immediate: i64, second_operand: X86Register, target_pc: usize) { - self.emit_validate_and_profile_instruction_count(Some(target_pc)); + self.emit_validate_and_profile_instruction_count(target_pc); if self.should_sanitize_constant(immediate) { self.emit_ins(X86Instruction::mov_mmx(OperandSize::S64, REGISTER_SCRATCH, MM0)); self.emit_sanitized_load_immediate(REGISTER_SCRATCH, immediate);