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