On Mon, Jul 17, 2023 at 9:44 AM Kumar Kartikeya Dwivedi <memxor@xxxxxxxxx> wrote: > > > > > > -static void push_callee_regs(u8 **pprog, bool *callee_regs_used) > > > +static void push_callee_regs(u8 **pprog, bool *callee_regs_used, bool force) > > > { > > > u8 *prog = *pprog; > > > > > > - if (callee_regs_used[0]) > > > + if (callee_regs_used[0] || force) > > > EMIT1(0x53); /* push rbx */ > > > - if (callee_regs_used[1]) > > > + if (force) > > > + EMIT2(0x41, 0x54); /* push r12 */ > > > > let's make r12 push/pop explicit. In addition to push_callee_regs. > > > > Ack (I'm understanding you mean adding a push/pop_r12 and using that). I mean keep push_callee_regs() as saving bpf callee regs only and add other helpers to save/restore r12. Or just open code push/pop of r12.