From: Arthur Eubanks Date: Mon, 21 Mar 2022 20:33:09 +0000 (-0700) Subject: [llvm-libtools-darwin] Don't use global LLVMContext X-Git-Tag: upstream/15.0.7~12849 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=3210647e5b687c49d363e271fe072c213cd9cc2d;p=platform%2Fupstream%2Fllvm.git [llvm-libtools-darwin] Don't use global LLVMContext Fixes some initialization order fiasco issues https://lab.llvm.org/buildbot#builders/5/builds/20996 --- diff --git a/llvm/tools/llvm-libtool-darwin/llvm-libtool-darwin.cpp b/llvm/tools/llvm-libtool-darwin/llvm-libtool-darwin.cpp index 591a884..ad4d6be 100644 --- a/llvm/tools/llvm-libtool-darwin/llvm-libtool-darwin.cpp +++ b/llvm/tools/llvm-libtool-darwin/llvm-libtool-darwin.cpp @@ -32,8 +32,6 @@ using namespace llvm; using namespace llvm::object; -static LLVMContext LLVMCtx; - class NewArchiveMemberList; typedef std::map MembersPerArchitectureMap; @@ -269,7 +267,8 @@ public: // the user. class MembersBuilder { public: - MembersBuilder(const Config &C) : C(C) {} + MembersBuilder(LLVMContext &LLVMCtx, const Config &C) + : LLVMCtx(LLVMCtx), C(C) {} Expected build() { for (StringRef FileName : InputFiles) @@ -396,7 +395,7 @@ private: Error verifyAndAddIRObject(NewArchiveMember Member) { auto MBRef = Member.Buf->getMemBufferRef(); Expected> IROrErr = - object::IRObjectFile::create(MBRef, LLVMCtx); + object::IRObjectFile::create(MBRef, Builder.LLVMCtx); // Throw error if not a valid IR object file. if (!IROrErr) @@ -488,7 +487,7 @@ private: } Expected> IRObjectOrError = - O.getAsIRObject(LLVMCtx); + O.getAsIRObject(Builder.LLVMCtx); if (IRObjectOrError) { // A universal file member can be a MachOObjectFile, an IRObject or an // Archive. In case we can successfully cast the member as an @@ -533,11 +532,13 @@ private: }; MembersData Data; + LLVMContext &LLVMCtx; const Config &C; }; static Expected> -buildSlices(ArrayRef> OutputBinaries) { +buildSlices(LLVMContext &LLVMCtx, + ArrayRef> OutputBinaries) { SmallVector Slices; for (const auto &OB : OutputBinaries) { @@ -585,8 +586,8 @@ checkForDuplicates(const MembersPerArchitectureMap &MembersPerArch) { return Error::success(); } -static Error createStaticLibrary(const Config &C) { - MembersBuilder Builder(C); +static Error createStaticLibrary(LLVMContext &LLVMCtx, const Config &C) { + MembersBuilder Builder(LLVMCtx, C); auto DataOrError = Builder.build(); if (auto Error = DataOrError.takeError()) return Error; @@ -627,7 +628,7 @@ static Error createStaticLibrary(const Config &C) { OwningBinary(std::move(A), std::move(OutputBuffer))); } - Expected> Slices = buildSlices(OutputBinaries); + Expected> Slices = buildSlices(LLVMCtx, OutputBinaries); if (!Slices) return Slices.takeError(); @@ -702,12 +703,13 @@ int main(int Argc, char **Argv) { llvm::InitializeAllTargetMCs(); llvm::InitializeAllAsmParsers(); + LLVMContext LLVMCtx; Config C = *ConfigOrErr; switch (LibraryOperation) { case Operation::None: break; case Operation::Static: - if (Error E = createStaticLibrary(C)) { + if (Error E = createStaticLibrary(LLVMCtx, C)) { WithColor::defaultErrorHandler(std::move(E)); return EXIT_FAILURE; }