If the sampling profiler stops the target thread while it is executing in a function prologue or epilogue, the register state will be inconsistent with the unwind information (since only some of the registers will have been pushed or popped). We currently wind up aborting the stack walk in these cases because we didn't know how to unwind the function and so it resulted in a failed unwind. This is likely a substantial fraction of the 4% of samples we currently are unable to collect.
If we identified instruction pointers in a prologue or epilogue we could simulate execution of the instructions to set the register state to the expected state for the unwind.