Commit Graph

208 Commits

Author SHA1 Message Date
Matthew Parkinson
b0c1531221 Improved fast path for pagemap. 2019-07-01 14:35:35 +01:00
Matthew Parkinson
7f7704b6fc Made a size to sizeclass table. 2019-07-01 14:35:34 +01:00
Matthew Parkinson
7a8eaec2cc Made a sizecass_t to wrap the sizeclass
This is useful as codegen is nicer if we use size_t, but the semantics
is uint8_t, and is stored as that in many places in the metadata.
Ultimately should introduce a wrapper to check this invariant.
2019-07-01 14:30:05 +01:00
Matthew Parkinson
830b06a616 Add a couple of likely annotations. 2019-07-01 14:24:03 +01:00
Matthew Parkinson
cc6a9775d6 Made checks on client have own macro. 2019-06-12 15:29:25 +01:00
Matthew Parkinson
be1898c4e8 Fixed warning. 2019-06-12 14:12:47 +01:00
Matthew Parkinson
88d9534453 CR Feedback + clangformat 2019-06-12 13:54:14 +01:00
Matthew Parkinson
a8dd065fd7 A few checks for easy corruptions
Will detect corruption caused by either
* Use-after-free
* Double-free
Neither is comprehensive.  Full temporal safety is not possible.
This just aids with debugging.
2019-06-06 13:31:25 +01:00
Matthew Parkinson
ef18d7d8d5 Made initialization of slab clearer. 2019-05-21 15:25:33 +01:00
Matthew Parkinson
7de46182a8 Used start of a slab for link. 2019-05-21 09:47:23 +01:00
Matthew Parkinson
b8bcfc0798 Made the statistics print atexit
Fixed some statistics and made them automatically print atexit.
2019-05-16 11:43:44 +01:00
Matthew Parkinson
48416e3241 CR Feedback 2019-05-14 21:16:11 +01:00
Matthew Parkinson
b484619f20 Added branch predictor hint. 2019-05-14 21:16:11 +01:00
Matthew Parkinson
5d711a2e65 Made checking debug only 2019-05-14 21:16:11 +01:00
Matthew Parkinson
e5d617c5fb Improve TLS performance
Refactor fast and slow paths to improve inlining
and codegen.
2019-05-14 21:16:11 +01:00
Matthew Parkinson
8fcedfc290 Fix the GCC build (#40)
* Make it compile with GCC.  
* Add GCC to CI.
* Add warning to documentation about using GCC.
2019-05-05 19:58:37 +01:00
David Chisnall
8f082c6a9c Fix incorrect edit in earlier commit. 2019-04-30 14:11:15 +01:00
David Chisnall
8bd136c224 Remove all instances of static_cast<size_t>(1).
In preparation for removing magic numbers, simplify code that is
computing masks with a single bit set.
2019-04-30 11:50:32 +01:00
David Chisnall
5c197e4ae4 [NFC] More checks, comments on end of namespace braces. 2019-04-30 09:46:01 +01:00
David Chisnall
49ece8f4e1 Enable the static analyser from clang-tidy.
Fix a false positive.  The loops in the pagemap accessor are too
complicated for the static analyser to check, so it doesn't spot that a
non-null return is impossible.
2019-04-30 09:46:01 +01:00
David Chisnall
c2679188ad Fix the build on Windows. 2019-04-30 09:38:35 +01:00
David Chisnall
c3c71afa57 Move pagemap to using InvalidPointer.
Replace a constant `uintptr_t` value of 1 that was repeatedly cast to a
pointer with an `InvalidPointer<1>`.
2019-04-29 13:46:57 +01:00
David Chisnall
28fac4d700 Fix the remaining clang-tidy warnings.
This introduces a new `address_t` type and two new casts: `pointer_cast`
and `address_cast` for casting between an `address_t` and a pointer.
These should make it easier to audit the codebase for casts between
pointers and integers.  In particular, the remaining `reinterpret_cast`s
and `pointer_cast`s should be the only places where we could perform
invalid pointer arithmetic.

Also adds a `pointer_offset` helper that adds an offset (in bytes) to a
pointer, preserving its original type.  This is a sufficiently common
pattern that it seemed worthwhile to centralise it.
2019-04-29 13:37:05 +01:00
David Chisnall
4bafca9be7 [NFC] Automatic fixes from clang-tidy. 2019-04-29 11:33:07 +01:00
David Chisnall
365571b2b8 Add an explicit invalid pointer type.
This is a generalisation of `std::nullptr_t` that allows non-0 values of
pointer-sized-but-not-a-pointer thing.  `DLList` now takes an
`InvalidPointer`, `nullptr_t`, or some other compatible class as a
sentinel value instead of a `uintptr_t`.
2019-04-29 11:22:40 +01:00
Matthew Parkinson
f1835813bd uintptr_max instead of -1/~0 2019-04-29 11:02:47 +01:00
Matthew Parkinson
c471e1a271 CR 2019-04-29 11:02:47 +01:00
Matthew Parkinson
70e2fcf26f Fix 32bit build 2019-04-29 11:02:47 +01:00
Matthew Parkinson
37afe9d079 Clang format 2019-04-29 11:02:47 +01:00
Matthew Parkinson
f88bcdbf58 Made alloc_chunk typed
Alloc_chunk now allocates and calls the constructor.
2019-04-29 11:02:47 +01:00
Matthew Parkinson
2d831920ea Factored casting in external pointer calculation 2019-04-29 11:02:47 +01:00
Matthew Parkinson
a8618b0892 Use uintptr_t in signature for pagemap
We don't follow the pointers passed into the pagemap directly, but
instead use them to calculate indexs into the pagemap.  Use uintptr_t
means it is easier to perform address arithmetic, and not have casts
back to void* everywhere.
2019-04-29 11:02:47 +01:00
Matthew Parkinson
47428a096c Removing some casts and uses of void* 2019-04-29 11:02:47 +01:00
Matthew Parkinson
4faf9f3bee Use fewer header files
Removing some includes to reduce the code that is dragged in.
2019-04-29 11:02:47 +01:00
David Chisnall
7f057f308f Fix inverted logic in the type check. 2019-04-11 17:31:44 +01:00
David Chisnall
9b3641df91 Address Matt's review comments. 2019-04-11 17:08:16 +01:00
David Chisnall
785766b129 Move constants into the right file.
Document them while we're moving them.
2019-04-11 16:57:12 +01:00
David Chisnall
cd8ba18191 Delete some dead code that's difficult to use correctly. 2019-04-11 16:55:05 +01:00
David Chisnall
9d24f7e24f Fix callers of renamed function. 2019-04-11 10:42:50 +01:00
David Chisnall
a64cc5562f Remove indirection in the common case.
Rather than unconditionally storing a pointer to the pagemap and
initialising this with a global, we now provide a choice of three
compile-time options for how the pagemap should be accessed.
2019-04-11 10:33:52 +01:00
David Chisnall
29aa8ef67e Give up on new making CI support recent clang-format.
Revert to 6.0 and use that locally to insert an extra blank line to make
CI happy...
2019-04-10 13:25:43 +01:00
David Chisnall
c673926d15 Add missing const.
No idea why this only raised an error with cl.exe, it was wrong on all
platforms.
2019-04-10 13:13:09 +01:00
David Chisnall
ad0a22e571 Add missing doc comments. 2019-04-10 12:49:02 +01:00
David Chisnall
2442dc4f3f [NFI] clang-format 2019-04-10 12:43:04 +01:00
David Chisnall
d0fefb8641 Don't always refer to the global pagemap.
If you're creating a new allocator and the pagemap comes from a library
that exports the pagemap accessor function but not the pagemap symbol,
you need to be able to replace this.
2019-04-10 11:57:02 +01:00
David Chisnall
a93f43fd2f Add some type safety to other pagemap accesses.
Introduce a descriptor for the pagemap config and check that the source
descriptor is compatible with the destination type.
2019-04-09 15:52:38 +01:00
rschust
51fbdf3a44 ZeroMem should not be a part of pal_consts.h 2019-04-09 13:56:22 +01:00
rschust
71900ef947 Created pal_consts.h. New exported functions are now prefixed with "snmalloc_". 2019-04-09 13:56:22 +01:00
rschust
f0d18760fe Exporting the global pagemap and the default memory provider's reserve function in order to support shared allocators 2019-04-09 13:56:22 +01:00
David Chisnall
45a31e75d1 Add some comments. 2019-02-25 12:54:16 +00:00