Создает список размеров кадра стека, используемого каждой функцией в ядре (т. Е. Общий объем локального пустого пространства, используемого каждой функцией для локальных переменных и еще много чего).
Способ, которым этоделает это путем разборки ядра и поиска 2 вещей: имен функций и инструкций, которые регулируют стек.Он ищет имена функций, ища строки, которые соответствуют $funcre
(qr/^$x* <(.*)>:$/
), и ищет инструкции по настройке стека, которые соответствуют $re
или $dre
;последние два в значительной степени зависят от того, для какой архитектуры было скомпилировано ядро, что и является первым большим блоком, если проверяются операторы if / else.$re
ищет функции, которые корректируют стек на фиксированную величину (подавляющее большинство функций), а $dre
ищет функции, которые корректируют стек на переменную величину (редко).
objdump
является частью binutils ;objdump -d
- команда для разборки объектного файла.Этот сценарий используется для дизассемблирования ядра (objdump -d vmlinux
) и передачи вывода в сценарий.Выходные данные сценария представляют собой список всех функций ядра, отсортированных по наибольшему размеру стека.Я предполагаю, что цель сценария состоит в том, чтобы сопровождающие ядра могли избежать переполнения стека, тщательно следя за тем, чтобы все фреймы стека были как можно меньше, и этот сценарий позволяет им это проверить.