svn commit: r327884 - projects/clang600-import/contrib/llvm/tools/lld/ELF
Dimitry Andric
dim at FreeBSD.org
Fri Jan 12 18:16:53 UTC 2018
Author: dim
Date: Fri Jan 12 18:16:51 2018
New Revision: 327884
URL: https://svnweb.freebsd.org/changeset/base/327884
Log:
Pull in r322264 from upstream lld trunk (by me):
Fix thread race between SectionPiece's OutputOff and Live members
Summary:
As reported in bug 35788, rL316280 reintroduces a race between two
members of SectionPiece, which share the same 64 bit memory location.
To fix the race, check the hash before checking the Live member, as
suggested by Rafael.
Reviewers: ruiu, rafael
Reviewed By: ruiu
Subscribers: smeenai, emaste, llvm-commits
Differential Revision: https://reviews.llvm.org/D41884
Modified:
projects/clang600-import/contrib/llvm/tools/lld/ELF/SyntheticSections.cpp
Modified: projects/clang600-import/contrib/llvm/tools/lld/ELF/SyntheticSections.cpp
==============================================================================
--- projects/clang600-import/contrib/llvm/tools/lld/ELF/SyntheticSections.cpp Fri Jan 12 17:36:19 2018 (r327883)
+++ projects/clang600-import/contrib/llvm/tools/lld/ELF/SyntheticSections.cpp Fri Jan 12 18:16:51 2018 (r327884)
@@ -2435,10 +2435,8 @@ void MergeNoTailSection::finalizeContents() {
parallelForEachN(0, Concurrency, [&](size_t ThreadId) {
for (MergeInputSection *Sec : Sections) {
for (size_t I = 0, E = Sec->Pieces.size(); I != E; ++I) {
- if (!Sec->Pieces[I].Live)
- continue;
size_t ShardId = getShardId(Sec->Pieces[I].Hash);
- if ((ShardId & (Concurrency - 1)) == ThreadId)
+ if ((ShardId & (Concurrency - 1)) == ThreadId && Sec->Pieces[I].Live)
Sec->Pieces[I].OutputOff = Shards[ShardId].add(Sec->getData(I));
}
}
More information about the svn-src-projects
mailing list