[PATCH] Speedup-objdump-in-processing-of-source-line-information
Igor Tsimbalist
tigor.tools@gmail.com
Thu Nov 3 16:33:00 GMT 2016
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(-)
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 0001-Speedup-objdump-in-processing-of-source-line-informa.patch
Type: application/octet-stream
Size: 13666 bytes
Desc: not available
URL: <https://sourceware.org/pipermail/binutils/attachments/20161103/75edeab1/attachment.obj>
More information about the Binutils
mailing list