Broom
1.0.0
A thread-local C++ Garbage Collector
Loading...
Searching...
No Matches
src
platform
posix
platform.cc
Go to the documentation of this file.
1
#if defined(__linux__) || defined(__FreeBSD__) || defined(__OpenBSD__) || \
2
defined(__DragonFly__)
3
4
#include <errno.h>
5
#include <pthread.h>
6
#include <string.h>
7
#include <sys/mman.h>
8
9
#include "
src/globals.h
"
10
#include "
src/macros.h
"
11
#include "
src/platform/platform-base.h
"
12
13
namespace
broom
{
14
namespace
platform {
15
// Some platforms require the file descriptor to be -1, even when
16
// MAP_ANONYMOUS/MAP_ANON is specified.
17
constexpr
const
int
kInvalidFd
= -1;
18
19
void
UnmapMemorySpace
(
const
MemorySpace&
space
) {
20
BENSURE_EQ
(
munmap
(
space
.StartPtr(),
space
.Size()), 0,
21
"Failed to unmap memory: {}"
,
strerror
(
errno
));
22
}
23
24
int
GetProtectionFromMemoryPermissions
(
MemoryPermissions
permissions
) {
25
switch
(
permissions
) {
26
case
MemoryPermissions::kReadOnly
:
27
return
PROT_READ
;
28
case
MemoryPermissions::kWriteOnly
:
29
return
PROT_WRITE
;
30
case
MemoryPermissions::kReadWrite
:
31
return
PROT_READ
|
PROT_WRITE
;
32
case
MemoryPermissions::kNone
:
33
return
0;
34
}
35
ABORT
(
"Unexpected permissions"
);
36
}
37
38
int
GetFlagsFromMemoryPermissions
(
BROOM_UNUSED
MemoryPermissions
permissions
) {
39
return
0;
40
}
41
42
MemorySpace
MapMemorySpace
(
size_t
space_size
,
MemoryPermissions
permissions
) {
43
int
prot
=
GetProtectionFromMemoryPermissions
(
permissions
);
44
int
flags
=
GetFlagsFromMemoryPermissions
(
permissions
);
45
flags
|=
MAP_ANON
;
46
flags
|=
MAP_PRIVATE
;
47
void
*
maybe_pointer
=
mmap
(
nullptr
,
space_size
,
prot
,
flags
,
kInvalidFd
, 0);
48
return
MemorySpace{
maybe_pointer
,
space_size
};
49
}
50
}
// namespace platform
51
}
// namespace broom
52
#endif
globals.h
macros.h
BROOM_UNUSED
#define BROOM_UNUSED
Definition
macros.h:109
BENSURE_EQ
#define BENSURE_EQ(lhs, rhs, m,...)
Definition
macros.h:26
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