Tworzy listę wielkości stosu klatek używanych przez każdą funkcję jądra (tj. Całkowitą ilość lokalnej przestrzeni zarysowania używanej przez każdą funkcję dla zmiennych lokalnych i cokolwiek).
Sposób, w jaki to robi, polega na przechodzeniu przez demontaż jądra i szukaniu 2 rzeczy: nazw funkcji i instrukcji, które dostosowują stos. Szuka nazw funkcji, szukając linii pasujących do $funcre
(qr/^$x* <(.*)>:$/
) i szuka instrukcji dopasowania stosu, które pasują do $re
lub $dre
; te dwa ostatnie zależą w dużej mierze od tego, do jakiej architektury skompilowano jądro, a więc do tego, co sprawdza pierwszy duży blok, jeśli instrukcje else/else. $re
wyszukuje funkcje, które dostosowują stos do ustalonej ilości (zdecydowana większość funkcji), a $dre
wyszukuje funkcje, które dostosowują stos do zmiennej ilości (rzadko).
objdump
jest częścią binutils; objdump -d
to polecenie deasemblowania pliku obiektu. Użycie tego skryptu polega na dezasemblacji jądra (objdump -d vmlinux
) i wyprowadzeniu danych wyjściowych do skryptu. Dane wyjściowe skryptu są listą wszystkich funkcji w jądrze, posortowanych według największego rozmiaru klatki stosu. Zakładam, że celem skryptu jest, aby opiekunowie jądra byli w stanie uniknąć przepełnienia stosu, boleśnie upewniając się, że stosy wszystkich elementów są tak małe, jak to tylko możliwe, a skrypt pozwala im to zweryfikować.
Komentarz na górze wydaje się dość oczywisty: "Sprawdź użycie stosu funkcji". – Ether
Podejrzewam, że jedynym powodem, dla którego został napisany w Perlu, jest wiele wymaganych wyrażeń regularnych. Kod z pewnością nie jest bardzo Perlish. (Np. Używa dużego drzewa if/elsif do odwzorowania nazwy architektury na wyrażenie regularne, gdzie mieszanie byłoby o wiele łatwiejsze). – friedo