Loading...
--- dyld/dyld-1241.17/cache_builder/SubCache.h
+++ dyld/dyld-1335/cache_builder/SubCache.h
@@ -29,6 +29,7 @@
#include "Chunk.h"
#include "MachOFile.h"
#include "Optimizers.h"
+#include "Platform.h"
#include "Types.h"
#include <uuid/uuid.h>
@@ -36,6 +37,8 @@
namespace cache_builder
{
+
+struct BuilderOptions;
struct Region
{
@@ -132,10 +135,11 @@
// 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 BuilderConfig& config, const std::span<CacheDylib> cacheDylibs);
+ void addCacheHeaderChunk(const BuilderOptions& options, const BuilderConfig& config,
+ const std::span<CacheDylib> cacheDylibs);
void addObjCHeaderInfoReadWriteChunk(const BuilderConfig& config, ObjCOptimizer& objcOptimizer);
void addCodeSignatureChunk();
- void addObjCOptsHeaderChunk(ObjCOptimizer& objcOptimizer);
+ void addObjCOptsHeaderChunk(const BuilderConfig& config, ObjCOptimizer& objcOptimizer);
void addObjCHeaderInfoReadOnlyChunk(const BuilderConfig& config, ObjCOptimizer& objcOptimizer);
void addObjCImageInfoChunk(const BuilderConfig& config, ObjCOptimizer& objcOptimizer);
void addObjCSelectorStringsChunk(const BuilderConfig& config, ObjCSelectorOptimizer& objCSelectorOptimizer);
@@ -149,17 +153,19 @@
ObjCProtocolOptimizer& objcProtocolOptimizer);
void addObjCCategoriesChunk(const BuilderConfig& config,
ObjCCategoryOptimizer& objcCategoryOptimizer);
- void addObjCIMPCachesChunk(ObjCIMPCachesOptimizer& objcIMPCachesOptimizer);
+ void addObjCIMPCachesChunk(const BuilderConfig& config, 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(SwiftProtocolConformanceOptimizer& opt);
- void addSwiftTypeHashTableChunk(SwiftProtocolConformanceOptimizer& opt);
- void addSwiftMetadataHashTableChunk(SwiftProtocolConformanceOptimizer& opt);
- void addSwiftForeignHashTableChunk(SwiftProtocolConformanceOptimizer& opt);
- void addSwiftPrespecializedMetadataPointerTableChunks(SwiftProtocolConformanceOptimizer& opt);
+ 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 addUnmappedSymbols(const BuilderConfig& config, UnmappedSymbolsOptimizer& opt);
void addDynamicConfigChunk();
void addSlideInfoChunks();
@@ -167,7 +173,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(dyld3::Platform platform, bool forceDevelopmentSubCacheSuffix,
+ void setSuffix(mach_o::Platform platform, bool forceDevelopmentSubCacheSuffix,
size_t subCacheIndex);
void setCodeSignatureSize(const BuilderOptions& options, const BuilderConfig& config,
@@ -177,20 +183,22 @@
// Emits a dyld_cache_header for this subCache
void writeCacheHeader(const BuilderOptions& options, const BuilderConfig& config,
- const std::span<CacheDylib> cacheDylibs);
+ const std::span<CacheDylib> cacheDylibs,
+ uint32_t osVersion, uint32_t altPlatform, uint32_t altOsVersion);
// 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 SwiftProtocolConformanceOptimizer& swiftProtocolConformanceOpt,
+ const SwiftOptimizer& swiftOpt,
const PatchTableOptimizer& patchTableOptimizer,
- const PrebuiltLoaderBuilder& prebuiltLoaderBuilder);
+ const FunctionVariantsOptimizer& functionVariantOptimizer,
+ const PrebuiltLoaderBuilder& prebuiltLoaderBuilder,
+ const PrewarmingOptimizer& prewarmingOptimizer);
// Adds any additional fields which are set only on the .symbols subCache
void addSymbolsCacheHeaderInfo(const UnmappedSymbolsOptimizer& unmappedSymbolsOptimizer);
@@ -213,13 +221,6 @@
// 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);
@@ -234,9 +235,16 @@
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;
+ bool needsCacheHeaderImageList(const BuilderOptions& options) const;
// Add image info to the subCache header, if it needs it
void addCacheHeaderImageInfo(const BuilderOptions& options,
@@ -274,11 +282,8 @@
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;
@@ -311,15 +316,14 @@
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;