Commit Graph

395 Commits

Author SHA1 Message Date
Jeroen van Rijn
0d55764aa7 int 2025-05-27 04:42:12 +02:00
Jeroen van Rijn
c513f035ad Fix example 2025-05-27 04:33:22 +02:00
Jeroen van Rijn
624c176ef3 ptr_sub prose clarification 2025-05-27 04:28:56 +02:00
Jeroen van Rijn
655fab7227 Add core/hyperthread count for Windows and Linux (#5216)
Add core/hyperthread count to `core:sys/info` for Windows and Linux.
TODO: Linux RISCV, Linux ARM, Darwin, and the BSDs.
2025-05-25 19:43:10 +02:00
Lucas Perlind
83bc2d3c4a Add asan support for various allocators 2025-05-06 14:55:50 +10:00
Lucas Perlind
5c117bde6d Add base:sanitizer package 2025-04-24 20:28:32 +10:00
Lucas Perlind
ab0b26e876 Add more asan support to the odin runtime and begin sanitizing
allocators

This adds various bindings to the asan runtime which can be used
to poison/unpoison memory handed out by various allocators. This
means we can catch use after free memory bugs when using operations
such as free_all during runtime.

Asan poisoning are added for the follow allocators in mem:
Arena (including temporary arenas)
Scratch
Stack
Small_Stack

Additionally a bug in the stack allocator was fixed to disallow freeing
in the middle of the stack (caught by the asan!).

I plan on adding support for all the allocators in core. This is just
a good starting point and were some of the easiest ones to implement
asan for.
2025-04-24 15:17:51 +10:00
Jeroen van Rijn
0fc141db5d core:mem/tlsf: Add early-out in OOM logic
This implementation doesn't allow for out-of-band allocations to be passed through, as it's not designed to
track those. Nor is it able to signal those allocations then need to be freed on the backing allocator,
as opposed to regular allocations handled for you when you `destroy` the TLSF instance.

So if we're asked for more than we're configured to grow by, we can fail with an OOM error early, without adding a new pool.
2025-04-14 20:40:05 +02:00
Jeroen van Rijn
3d13beb3ec Remove now-implemented TODO 2025-04-14 20:09:55 +02:00
Jeroen van Rijn
beee27dec0 Allow core:mem/tlsf to automatically add new pools.
New features:
- If TLSF can't service an allocation made on it, and it's initialized with `new_pool_size` > 0, it will ask the backing allocator for additional memory.

- `estimate_pool_size` can tell you what size your initial (and `new_pool_size`) ought to be if you want to make `count` allocations of `size` and `alignment`, or in its other form, how much backing memory is needed for `count` allocations of `type` and its corresponding size and alignment.
2025-04-14 19:49:55 +02:00
Jeroen van Rijn
7088284ff4 Refactor core:mem/tlsf, add free_all support.
TODO: Allow the TLSF allocator to add additional pools when it would ordinarily OOM
      by calling its backing allocator.
2025-04-14 17:13:27 +02:00
Jeroen van Rijn
0e9cd0fb6a Prepare for tlsf.free_all 2025-04-13 15:20:53 +02:00
gingerBill
70ddb74e40 Add mem.make_over_aligned 2025-03-31 10:51:02 +01:00
gingerBill
dcb683927e Fix indentation 2025-03-31 10:40:03 +01:00
Barinzaya
7819797a03 Split mem.make_map to match the runtime procs.
The existing `mem.make_map` passes a capacity, but the builtin
`make_map` no longer takes a capacity--it was separated to
`make_map_cap` to allow for making a map without an allocation (#4340).

`core:mem` was not updated to reflect this, so any usage of `mem.make`
to make a map will currently result in a compile error.
2025-03-22 11:03:04 -04:00
gingerBill
539e9bd2e3 Merge pull request #4836 from laytan/fix-wrong-out-of-memory
fix wrong out of memory in edge cases, just try allocate from block for one source of truth
2025-03-20 17:20:26 +00:00
alektron
fd539b5e81 Fix: When resizing a virtual arena by commiting more of the already reserved memory, the total_used field of the arena was not updated; 2025-03-02 17:46:39 +01:00
Githubaccountlol
88f423a38b Update doc.odin 2025-02-26 03:04:54 -06:00
Laytan Laats
cae3f13d9f mem/virtual: specify max protection on mmap call in NetBSD and FreeBSD 2025-02-18 18:33:19 +01:00
Laytan Laats
7df5be2131 fix wrong out of memory in edge cases, just try allocate from block for one source of truth 2025-02-12 19:09:21 +01:00
Lucas Perlind
88a5817134 Fix tlsf block adjustment 2025-02-10 13:01:16 +11:00
Barinzaya
98b3a9eacd Added support for growing in place to some arenas.
This affects `runtime.Arena` and `virtual.Arena`, but not currently
`mem.Arena`. These changes allow the last allocation that has been
made to be resized to a larger size by just extending their
allocation in-place, when there's sufficient room in the memory block to
do so.

Shrinking in place and re-using the rest of the allocation can be
supported using almost the same logic, but would require the memory to
be zeroed. Since this would add a additional cost that isn't currently
present, shrinking has not been changed.
2025-01-24 10:13:46 -05:00
gingerBill
328d70e244 Merge pull request #4696 from alektron/ArenaBug
Non-zeroed memory after Arena free
2025-01-17 14:20:28 +00:00
teapo
4895065afb Add SoA make/delete to core:mem 2025-01-15 20:16:57 +01:00
alektron
a0c20023fc Fix: Issue with non-zeroed memory after arena_temp_and;
Fix: total_used field of growing Arena was not decremented correctly in arena_temp_end;
2025-01-15 17:59:30 +01:00
gingerBill
2a29322c91 Merge pull request #4605 from karl-zylinski/tracking-allocator-bad-free-default-to-crash
Make tracking allocator default to crashing on a bad free instead of adding to bad_free_array
2025-01-08 16:24:20 +00:00
gingerBill
16acb342d1 Merge pull request #4617 from gorevojd/free_bootstrapped_arena_crash
Fixed crash in arena_free_all() for bootstrapped growing arenas.
2025-01-06 09:33:23 +00:00
gingerBill
1cf7a56ba7 General clean up of code 2025-01-01 15:13:46 +00:00
dmitriy.gorevoy
e82a0c8fc7 Fixed crash in arena_free_all() for bootstrapped growing arenas.
When trying to set arena.curr_block.used = 0 after mem.zero() caused a crash because if the arena is bootstrapped its memory will be zeroed out after mem.zero() thus making arena.cur_block point to zero.
2024-12-23 09:25:18 +01:00
Karl Zylinski
e5f32e1455 Makes tracking allocator default to crashing on a bad free instead of add to bad_free_array. The bad_free_array remains to not break old code. The new default behavior is implemented in a callback that you can override, there's a second provided callback that provides the old behavior where an element was added to bad_free_array. Rationale: Many people are just checking the allocation_map, but don't check the bad free array. Several examples throughout core that use tracking allocator don't check bad_free_array either, so people have been taught not to check it. 2024-12-21 15:49:48 +01:00
Laytan Laats
20f4f378b2 sys/posix: add MAP_ANONYMOUS 2024-11-17 13:52:08 +01:00
Jeroen van Rijn
c33d2ff96b Missing paren. 2024-11-03 14:10:29 +01:00
Jeroen van Rijn
9199c6df34 mem.is_aligned is in bytes, not log2 bytes
Fix formula and clarify comment
2024-11-03 14:07:31 +01:00
Laytan Laats
1dd9b8560d build mutex allocator code on freestanding wasm 2024-10-14 16:11:25 +02:00
Laytan Laats
b746e5287e build tracking allocator code on freestanding wasm 2024-10-14 16:06:16 +02:00
gingerBill
8006ba919e Improve formatting 2024-10-11 14:48:55 +01:00
Karl Zylinski
093ade0504 Merge branch 'master' into file-tags-without-comments 2024-09-17 19:36:17 +02:00
gingerBill
0d33df15b4 Merge pull request #4208 from laytan/more-wasm-vendor-support
wasm: support more vendor libraries
2024-09-17 11:37:10 +01:00
Karl Zylinski
19f0127e55 Moved all packages in core, base, vendor, tests and examples to use new #+ file tag syntax. 2024-09-14 18:27:49 +02:00
flysand7
466e29bb38 [mem]: Rollback allocator API consistency 2024-09-14 13:15:02 +11:00
flysand7
016d1a84d4 [mem]: Document mutex, rollback stack and tracking allocators 2024-09-14 10:46:35 +11:00
flysand7
3ed2ab6e2c [mem]: Adjust the docs for calc_padding_with_header 2024-09-14 10:18:51 +11:00
flysand7
e90f5d2528 [mem]: Adjust the docs on the buddy allocator 2024-09-14 10:03:04 +11:00
flysand7
f16ed256ea [mem]: Fix handling of default resize to check alignment 2024-09-11 08:00:27 +11:00
flysand7
fdd4882568 [mem]: Adjust docs for alloc 2024-09-10 19:51:20 +11:00
Laytan Laats
5ae27c6ebc wasm: support more vendor libraries
Adds support for:
- box2d
- cgltf
- stb image
- stb rect pack
2024-09-09 18:49:13 +02:00
flysand7
167ced8ad1 [mem]: Don't use named params for dynamic pool in tests 2024-09-08 18:52:55 +11:00
flysand7
05df34f99c [mem]: Start documenting allocators.odin 2024-09-08 18:44:33 +11:00
flysand7
299accb717 [mem]: Put panic allocator after nil allocator, adjust @require_results 2024-09-08 14:17:32 +11:00
flysand7
3b30bc305c [mem]: Document raw.odin 2024-09-08 14:13:03 +11:00