Mark some functions as const (aka. pure)

See https://gcc.gnu.org/onlinedocs/gcc/Common-Function-Attributes.html
for details.
pull/195/head
jvoisin 2022-03-20 17:26:16 +01:00
parent 0d6d63cbe7
commit 815dae1ad3
3 changed files with 14 additions and 12 deletions

View File

@ -154,7 +154,7 @@ static const u16 size_class_slots[] = {
#endif #endif
}; };
static size_t get_slots(unsigned class) { CONST static size_t get_slots(unsigned class) {
return size_class_slots[class]; return size_class_slots[class];
} }
@ -187,7 +187,7 @@ struct size_info {
size_t class; size_t class;
}; };
static inline struct size_info get_size_info(size_t size) { CONST static inline struct size_info get_size_info(size_t size) {
if (unlikely(size == 0)) { if (unlikely(size == 0)) {
return (struct size_info){0, 0}; return (struct size_info){0, 0};
} }
@ -218,7 +218,7 @@ static inline struct size_info get_size_info_align(size_t size, size_t alignment
fatal_error("invalid size for slabs"); fatal_error("invalid size for slabs");
} }
static size_t get_slab_size(size_t slots, size_t size) { CONST static size_t get_slab_size(size_t slots, size_t size) {
return page_align(slots * size); return page_align(slots * size);
} }
@ -283,7 +283,7 @@ static void *get_slab(const struct size_class *c, size_t slab_size, const struct
#define MAX_METADATA_MAX (CLASS_REGION_SIZE / PAGE_SIZE) #define MAX_METADATA_MAX (CLASS_REGION_SIZE / PAGE_SIZE)
static size_t get_metadata_max(size_t slab_size) { CONST static size_t get_metadata_max(size_t slab_size) {
return CLASS_REGION_SIZE / slab_size; return CLASS_REGION_SIZE / slab_size;
} }
@ -356,7 +356,7 @@ static bool is_quarantine_slot(const struct slab_metadata *metadata, size_t inde
} }
#endif #endif
static u64 get_mask(size_t slots) { CONST static u64 get_mask(size_t slots) {
return slots < U64_WIDTH ? ~0UL << slots : 0; return slots < U64_WIDTH ? ~0UL << slots : 0;
} }
@ -1190,7 +1190,7 @@ COLD __attribute__((constructor(101))) static void trigger_early_init(void) {
} }
// Returns 0 on overflow. // Returns 0 on overflow.
static size_t get_large_size_class(size_t size) { CONST static size_t get_large_size_class(size_t size) {
if (CONFIG_LARGE_SIZE_CLASSES) { if (CONFIG_LARGE_SIZE_CLASSES) {
// Continue small size class growth pattern of power of 2 spacing classes: // Continue small size class growth pattern of power of 2 spacing classes:
// //
@ -1313,7 +1313,7 @@ static int allocate_aligned(unsigned arena, void **memptr, size_t alignment, siz
return 0; return 0;
} }
static size_t adjust_size_for_canary(size_t size) { CONST static size_t adjust_size_for_canary(size_t size) {
if (size > 0 && size <= max_slab_size_class) { if (size > 0 && size <= max_slab_size_class) {
return size + canary_size; return size + canary_size;
} }

View File

@ -16,11 +16,11 @@ void *allocate_pages(size_t usable_size, size_t guard_size, bool unprotect, cons
void *allocate_pages_aligned(size_t usable_size, size_t alignment, size_t guard_size, const char *name); void *allocate_pages_aligned(size_t usable_size, size_t alignment, size_t guard_size, const char *name);
void deallocate_pages(void *usable, size_t usable_size, size_t guard_size); void deallocate_pages(void *usable, size_t usable_size, size_t guard_size);
static inline size_t page_align(size_t size) { CONST static inline size_t page_align(size_t size) {
return align(size, PAGE_SIZE); return align(size, PAGE_SIZE);
} }
static inline size_t hash_page(const void *p) { CONST static inline size_t hash_page(const void *p) {
uintptr_t u = (uintptr_t)p >> PAGE_SHIFT; uintptr_t u = (uintptr_t)p >> PAGE_SHIFT;
size_t sum = u; size_t sum = u;
sum = (sum << 7) - sum + (u >> 16); sum = (sum << 7) - sum + (u >> 16);

8
util.h
View File

@ -29,6 +29,8 @@
#define STRINGIFY(s) #s #define STRINGIFY(s) #s
#define ALIAS(f) __attribute__((alias(STRINGIFY(f)))) #define ALIAS(f) __attribute__((alias(STRINGIFY(f))))
#define CONST __attribute__ ((const))
typedef uint8_t u8; typedef uint8_t u8;
typedef uint16_t u16; typedef uint16_t u16;
typedef uint32_t u32; typedef uint32_t u32;
@ -42,16 +44,16 @@ static inline int ffz64(u64 x) {
} }
// parameter must not be 0 // parameter must not be 0
static inline int clz64(u64 x) { CONST static inline int clz64(u64 x) {
return __builtin_clzll(x); return __builtin_clzll(x);
} }
// parameter must not be 0 // parameter must not be 0
static inline u64 log2u64(u64 x) { CONST static inline u64 log2u64(u64 x) {
return U64_WIDTH - clz64(x) - 1; return U64_WIDTH - clz64(x) - 1;
} }
static inline size_t align(size_t size, size_t align) { CONST static inline size_t align(size_t size, size_t align) {
size_t mask = align - 1; size_t mask = align - 1;
return (size + mask) & ~mask; return (size + mask) & ~mask;
} }