File tree Expand file tree Collapse file tree 2 files changed +14
-8
lines changed
libc/test/IntegrationTest Expand file tree Collapse file tree 2 files changed +14
-8
lines changed Original file line number Diff line number Diff line change @@ -13,5 +13,6 @@ add_object_library(
13
13
DEPENDS
14
14
libc.hdr.stdint_proxy
15
15
libc.src.__support.OSUtil.osutil
16
+ libc.src.__support.CPP.atomic
16
17
${arch_specific_deps}
17
18
)
Original file line number Diff line number Diff line change 5
5
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6
6
//
7
7
// ===----------------------------------------------------------------------===//
8
-
9
8
#include " hdr/stdint_proxy.h"
9
+ #include " src/__support/CPP/atomic.h"
10
10
#include " src/__support/common.h"
11
11
#include " src/__support/macros/config.h"
12
12
#include < stddef.h>
@@ -63,16 +63,21 @@ int atexit(void (*func)(void)) { return LIBC_NAMESPACE::atexit(func); }
63
63
// which just hands out continuous blocks from a statically allocated chunk of
64
64
// memory.
65
65
66
- static constexpr uint64_t MEMORY_SIZE = 16384 ;
67
- static uint8_t memory[MEMORY_SIZE];
68
- static uint8_t *ptr = memory;
66
+ static constexpr uint64_t ALIGNMENT = alignof (long double );
67
+ static constexpr uint64_t MEMORY_SIZE = 65336 ;
68
+ alignas (ALIGNMENT) static uint8_t memory[MEMORY_SIZE];
69
+ static size_t ptr = 0 ;
69
70
70
71
extern " C" {
71
72
72
- void *malloc (size_t s) {
73
- void *mem = ptr;
74
- ptr += s;
75
- return static_cast <uint64_t >(ptr - memory) >= MEMORY_SIZE ? nullptr : mem;
73
+ void *malloc (size_t size) {
74
+ LIBC_NAMESPACE::cpp::AtomicRef<size_t > ref (ptr);
75
+ size = (size + ALIGNMENT - 1 ) & ~(ALIGNMENT - 1 );
76
+ size_t old_ptr =
77
+ ref.fetch_add (size, LIBC_NAMESPACE::cpp::MemoryOrder::RELAXED);
78
+ if (static_cast <size_t >(old_ptr + size) > MEMORY_SIZE)
79
+ return nullptr ;
80
+ return &memory[old_ptr];
76
81
}
77
82
78
83
void free (void *) {}
You can’t perform that action at this time.
0 commit comments