Now, there is a little detail missing - how GDB relocate the dummy frame
object that contains those saved registers. The problem is that GDB
can't just take the most recent one as, due to long jumps and the like,
it can be wrong.
I can't comment on the internal mechanism, but I know that as a user of
gdb, if something happens during a hand function call to marker2() like
gdb hitting another breakpoint or me hitting ^C, then gdb starts acting
a little drunk at that point. So I bet that explicit save/restore of
these frames would help.