Functions with Large Stack Usage

From: Danny Cox (danscox@mindspring.com)
Date: Tue Aug 27 2002 - 13:08:24 EST


Hi,

        After having read of the stack overflow "issues" awhile back, a couple
of ideas gelled, with this script as a result. The script finds
functions that use a large (changeable) amount of stack space. Note:
it's heuristic, it's static, it only looks at compiled-in functions, and
says nothing about the dynamic system. It DOES point out functions that
may (MAY) need to be examined closer.

        The functions and their sizes are:

check huft_build (stack 1436)
check inflate_fixed (stack 1168)
check inflate_dynamic (stack 1308)
check pci_sanity_check (stack 804)
check pcibios_fixup_peer_bridges (stack 804)
check elf_core_dump (stack 592)
check xfs_ioctl (stack 752)
check semctl_main (stack 588)
check extract_entropy (stack 708)
check vt_ioctl (stack 756)
check ide_unregister (stack 880)
check cdrom_buffer_sectors (stack 516)
check cdrom_read_intr (stack 532)
check cdrom_slot_status (stack 1040)
check cdrom_number_of_slots (stack 1040)
check cdrom_select_disc (stack 1040)
check cdrom_ioctl (stack 1084)
check pci_do_scan_bus (stack 680)

        This is from kernel 2.4.19-xfs (yes, I'm an XFS weenie ;-).

        How it works: With Keith Owens' KDB patch, one may compile the kernel
with frame pointers. With the Disassemble::X86 Perl module from CPAN
(http://search.cpan.org/author/BOBMATH/Disassemble-X86-0.12/X86.pm),
it's easy. It requires the vmlinux and System.map files, and for each
function looks at the first 10 instructions for the 'sub esp,N'. The N
is the number of bytes of stack used.

        I'm not subscribed to this list. I tried once, but it's much too busy
for me to keep up with, and actually get any work done ;-). So, please
CC: me if you wish me to be included.

        I apologize in advance for 1) the C-like Perl code, and 2) for
attaching it. I've tried an in-line paste before, but it wraps, and
makes it even uglier than before.

        Comments, bugs, and enhancements are encouraged. Thanks!

        Please return to your regularly scheduled discussions.

-- 
kernel, n.: A part of an operating system that preserves the
medieval traditions of sorcery and black art.

Danny


- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/



This archive was generated by hypermail 2b29 : Sat Aug 31 2002 - 22:00:20 EST