Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 12 Jan 2018 18:16:51 +0000 (UTC)
From:      Dimitry Andric <dim@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-projects@freebsd.org
Subject:   svn commit: r327884 - projects/clang600-import/contrib/llvm/tools/lld/ELF
Message-ID:  <201801121816.w0CIGprK067894@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
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));
       }
     }



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201801121816.w0CIGprK067894>