Loading...
--- dyld/dyld-1162/cache_builder/Chunk.cpp
+++ dyld/dyld-1330/cache_builder/Chunk.cpp
@@ -68,6 +68,9 @@
// FIXME: Not sure why this is 16. Seems like 8 would be sufficient.
nlist = 16,
+ // This chunk points to data which contains a uint128_t or similar, so needs 128-bit alignment
+ struct128 = 16,
+
// Inside the cache there is minimal overhead for 16K alignment even on 4K hardware
page = 16*1024,
};
@@ -112,6 +115,11 @@
return nullptr;
}
+const AlignChunk* Chunk::isAlignChunk() const
+{
+ return nullptr;
+}
+
const DylibSegmentChunk* Chunk::isDylibSegmentChunk() const
{
return nullptr;
@@ -127,7 +135,7 @@
return nullptr;
}
-UniquedGOTsChunk* Chunk::isUniquedGOTsChunk()
+const DylibSegmentChunk* Chunk::isTPROChunk() const
{
return nullptr;
}
@@ -455,6 +463,30 @@
}
//
+// MARK: --- PointerHashTableChunk methods ---
+//
+
+PointerHashTableChunk::PointerHashTableChunk()
+ : Chunk(Kind::pointerHashTable, Alignment::struct64)
+{
+}
+
+PointerHashTableChunk::~PointerHashTableChunk()
+{
+
+}
+
+void PointerHashTableChunk::dump() const
+{
+ printf("PointerHashTableChunk\n");
+}
+
+const char* PointerHashTableChunk::name() const
+{
+ return "pointer hash table";
+}
+
+//
// MARK: --- ObjCProtocolHashTableChunk methods ---
//
@@ -598,12 +630,37 @@
return "cache patch table";
}
+
+//
+// MARK: --- FunctionVariantsPatchTableChunk methods ---
+//
+
+FunctionVariantsPatchTableChunk::FunctionVariantsPatchTableChunk()
+: Chunk(Kind::cacheFunctionVariantsPatchTable, Alignment::struct64)
+{
+}
+
+FunctionVariantsPatchTableChunk::~FunctionVariantsPatchTableChunk()
+{
+}
+
+void FunctionVariantsPatchTableChunk::dump() const
+{
+ printf("FunctionVariantsPatchTableChunk\n");
+}
+
+const char* FunctionVariantsPatchTableChunk::name() const
+{
+ return "function variants table";
+}
+
+
//
// MARK: --- PrebuiltLoaderChunk methods ---
//
PrebuiltLoaderChunk::PrebuiltLoaderChunk(Kind kind)
- : Chunk(kind, Alignment::struct64)
+ : Chunk(kind, Alignment::struct128)
{
}
@@ -673,6 +730,13 @@
const DylibSegmentChunk* DylibSegmentChunk::isDylibSegmentChunk() const
{
return this;
+}
+
+const DylibSegmentChunk* DylibSegmentChunk::isTPROChunk() const
+{
+ if ( this->kind == Kind::tproDataConst )
+ return this;
+ return nullptr;
}
//
@@ -711,7 +775,10 @@
chunkName = "linkedit function starts";
break;
case Chunk::Kind::linkeditDataInCode:
- chunkName = "linkedit Mr Data (in code)";
+ chunkName = "linkedit data-in-code";
+ break;
+ case Chunk::Kind::linkeditFunctionVariants :
+ chunkName = "linkedit function-variants-table";
break;
case Chunk::Kind::linkeditExportTrie:
chunkName = "linkedit export trie";
@@ -743,6 +810,12 @@
return this->kind == Chunk::Kind::linkeditSymbolStrings;
}
+bool LinkeditDataChunk::isFunctionVariantsTable() const
+{
+ return this->kind == Chunk::Kind::linkeditFunctionVariants;
+}
+
+
//
// MARK: --- NListChunk methods ---
//
@@ -813,11 +886,6 @@
const char* UniquedGOTsChunk::name() const
{
return "uniqued GOTs";
-}
-
-UniquedGOTsChunk* UniquedGOTsChunk::isUniquedGOTsChunk()
-{
- return this;
}
//
@@ -879,3 +947,58 @@
{
return true;
}
+
+//
+// MARK: --- AlignChunk methods ---
+//
+
+AlignChunk::AlignChunk()
+ : Chunk(Kind::align, Alignment::page)
+{
+ // This never has a size so just set it now
+ this->cacheVMSize = CacheVMSize(0ULL);
+ this->subCacheFileSize = CacheFileSize(0ULL);
+}
+
+AlignChunk::~AlignChunk()
+{
+
+}
+
+void AlignChunk::dump() const
+{
+ printf("AlignChunk\n");
+}
+
+const char* AlignChunk::name() const
+{
+ return "align";
+}
+
+const AlignChunk* AlignChunk::isAlignChunk() const {
+ return this;
+}
+
+//
+// MARK: --- PrewarmingChunk methods ---
+//
+
+PrewarmingChunk::PrewarmingChunk(Kind kind)
+ : Chunk(kind, Alignment::uleb)
+{
+}
+
+PrewarmingChunk::~PrewarmingChunk()
+{
+
+}
+
+void PrewarmingChunk::dump() const
+{
+ printf("PrewarmingChunk\n");
+}
+
+const char* PrewarmingChunk::name() const
+{
+ return "prewarming data";
+}