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