return std::string("bind to ") + targetImage->leafName() + " - " + hex8(-signExtend);
}
else
- return std::string("bind to ") + targetImage->leafName() + " + " + hex8(target.image.offset);
+ return std::string("bind to ") + hex4(target.image.imageNum) + "-" + targetImage->leafName() + " + " + hex8(target.image.offset);
break;
case Image::ResolvedSymbolTarget::kindSharedCache:
return std::string("bind to dyld cache + ") + hex8(target.sharedCache.offset);
return "libDyldEntry";
case TypedBytes::Type::libSystemNum:
return "libSystemNum";
- case TypedBytes::Type::bootUUID:
- return "bootUUID";
case TypedBytes::Type::mainEntry:
return "mainEntry";
case TypedBytes::Type::startEntry:
imageNode.map["has-plus-loads"].value = (image->mayHavePlusLoads() ? "true" : "false");
imageNode.map["never-unload"].value = (image->neverUnload() ? "true" : "false");
imageNode.map["has-precomputed-objc"].value = (image->hasPrecomputedObjC() ? "true" : "false");
-// imageNode.map["platform-binary"].value = (image->isPlatformBinary() ? "true" : "false");
// if ( image->cwdMustBeThisDir() )
// imageNode.map["cwd-must-be-this-dir"].value = "true";
if ( !image->inDyldCache() ) {
}
});
+ uint64_t expectedInode;
+ uint64_t expectedMtime;
+ if ( image->hasFileModTimeAndInode(expectedInode, expectedMtime) ) {
+ imageNode.map["file-inode"].value = hex(expectedInode);
+ imageNode.map["file-mod-time"].value = hex(expectedMtime);
+ }
if ( printFixups ) {
image->forEachFixup(^(uint64_t imageOffsetToRebase, bool &stop) {
imageNode.map["override-of-dyld-cache-image"].value = ImageArray::findImage(imagesArrays, cacheImageNum)->path();
}
+ if ( image->inDyldCache() && image->overridableDylib() ) {
+ imageNode.map["overridable-dylib"].value = "true";
+ }
+
#if 0
// add things to init before this image
closure->forEachPatchEntry(^(const Closure::PatchEntry& patchEntry) {
Node patchNode;
patchNode.map["func-dyld-cache-offset"].value = hex8(patchEntry.exportCacheOffset);
- patchNode.map["func-image-num"].value = hex8(patchEntry.overriddenDylibInCache);
+ patchNode.map["func-image-num"].value = hex4(patchEntry.overriddenDylibInCache);
patchNode.map["replacement"].value = printTarget(imagesArrays, patchEntry.replacement);
root.map["dyld-cache-fixups"].array.push_back(patchNode);
});
closure->forEachPatchEntry(^(const Closure::PatchEntry& patchEntry) {
Node patchNode;
patchNode.map["func-dyld-cache-offset"].value = hex8(patchEntry.exportCacheOffset);
- patchNode.map["func-image-num"].value = hex8(patchEntry.overriddenDylibInCache);
+ patchNode.map["func-image-num"].value = hex4(patchEntry.overriddenDylibInCache);
patchNode.map["replacement"].value = printTarget(imagesArrays, patchEntry.replacement);
root.map["dyld-cache-fixups"].array.push_back(patchNode);
});
root.map["interposing-tuples"].array.push_back(tupleNode);
});
- closure->forEachPatchEntry(^(const Closure::PatchEntry& patchEntry) {
- Node patchNode;
- patchNode.map["func-dyld-cache-offset"].value = hex8(patchEntry.exportCacheOffset);
- patchNode.map["func-image-num"].value = hex8(patchEntry.overriddenDylibInCache);
- patchNode.map["replacement"].value = printTarget(imagesArrays, patchEntry.replacement);
- root.map["dyld-cache-fixups"].array.push_back(patchNode);
- });
-
root.map["initial-image-count"].value = decimal(closure->initialLoadCount());
// add env-vars if they exist