sanitizer_win.cc revision 1f11d31faa5ed89b74f7d543b1182fe8de198be5
17f9c5a220b2768a450696bbd157a0e6f2e9ceea3Alexey Samsonov//===-- sanitizer_win.cc --------------------------------------------------===// 2c5d465136b911bf925f2a631e2b79f1c03e8a1b0Alexey Samsonov// 3c5d465136b911bf925f2a631e2b79f1c03e8a1b0Alexey Samsonov// The LLVM Compiler Infrastructure 4c5d465136b911bf925f2a631e2b79f1c03e8a1b0Alexey Samsonov// 5c5d465136b911bf925f2a631e2b79f1c03e8a1b0Alexey Samsonov// This file is distributed under the University of Illinois Open Source 6c5d465136b911bf925f2a631e2b79f1c03e8a1b0Alexey Samsonov// License. See LICENSE.TXT for details. 7c5d465136b911bf925f2a631e2b79f1c03e8a1b0Alexey Samsonov// 8c5d465136b911bf925f2a631e2b79f1c03e8a1b0Alexey Samsonov//===----------------------------------------------------------------------===// 9c5d465136b911bf925f2a631e2b79f1c03e8a1b0Alexey Samsonov// 10c5d465136b911bf925f2a631e2b79f1c03e8a1b0Alexey Samsonov// This file is shared between AddressSanitizer and ThreadSanitizer 11c5d465136b911bf925f2a631e2b79f1c03e8a1b0Alexey Samsonov// run-time libraries and implements windows-specific functions from 12c5d465136b911bf925f2a631e2b79f1c03e8a1b0Alexey Samsonov// sanitizer_libc.h. 13c5d465136b911bf925f2a631e2b79f1c03e8a1b0Alexey Samsonov//===----------------------------------------------------------------------===// 14c5d465136b911bf925f2a631e2b79f1c03e8a1b0Alexey Samsonov#ifdef _WIN32 15c5d465136b911bf925f2a631e2b79f1c03e8a1b0Alexey Samsonov#include <windows.h> 16c5d465136b911bf925f2a631e2b79f1c03e8a1b0Alexey Samsonov 17c5d465136b911bf925f2a631e2b79f1c03e8a1b0Alexey Samsonov#include <assert.h> 18c5d465136b911bf925f2a631e2b79f1c03e8a1b0Alexey Samsonov 19c5d465136b911bf925f2a631e2b79f1c03e8a1b0Alexey Samsonov#include "sanitizer_defs.h" 20c5d465136b911bf925f2a631e2b79f1c03e8a1b0Alexey Samsonov#include "sanitizer_libc.h" 21c5d465136b911bf925f2a631e2b79f1c03e8a1b0Alexey Samsonov 22c5d465136b911bf925f2a631e2b79f1c03e8a1b0Alexey Samsonov#define UNIMPLEMENTED_WIN() assert(false) 23c5d465136b911bf925f2a631e2b79f1c03e8a1b0Alexey Samsonov 24c5d465136b911bf925f2a631e2b79f1c03e8a1b0Alexey Samsonovnamespace __sanitizer { 25c5d465136b911bf925f2a631e2b79f1c03e8a1b0Alexey Samsonov 26c5d465136b911bf925f2a631e2b79f1c03e8a1b0Alexey Samsonovvoid *internal_mmap(void *addr, uptr length, int prot, int flags, 27c5d465136b911bf925f2a631e2b79f1c03e8a1b0Alexey Samsonov int fd, u64 offset) { 28c5d465136b911bf925f2a631e2b79f1c03e8a1b0Alexey Samsonov UNIMPLEMENTED_WIN(); 29c5d465136b911bf925f2a631e2b79f1c03e8a1b0Alexey Samsonov return 0; 30c5d465136b911bf925f2a631e2b79f1c03e8a1b0Alexey Samsonov} 31c5d465136b911bf925f2a631e2b79f1c03e8a1b0Alexey Samsonov 321f11d31faa5ed89b74f7d543b1182fe8de198be5Alexey Samsonovint internal_munmap(void *addr, uptr length) { 331f11d31faa5ed89b74f7d543b1182fe8de198be5Alexey Samsonov UNIMPLEMENTED_WIN(); 341f11d31faa5ed89b74f7d543b1182fe8de198be5Alexey Samsonov return 0; 351f11d31faa5ed89b74f7d543b1182fe8de198be5Alexey Samsonov} 361f11d31faa5ed89b74f7d543b1182fe8de198be5Alexey Samsonov 37a56aefd2e01940fcf88d1426f9de3d5e4b1ee203Alexey Samsonovint internal_close(fd_t fd) { 38a56aefd2e01940fcf88d1426f9de3d5e4b1ee203Alexey Samsonov UNIMPLEMENTED_WIN(); 39a56aefd2e01940fcf88d1426f9de3d5e4b1ee203Alexey Samsonov return 0; 40a56aefd2e01940fcf88d1426f9de3d5e4b1ee203Alexey Samsonov} 41a56aefd2e01940fcf88d1426f9de3d5e4b1ee203Alexey Samsonov 42c5d465136b911bf925f2a631e2b79f1c03e8a1b0Alexey Samsonovfd_t internal_open(const char *filename, bool write) { 43c5d465136b911bf925f2a631e2b79f1c03e8a1b0Alexey Samsonov UNIMPLEMENTED_WIN(); 44c5d465136b911bf925f2a631e2b79f1c03e8a1b0Alexey Samsonov return 0; 45c5d465136b911bf925f2a631e2b79f1c03e8a1b0Alexey Samsonov} 46c5d465136b911bf925f2a631e2b79f1c03e8a1b0Alexey Samsonov 47a56aefd2e01940fcf88d1426f9de3d5e4b1ee203Alexey Samsonovuptr internal_read(fd_t fd, void *buf, uptr count) { 48a56aefd2e01940fcf88d1426f9de3d5e4b1ee203Alexey Samsonov UNIMPLEMENTED_WIN(); 49a56aefd2e01940fcf88d1426f9de3d5e4b1ee203Alexey Samsonov return 0; 50a56aefd2e01940fcf88d1426f9de3d5e4b1ee203Alexey Samsonov} 51a56aefd2e01940fcf88d1426f9de3d5e4b1ee203Alexey Samsonov 52a56aefd2e01940fcf88d1426f9de3d5e4b1ee203Alexey Samsonovuptr internal_write(fd_t fd, const void *buf, uptr count) { 53a56aefd2e01940fcf88d1426f9de3d5e4b1ee203Alexey Samsonov if (fd != 2) { 54a56aefd2e01940fcf88d1426f9de3d5e4b1ee203Alexey Samsonov UNIMPLEMENTED_WIN(); 55a56aefd2e01940fcf88d1426f9de3d5e4b1ee203Alexey Samsonov return 0; 56a56aefd2e01940fcf88d1426f9de3d5e4b1ee203Alexey Samsonov } 57a56aefd2e01940fcf88d1426f9de3d5e4b1ee203Alexey Samsonov HANDLE err = GetStdHandle(STD_ERROR_HANDLE); 58a56aefd2e01940fcf88d1426f9de3d5e4b1ee203Alexey Samsonov if (err == 0) 59a56aefd2e01940fcf88d1426f9de3d5e4b1ee203Alexey Samsonov return 0; // FIXME: this might not work on some apps. 60a56aefd2e01940fcf88d1426f9de3d5e4b1ee203Alexey Samsonov DWORD ret; 61a56aefd2e01940fcf88d1426f9de3d5e4b1ee203Alexey Samsonov if (!WriteFile(err, buf, count, &ret, 0)) 62a56aefd2e01940fcf88d1426f9de3d5e4b1ee203Alexey Samsonov return 0; 63a56aefd2e01940fcf88d1426f9de3d5e4b1ee203Alexey Samsonov return ret; 64a56aefd2e01940fcf88d1426f9de3d5e4b1ee203Alexey Samsonov} 65a56aefd2e01940fcf88d1426f9de3d5e4b1ee203Alexey Samsonov 661f11d31faa5ed89b74f7d543b1182fe8de198be5Alexey Samsonovint internal_sscanf(const char *str, const char *format, ...) { 671f11d31faa5ed89b74f7d543b1182fe8de198be5Alexey Samsonov UNIMPLEMENTED_WIN(); 681f11d31faa5ed89b74f7d543b1182fe8de198be5Alexey Samsonov return -1; 691f11d31faa5ed89b74f7d543b1182fe8de198be5Alexey Samsonov} 701f11d31faa5ed89b74f7d543b1182fe8de198be5Alexey Samsonov 71c5d465136b911bf925f2a631e2b79f1c03e8a1b0Alexey Samsonov} // namespace __sanitizer 72c5d465136b911bf925f2a631e2b79f1c03e8a1b0Alexey Samsonov 73c5d465136b911bf925f2a631e2b79f1c03e8a1b0Alexey Samsonov#endif // _WIN32 74