mirror of
https://github.com/DragonOS-Community/DragonOS.git
synced 2025-06-21 12:36:35 +00:00
feat(ebpf): support Aya framework. (#1070)
* feat(ebpf): support Aya framework. 1. fix the rbpf bug 2. use new Aya template 3. add kprobe related device files and attributes to sysfs --- Signed-off-by: chenlinfeng <chenlinfeng25@outlook.com>
This commit is contained in:
@ -660,9 +660,9 @@ pub fn execute_program(
|
||||
// Save the callee saved registers
|
||||
pre_stack.save_registers(®[6..=9]);
|
||||
// Save the return address
|
||||
pre_stack.save_return_address(insn_ptr as u16);
|
||||
pre_stack.save_return_address(insn_ptr as u64);
|
||||
// save the stack pointer
|
||||
pre_stack.save_sp(reg[10] as u16);
|
||||
pre_stack.save_sp(reg[10]);
|
||||
let mut stack = StackFrame::new();
|
||||
log::trace!("BPF TO BPF CALL: new pc: {} + {} = {}",insn_ptr ,insn.imm,insn_ptr + insn.imm as usize);
|
||||
reg[10] = stack.as_ptr() as u64 + stack.len() as u64;
|
||||
@ -695,7 +695,7 @@ pub fn execute_program(
|
||||
// Restore the return address
|
||||
insn_ptr = stack.get_return_address() as usize;
|
||||
// Restore the stack pointer
|
||||
reg[10] = stack.get_sp() as u64;
|
||||
reg[10] = stack.get_sp();
|
||||
log::trace!("EXIT: new pc: {}", insn_ptr);
|
||||
}
|
||||
}
|
||||
|
@ -1,9 +1,9 @@
|
||||
use crate::{ebpf::STACK_SIZE, vec, Vec};
|
||||
|
||||
pub struct StackFrame {
|
||||
return_address: u16,
|
||||
return_address: u64,
|
||||
saved_registers: [u64; 4],
|
||||
sp: u16,
|
||||
sp: u64,
|
||||
frame: Vec<u8>,
|
||||
}
|
||||
|
||||
@ -54,22 +54,22 @@ impl StackFrame {
|
||||
}
|
||||
|
||||
/// Save the return address
|
||||
pub fn save_return_address(&mut self, address: u16) {
|
||||
pub fn save_return_address(&mut self, address: u64) {
|
||||
self.return_address = address;
|
||||
}
|
||||
|
||||
/// Get the return address
|
||||
pub fn get_return_address(&self) -> u16 {
|
||||
pub fn get_return_address(&self) -> u64 {
|
||||
self.return_address
|
||||
}
|
||||
|
||||
/// Save the stack pointer
|
||||
pub fn save_sp(&mut self, sp: u16) {
|
||||
pub fn save_sp(&mut self, sp: u64) {
|
||||
self.sp = sp;
|
||||
}
|
||||
|
||||
/// Get the stack pointer
|
||||
pub fn get_sp(&self) -> u16 {
|
||||
pub fn get_sp(&self) -> u64 {
|
||||
self.sp
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user