diff options
author | Nick Gasson <nick.gasson@arm.com> | 2020-11-02 12:02:05 +0800 |
---|---|---|
committer | Alan Modra <amodra@gmail.com> | 2020-11-03 10:34:51 +1030 |
commit | af61e84fd2d6eca1273f1d24b8d7b89c5a1441e5 (patch) | |
tree | 76c58de8be2981ecd2fdb75fe50f774f61b8639d /gold/ChangeLog | |
parent | 0dd05d40de4e935cec7f8a8ab6c07f7382ef1277 (diff) | |
download | gdb-af61e84fd2d6eca1273f1d24b8d7b89c5a1441e5.zip gdb-af61e84fd2d6eca1273f1d24b8d7b89c5a1441e5.tar.gz gdb-af61e84fd2d6eca1273f1d24b8d7b89c5a1441e5.tar.bz2 |
gold: ensure file_counts_lock is initialized before using
Since upgrading to binutils 2.35 I've been experiencing random memory
corruption related crashes with ld.gold --threads. It's caused by
multiple threads concurrently pushing elements onto the shared
std::vector in File_read::record_file_read(). This vector is supposed to
be protected by file_counts_lock, but that is initialized lazily and
might be NULL when File_read::open() is called, in which case
Hold_optional_lock silently skips locking it.
Fix by calling the initialize() method before attempting to acquire the
lock, the same as other places that use file_counts_lock.
PR 26827
* fileread.cc (File_read::open): Ensure file_counts_lock is
initialized.
* testsuite/Makefile.am (check_PROGRAMS): Add a test that passes
-Wl,--threads.
* testsuite/Makefile.in: Regenerate.
Diffstat (limited to 'gold/ChangeLog')
-rw-r--r-- | gold/ChangeLog | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/gold/ChangeLog b/gold/ChangeLog index 3fa42fd..48e315a 100644 --- a/gold/ChangeLog +++ b/gold/ChangeLog @@ -1,3 +1,12 @@ +2020-11-03 Nick Gasson <nick.gasson@arm.com> + + PR 26827 + * fileread.cc (File_read::open): Ensure file_counts_lock is + initialized. + * testsuite/Makefile.am (check_PROGRAMS): Add a test that passes + -Wl,--threads. + * testsuite/Makefile.in: Regenerate. + 2020-10-30 H.J. Lu <hongjiu.lu@intel.com> * testsuite/gnu_property_test.sh: Updated. |