Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(71)

Side by Side Diff: lib/Transforms/NaCl/ConvertToPSO.cpp

Issue 1829793002: PNaCl Dynamic Linking: Storing dependencies from command line in PLL. (Closed) Base URL: https://chromium.googlesource.com/native_client/pnacl-llvm.git@master
Patch Set: Created 4 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 //===- ConvertToPSO.cpp - Convert module to a PNaCl PSO--------------------===// 1 //===- ConvertToPSO.cpp - Convert module to a PNaCl PSO--------------------===//
2 // 2 //
3 // The LLVM Compiler Infrastructure 3 // The LLVM Compiler Infrastructure
4 // 4 //
5 // This file is distributed under the University of Illinois Open Source 5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details. 6 // License. See LICENSE.TXT for details.
7 // 7 //
8 //===----------------------------------------------------------------------===// 8 //===----------------------------------------------------------------------===//
9 // 9 //
10 // The ConvertToPSO pass is part of an implementation of dynamic 10 // The ConvertToPSO pass is part of an implementation of dynamic
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
55 // 55 //
56 // For the time being, this is intended only as a convenience for making 56 // For the time being, this is intended only as a convenience for making
57 // cross-repo changes, because the PSO format is interpreted by code in 57 // cross-repo changes, because the PSO format is interpreted by code in
58 // the native_client repo. The PSO format is not intended to be stable 58 // the native_client repo. The PSO format is not intended to be stable
59 // yet. 59 // yet.
60 // 60 //
61 // If the format is changed in a compatible way, an alternative is to 61 // If the format is changed in a compatible way, an alternative is to
62 // increment TOOLCHAIN_FEATURE_VERSION instead. 62 // increment TOOLCHAIN_FEATURE_VERSION instead.
63 const int PSOFormatVersion = 2; 63 const int PSOFormatVersion = 2;
64 64
65 // Command line arguments consist of a list of PLL dependencies.
66 static cl::list<std::string>
67 LibraryDependencies("deps",
Mark Seaborn 2016/03/29 15:29:39 Remember that this is an option for the 'opt' tool
Sean Klein 2016/03/29 17:58:29 Done.
68 cl::CommaSeparated,
69 cl::desc("The dependencies of the PLL being built"),
70 cl::value_desc("PLL to list as dependency"));
71
65 // This is a ModulePass because it inherently operates on a whole module. 72 // This is a ModulePass because it inherently operates on a whole module.
66 class ConvertToPSO : public ModulePass { 73 class ConvertToPSO : public ModulePass {
67 public: 74 public:
68 static char ID; // Pass identification, replacement for typeid 75 static char ID; // Pass identification, replacement for typeid
69 ConvertToPSO() : ModulePass(ID) { 76 ConvertToPSO() : ModulePass(ID) {
70 initializeConvertToPSOPass(*PassRegistry::getPassRegistry()); 77 initializeConvertToPSOPass(*PassRegistry::getPassRegistry());
71 } 78 }
72 79
73 virtual bool runOnModule(Module &M); 80 virtual bool runOnModule(Module &M);
74 }; 81 };
(...skipping 569 matching lines...) Expand 10 before | Expand all | Expand 10 after
644 // This lets us remove the "NumChainEntries" field from the PsoRoot. 651 // This lets us remove the "NumChainEntries" field from the PsoRoot.
645 assert(NumChainEntries == ExportPtrs.size() && "Malformed export hash table"); 652 assert(NumChainEntries == ExportPtrs.size() && "Malformed export hash table");
646 653
647 // Set up string of exported names. 654 // Set up string of exported names.
648 Constant *StringTableArray = ConstantDataArray::getString( 655 Constant *StringTableArray = ConstantDataArray::getString(
649 C, StringRef(StringTable.data(), StringTable.size()), false); 656 C, StringRef(StringTable.data(), StringTable.size()), false);
650 Constant *StringTableVar = new GlobalVariable( 657 Constant *StringTableVar = new GlobalVariable(
651 M, StringTableArray->getType(), true, GlobalValue::InternalLinkage, 658 M, StringTableArray->getType(), true, GlobalValue::InternalLinkage,
652 StringTableArray, "string_table"); 659 StringTableArray, "string_table");
653 660
661 // Set up string of PLL dependencies.
662 SmallString<1024> DependenciesList;
663 for (unsigned i = 0; i != LibraryDependencies.size(); ++i) {
Mark Seaborn 2016/03/29 15:29:39 You can use "for (... : LibrariesDependencies)"
Sean Klein 2016/03/29 17:58:29 Done.
664 DependenciesList.append(LibraryDependencies[i]);
665 DependenciesList.push_back(0);
666 }
667 Constant *DependenciesListArray = ConstantDataArray::getString(
668 C, StringRef(DependenciesList.data(), DependenciesList.size()), false);
669 Constant *DependenciesListVar = new GlobalVariable(
670 M, DependenciesListArray->getType(), true, GlobalValue::InternalLinkage,
671 DependenciesListArray, "dependencies_list");
672
654 SmallVector<Constant *, 32> PsoRoot = { 673 SmallVector<Constant *, 32> PsoRoot = {
655 ConstantInt::get(IntPtrType, PSOFormatVersion), 674 ConstantInt::get(IntPtrType, PSOFormatVersion),
656 675
657 // String Table 676 // String Table
658 StringTableVar, 677 StringTableVar,
659 678
660 // Exports 679 // Exports
661 createArray(M, "export_ptrs", &ExportPtrs, PtrType), 680 createArray(M, "export_ptrs", &ExportPtrs, PtrType),
662 createArray(M, "export_names", &ExportNames, IntPtrType), 681 createArray(M, "export_names", &ExportNames, IntPtrType),
663 ConstantInt::get(IntPtrType, ExportPtrs.size()), 682 ConstantInt::get(IntPtrType, ExportPtrs.size()),
664 683
665 // Imports 684 // Imports
666 createArray(M, "import_ptrs", &ImportPtrs, PtrType), 685 createArray(M, "import_ptrs", &ImportPtrs, PtrType),
667 createArray(M, "import_names", &ImportNames, IntPtrType), 686 createArray(M, "import_names", &ImportNames, IntPtrType),
668 ConstantInt::get(IntPtrType, ImportPtrs.size()), 687 ConstantInt::get(IntPtrType, ImportPtrs.size()),
669 688
670 // Hash Table (for quick string lookup of exports) 689 // Hash Table (for quick string lookup of exports)
671 ConstantInt::get(IntPtrType, NumBuckets), 690 ConstantInt::get(IntPtrType, NumBuckets),
672 createDataArray(M, "hash_buckets", &HashBuckets), 691 createDataArray(M, "hash_buckets", &HashBuckets),
673 createDataArray(M, "hash_chains", &HashChains), 692 createDataArray(M, "hash_chains", &HashChains),
674 693
675 // Bloom Filter (for quick string lookup rejection of exports) 694 // Bloom Filter (for quick string lookup rejection of exports)
676 ConstantInt::get(IntPtrType, MaskWords - 1), 695 ConstantInt::get(IntPtrType, MaskWords - 1),
677 ConstantInt::get(IntPtrType, Shift2), 696 ConstantInt::get(IntPtrType, Shift2),
678 createDataArray(M, "bloom_filter", &BloomFilter), 697 createDataArray(M, "bloom_filter", &BloomFilter),
698
699 // Dependencies List
Mark Seaborn 2016/03/29 15:40:06 When you rebase, this should go at the end, after
Sean Klein 2016/03/29 17:58:29 Do you mean that I should place these fields after
Mark Seaborn 2016/03/29 18:50:44 Yes, that would be better in the sense that it avo
700 ConstantInt::get(IntPtrType, LibraryDependencies.size()),
701 DependenciesListVar,
679 }; 702 };
680 for (auto FieldVal : PsoRootTlsFields) 703 for (auto FieldVal : PsoRootTlsFields)
681 PsoRoot.push_back(FieldVal); 704 PsoRoot.push_back(FieldVal);
682 Constant *PsoRootConst = ConstantStruct::getAnon(PsoRoot); 705 Constant *PsoRootConst = ConstantStruct::getAnon(PsoRoot);
683 new GlobalVariable( 706 new GlobalVariable(
684 M, PsoRootConst->getType(), true, GlobalValue::ExternalLinkage, 707 M, PsoRootConst->getType(), true, GlobalValue::ExternalLinkage,
685 PsoRootConst, "__pnacl_pso_root"); 708 PsoRootConst, "__pnacl_pso_root");
686 709
687 // As soon as we have finished exporting aliases, we can resolve them. 710 // As soon as we have finished exporting aliases, we can resolve them.
688 ModulePass *AliasPass = createResolveAliasesPass(); 711 ModulePass *AliasPass = createResolveAliasesPass();
689 AliasPass->runOnModule(M); 712 AliasPass->runOnModule(M);
690 delete AliasPass; 713 delete AliasPass;
691 714
692 return true; 715 return true;
693 } 716 }
694 717
695 ModulePass *llvm::createConvertToPSOPass() { 718 ModulePass *llvm::createConvertToPSOPass() {
696 return new ConvertToPSO(); 719 return new ConvertToPSO();
697 } 720 }
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698