summaryrefslogtreecommitdiffstats
path: root/llvm/tools
diff options
context:
space:
mode:
authorJonas Devlieghere <jonas@devlieghere.com>2019-07-30 19:34:26 +0000
committerJonas Devlieghere <jonas@devlieghere.com>2019-07-30 19:34:26 +0000
commit3a56174d85a2c815ef55a24a6935fb4771201026 (patch)
tree12ec14166a9779298193ff099a83b44c74c0e158 /llvm/tools
parent450afcea39edd897eed541527e5150a9063397dd (diff)
downloadbcm5719-llvm-3a56174d85a2c815ef55a24a6935fb4771201026.tar.gz
bcm5719-llvm-3a56174d85a2c815ef55a24a6935fb4771201026.zip
[dsymutil] Pass LinkOptions by value instead of const ref.
When looping over the difference architectures in a fat binary, we modify the link options before dispatching the link step to a different thread. Passing the options by cont reference is not thread safe, as we might modify its fields before the whole sturct is copied over. Given that the link options are already stored in the DwarfLinker, we can easily fix this by passing a copy of the link options instead of a reference, which would just get copied later on. llvm-svn: 367348
Diffstat (limited to 'llvm/tools')
-rw-r--r--llvm/tools/dsymutil/DwarfLinker.cpp4
-rw-r--r--llvm/tools/dsymutil/DwarfLinker.h6
-rw-r--r--llvm/tools/dsymutil/dsymutil.h2
3 files changed, 6 insertions, 6 deletions
diff --git a/llvm/tools/dsymutil/DwarfLinker.cpp b/llvm/tools/dsymutil/DwarfLinker.cpp
index 0eeeca27ac3..eb76b1ad600 100644
--- a/llvm/tools/dsymutil/DwarfLinker.cpp
+++ b/llvm/tools/dsymutil/DwarfLinker.cpp
@@ -2850,8 +2850,8 @@ bool DwarfLinker::link(const DebugMap &Map) {
} // namespace dsymutil
bool linkDwarf(raw_fd_ostream &OutFile, BinaryHolder &BinHolder,
- const DebugMap &DM, const LinkOptions &Options) {
- DwarfLinker Linker(OutFile, BinHolder, Options);
+ const DebugMap &DM, LinkOptions Options) {
+ DwarfLinker Linker(OutFile, BinHolder, std::move(Options));
return Linker.link(DM);
}
diff --git a/llvm/tools/dsymutil/DwarfLinker.h b/llvm/tools/dsymutil/DwarfLinker.h
index 482c607d22c..f8b8729bf91 100644
--- a/llvm/tools/dsymutil/DwarfLinker.h
+++ b/llvm/tools/dsymutil/DwarfLinker.h
@@ -56,8 +56,8 @@ using UnitListTy = std::vector<std::unique_ptr<CompileUnit>>;
class DwarfLinker {
public:
DwarfLinker(raw_fd_ostream &OutFile, BinaryHolder &BinHolder,
- const LinkOptions &Options)
- : OutFile(OutFile), BinHolder(BinHolder), Options(Options) {}
+ LinkOptions Options)
+ : OutFile(OutFile), BinHolder(BinHolder), Options(std::move(Options)) {}
/// Link the contents of the DebugMap.
bool link(const DebugMap &);
@@ -499,7 +499,7 @@ private:
/// be uniqued and sorted and there are only few entries expected
/// per compile unit, which is why this is a std::map.
std::map<std::string, std::string> ParseableSwiftInterfaces;
-
+
bool ModuleCacheHintDisplayed = false;
bool ArchiveHintDisplayed = false;
};
diff --git a/llvm/tools/dsymutil/dsymutil.h b/llvm/tools/dsymutil/dsymutil.h
index ac70bdaa82b..3c44b9564be 100644
--- a/llvm/tools/dsymutil/dsymutil.h
+++ b/llvm/tools/dsymutil/dsymutil.h
@@ -46,7 +46,7 @@ bool dumpStab(StringRef InputFile, ArrayRef<std::string> Archs,
/// Link the Dwarf debug info as directed by the passed DebugMap \p DM into a
/// DwarfFile named \p OutputFilename. \returns false if the link failed.
bool linkDwarf(raw_fd_ostream &OutFile, BinaryHolder &BinHolder,
- const DebugMap &DM, const LinkOptions &Options);
+ const DebugMap &DM, LinkOptions Options);
} // end namespace dsymutil
} // end namespace llvm
OpenPOWER on IntegriCloud