|
32 | 32 | using namespace llvm;
|
33 | 33 | using namespace llvm::object;
|
34 | 34 |
|
35 |
| -static LLVMContext LLVMCtx; |
36 |
| - |
37 | 35 | class NewArchiveMemberList;
|
38 | 36 | typedef std::map<uint64_t, NewArchiveMemberList> MembersPerArchitectureMap;
|
39 | 37 |
|
@@ -269,7 +267,8 @@ class NewArchiveMemberList {
|
269 | 267 | // the user.
|
270 | 268 | class MembersBuilder {
|
271 | 269 | public:
|
272 |
| - MembersBuilder(const Config &C) : C(C) {} |
| 270 | + MembersBuilder(LLVMContext &LLVMCtx, const Config &C) |
| 271 | + : LLVMCtx(LLVMCtx), C(C) {} |
273 | 272 |
|
274 | 273 | Expected<MembersData> build() {
|
275 | 274 | for (StringRef FileName : InputFiles)
|
@@ -396,7 +395,7 @@ class MembersBuilder {
|
396 | 395 | Error verifyAndAddIRObject(NewArchiveMember Member) {
|
397 | 396 | auto MBRef = Member.Buf->getMemBufferRef();
|
398 | 397 | Expected<std::unique_ptr<object::IRObjectFile>> IROrErr =
|
399 |
| - object::IRObjectFile::create(MBRef, LLVMCtx); |
| 398 | + object::IRObjectFile::create(MBRef, Builder.LLVMCtx); |
400 | 399 |
|
401 | 400 | // Throw error if not a valid IR object file.
|
402 | 401 | if (!IROrErr)
|
@@ -488,7 +487,7 @@ class MembersBuilder {
|
488 | 487 | }
|
489 | 488 |
|
490 | 489 | Expected<std::unique_ptr<IRObjectFile>> IRObjectOrError =
|
491 |
| - O.getAsIRObject(LLVMCtx); |
| 490 | + O.getAsIRObject(Builder.LLVMCtx); |
492 | 491 | if (IRObjectOrError) {
|
493 | 492 | // A universal file member can be a MachOObjectFile, an IRObject or an
|
494 | 493 | // Archive. In case we can successfully cast the member as an
|
@@ -533,11 +532,13 @@ class MembersBuilder {
|
533 | 532 | };
|
534 | 533 |
|
535 | 534 | MembersData Data;
|
| 535 | + LLVMContext &LLVMCtx; |
536 | 536 | const Config &C;
|
537 | 537 | };
|
538 | 538 |
|
539 | 539 | static Expected<SmallVector<Slice, 2>>
|
540 |
| -buildSlices(ArrayRef<OwningBinary<Archive>> OutputBinaries) { |
| 540 | +buildSlices(LLVMContext &LLVMCtx, |
| 541 | + ArrayRef<OwningBinary<Archive>> OutputBinaries) { |
541 | 542 | SmallVector<Slice, 2> Slices;
|
542 | 543 |
|
543 | 544 | for (const auto &OB : OutputBinaries) {
|
@@ -585,8 +586,8 @@ checkForDuplicates(const MembersPerArchitectureMap &MembersPerArch) {
|
585 | 586 | return Error::success();
|
586 | 587 | }
|
587 | 588 |
|
588 |
| -static Error createStaticLibrary(const Config &C) { |
589 |
| - MembersBuilder Builder(C); |
| 589 | +static Error createStaticLibrary(LLVMContext &LLVMCtx, const Config &C) { |
| 590 | + MembersBuilder Builder(LLVMCtx, C); |
590 | 591 | auto DataOrError = Builder.build();
|
591 | 592 | if (auto Error = DataOrError.takeError())
|
592 | 593 | return Error;
|
@@ -627,7 +628,7 @@ static Error createStaticLibrary(const Config &C) {
|
627 | 628 | OwningBinary<Archive>(std::move(A), std::move(OutputBuffer)));
|
628 | 629 | }
|
629 | 630 |
|
630 |
| - Expected<SmallVector<Slice, 2>> Slices = buildSlices(OutputBinaries); |
| 631 | + Expected<SmallVector<Slice, 2>> Slices = buildSlices(LLVMCtx, OutputBinaries); |
631 | 632 | if (!Slices)
|
632 | 633 | return Slices.takeError();
|
633 | 634 |
|
@@ -702,12 +703,13 @@ int main(int Argc, char **Argv) {
|
702 | 703 | llvm::InitializeAllTargetMCs();
|
703 | 704 | llvm::InitializeAllAsmParsers();
|
704 | 705 |
|
| 706 | + LLVMContext LLVMCtx; |
705 | 707 | Config C = *ConfigOrErr;
|
706 | 708 | switch (LibraryOperation) {
|
707 | 709 | case Operation::None:
|
708 | 710 | break;
|
709 | 711 | case Operation::Static:
|
710 |
| - if (Error E = createStaticLibrary(C)) { |
| 712 | + if (Error E = createStaticLibrary(LLVMCtx, C)) { |
711 | 713 | WithColor::defaultErrorHandler(std::move(E));
|
712 | 714 | return EXIT_FAILURE;
|
713 | 715 | }
|
|
0 commit comments