mirror of
https://github.com/fluencelabs/wasmer
synced 2025-06-24 06:01:33 +00:00
Try fixing middleware failure.
This commit is contained in:
@ -284,48 +284,50 @@ extern "C" fn signal_trap_handler(
|
|||||||
|
|
||||||
unsafe {
|
unsafe {
|
||||||
let fault = get_fault_info(siginfo as _, ucontext);
|
let fault = get_fault_info(siginfo as _, ucontext);
|
||||||
let early_return = CURRENT_CODE_VERSIONS.with(|versions| {
|
let early_return = allocate_and_run(TRAP_STACK_SIZE, || {
|
||||||
let versions = versions.borrow();
|
CURRENT_CODE_VERSIONS.with(|versions| {
|
||||||
for v in versions.iter() {
|
let versions = versions.borrow();
|
||||||
let magic_size = if let Some(x) = get_inline_breakpoint_size(ARCH, v.backend) {
|
for v in versions.iter() {
|
||||||
x
|
let magic_size = if let Some(x) = get_inline_breakpoint_size(ARCH, v.backend) {
|
||||||
} else {
|
x
|
||||||
continue;
|
} else {
|
||||||
};
|
continue;
|
||||||
let ip = fault.ip.get();
|
};
|
||||||
let end = v.base + v.msm.total_size;
|
let ip = fault.ip.get();
|
||||||
if ip >= v.base && ip < end && ip + magic_size <= end {
|
let end = v.base + v.msm.total_size;
|
||||||
if let Some(ib) = read_inline_breakpoint(
|
if ip >= v.base && ip < end && ip + magic_size <= end {
|
||||||
ARCH,
|
if let Some(ib) = read_inline_breakpoint(
|
||||||
v.backend,
|
ARCH,
|
||||||
std::slice::from_raw_parts(ip as *const u8, magic_size),
|
v.backend,
|
||||||
) {
|
std::slice::from_raw_parts(ip as *const u8, magic_size),
|
||||||
match ib.ty {
|
) {
|
||||||
InlineBreakpointType::Trace => {}
|
match ib.ty {
|
||||||
InlineBreakpointType::Middleware => {
|
InlineBreakpointType::Trace => {}
|
||||||
let out: Option<Result<(), Box<dyn Any>>> =
|
InlineBreakpointType::Middleware => {
|
||||||
with_breakpoint_map(|bkpt_map| {
|
let out: Option<Result<(), Box<dyn Any>>> =
|
||||||
bkpt_map.and_then(|x| x.get(&ip)).map(|x| {
|
with_breakpoint_map(|bkpt_map| {
|
||||||
x(BreakpointInfo {
|
bkpt_map.and_then(|x| x.get(&ip)).map(|x| {
|
||||||
fault: Some(&fault),
|
x(BreakpointInfo {
|
||||||
|
fault: Some(&fault),
|
||||||
|
})
|
||||||
})
|
})
|
||||||
})
|
});
|
||||||
});
|
if let Some(Ok(())) = out {
|
||||||
if let Some(Ok(())) = out {
|
} else {
|
||||||
} else {
|
println!("Failed calling middleware: {:?}", out);
|
||||||
println!("Failed calling middleware: {:?}", out);
|
}
|
||||||
}
|
}
|
||||||
|
_ => println!("Unknown breakpoint type: {:?}", ib.ty),
|
||||||
}
|
}
|
||||||
_ => println!("Unknown breakpoint type: {:?}", ib.ty),
|
|
||||||
}
|
|
||||||
|
|
||||||
fault.ip.set(ip + magic_size);
|
fault.ip.set(ip + magic_size);
|
||||||
return true;
|
return true;
|
||||||
|
}
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
}
|
false
|
||||||
false
|
})
|
||||||
});
|
});
|
||||||
if early_return {
|
if early_return {
|
||||||
return;
|
return;
|
||||||
|
Reference in New Issue
Block a user