196 Commits

Author SHA1 Message Date
David Carlier
b1e1b0573c tls revives inline asm for openbsd 2022-01-27 07:01:32 +00:00
Daan
4fc63358a6 update copyright year 2022-01-10 12:01:26 -08:00
Daan
4b63c76861 avoid conditional load on macos 2022-01-10 11:40:36 -08:00
daan
43e5cd2671 revise assembly test for the _mi_threadid(); fix issue #495 with musl libc on arm; test specifically for bionic libc on Android 2022-01-01 15:54:06 -08:00
daan
30a99e2c51 default to portable C for the thread id on arm 32-bit, issue #495 2021-12-17 13:48:39 -08:00
daan
89f583a69b improve aligned allocation performance 2021-12-17 13:18:05 -08:00
daan
55ccc94707 wip: fix zero init for sbrk; add lock around sbrk 2021-12-15 19:28:34 -08:00
Daan
4a586808f7 merge 2021-12-15 16:52:36 -08:00
Daan
317093d78b fix Android overriding (issue #381 and PR #487) 2021-12-15 16:48:57 -08:00
Daan
17456f18d1
Merge pull request #489 from devnexen/remove_dfbsd_warning
removes dragonflybsd warning since the api and library overriding wor…
2021-12-15 16:37:56 -08:00
Daan
523e6d5c9b fix thread slot on arm32 (issue #495) 2021-12-15 16:05:07 -08:00
Daan
3a212d1895 fix assembly for mi_tls_slot_set on x32 and x64. Issue #488 2021-12-12 10:35:13 -08:00
DC
20e37bf7c1 removes dragonflybsd warning since the api and library overriding works, also
for the os doc report purpose.
2021-11-28 08:14:21 +00:00
daan
9183b1eec0 remove experiment with unsafe_free_with_threadid 2021-11-23 19:04:41 -08:00
daan
8b60a5ab70 add mi_unsafe_free_with_threadid and mi_get_current_threadid() 2021-11-23 17:59:27 -08:00
Daan
9c9c3a0311
Merge pull request #485 from devnexen/builtin_overflow_sig_fix
fix spurious build warning with overflow builtins
2021-11-14 14:47:38 -08:00
daan
4b0cda2012 take overcommit into account for eager commit delay 2021-11-14 11:23:11 -08:00
daan
28896e5b19 prefix UNUSED,KiB,MiB,GiB; add mi_threadid_t type; add mi_ssize_t 2021-11-13 14:46:03 -08:00
daan
f9ac60a90f suppres eager commit delay for the first 4 threads 2021-11-12 19:03:20 -08:00
Daan
e853f530a0 add noexcept attributes to improve mi_free codegen 2021-11-04 18:54:57 -07:00
Daan
751a2249c8 add mi_decl_externc, nice layout 2021-11-02 21:53:20 -07:00
dc
5b0e73281f fix spurious build warning with overflow builtins 2021-10-28 22:43:21 +01:00
Christian Heimes
13de1920ae Rename _os_random_weak to _mi_os_random_weak
The ``_os_random_weak`` function is the only non-static function
besides ``_ZSt15get_new_handlerv`` that is not prefixed with ``mi`` or
``_mi``.

The discrepancy was discovered by CPython's smelly script. The checker
looks for exported symbols that don't have well-defined prefixes.

Signed-off-by: Christian Heimes <christian@python.org>
2021-10-21 21:40:45 +02:00
Daan
6068a8bb1b
Merge pull request #420 from hankluo6/typo
Fix typo
2021-10-19 12:17:44 -07:00
Daan
1917fbd847
Merge pull request #467 from tiran/strict_prototypes
Fix strict function prototype warnings
2021-10-19 09:35:40 -07:00
Christian Heimes
7c73e3996d Fix strict function prototype warnings
Fix warning ``warning: function declaration isn’t a prototype`` when
building mimalloc with ``-Wstrict-prototypes`` flag. In C argumentless
functions should be declared as ``func(void)``.

Reproducer:
```shell
$ cmake ../.. -DCMAKE_C_FLAGS="-Wstrict-prototypes"
$ make VERBOSE=1
```

Co-authored-by: Sam Gross <colesbury@gmail.com>
Co-authored-by: Neil Schemenauer <nas@arctrix.com>
Signed-off-by: Christian Heimes <christian@python.org>
2021-10-19 10:48:26 +02:00
Daan Leijen
9c5928060e Merge branch 'dev' of https://github.com/microsoft/mimalloc into dev 2021-10-01 15:10:42 -07:00
Daan Leijen
679aad0659 update wasm support with emscripten compilation; now using sbrk instead of wasm_memory_grow 2021-10-01 15:05:01 -07:00
Jim Huang
4369fe4323 Eliminate preprocessor warnings due to undefined "__GNUC__" with ClangCL
When building some code against mimalloc with C inside Visual Studio
with ClangCL, the compiler complains about __GNUC__ being undefined.

Reported by Mojca Miklavec.

Close #422
2021-06-24 17:29:06 +08:00
hank
1c1571742d fix typo 2021-06-21 22:36:47 +08:00
Daan Leijen
728be93977 fix for #414 making numa node count atomic 2021-06-17 19:38:51 -07:00
Daan Leijen
a83bca72b3 fixes for M1; disable interpose use zones; fix pedantic warnings 2021-06-17 19:15:09 -07:00
Jim Huang
5940d3bcce Bump copyright date
Each source file has been changed according to relevant Git activities.
2021-04-24 16:35:11 +00:00
Daan
f941015928
Merge pull request #384 from kdrag0n/fix-android-thread-id
Fix thread ID getter on Android ARM/AArch64
2021-04-22 10:33:53 -07:00
Jim Huang
3402c6cc3f Revise the use of macOS predefined macro
Quoted from "Porting UNIX/Linux Applications to OS X,"[1]
* macro __MACH__ is defined if Mach system calls are supported;
* macro __APPLE__ is defined in any Apple computer.

__MACH__ is not specific to macOS since GNU/Hurd runs on a Mach-based
microkernel (gnumach) [2]. __MACH__ is defined by the compiler,
leading to potential confusions. The solution is just changing the
checked identifier (i.e. __APPLE__), so it is really used only on
macOS.

[1] https://developer.apple.com/library/archive/documentation/Porting/Conceptual/PortingUnix/compiling/compiling.html
[2] https://www.gnu.org/software/hurd/microkernel/mach/gnumach.html
2021-04-21 15:24:02 +08:00
Danny Lin
ad2fa2bf6f
Fix thread ID getter on Android ARM/AArch64
Android's Bionic libc stores the thread ID in TLS slot 1 instead of 0
on 32-bit ARM and AArch64. Slot 0 contains a pointer to the ELF DTV
(Dynamic Thread Vector) instead, which is constant for each loaded DSO.

Because mimalloc uses the thread ID to determine whether operations are
thread-local or cross-thread (atomic), all threads having the same ID
causes internal data structures to get corrupted quickly when multiple
threads are using the allocator:

mimalloc: assertion failed: at "external/mimalloc/src/page.c":563, mi_page_extend_free
  assertion: "page->local_free == NULL"
mimalloc: assertion failed: at "external/mimalloc/src/page.c":74, mi_page_is_valid_init
  assertion: "page->used <= page->capacity"
mimalloc: assertion failed: at "external/mimalloc/src/page.c":100, mi_page_is_valid_init
  assertion: "page->used + free_count == page->capacity"
mimalloc: assertion failed: at "external/mimalloc/src/page.c":74, mi_page_is_valid_init
  assertion: "page->used <= page->capacity"

Add support for Android's alternate TLS layout to fix the crashes in
multi-threaded use cases.

Fixes #376.
2021-04-07 01:59:47 -07:00
Daan Leijen
331491e1e8 build fix for Apple M1 (issue #354 and pr #356) 2021-02-02 10:46:30 -08:00
Daan Leijen
a7c33a3b0e fix getting the unique thread id on the Apple M1, see issue #354. 2021-02-01 15:47:22 -08:00
Daan Leijen
35c1fc2be9 limit memcpy as rep stosb to windows where the cpu supporst FSRM; add mi_memcpy_aligned for machine-word aligned copy. see issue #201 and pr #253 2021-01-30 14:33:46 -08:00
Daan Leijen
92ec493a5d possible fix for aligment warning (issue #341) 2021-01-29 16:21:50 -08:00
Daan Leijen
0a06884732 ensure memcpy with rep stosb is only used on windows 2021-01-29 16:09:09 -08:00
Daan
9b966c3492
Merge pull request #253 from haneefmubarak/memcpy-rep-movsb-windows-201
resolve #201 with a platform-selective REP MOVSB implementation
2021-01-29 16:00:00 -08:00
Daan Leijen
78ce716e2d add comment on use of tpidrro_el0 on macOS 2021-01-28 17:36:56 -08:00
Uwe L. Korn
a753084f74 Use APPLE instead of MACH 2021-01-28 11:38:38 +01:00
Uwe L. Korn
88330cfc9f Use __APPLE__ instead of __MACH__ 2021-01-22 17:06:43 +01:00
Uwe L. Korn
ab3dac04c2 Use tpidrro_el0 for thread local storage in macOS-arm64
Fixes #343
2020-12-30 21:49:41 +01:00
Daan Leijen
bb386025b5 update override on macOS with interpose of malloc_default_zone (issues #313) 2020-12-15 16:03:54 -08:00
Daan
5bbe1c0216
Merge pull request #323 from devnexen/dfbsd_build_fix
DragonFly support fix (for 5.8.x and forward).
2020-12-10 10:19:05 -08:00
Daan
8b8011b4f0
Merge pull request #322 from Kokokokoka/x32_patch
fix for x32 builds
2020-12-10 10:14:04 -08:00
David Carlier
e6c2fd44fc DragonFly support fix (for 5.8.x and forward).
The pthread slot approach is somewhat buggy (pretty visible
 with the stress unit test which segfault more or less randomly,
 but the stats never show up).
Using the default approach instead, the test passes eventough
 it s relatively slow (e.g 1.5 sec on FreeBSD vs 4.5 on DragonFly with same
 machine).
2020-10-22 11:15:37 +01:00
Vasya B
cb45e3c6b1 fix for x32 builds 2020-10-19 21:00:16 +00:00
daan
14b8d27386 track pinned memory separately from large os pages 2020-09-08 16:46:03 -07:00
daan
c86459afef split bitmap code into separate header and source file 2020-09-08 10:14:13 -07:00
daan
30b993ecf3 consolidate bit scan operations 2020-09-08 09:27:57 -07:00
daan
900c97664a merge from dev-atomic 2020-09-03 09:47:01 -07:00
daan
5805c39916 enable --std=c99 compilation; fix mingw compilation 2020-08-09 17:55:17 -07:00
daan
ef8e5d18a6 replace atomics with C11/C++ atomics with explicit memory order; passes tsan. Issue #130 2020-07-26 18:01:33 -07:00
daan
afe29cb8f5 fix ub on shift, issue #279 2020-07-25 19:33:02 -07:00
daan
c5406f327e move include 'limits.h' outside of definition 2020-07-21 18:51:25 -07:00
David Carlier
0c550d1626 illumos support/build fix and large page support 2020-07-10 03:26:14 +01:00
Haneef Mubarak
4c45793ec1
fix __movsb typecast error MSVC 2020-05-26 16:16:19 -07:00
Haneef Mubarak
6c92690914
fix REP MOVSB doc comment typo 2020-05-26 16:08:33 -07:00
Haneef Mubarak
429025634e
resolve #201 with a platform-selective REP MOVSB implementation 2020-05-26 16:04:28 -07:00
daan
a7d2bc8ad6 edit warning messages to be more consistent 2020-05-19 10:16:28 -07:00
daan
f2ac272baa strengthen alignment check for memalign and aligned_alloc 2020-02-17 09:59:11 -08:00
daan
a96e94f940 change TLS slot on OpenBSD 2020-02-02 22:46:38 -08:00
daan
3560e0a867 fix TLS slot number on OSX 2020-02-02 22:15:09 -08:00
daan
f3c47c7c91 improved malloc zone handling on macOSX (not working yet) 2020-02-02 21:03:09 -08:00
daan
757dcc8411 extend interpose for macOSX 2020-02-02 19:07:26 -08:00
daan
12c4108abe update comments 2020-02-02 16:09:09 -08:00
daan
07fbe4f80f fixes for dragonfly 2020-02-02 14:31:28 -08:00
daan
8bc20631e4 fixes for freeBSD 2020-02-02 13:25:26 -08:00
daan
d2db9f1fc2 update thread local storage 2020-02-02 13:12:22 -08:00
daan
0989562c2d add initial fast tls for macOSX 2020-02-01 16:57:00 -08:00
daan
fea903900d use __thread locals on linux 2020-02-01 14:33:34 -08:00
daan
a169cf0e3f merge dev-exp; add pthread TLS support for macOSX 2020-02-01 14:10:10 -08:00
daan
edff9d4fbb merge from dev-win (padding) 2020-02-01 12:32:59 -08:00
daan
aa68b8cbc7 improve encoding of padding canary and buffer overflow detection 2020-02-01 12:16:37 -08:00
daan
40f1e1e07b byte-precise heap block overflow checking with encoded padding 2020-01-31 23:39:51 -08:00
daan
68112a2751 better padding implementation, more precise statistics 2020-01-31 20:34:24 -08:00
daan
f820fae858 merge from dev; add retired collect on abandon 2020-01-30 07:24:35 -08:00
daan
a7c69ccbea fix stat accounting of segments with huge blocks 2020-01-30 06:25:42 -08:00
daan
ed1c8a203a improve performance with tls recursion counter 2020-01-29 23:08:52 -08:00
daan
03b363a1c2 first working tls on macOS using interpose; still slow 2020-01-29 22:46:44 -08:00
daan
e628fc7067 cleanup reclaim logic 2020-01-26 12:39:11 -08:00
daan
b31bc52618 add cache alignment directives for contended variables 2020-01-24 19:02:13 -08:00
daan
4a2a0c2d50 initial abandon based on fine-grained reclamation 2020-01-23 19:50:35 -08:00
daan
c9106e74a8 remove __thread attribute from mimalloc.h 2020-01-23 11:06:25 -08:00
daan
6fb434a99b use -fvisibility=hidden on clang as well 2020-01-23 10:31:47 -08:00
daan
dc58388968 Add ability to register custom error function called on various error conditions; including ENOMEM 2020-01-17 19:59:55 -08:00
daan
6b7356a10a make mimalloc compile with the highest warning level on msvc 2020-01-16 18:12:01 -08:00
daan
7a9502973d rearrange STL allocator code: remove pragma, ifdef for C++11 2020-01-16 15:57:11 -08:00
daan
0099707af9 use delayed free for all pages; reduce size of the page structure for improved address calculation 2020-01-15 17:19:01 -08:00
daan
783e3377f7 add output argument to stat printing 2020-01-15 10:53:54 -08:00
daan
12ef2816ed fix bug exposed by commit 59fa286 where reclaimed pages could be stuck to NEVER_DELAYED 2020-01-08 19:00:03 -08:00
daan
2b108c8748 increase retire expiration to 4 2020-01-03 21:39:18 -08:00
daan
77134e1ad0 update free list encoding to stronger formula with addition last 2019-12-28 15:17:49 -08:00
daan
e3391d9a53 stronger encoding of free lists using two keys per page 2019-12-28 00:57:42 -08:00
daan
ba87a39d9f updated random cookie generation using OS primitives and chacha20 2019-12-22 19:37:49 -08:00
daan
a799a19136 fix non-standard line continuation 2019-11-25 14:30:12 -08:00