Граф коммитов

582 Коммитов

Автор SHA1 Сообщение Дата
Nathaniel Filardo ef40f1cf1d Replace "AAL" type with "Aal" to parallel "Pal" 2019-12-04 16:56:28 +00:00
Nathaniel Filardo 4d6759aca4 Make "pal_supports" not a function
But rather a template vardecl, as per C++14
2019-12-04 16:54:41 +00:00
Matthew Parkinson 2567e8e4f3
Merge pull request #106 from devnexen/atomic_swap_16_build_fix
atomic swap 16 flag missing fix.
2019-11-28 10:28:46 +00:00
David Carlier 9da3261a22 atomic swap 16 flag missing fix.
In some platforms, it is rather amd64 than the more common x86_64,
thus missing to rightfully set this flag.
2019-11-28 09:30:43 +00:00
Matthew Parkinson 7f465f9a5d
Merge pull request #104 from CTSRD-CHERI/for-upstream-cheri-prep
Further CHERI prep
2019-11-27 13:52:46 +00:00
Nathaniel Filardo 7afc6da566 pagemap: cast to size_t then do bit manip
Makes the CHERI compiler happier
2019-11-27 10:17:31 +00:00
Nathaniel Filardo 5ae8ecedee metaslab: further use of pointer align funcs 2019-11-27 10:17:31 +00:00
Nathaniel Filardo f8115a81b1 pagemap: cast uintptr_t to size_t before bit math
Not strictly necessary, but makes the CHERI compiler happier to see that
we're using a decidedly integral type rather than a possibly tagged
quantity.
2019-11-27 10:17:31 +00:00
Nathaniel Filardo d13d810b66 Explicitly compute the size of two pointers
Don't use bits::is64() when setting MIN_ALLOC_BITS
2019-11-27 10:17:31 +00:00
Matthew Parkinson f70191fb1e
Merge pull request #103 from CTSRD-CHERI/for-upstream-cheri-prep-tidy
CHERI prep work that's just tidying
2019-11-26 16:42:03 +00:00
Nathaniel Filardo 997ebc5065 ds/aba: rename ::load to ::ptr
`load` does not load (`read` and `compare_exchange` do) so give it a
different name.  For the cases where `ptr` was previously the pointer we
were guarding, rename it to `raw`.
2019-11-26 15:50:22 +00:00
Nathaniel Filardo c7d509e418 test/func/malloc: align check as size_t
If the test happens as uintptr_t on CHERI, then we attempt to construct
a capability and use a capability-based test rather than an
integer-based one, and things go south.
2019-11-26 15:50:22 +00:00
Nathaniel Filardo 0b47145526 test/func/malloc: posix_memalign vs. size_t
posix_memalign requires that the alignment parameter be a multiple of
sizeof(uintptr_t), but the test begins with alignments as small as
sizeof(size_t).  While those are very likely the same value out in the
wild right now, they're not on CHERI.

Begin the test loop at sizeof(uintptr_t) and add a test that a request
for a reasonable amount of memory but with an alignment of
sizeof(uintptr_t)/2 fails with EINVAL.
2019-11-26 15:50:22 +00:00
Nathaniel Filardo 44f80c00fc pal_open_enclave: use pointers, not uintptr_t 2019-11-26 15:50:22 +00:00
Nathaniel Filardo 263d735d0c ds/address: add dynamic pointer_align_up 2019-11-26 15:50:22 +00:00
Nathaniel Filardo df2a2dc228 metaslab: rephrase assertion in terms of pointer_diff 2019-11-26 15:50:22 +00:00
Nathaniel Filardo 4dd77d35ab largealloc: rephrase pointer comparison 2019-11-26 15:50:22 +00:00
Nathaniel Filardo f7c131e4ac largealloc: use pointer, not address_t, for cursor 2019-11-26 15:50:22 +00:00
Nathaniel Filardo 83c467eb92 ds/address: add pointer diff function
And use it rather than open-coding subtraction of two address_cast-s.
2019-11-26 15:50:22 +00:00
Nathaniel Filardo eb2d8890de Additional provenance preservation 2019-11-26 15:37:52 +00:00
Nathaniel Filardo ef7985510c address.h: add pointer alignment functions
More explicit than address_cast and bitwise and
2019-11-26 15:37:52 +00:00
Nathaniel Filardo 20e804728b Move bits::is_aligned_block to address.h
And chase consequences
2019-11-26 15:33:09 +00:00
Nathaniel Filardo 261249d9cb Preserve provenance through pointer offsetting 2019-11-26 14:59:54 +00:00
Nathaniel Filardo 00268fc2ad -Wundef 2019-11-26 14:59:54 +00:00
Nathaniel Filardo 9cdac05e4d portability: platform compiler flags
-mcx16 and -march=native are platform specific.  Leave them out if we
aren't targeting chips that need it.
2019-11-26 14:59:54 +00:00
Nathaniel Filardo ad96ba05c1 largealloc: don't zero memory twice
If the decommit strategy is DecommitSuperLazy, then both the constexpr
if and the ordinary if would fire; add an else so we only fall into one.
2019-11-26 14:59:54 +00:00
Nathaniel Filardo 6f8623b5d7 Remove spurious store to pagemap
The same operation was just done one the other side of the loop above
and the loop does not modify this location in the map.
2019-11-26 14:59:54 +00:00
Nathaniel Filardo 2af4c64698 Improve commentary 2019-11-26 14:58:47 +00:00
Nathaniel Filardo 7251022e24 superslab: reorder initialization
Setting kind and then immediately testing it seems wrong.
2019-11-26 14:58:08 +00:00
Nathaniel Filardo cbeeba004b test/externalpointer: ifdef NDEBUG, not if
Reported by Alex Richardson
2019-11-26 14:58:08 +00:00
Nathaniel Filardo 10475f3432 Set linker-language C; prevents linking c++ stdlib
Thanks to Alex Richardson for the suggestion
2019-11-26 14:58:08 +00:00
Nathaniel Filardo 528215e45e clangformat 8 2019-11-26 14:58:08 +00:00
Matthew Parkinson 11923154e8
Merge pull request #100 from CTSRD-CHERI/for-upstream-static-pagemap-slabmap
Deconflate "pagemap"
2019-11-25 16:26:55 +00:00
Nathaniel Filardo e870960655 Some minor chunkmap commentary 2019-11-25 15:22:53 +00:00
Nathaniel Filardo 7ed80e7244 Report error on pagemap ABI mismatch 2019-11-25 15:22:53 +00:00
Nathaniel Filardo d5b478ecb3 Deconflate "Pagemap" objects
There are two things calling themselves pagemaps:

