https://gcc.gnu.org/bugzilla/show_bug.cgi?id=38534
--- Comment #34 from Jakub Jelinek <jakub at gcc dot gnu.org> --- Best effort are the whatever@entry values, that is used if an argument is no longer used across the function call and isn't stored in any call saved register or stack slot. There can be also automatic variables which are live across the call (note, even if you have noreturn function lower in the call stack, its caller e.g. could just call the noreturn function conditionally or could be from a different translation unit in which the callee is not declared noreturn, and any caller up in the call stack then won't have noreturn calls). If you have int x = fn1 (...); fn2 (...); // This function conditionally calls a noreturn function fn3 (x); then typically x will be in callee saved register (unless we run out of them), it isn't best effort in there, the debug info just says that say x lives in %ebx register, it doesn't say it might be in that register. Now, when you up from the noreturn function to this frame, gdb won't be able to restore the register (if .cfi_undefined is emitted), or right now just can have completely bogus values.