mirror of
https://github.com/RPCSX/llvm.git
synced 2025-02-04 11:27:34 +00:00
llvm-dwp: Keep ObjectFiles alive until object emission their contents can be referenced directly rather than copied
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@262389 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
5e5cb03708
commit
6475ea0b50
@ -358,11 +358,17 @@ static std::error_code write(MCStreamer &Out, ArrayRef<std::string> Inputs) {
|
||||
|
||||
uint32_t ContributionOffsets[8] = {};
|
||||
|
||||
SmallVector<OwningBinary<object::ObjectFile>, 128> Objects;
|
||||
Objects.reserve(Inputs.size());
|
||||
for (const auto &Input : Inputs) {
|
||||
auto ErrOrObj = object::ObjectFile::createObjectFile(Input);
|
||||
if (!ErrOrObj)
|
||||
return ErrOrObj.getError();
|
||||
|
||||
Objects.push_back(std::move(*ErrOrObj));
|
||||
|
||||
auto &Obj = *Objects.back().getBinary();
|
||||
|
||||
UnitIndexEntry CurEntry = {};
|
||||
|
||||
StringRef CurStrSection;
|
||||
@ -375,7 +381,7 @@ static std::error_code write(MCStreamer &Out, ArrayRef<std::string> Inputs) {
|
||||
|
||||
SmallVector<SmallString<32>, 4> UncompressedSections;
|
||||
|
||||
for (const auto &Section : ErrOrObj->getBinary()->sections()) {
|
||||
for (const auto &Section : Obj.sections()) {
|
||||
if (Section.isBSS())
|
||||
continue;
|
||||
if (Section.isVirtual())
|
||||
@ -452,8 +458,7 @@ static std::error_code write(MCStreamer &Out, ArrayRef<std::string> Inputs) {
|
||||
|
||||
if (!CurCUIndexSection.empty()) {
|
||||
DWARFUnitIndex CUIndex(DW_SECT_INFO);
|
||||
DataExtractor CUIndexData(CurCUIndexSection,
|
||||
ErrOrObj->getBinary()->isLittleEndian(), 0);
|
||||
DataExtractor CUIndexData(CurCUIndexSection, Obj.isLittleEndian(), 0);
|
||||
if (!CUIndex.parse(CUIndexData))
|
||||
return make_error_code(std::errc::invalid_argument);
|
||||
|
||||
@ -491,8 +496,7 @@ static std::error_code write(MCStreamer &Out, ArrayRef<std::string> Inputs) {
|
||||
if (CurTUIndexSection.empty())
|
||||
return make_error_code(std::errc::invalid_argument);
|
||||
DWARFUnitIndex TUIndex(DW_SECT_TYPES);
|
||||
DataExtractor TUIndexData(CurTUIndexSection,
|
||||
ErrOrObj->getBinary()->isLittleEndian(), 0);
|
||||
DataExtractor TUIndexData(CurTUIndexSection, Obj.isLittleEndian(), 0);
|
||||
if (!TUIndex.parse(TUIndexData))
|
||||
return make_error_code(std::errc::invalid_argument);
|
||||
addAllTypesFromDWP(Out, TypeIndexEntries, TUIndex, TypesSection,
|
||||
@ -537,7 +541,7 @@ static std::error_code write(MCStreamer &Out, ArrayRef<std::string> Inputs) {
|
||||
|
||||
writeIndex(Out, MCOFI.getDwarfCUIndexSection(), ContributionOffsets,
|
||||
IndexEntries);
|
||||
|
||||
Out.Finish();
|
||||
return std::error_code();
|
||||
}
|
||||
|
||||
@ -608,6 +612,4 @@ int main(int argc, char **argv) {
|
||||
|
||||
if (auto Err = write(*MS, InputFiles))
|
||||
return error(Err.message(), "Writing DWP file");
|
||||
|
||||
MS->Finish();
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user