1 // SPDX-License-Identifier: LGPL-2.1 OR BSD-2-Clause 2 /* Copyright (c) 2026 Meta Platforms, Inc. and affiliates. */ 3 #include <libarena/common.h> 4 #include <libarena/asan.h> 5 #include <libarena/buddy.h> 6 7 struct buddy __arena buddy; 8 volatile u32 zero = 0; 9 10 int arena_fls(__u64 word) 11 { 12 if (!word) 13 return 0; 14 15 return 64 - __builtin_clzll(word); 16 } 17 18 SEC("syscall") 19 __weak int arena_get_info(struct arena_get_info_args *args) 20 { 21 args->arena_base = arena_base(&arena); 22 23 return 0; 24 } 25 26 SEC("syscall") 27 __weak int arena_alloc_reserve(struct arena_alloc_reserve_args *args) 28 { 29 return bpf_arena_reserve_pages(&arena, NULL, args->nr_pages); 30 } 31 32 SEC("syscall") 33 __weak int arena_buddy_reset(void) 34 { 35 buddy_destroy(&buddy); 36 37 return buddy_init(&buddy); 38 } 39 40 SEC("syscall") 41 __weak int arena_buddy_destroy(void) 42 { 43 return buddy_destroy(&buddy); 44 } 45 46 __weak void __arena *arena_malloc(size_t size) 47 { 48 return buddy_alloc(&buddy, size); 49 } 50 51 __weak void arena_free(void __arena *ptr) 52 { 53 buddy_free(&buddy, ptr); 54 } 55 56 57 char _license[] SEC("license") = "GPL"; 58