Akkor miszter nagyszájú, legyél kedves megmutatni, hol történik ez az állítólagos mindent mentés az alábbi forrásban, amikor a megszakítás konkrétan bekövetkezik:
a regiszterekről beszéltem...
csak úgy halkan mondom, hogy pl. az asm_sysvec_apic_timer_interrupt így kezdődik:
push 0FFFFFFFFFFFFFFFFh
call error_entry
mov rsp, rax
mov rdi, rsp
call sysvec_apic_timer_interrupt
jmp error_return
az error_entry pedig (entry_64.S):
SYM_CODE_START(error_entry)
ANNOTATE_NOENDBR
UNWIND_HINT_FUNCPUSH_AND_CLEAR_REGS save_ret=1
ENCODE_FRAME_POINTER 8push rsi
mov rsi, [rsp+8]
mov [rsp+8], rdi
push rdx
push rcx
push rax
push r8
push r9
push r10
push r11
push rbx
push rbp
push r12
push r13
push r14
push r15
push rsi
...
tudod, ezekből lesz a struct pt_regs *regs ... 🤭
DEFINE_IDTENTRY_SYSVEC(sysvec_apic_timer_interrupt)
{
struct pt_regs *old_regs = set_irq_regs(regs);apic_eoi();
trace_local_timer_entry(LOCAL_TIMER_VECTOR);
local_apic_timer_interrupt();
trace_local_timer_exit(LOCAL_TIMER_VECTOR);set_irq_regs(old_regs);
}