mirror of
https://github.com/RPCS3/llvm.git
synced 2025-02-15 00:16:42 +00:00
[dsymutil] Fix heap-use-after-free related to the LinkOptions.
In r367348, I changed dsymutil to pass the LinkOptions by value isntead of by const reference. However, the options were still captured by reference in the LinkLambda. This patch fixes that by passing them in by value. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@367635 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
884000e21e
commit
3c182acee0
@ -591,9 +591,10 @@ int main(int argc, char **argv) {
|
||||
}
|
||||
}
|
||||
|
||||
auto LinkLambda = [&,
|
||||
OutputFile](std::shared_ptr<raw_fd_ostream> Stream) {
|
||||
AllOK.fetch_and(linkDwarf(*Stream, BinHolder, *Map, *OptionsOrErr));
|
||||
auto LinkLambda = [&, OutputFile](std::shared_ptr<raw_fd_ostream> Stream,
|
||||
LinkOptions Options) {
|
||||
AllOK.fetch_and(
|
||||
linkDwarf(*Stream, BinHolder, *Map, std::move(Options)));
|
||||
Stream->flush();
|
||||
if (Verify && !NoOutput)
|
||||
AllOK.fetch_and(verify(OutputFile, Map->getTriple().getArchName()));
|
||||
@ -603,9 +604,9 @@ int main(int argc, char **argv) {
|
||||
// out the (significantly smaller) stack when using threads. We don't
|
||||
// want this limitation when we only have a single thread.
|
||||
if (ThreadCount == 1)
|
||||
LinkLambda(OS);
|
||||
LinkLambda(OS, *OptionsOrErr);
|
||||
else
|
||||
Threads.async(LinkLambda, OS);
|
||||
Threads.async(LinkLambda, OS, *OptionsOrErr);
|
||||
}
|
||||
|
||||
Threads.wait();
|
||||
|
Loading…
x
Reference in New Issue
Block a user