mirror of
https://github.com/FEX-Emu/FEX.git
synced 2026-10-28 02:01:52 +01:00
Merge pull request #5449 from neobrain/opt_code_cache_writing
CodeCache: Slightly optimize cache file writing
This commit is contained in:
2 files changed
+16
-6
No files matched your search
@@ -300,12 +300,10 @@ bool CodeCache::SaveData(Core::InternalThreadState& Thread, int fd, const Execut
|
||||
::write(fd, Relocations.data(), Relocations.size() * sizeof(Relocations[0]));
|
||||
|
||||
// Pad to next page in file so that the CodeBuffer can be mmap'ed into process on load
|
||||
char Zero[64] {};
|
||||
auto Off = lseek(fd, 0, SEEK_CUR);
|
||||
while (Off != AlignUp(Off, Utils::FEX_PAGE_SIZE)) {
|
||||
auto BytesToWrite = std::min(AlignUp(Off, Utils::FEX_PAGE_SIZE) - Off, sizeof(Zero));
|
||||
::write(fd, Zero, BytesToWrite);
|
||||
Off += BytesToWrite;
|
||||
{
|
||||
auto AlignedSize = AlignUp(lseek(fd, 0, SEEK_CUR), Utils::FEX_PAGE_SIZE);
|
||||
::ftruncate(fd, AlignedSize);
|
||||
lseek(fd, AlignedSize, SEEK_SET);
|
||||
}
|
||||
|
||||
// Dump the host code (relocated for position-independent serialization)
|
||||
|
||||
@@ -272,6 +272,18 @@ int write(int FileHandle, const void* Buf, unsigned int MaxCharCount) {
|
||||
return _write(FileHandle, Buf, MaxCharCount);
|
||||
}
|
||||
|
||||
DLLEXPORT_FUNC(int, ftruncate, (int FileHandle, off_t Length)) {
|
||||
FILE_END_OF_FILE_INFO Info {.EndOfFile = {.QuadPart = Length}};
|
||||
if (!SetFileInformationByHandle(GetFile(FileHandle)->Handle, FileEndOfFileInfo, &Info, sizeof(Info))) {
|
||||
return ErrnoReturn(EINVAL);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
int _chsize(int FileHandle, long Length) {
|
||||
return ftruncate(FileHandle, Length);
|
||||
}
|
||||
|
||||
DLLEXPORT_FUNC(int, _isatty, (int _FileHandle)) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user