Исключение переполнения стека не означает, что что-то не так все же , насколько я помню из моих дней программирования ранних C167 (из которых, я думаю, пришел xe166). Это просто означает, что вы находитесь в конце стека. Действительно, с достаточным количеством jiggery pokery вы можете использовать исключения переполнения стека и переполнения стека, чтобы «разместить» больший стек внутри и вне основной памяти!
Итак, если вы можете быть уверены, что обработчику исключений больше не нужен стек, вы можете уйти без сброса SP. Вы, вероятно, будете вызывать некоторые функции из него, хотя я представляю, в этом случае может быть полезно иметь свободное пространство в стеке :)
Ваш комментарий относительно "перепутанного стека" не совсем проблема - как только указатель стека достигнет конца, любое дальнейшее использование стека испортит другие вещи , которые могут быть данными, которые собирается использовать ваш код исключения полагаться на. Похоже, вы должны гарантировать, что произойдет сброс, но если вы начнете забивать память ошибочным SP, вы не сможете предсказать, что может произойти.
Итак, если это удаленно критическая система, найдите способ выделить память для «аварийного стека», а затем укажите SP на нее, прежде чем продолжить работу с обработчиком исключений.