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