- the src/mem/pagemap.h objects of that name

- the SuperslabMap object gets called a PageMap inside the Allocator

Rename the latter to chunkmap, with appropriate case and snake,
everywhere, and pull it out to its own file (chunkmap.h).

The default implementation of a chunkmap is a purely static object, but
we nevertheless instantiate it per allocator, so that other
implementations can use stateful instances when interposing on the
mutation methods.  Note that the "get" method, however, must remain
static to support the interface required by Allocator objects.
2019-11-21 15:35:56 +00:00
Matthew Parkinson 7faefbbb0e
Merge pull request #102 from microsoft/cq-free
Code quality for `free`
2019-11-21 12:13:06 +00:00
Matthew Parkinson 1d0c42449e CR feedback 2019-11-21 11:39:55 +00:00
Matthew Parkinson 3f9e63209d Make CI show clangformat failures. 2019-11-21 11:39:55 +00:00
Matthew Parkinson df1dfa55db improved comments and rename field
Replaced used with needed, the number of objects needed empty this slab.

Some mild improvement to the comments.
2019-11-21 11:39:55 +00:00
Matthew Parkinson efd5228da6 Store a full pointer in the Metaslab
This improves the codegen.
2019-11-21 11:39:55 +00:00
Matthew Parkinson cb4b8fa545 Changes the representation in Metaslab Used
Used is now set to 1, when the slab is full.  This means that the test
for
 used - 1 == 0
can be used to detect leaving full, and entering empty, reducing fast
path deallocation branchs by 1.
2019-11-19 16:25:27 +00:00
David Chisnall 093b3cc650 Make the get_reference() method on ThreadAlloc public.
This is required so that we can replace the thread allocator during
setup for the library compartmentalisation case.
2019-11-18 14:44:30 +00:00
David Chisnall 31941eac06 Add explicit qualification.
Calling a superclass method requires explicit qualification when the
superclass is a templated class.
2019-11-18 13:16:51 +00:00
Matthew Parkinson b889f11d04
Merge pull request #99 from CTSRD-CHERI/for-upstream-stats-underflow
Fix stats underflow
2019-11-15 10:10:06 +00:00
Nathaniel Filardo 3b2f521c46 allocstats: assert count doesn't go negative 2019-11-14 22:59:02 +00:00
Nathaniel Filardo 574700318e debug_is_empty: don't dealloc() free space
We know that these are small objects and that they have already had
their cache friendly offsets applied, so jump in to the dealloc path
futher down, below the stats calls.

Split small_dealloc_offseted into a wrapper around the core to avoid
inlining too much into the debug function.

While here, move the handling of the Remote objects into its own block
so that `p` is out of scope thereafter.

Fixes https://github.com/microsoft/snmalloc/issues/98
2019-11-14 22:59:02 +00:00
Matthew Parkinson 97c87f2e91
Merge pull request #96 from microsoft/usemalloc_fix
Modified pass through
2019-11-14 14:48:58 +00:00
Matthew Parkinson 8853ee701e
Merge pull request #97 from microsoft/memory_leak
Memory leak
2019-11-14 14:48:11 +00:00
Matthew Parkinson 7a3f0eb50b Clang format 2019-11-14 14:23:56 +00:00