41 return PAGE_READWRITE;
43 return PAGE_EXECUTE_READWRITE;
45 return PAGE_EXECUTE_READ;
50uint8_t* RandomizedVirtualAlloc(
size_t size,
DWORD flags,
DWORD protect,
55 if (protect != PAGE_READWRITE) {
56 base = VirtualAlloc(hint, size, flags, protect);
60 if (base ==
nullptr) {
61 base = VirtualAlloc(
nullptr, size, flags, protect);
64 return reinterpret_cast<uint8_t*
>(
base);
78 if (std::isnan(time))
return "";
79 time_t tv =
static_cast<time_t
>(std::floor(time /
msPerSecond));
81 struct tm* t = localtime_r(&tv, &tm);
82 if (
nullptr == t)
return "";
88 time_t utc =
time(
nullptr);
91 struct tm* loc = localtime_r(&utc, &tm);
94 return static_cast<double>((mktime(loc) - utc) * msPerSecond -
95 (loc->tm_isdst > 0 ? 3600 * msPerSecond : 0));
109 : MEM_RESERVE | MEM_COMMIT;
113 uint8_t*
base = RandomizedVirtualAlloc(size, flags, protect, hint);
114 if (
base ==
nullptr)
return nullptr;
118 if (
base == aligned_base)
return reinterpret_cast<void*
>(
base);
128 size_t padded_size = size + (alignment - page_size);
129 const int kMaxAttempts = 3;
130 aligned_base =
nullptr;
131 for (
int i = 0;
i < kMaxAttempts; ++
i) {
132 base = RandomizedVirtualAlloc(padded_size, flags, protect, hint);
133 if (
base ==
nullptr)
return nullptr;
139 base =
reinterpret_cast<uint8_t*
>(
140 VirtualAlloc(aligned_base, size, flags, protect));
143 if (
base !=
nullptr)
break;
146 return reinterpret_cast<void*
>(
base);
154 CHECK_NE(0, VirtualFree(address, 0, MEM_RELEASE));
161 CHECK_NE(0, VirtualFree(address, size, MEM_DECOMMIT));
169 return VirtualFree(address, size, MEM_DECOMMIT) != 0;
172 return VirtualAlloc(address, size, MEM_COMMIT, protect) !=
nullptr;
184 using DiscardVirtualMemoryFunction =
186 static std::atomic<DiscardVirtualMemoryFunction> discard_virtual_memory(
187 reinterpret_cast<DiscardVirtualMemoryFunction
>(-1));
188 if (discard_virtual_memory ==
189 reinterpret_cast<DiscardVirtualMemoryFunction
>(-1))
190 discard_virtual_memory =
191 reinterpret_cast<DiscardVirtualMemoryFunction
>(GetProcAddress(
192 GetModuleHandle(L
"Kernel32.dll"),
"DiscardVirtualMemory"));
195 DiscardVirtualMemoryFunction discard_function = discard_virtual_memory.load();
196 if (discard_function) {
197 DWORD ret = discard_function(address, size);
198 if (!ret)
return true;
202 void* ptr = VirtualAlloc(address, size, MEM_RESET, PAGE_READWRITE);
217 std::vector<SharedLibraryAddresses>
result;
221 FILE* fp = fopen(
"/proc/self/maps",
"r");
222 if (fp ==
nullptr)
return result;
225 const int kLibNameLen = FILENAME_MAX + 1;
226 char* lib_name =
reinterpret_cast<char*
>(malloc(kLibNameLen));
231 char attr_r, attr_w, attr_x, attr_p;
234 if (fscanf(fp,
" %c%c%c%c", &attr_r, &attr_w, &attr_x, &attr_p) != 4)
break;
237 if (attr_r ==
'r' && attr_w !=
'w' && attr_x ==
'x') {
242 }
while ((c != EOF) && (c !=
'\n') && (c !=
'/'));
250 if (fgets(lib_name, kLibNameLen, fp) ==
nullptr)
break;
255 lib_name[strlen(lib_name) - 1] =
'\0';
267 }
while ((c != EOF) && (c !=
'\n'));
double LocalTimeOffset(double time_ms, bool is_utc) override
~CygwinTimezoneCache() override
const char * LocalTimezone(double time) override
static V8_WARN_UNUSED_RESULT bool SealPages(void *address, size_t size)
static void SignalCodeMovingGC()
static bool HasLazyCommits()
static V8_WARN_UNUSED_RESULT bool DiscardSystemPages(void *address, size_t size)
static size_t AllocatePageSize()
static V8_WARN_UNUSED_RESULT bool SetPermissions(void *address, size_t size, MemoryPermission access)
static size_t CommitPageSize()
static void Release(void *address, size_t size)
static V8_WARN_UNUSED_RESULT bool RecommitPages(void *address, size_t size, MemoryPermission access)
static std::vector< SharedLibraryAddress > GetSharedLibraryAddresses()
static V8_WARN_UNUSED_RESULT void * Allocate(void *address, size_t size, size_t alignment, MemoryPermission access)
static void Free(void *address, size_t size)
static std::optional< MemoryRange > GetFirstFreeMemoryRangeWithin(Address boundary_start, Address boundary_end, size_t minimum_size, size_t alignment)
static void AdjustSchedulingParams()
static const int msPerSecond
ZoneVector< RpoNumber > & result
int GetProtectionFromMemoryPermission(OS::MemoryPermission access)
double LocalTimeOffset(double time_ms, bool is_utc)
#define DCHECK_LE(v1, v2)
#define DCHECK_NOT_NULL(val)
#define DCHECK_IMPLIES(v1, v2)
#define DCHECK_NE(v1, v2)
#define CHECK_NE(lhs, rhs)
#define DCHECK_EQ(v1, v2)
constexpr T RoundUp(T x, intptr_t m)
void * AlignedAddress(void *address, size_t alignment)