Loading...
--- dyld/dyld-1340/cache_builder/SubCache.h
+++ dyld/dyld-1235.2/cache_builder/SubCache.h
@@ -29,7 +29,6 @@
#include "Chunk.h"
#include "MachOFile.h"
#include "Optimizers.h"
-#include "Platform.h"
#include "Types.h"
#include <uuid/uuid.h>
@@ -37,8 +36,6 @@
namespace cache_builder
{
-
-struct BuilderOptions;
struct Region
{
@@ -135,11 +132,10 @@
// These methods are called by computeSubCaches() to add Chunk's to the subCache
void addDylib(const BuilderConfig& config, CacheDylib& cacheDylib);
void addLinkeditFromDylib(CacheDylib& cacheDylib);
- void addCacheHeaderChunk(const BuilderOptions& options, const BuilderConfig& config,
- const std::span<CacheDylib> cacheDylibs);
+ void addCacheHeaderChunk(const BuilderConfig& config, const std::span<CacheDylib> cacheDylibs);
void addObjCHeaderInfoReadWriteChunk(const BuilderConfig& config, ObjCOptimizer& objcOptimizer);
void addCodeSignatureChunk();
- void addObjCOptsHeaderChunk(const BuilderConfig& config, ObjCOptimizer& objcOptimizer);
+ void addObjCOptsHeaderChunk(ObjCOptimizer& objcOptimizer);
void addObjCHeaderInfoReadOnlyChunk(const BuilderConfig& config, ObjCOptimizer& objcOptimizer);
void addObjCImageInfoChunk(const BuilderConfig& config, ObjCOptimizer& objcOptimizer);
void addObjCSelectorStringsChunk(const BuilderConfig& config, ObjCSelectorOptimizer& objCSelectorOptimizer);
@@ -153,19 +149,17 @@
ObjCProtocolOptimizer& objcProtocolOptimizer);
void addObjCCategoriesChunk(const BuilderConfig& config,
ObjCCategoryOptimizer& objcCategoryOptimizer);
- void addObjCIMPCachesChunk(const BuilderConfig& config, ObjCIMPCachesOptimizer& objcIMPCachesOptimizer);
+ void addObjCIMPCachesChunk(ObjCIMPCachesOptimizer& objcIMPCachesOptimizer);
void addCacheTrieChunk(DylibTrieOptimizer& dylibTrieOptimizer);
void addPatchTableChunk(PatchTableOptimizer& patchTableOptimizer);
- void addFunctionVariantsChunk(FunctionVariantsOptimizer& optimizer);
void addCacheDylibsLoaderChunk(PrebuiltLoaderBuilder& builder);
void addExecutableLoaderChunk(PrebuiltLoaderBuilder& builder);
void addExecutablesTrieChunk(PrebuiltLoaderBuilder& builder);
- void addSwiftOptsHeaderChunk(const BuilderConfig& config, SwiftOptimizer& opt);
- void addSwiftTypeHashTableChunk(const BuilderConfig& config, SwiftOptimizer& opt);
- void addSwiftMetadataHashTableChunk(const BuilderConfig& config, SwiftOptimizer& opt);
- void addSwiftForeignHashTableChunk(const BuilderConfig& config, SwiftOptimizer& opt);
- void addSwiftPrespecializedMetadataPointerTableChunks(const BuilderConfig& config, SwiftOptimizer& opt);
- void addPrewarmingDataChunk(const BuilderConfig& config, PrewarmingOptimizer& opt);
+ void addSwiftOptsHeaderChunk(SwiftProtocolConformanceOptimizer& opt);
+ void addSwiftTypeHashTableChunk(SwiftProtocolConformanceOptimizer& opt);
+ void addSwiftMetadataHashTableChunk(SwiftProtocolConformanceOptimizer& opt);
+ void addSwiftForeignHashTableChunk(SwiftProtocolConformanceOptimizer& opt);
+ void addSwiftPrespecializedMetadataPointerTableChunks(SwiftProtocolConformanceOptimizer& opt);
void addUnmappedSymbols(const BuilderConfig& config, UnmappedSymbolsOptimizer& opt);
void addDynamicConfigChunk();
void addSlideInfoChunks();
@@ -173,7 +167,7 @@
// When "kind == sub", sets the suffix on this subCache
// This has to be done after creating things like stubs sub caches, which might move the indices
- void setSuffix(mach_o::Platform platform, bool forceDevelopmentSubCacheSuffix,
+ void setSuffix(dyld3::Platform platform, bool forceDevelopmentSubCacheSuffix,
size_t subCacheIndex);
void setCodeSignatureSize(const BuilderOptions& options, const BuilderConfig& config,
@@ -183,22 +177,20 @@
// Emits a dyld_cache_header for this subCache
void writeCacheHeader(const BuilderOptions& options, const BuilderConfig& config,
- const std::span<CacheDylib> cacheDylibs,
- uint32_t osVersion, uint32_t altPlatform, uint32_t altOsVersion);
+ const std::span<CacheDylib> cacheDylibs);
// Adds any additional fields which are set only on the main subCache(s)
void addMainCacheHeaderInfo(const BuilderOptions& options, const BuilderConfig& config,
const std::span<CacheDylib> cacheDylibs,
CacheVMSize totalVMSize, uint64_t maxSlide,
+ uint32_t osVersion, uint32_t altPlatform, uint32_t altOsVersion,
CacheVMAddress dyldInCacheUnslidAddr,
CacheVMAddress dyldInCacheEntryUnslidAddr,
const DylibTrieOptimizer& dylibTrieOptimizer,
const ObjCOptimizer& objcOpt,
- const SwiftOptimizer& swiftOpt,
+ const SwiftProtocolConformanceOptimizer& swiftProtocolConformanceOpt,
const PatchTableOptimizer& patchTableOptimizer,
- const FunctionVariantsOptimizer& functionVariantOptimizer,
- const PrebuiltLoaderBuilder& prebuiltLoaderBuilder,
- const PrewarmingOptimizer& prewarmingOptimizer);
+ const PrebuiltLoaderBuilder& prebuiltLoaderBuilder);
// Adds any additional fields which are set only on the .symbols subCache
void addSymbolsCacheHeaderInfo(const UnmappedSymbolsOptimizer& unmappedSymbolsOptimizer);
@@ -221,6 +213,13 @@
// Note this is for x86_64 only, and works out where the TPRO "regions" are inside the DATA region
static void forEachTPRORegionInData(SubCache* mainSubCache, std::span<SubCache*> subCaches,
void (^callback)(Region& region, const Chunk* firstChunk, const Chunk* lastChunk));
+
+#if BUILDING_CACHE_BUILDER_UNIT_TESTS
+ // We need everything public to write tests
+public:
+#else
+private:
+#endif
// Adds the given chunk to the given region
void addTextChunk(Chunk* chunk);
@@ -235,16 +234,9 @@
void addCodeSignatureChunk(Chunk* chunk);
void addObjCReadWriteChunk(const BuilderConfig& config, Chunk* chunk);
-#if BUILDING_CACHE_BUILDER_UNIT_TESTS
- // We need everything public to write tests
-public:
-#else
-private:
-#endif
-
// Returns true if the cache header on this subCache needs an image list
// The symbols cache and stubs caches, for example, don't need this
- bool needsCacheHeaderImageList(const BuilderOptions& options) const;
+ bool needsCacheHeaderImageList() const;
// Add image info to the subCache header, if it needs it
void addCacheHeaderImageInfo(const BuilderOptions& options,
@@ -282,8 +274,11 @@
uint8_t* buffer = nullptr;
uint64_t bufferSize = 0;
CacheVMAddress subCacheVMAddress;
+#if !SUPPORT_CACHE_BUILDER_MEMORY_BUFFERS
+ int fd = 0;
+ std::string tempPath;
+#endif
uint8_t cdHash[20];
- uint8_t agilecdHash[20]; // if using agile signatures, this is the sha256
uuid_string_t uuidString;
std::string fileSuffix;
@@ -316,14 +311,15 @@
std::unique_ptr<SwiftProtocolConformancesHashTableChunk> swiftForeignTypeHashTable;
std::unique_ptr<CacheTrieChunk> cacheDylibsTrie;
std::unique_ptr<PatchTableChunk> patchTable;
- std::unique_ptr<FunctionVariantsPatchTableChunk> functionVariants;
std::unique_ptr<DynamicConfigChunk> dynamicConfig;
std::unique_ptr<PrebuiltLoaderChunk> cacheDylibsLoaders;
std::unique_ptr<PrebuiltLoaderChunk> executableLoaders;
std::unique_ptr<CacheTrieChunk> executablesTrie;
std::unique_ptr<SymbolStringsChunk> optimizedSymbolStrings;
+ std::unique_ptr<UniquedGOTsChunk> uniquedGOTs;
+ std::unique_ptr<UniquedGOTsChunk> uniquedAuthGOTs;
+ std::unique_ptr<UniquedGOTsChunk> uniquedAuthPtrs;
std::vector<std::unique_ptr<PointerHashTableChunk>> pointerHashTables;
- std::unique_ptr<PrewarmingChunk> prewarmingChunk;
// Each subCache has its own Linkedit so needs its own optimizer
SymbolStringsOptimizer symbolStringsOptimizer;