#include <sys/types.h>
#include <sys/sysctl.h>
#include <TargetConditionals.h>
#include "Loading.h" // For internalInstall()
#include "BootArgs.h"
namespace dyld {
#if defined(__x86_64__) && !TARGET_OS_SIMULATOR
bool isTranslated();
#endif
}
namespace dyld3 {
uint64_t BootArgs::_flags = 0;
bool BootArgs::forceCustomerCache() {
return (_flags & kForceCustomerCacheMask);
}
bool BootArgs::forceDevelopmentCache() {
return (_flags & kForceDevelopmentCacheMask);
}
bool BootArgs::forceDyld2() {
#if defined(__x86_64__) && !TARGET_OS_SIMULATOR
if (dyld::isTranslated()) { return true; }
#endif
if (_flags & kForceDyld3CacheMask) { return false; }
if (_flags & kForceDyld2CacheMask) { return true; }
return false;
}
bool BootArgs::forceDyld3() {
return (_flags & kForceDyld3CacheMask);
}
bool BootArgs::enableDyldTestMode() {
return (_flags & kDyldTestModeMask);
}
bool BootArgs::enableCompactImageInfo() {
return (_flags & kEnableCompactImageInfoMask);
}
bool BootArgs::forceReadOnlyDataConst() {
return (_flags & kForceReadOnlyDataConstMask);
}
bool BootArgs::forceReadWriteDataConst() {
return (_flags & kForceReadWriteDataConstMask);
}
void BootArgs::setFlags(uint64_t flags) {
#if TARGET_IPHONE_SIMULATOR
return;
#else
if ( !internalInstall() )
return;
_flags = flags;
#endif
}
};