[llvm] r262389 - llvm-dwp: Keep ObjectFiles alive until object emission their contents can be referenced directly rather than copied

David Blaikie via llvm-commits llvm-commits at lists.llvm.org
Tue Mar 1 12:45:08 PST 2016


Accidental commit - will be reverting in a moment


On Tue, Mar 1, 2016 at 12:40 PM, David Blaikie via llvm-commits <
llvm-commits at lists.llvm.org> wrote:

> Author: dblaikie
> Date: Tue Mar  1 14:40:02 2016
> New Revision: 262389
>
> URL: http://llvm.org/viewvc/llvm-project?rev=262389&view=rev
> Log:
> llvm-dwp: Keep ObjectFiles alive until object emission their contents can
> be referenced directly rather than copied
>
> Modified:
>     llvm/trunk/tools/llvm-dwp/llvm-dwp.cpp
>
> Modified: llvm/trunk/tools/llvm-dwp/llvm-dwp.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-dwp/llvm-dwp.cpp?rev=262389&r1=262388&r2=262389&view=diff
>
> ==============================================================================
> --- llvm/trunk/tools/llvm-dwp/llvm-dwp.cpp (original)
> +++ llvm/trunk/tools/llvm-dwp/llvm-dwp.cpp Tue Mar  1 14:40:02 2016
> @@ -358,11 +358,17 @@ static std::error_code write(MCStreamer
>
>    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
>
>      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
>
>      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
>          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
>
>    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();
>  }
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20160301/5d2acd85/attachment.html>


More information about the llvm-commits mailing list