Broom
1.0.0
A thread-local C++ Garbage Collector
Loading...
Searching...
No Matches
src
platform
windows
platform.cc
Go to the documentation of this file.
1
#ifdef _WIN32
2
// clang-format off
3
#include <windows.h>
4
// clang-format on
5
6
#include <intrin.h>
7
#include <memoryapi.h>
8
#include <processthreadsapi.h>
9
10
#include "
src/globals.h
"
11
#include "
src/macros.h
"
12
#include "
src/platform/platform-base.h
"
13
14
namespace
broom
{
15
namespace
platform {
16
17
void
*
GetStackBottom
() {
18
ULONG_PTR
low
;
19
ULONG_PTR
high
;
20
GetCurrentThreadStackLimits
(&
low
, &
high
);
21
return
SafeCast<void*>
(
high
);
22
}
23
24
void
UnmapMemorySpace
(
const
MemorySpace&
space
) {
25
BENSURE
(
VirtualFree
(
space
.StartPtr(), 0,
MEM_RELEASE
),
"VirtualFree failed"
);
26
}
27
28
int
GetProtectionFromMemoryPermissions
(
MemoryPermissions
permissions
) {
29
switch
(
permissions
) {
30
case
MemoryPermissions::kReadOnly
:
31
return
PAGE_READONLY
;
32
case
MemoryPermissions::kWriteOnly
:
33
return
PAGE_READWRITE
;
34
case
MemoryPermissions::kReadWrite
:
35
return
PAGE_READWRITE
;
36
case
MemoryPermissions::kNone
:
37
return
0;
38
}
39
ABORT
(
"Unexpected permissions"
);
40
}
41
42
MemorySpace
MapMemorySpace
(
size_t
space_size
,
MemoryPermissions
permissions
) {
43
int
prot
=
GetProtectionFromMemoryPermissions
(
permissions
);
44
void
*
maybe_pointer
=
45
VirtualAlloc
(
nullptr
,
space_size
,
MEM_RESERVE
|
MEM_COMMIT
,
prot
);
46
return
MemorySpace{
maybe_pointer
,
space_size
};
47
}
48
}
// namespace platform
49
}
// namespace broom
50
#endif
globals.h
macros.h
BENSURE
#define BENSURE(x, m,...)
Definition
macros.h:22
broom::platform::GetStackBottom
void * GetStackBottom()
broom::platform::UnmapMemorySpace
void UnmapMemorySpace(const MemorySpace &space)
broom::platform::MapMemorySpace
MemorySpace MapMemorySpace(size_t space_size, MemoryPermissions permissions=Allocator::kDefaultPermissions)
broom
Definition
allocator-inl.h:9
broom::MemoryPermissions
MemoryPermissions
Definition
allocator.h:111
broom::MemoryPermissions::kWriteOnly
@ kWriteOnly
broom::MemoryPermissions::kNone
@ kNone
broom::MemoryPermissions::kReadOnly
@ kReadOnly
broom::MemoryPermissions::kReadWrite
@ kReadWrite
broom::queue
std::queue< T, broom::deque< T > > queue
Definition
broom-queue.h:12
platform-base.h
ABORT
#define ABORT(m,...)
Definition
platform-base.h:10
Generated by
1.9.8