This is the mail archive of the binutils@sourceware.org mailing list for the binutils project.
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
Other format: | [Raw text] |
Forgot to attach the reproducer. On Thu, Nov 3, 2016 at 11:33 PM, Igor Tsimbalist <tigor.tools@gmail.com> wrote: > The issue occurs in objdump when using the –S and –l flags in > combination with –d on a compilation unit containing a large function > table. Both the number of functions and the number of inlined instances > of each function contribute to the overall size of the function table. > > Each function has 1) a very big linked list of address ranges and > 2) a code sequence has a very big linked list of lines associated with > the code. When objdump needs to comment a line of code with source line > information it has to traverse these big linked lists each time. Time > consuming functions are > functions lookup_address_in_function_table and > lookup_address_in_line_info_table. > > The issue is resolved by introducing a lookup tables for functions and > its address ranges and a lookup table for line info. The lists traverse is > replaced with a binary search in the lookup tables. The patch reduces the > processing time from hours to several minutes. The attached .c file can > be used to reproduce the issue. > > Ok for trunk? > > bfd/ > > * dwarf2.c (comp_unit): Add new fields 'lookup_funcinfo_table' and > 'number_of_functions' to keep lookup table and number of entries in > the table. > (line_sequence): Add new fields 'line_info_lookup' and 'num_lines' > to keep lookup table and number of entries in the table. > (lookup_funcinfo): New structure for lookup table for function > references. > (build_line_info_table): New function to create and build the lookup > table for line information. > (lookup_address_in_line_info_table): Use the lookup table instead of > traverse a linked list. > (compare_lookup_funcinfos): New compare fuction used in sorting of > lookup table for function references. > (build_lookup_funcinfo_table): New function to create, build and > sort the lookup table for functions references. > (lookup_address_in_function_table): Use the table instead of > traverse a linked list. > (_bfd_dwarf2_cleanup_debug_info): Free memory from function references > lookup table. > --- > bfd/dwarf2.c | 286 +++++++++++++++++++++++++++++++++++++++++++++++++++-------- > 1 file changed, 249 insertions(+), 37 deletions(-)
Attachment:
reproducer.c.bz2
Description: BZip2 compressed data
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |