sanitizer_win.cc revision 230c3be6cdd094a187f48e27ba0961dbeee70344
1//===-- sanitizer_win.cc --------------------------------------------------===//
2//
3//                     The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9//
10// This file is shared between AddressSanitizer and ThreadSanitizer
11// run-time libraries and implements windows-specific functions from
12// sanitizer_libc.h.
13//===----------------------------------------------------------------------===//
14#ifdef _WIN32
15#include <windows.h>
16
17#include <assert.h>
18
19#include "sanitizer_internal_defs.h"
20#include "sanitizer_libc.h"
21
22#define UNIMPLEMENTED_WIN() assert(false)
23
24namespace __sanitizer {
25
26int GetPid() {
27  return GetProcessId(GetCurrentProcess());
28}
29
30void *MmapOrDie(uptr size) {
31  void *rv = VirtualAlloc(0, size, MEM_RESERVE | MEM_COMMIT, PAGE_READWRITE);
32  if (rv == 0)
33    RawWrite("Failed to map!\n");
34    Die();
35  return rv;
36}
37
38void UnmapOrDie(void *addr, uptr size) {
39  // FIXME: Use CHECK here.
40  RAW_CHECK(VirtualFree(addr, size, MEM_DECOMMIT));
41}
42
43void *internal_mmap(void *addr, uptr length, int prot, int flags,
44                    int fd, u64 offset) {
45  UNIMPLEMENTED_WIN();
46  return 0;
47}
48
49int internal_munmap(void *addr, uptr length) {
50  UNIMPLEMENTED_WIN();
51  return 0;
52}
53
54int internal_close(fd_t fd) {
55  UNIMPLEMENTED_WIN();
56  return 0;
57}
58
59fd_t internal_open(const char *filename, bool write) {
60  UNIMPLEMENTED_WIN();
61  return 0;
62}
63
64uptr internal_read(fd_t fd, void *buf, uptr count) {
65  UNIMPLEMENTED_WIN();
66  return 0;
67}
68
69uptr internal_write(fd_t fd, const void *buf, uptr count) {
70  if (fd != 2) {
71    UNIMPLEMENTED_WIN();
72    return 0;
73  }
74  HANDLE err = GetStdHandle(STD_ERROR_HANDLE);
75  if (err == 0)
76    return 0;  // FIXME: this might not work on some apps.
77  DWORD ret;
78  if (!WriteFile(err, buf, count, &ret, 0))
79    return 0;
80  return ret;
81}
82
83uptr internal_filesize(fd_t fd) {
84  UNIMPLEMENTED_WIN();
85  return -1;
86}
87
88int internal_dup2(int oldfd, int newfd) {
89  UNIMPLEMENTED_WIN();
90  return -1;
91}
92
93int internal_sscanf(const char *str, const char *format, ...) {
94  UNIMPLEMENTED_WIN();
95  return -1;
96}
97
98}  // namespace __sanitizer
99
100#endif  // _WIN32
101