| OLD | NEW |
| 1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 // Platform-specific code for Win32. | 5 // Platform-specific code for Win32. |
| 6 | 6 |
| 7 // Secure API functions are not available using MinGW with msvcrt.dll | 7 // Secure API functions are not available using MinGW with msvcrt.dll |
| 8 // on Windows XP. Make sure MINGW_HAS_SECURE_API is not defined to | 8 // on Windows XP. Make sure MINGW_HAS_SECURE_API is not defined to |
| 9 // disable definition of secure API functions in standard headers that | 9 // disable definition of secure API functions in standard headers that |
| 10 // would conflict with our own implementation. | 10 // would conflict with our own implementation. |
| (...skipping 820 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 831 // To avoid Visual Studio runtime support the following code can be used | 831 // To avoid Visual Studio runtime support the following code can be used |
| 832 // instead | 832 // instead |
| 833 // __asm { int 3 } | 833 // __asm { int 3 } |
| 834 __debugbreak(); | 834 __debugbreak(); |
| 835 #else | 835 #else |
| 836 ::DebugBreak(); | 836 ::DebugBreak(); |
| 837 #endif | 837 #endif |
| 838 } | 838 } |
| 839 | 839 |
| 840 | 840 |
| 841 class Win32MemoryMappedFile : public OS::MemoryMappedFile { | 841 class Win32MemoryMappedFile final : public OS::MemoryMappedFile { |
| 842 public: | 842 public: |
| 843 Win32MemoryMappedFile(HANDLE file, | 843 Win32MemoryMappedFile(HANDLE file, HANDLE file_mapping, void* memory, |
| 844 HANDLE file_mapping, | 844 size_t size) |
| 845 void* memory, | |
| 846 int size) | |
| 847 : file_(file), | 845 : file_(file), |
| 848 file_mapping_(file_mapping), | 846 file_mapping_(file_mapping), |
| 849 memory_(memory), | 847 memory_(memory), |
| 850 size_(size) { } | 848 size_(size) {} |
| 851 virtual ~Win32MemoryMappedFile(); | 849 ~Win32MemoryMappedFile() final; |
| 852 virtual void* memory() { return memory_; } | 850 void* memory() const final { return memory_; } |
| 853 virtual int size() { return size_; } | 851 size_t size() const final { return size_; } |
| 852 |
| 854 private: | 853 private: |
| 855 HANDLE file_; | 854 HANDLE const file_; |
| 856 HANDLE file_mapping_; | 855 HANDLE const file_mapping_; |
| 857 void* memory_; | 856 void* const memory_; |
| 858 int size_; | 857 size_t const size_; |
| 859 }; | 858 }; |
| 860 | 859 |
| 861 | 860 |
| 861 // static |
| 862 OS::MemoryMappedFile* OS::MemoryMappedFile::open(const char* name) { | 862 OS::MemoryMappedFile* OS::MemoryMappedFile::open(const char* name) { |
| 863 // Open a physical file | 863 // Open a physical file |
| 864 HANDLE file = CreateFileA(name, GENERIC_READ | GENERIC_WRITE, | 864 HANDLE file = CreateFileA(name, GENERIC_READ | GENERIC_WRITE, |
| 865 FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL); | 865 FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL); |
| 866 if (file == INVALID_HANDLE_VALUE) return NULL; | 866 if (file == INVALID_HANDLE_VALUE) return NULL; |
| 867 | 867 |
| 868 int size = static_cast<int>(GetFileSize(file, NULL)); | 868 DWORD size = GetFileSize(file, NULL); |
| 869 | 869 |
| 870 // Create a file mapping for the physical file | 870 // Create a file mapping for the physical file |
| 871 HANDLE file_mapping = CreateFileMapping(file, NULL, | 871 HANDLE file_mapping = |
| 872 PAGE_READWRITE, 0, static_cast<DWORD>(size), NULL); | 872 CreateFileMapping(file, NULL, PAGE_READWRITE, 0, size, NULL); |
| 873 if (file_mapping == NULL) return NULL; | 873 if (file_mapping == NULL) return NULL; |
| 874 | 874 |
| 875 // Map a view of the file into memory | 875 // Map a view of the file into memory |
| 876 void* memory = MapViewOfFile(file_mapping, FILE_MAP_ALL_ACCESS, 0, 0, size); | 876 void* memory = MapViewOfFile(file_mapping, FILE_MAP_ALL_ACCESS, 0, 0, size); |
| 877 return new Win32MemoryMappedFile(file, file_mapping, memory, size); | 877 return new Win32MemoryMappedFile(file, file_mapping, memory, size); |
| 878 } | 878 } |
| 879 | 879 |
| 880 | 880 |
| 881 OS::MemoryMappedFile* OS::MemoryMappedFile::create(const char* name, int size, | 881 // static |
| 882 void* initial) { | 882 OS::MemoryMappedFile* OS::MemoryMappedFile::create(const char* name, |
| 883 size_t size, void* initial) { |
| 883 // Open a physical file | 884 // Open a physical file |
| 884 HANDLE file = CreateFileA(name, GENERIC_READ | GENERIC_WRITE, | 885 HANDLE file = CreateFileA(name, GENERIC_READ | GENERIC_WRITE, |
| 885 FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_ALWAYS, 0, NULL); | 886 FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, |
| 887 OPEN_ALWAYS, 0, NULL); |
| 886 if (file == NULL) return NULL; | 888 if (file == NULL) return NULL; |
| 887 // Create a file mapping for the physical file | 889 // Create a file mapping for the physical file |
| 888 HANDLE file_mapping = CreateFileMapping(file, NULL, | 890 HANDLE file_mapping = CreateFileMapping(file, NULL, PAGE_READWRITE, 0, |
| 889 PAGE_READWRITE, 0, static_cast<DWORD>(size), NULL); | 891 static_cast<DWORD>(size), NULL); |
| 890 if (file_mapping == NULL) return NULL; | 892 if (file_mapping == NULL) return NULL; |
| 891 // Map a view of the file into memory | 893 // Map a view of the file into memory |
| 892 void* memory = MapViewOfFile(file_mapping, FILE_MAP_ALL_ACCESS, 0, 0, size); | 894 void* memory = MapViewOfFile(file_mapping, FILE_MAP_ALL_ACCESS, 0, 0, size); |
| 893 if (memory) memmove(memory, initial, size); | 895 if (memory) memmove(memory, initial, size); |
| 894 return new Win32MemoryMappedFile(file, file_mapping, memory, size); | 896 return new Win32MemoryMappedFile(file, file_mapping, memory, size); |
| 895 } | 897 } |
| 896 | 898 |
| 897 | 899 |
| 898 Win32MemoryMappedFile::~Win32MemoryMappedFile() { | 900 Win32MemoryMappedFile::~Win32MemoryMappedFile() { |
| 899 if (memory_ != NULL) | 901 if (memory_) UnmapViewOfFile(memory_); |
| 900 UnmapViewOfFile(memory_); | |
| 901 CloseHandle(file_mapping_); | 902 CloseHandle(file_mapping_); |
| 902 CloseHandle(file_); | 903 CloseHandle(file_); |
| 903 } | 904 } |
| 904 | 905 |
| 905 | 906 |
| 906 // The following code loads functions defined in DbhHelp.h and TlHelp32.h | 907 // The following code loads functions defined in DbhHelp.h and TlHelp32.h |
| 907 // dynamically. This is to avoid being depending on dbghelp.dll and | 908 // dynamically. This is to avoid being depending on dbghelp.dll and |
| 908 // tlhelp32.dll when running (the functions in tlhelp32.dll have been moved to | 909 // tlhelp32.dll when running (the functions in tlhelp32.dll have been moved to |
| 909 // kernel32.dll at some point so loading functions defines in TlHelp32.h | 910 // kernel32.dll at some point so loading functions defines in TlHelp32.h |
| 910 // dynamically might not be necessary any more - for some versions of Windows?). | 911 // dynamically might not be necessary any more - for some versions of Windows?). |
| (...skipping 472 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1383 DCHECK(result); | 1384 DCHECK(result); |
| 1384 } | 1385 } |
| 1385 | 1386 |
| 1386 | 1387 |
| 1387 | 1388 |
| 1388 void Thread::YieldCPU() { | 1389 void Thread::YieldCPU() { |
| 1389 Sleep(0); | 1390 Sleep(0); |
| 1390 } | 1391 } |
| 1391 | 1392 |
| 1392 } } // namespace v8::base | 1393 } } // namespace v8::base |
| OLD | NEW |