summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Target/WebAssembly/WebAssemblyMCInstLower.cpp
diff options
context:
space:
mode:
authorSteven Wu <stevenwu@apple.com>2018-09-04 22:54:17 +0000
committerSteven Wu <stevenwu@apple.com>2018-09-04 22:54:17 +0000
commitcf90203b0be9a7f5e96207ccc4d94791ceb4079f (patch)
tree08adb59576dfe24174ddc2f040e187c5c5d32def /llvm/lib/Target/WebAssembly/WebAssemblyMCInstLower.cpp
parent22ddc282b5df5b651bee678900788699dd70b95e (diff)
downloadbcm5719-llvm-cf90203b0be9a7f5e96207ccc4d94791ceb4079f.tar.gz
bcm5719-llvm-cf90203b0be9a7f5e96207ccc4d94791ceb4079f.zip
[ThinLTO] Fix memory corruption in ThinLTOCodeGenerator when CodeGenOnly was specified
Summary: Issue occurs when doing ThinLTO with CodeGenOnly flag. TMBuilder.TheTriple is assigned to by multiple threads in an unsafe way resulting in double-free of std::string memory. Pseudocode: if (CodeGenOnly) { // Perform only parallel codegen and return. ThreadPool Pool; int count = 0; for (auto &ModuleBuffer : Modules) { Pool.async([&](int count) { ... /// Now call OutputBuffer = codegen(*TheModule); /// Which turns into initTMBuilder(moduleTMBuilder, Triple(TheModule.getTargetTriple())); /// Which turns into TMBuilder.TheTriple = std::move(TheTriple); // std::string = "....." /// So, basically std::string assignment to same string on multiple threads = memory corruption } return; } Patch by Alex Borcan Reviewers: llvm-commits, steven_wu Reviewed By: steven_wu Subscribers: mehdi_amini, inglorion, eraman, steven_wu, dexonsmith, llvm-commits Differential Revision: https://reviews.llvm.org/D51651 llvm-svn: 341422
Diffstat (limited to 'llvm/lib/Target/WebAssembly/WebAssemblyMCInstLower.cpp')
0 files changed, 0 insertions, 0 deletions
OpenPOWER on IntegriCloud