Xin Li reported sysret_rip test fails at:
assert(ctx->uc_mcontext.gregs[REG_EFL] == ctx->uc_mcontext.gregs[REG_R11]);
On FRED systems, flags is 0x200a93 and r11 is 0xfeedfacedeadbeef here.
We need to remove or change this assertion, maybe: assert(ctx->uc_mcontext.gregs[REG_EFL] == ctx->uc_mcontext.gregs[REG_R11] || r11_sentinel == ctx->uc_mcontext.gregs[REG_R11]);
in a FRED system. Let's handle the FRED system scenario too. The 'syscall' instruction in a FRED system doesn't set %r11=%rflags.
This should use check_regs_result() – which is exactly the reason I made that a separate function.
Exactly.