Я думаю, что вы можете сослаться на реализацию oprofile .
Oprofile использует frame-pointer для получения информации обратной трассировки, поэтому он требует, чтобы приложения пользовательского пространства и связанные с ним библиотеки создавались с включенным frame-pointer. (Опция "- fno-omit-frame-pointer").
Другой способ состоит в том, что если пользовательские приложения содержат отладочную информацию, вам может потребоваться проверить информацию DWARF пользовательского приложения, информация о кадре вызова DWARF предоставляет отладчику достаточно информации о том, как вызывается функция, так что он может найти каждый из аргументов функции, найти текущий кадр вызова и найти кадр вызова для вызывающей информации.
Если вы хотите просто сканировать информацию обратной трассировки без поддержки «указателя кадра» или какой-либо отладочной информации, то вам нужно проверить инструкцию mips пользовательского приложения, пройтись по объектам дочернего контекста (SP, IP, RP), чтобы получить родительский контекст (SP, IP, RP) по спецификации mips ABI, это немного сложно и отнимает много времени, так как вам приходится разбирать много инструкций в памяти, но это работает неплохо. Например, для многих routie в начале статьи есть инструкция, подобная add sp, sp, -32, и вы будете знать, что p родительского элемента равен текущему sp плюс 32.
Второй и третий способ реализовать его самостоятельно, так как вы работаете в ядре.