diff options
author | Tom de Vries <tdevries@suse.de> | 2022-07-15 12:42:31 +0200 |
---|---|---|
committer | Tom de Vries <tdevries@suse.de> | 2022-07-21 15:06:40 +0200 |
commit | 060f7c545b27007945431ed5f6aa10d659d7baa6 (patch) | |
tree | 70b59a06e8ab6652d89b2d5664e4f0ade43d6cff | |
parent | 3f7397885b897e3e921268510844811639fe56d8 (diff) | |
download | binutils-060f7c545b27007945431ed5f6aa10d659d7baa6.zip binutils-060f7c545b27007945431ed5f6aa10d659d7baa6.tar.gz binutils-060f7c545b27007945431ed5f6aa10d659d7baa6.tar.bz2 |
[gdb/symtab] Use parallel_for_each in process_queue
Do the parallelization.
-rw-r--r-- | gdb/dwarf2/read.c | 31 |
1 files changed, 26 insertions, 5 deletions
diff --git a/gdb/dwarf2/read.c b/gdb/dwarf2/read.c index cf44996..82fdf4c 100644 --- a/gdb/dwarf2/read.c +++ b/gdb/dwarf2/read.c @@ -7621,15 +7621,36 @@ process_queue (dwarf2_per_objfile *per_objfile) dwarf_read_debug_printf ("Expanding one or more symtabs of objfile %s ...", objfile_name (per_objfile->objfile)); + using iter_type = decltype (per_objfile->queue->begin ()); + using result_type = int; + /* The queue starts out with one item, but following a DIE reference may load a new CU, adding it to the end of the queue. */ while (!per_objfile->queue->empty ()) { - dwarf2_queue_item &item = per_objfile->queue->front (); - process_queue_item (per_objfile, item); - dwarf2_per_cu_data *per_cu = item.per_cu; - per_cu->queued = 0; - per_objfile->queue->pop_front (); + size_t nr_to_be_processed = per_objfile->queue->size (); + + std::vector<result_type> results + = gdb::parallel_for_each (1, per_objfile->queue->begin (), + per_objfile->queue->end (), + [=] (iter_type iter, iter_type end) + { + for (; iter != end; ++iter) + { + dwarf2_queue_item &item = *iter; + process_queue_item (per_objfile, item); + } + + return result_type (1); + }); + + for (int i = 0; i < nr_to_be_processed; ++i) + { + dwarf2_queue_item &item = per_objfile->queue->front (); + dwarf2_per_cu_data *per_cu = item.per_cu; + per_cu->queued = 0; + per_objfile->queue->pop_front (); + } } dwarf_read_debug_printf ("Done expanding symtabs of %s.", |