diff options
author | Andrew Burgess <aburgess@redhat.com> | 2023-11-27 13:19:39 +0000 |
---|---|---|
committer | Andrew Burgess <aburgess@redhat.com> | 2023-11-28 10:23:19 +0000 |
commit | 3644f41dc805b38943009bed3d15ed36326406d6 (patch) | |
tree | 9eeea7ef65386e76406572feadfc323b9ba70410 /gdb/testsuite | |
parent | aff250145af6c7a8ea9332bc1306c1219f4a63db (diff) | |
download | gdb-3644f41dc805b38943009bed3d15ed36326406d6.zip gdb-3644f41dc805b38943009bed3d15ed36326406d6.tar.gz gdb-3644f41dc805b38943009bed3d15ed36326406d6.tar.bz2 |
gdb: generate dwarf-5 index identically as worker-thread count changes
Similar to the previous commit, this commit ensures that the dwarf-5
index files are generated identically as the number of worker-threads
changes.
Building the dwarf-5 index makes use of a closed hash table, the
bucket_hash local within debug_names::build(). Entries are added to
bucket_hash from m_name_to_value_set, which, in turn, is populated
by calls to debug_names::insert() in write_debug_names. The insert
calls are ordered based on the entries within the cooked_index, and
the ordering within cooked_index depends on the number of worker
threads that GDB is using.
My proposal is to sort each chain within the bucket_hash closed hash
table prior to using this to build the dwarf-5 index.
The buckets within bucket_hash will always have the same ordering (for
a given GDB build with a given executable), and by sorting the chains
within each bucket, we can be sure that GDB will see each entry in a
deterministic order.
I've extended the index creation test to cover this case.
Approved-By: Tom Tromey <tom@tromey.com>
Diffstat (limited to 'gdb/testsuite')
-rw-r--r-- | gdb/testsuite/gdb.gdb/index-file.exp | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/gdb/testsuite/gdb.gdb/index-file.exp b/gdb/testsuite/gdb.gdb/index-file.exp index 0841592..7154d23 100644 --- a/gdb/testsuite/gdb.gdb/index-file.exp +++ b/gdb/testsuite/gdb.gdb/index-file.exp @@ -44,6 +44,9 @@ remote_exec host "mkdir -p ${dir1}" with_timeout_factor $timeout_factor { gdb_test_no_output "save gdb-index $dir1" \ "create gdb-index file" + + gdb_test_no_output "save gdb-index -dwarf-5 $dir1" \ + "create dwarf-index files" } # Close GDB. @@ -140,13 +143,16 @@ if { $worker_threads > 1 } { with_timeout_factor $timeout_factor { gdb_test_no_output "save gdb-index $dir2" \ "create second gdb-index file" + + gdb_test_no_output "save gdb-index -dwarf-5 $dir2" \ + "create second dwarf-index files" } # Close GDB. gdb_exit # Now check that the index files are identical. - foreach suffix { gdb-index } { + foreach suffix { gdb-index debug_names debug_str } { set result \ [remote_exec host \ "cmp -s \"$dir1/${index_filename_base}.${suffix}\" \"$dir2/${index_filename_base}.${suffix}\""] |