libdw: Limit stack usage of temporary dir, file and line lists.
authorMark Wielaard <mjw@redhat.com>
Fri, 22 May 2015 21:33:56 +0000 (23:33 +0200)
committerMark Wielaard <mjw@redhat.com>
Wed, 27 May 2015 21:04:31 +0000 (23:04 +0200)
commite69f59c6710c8861c2be95699e6e7806b1de2941
tree646c568b771292817191bfbfeaeb20d4673ad3c7
parentf592035ea1e52328f0e14a3ddd5c4086cca6c775
libdw: Limit stack usage of temporary dir, file and line lists.

Limit stack usage of lines with MAX_STACK_LINES, files with MAX_STACK_LINES
and dirs with MAX_STACK_DIRS. Calculate number of dirs needed first, then
create dirarray directly, without needing the next field. Free not stack
allocated lines and files at the end.

Use preallocated stack arrays for all instead of calling alloca to help
compiler see actual stack usage.

The current stack allocation limits are 4096 lines, 1024 files in 256 dirs
per CU. For GCC 4.8 libstdc++.so has on average 512 lines per CU.  With
these settings read_srclines uses max 228K of stack on x86_64.

Signed-off-by: Mark Wielaard <mjw@redhat.com>
libdw/ChangeLog
libdw/dwarf_getsrclines.c