mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-22 18:54:02 +01:00
[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
This commit is contained in:
parent
25bf183f24
commit
d05c641cc7
@ -2850,8 +2850,8 @@ bool DwarfLinker::link(const DebugMap &Map) {
|
|||||||
} // namespace dsymutil
|
} // namespace dsymutil
|
||||||
|
|
||||||
bool linkDwarf(raw_fd_ostream &OutFile, BinaryHolder &BinHolder,
|
bool linkDwarf(raw_fd_ostream &OutFile, BinaryHolder &BinHolder,
|
||||||
const DebugMap &DM, const LinkOptions &Options) {
|
const DebugMap &DM, LinkOptions Options) {
|
||||||
DwarfLinker Linker(OutFile, BinHolder, Options);
|
DwarfLinker Linker(OutFile, BinHolder, std::move(Options));
|
||||||
return Linker.link(DM);
|
return Linker.link(DM);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -56,8 +56,8 @@ using UnitListTy = std::vector<std::unique_ptr<CompileUnit>>;
|
|||||||
class DwarfLinker {
|
class DwarfLinker {
|
||||||
public:
|
public:
|
||||||
DwarfLinker(raw_fd_ostream &OutFile, BinaryHolder &BinHolder,
|
DwarfLinker(raw_fd_ostream &OutFile, BinaryHolder &BinHolder,
|
||||||
const LinkOptions &Options)
|
LinkOptions Options)
|
||||||
: OutFile(OutFile), BinHolder(BinHolder), Options(Options) {}
|
: OutFile(OutFile), BinHolder(BinHolder), Options(std::move(Options)) {}
|
||||||
|
|
||||||
/// Link the contents of the DebugMap.
|
/// Link the contents of the DebugMap.
|
||||||
bool link(const DebugMap &);
|
bool link(const DebugMap &);
|
||||||
@ -499,7 +499,7 @@ private:
|
|||||||
/// be uniqued and sorted and there are only few entries expected
|
/// be uniqued and sorted and there are only few entries expected
|
||||||
/// per compile unit, which is why this is a std::map.
|
/// per compile unit, which is why this is a std::map.
|
||||||
std::map<std::string, std::string> ParseableSwiftInterfaces;
|
std::map<std::string, std::string> ParseableSwiftInterfaces;
|
||||||
|
|
||||||
bool ModuleCacheHintDisplayed = false;
|
bool ModuleCacheHintDisplayed = false;
|
||||||
bool ArchiveHintDisplayed = false;
|
bool ArchiveHintDisplayed = false;
|
||||||
};
|
};
|
||||||
|
@ -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
|
/// 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.
|
/// DwarfFile named \p OutputFilename. \returns false if the link failed.
|
||||||
bool linkDwarf(raw_fd_ostream &OutFile, BinaryHolder &BinHolder,
|
bool linkDwarf(raw_fd_ostream &OutFile, BinaryHolder &BinHolder,
|
||||||
const DebugMap &DM, const LinkOptions &Options);
|
const DebugMap &DM, LinkOptions Options);
|
||||||
|
|
||||||
} // end namespace dsymutil
|
} // end namespace dsymutil
|
||||||
} // end namespace llvm
|
} // end namespace llvm
|
||||||
|
Loading…
Reference in New Issue
Block a user