reduce probability hint for is_memtag_enabled

pull/246/head
Daniel Micay 2024-10-12 03:17:44 -04:00
parent e86192e7fe
commit 6402e2b0d4
2 changed files with 11 additions and 9 deletions

View File

@ -470,7 +470,7 @@ static void write_after_free_check(const char *p, size_t size) {
} }
#ifdef HAS_ARM_MTE #ifdef HAS_ARM_MTE
if (likely(is_memtag_enabled())) { if (likely51(is_memtag_enabled())) {
return; return;
} }
#endif #endif
@ -505,7 +505,7 @@ static void set_slab_canary_value(UNUSED struct slab_metadata *metadata, UNUSED
static void set_canary(UNUSED const struct slab_metadata *metadata, UNUSED void *p, UNUSED size_t size) { static void set_canary(UNUSED const struct slab_metadata *metadata, UNUSED void *p, UNUSED size_t size) {
#if SLAB_CANARY #if SLAB_CANARY
#ifdef HAS_ARM_MTE #ifdef HAS_ARM_MTE
if (likely(is_memtag_enabled())) { if (likely51(is_memtag_enabled())) {
return; return;
} }
#endif #endif
@ -517,7 +517,7 @@ static void set_canary(UNUSED const struct slab_metadata *metadata, UNUSED void
static void check_canary(UNUSED const struct slab_metadata *metadata, UNUSED const void *p, UNUSED size_t size) { static void check_canary(UNUSED const struct slab_metadata *metadata, UNUSED const void *p, UNUSED size_t size) {
#if SLAB_CANARY #if SLAB_CANARY
#ifdef HAS_ARM_MTE #ifdef HAS_ARM_MTE
if (likely(is_memtag_enabled())) { if (likely51(is_memtag_enabled())) {
return; return;
} }
#endif #endif
@ -624,7 +624,7 @@ static inline void *allocate_small(unsigned arena, size_t requested_size) {
write_after_free_check(p, size - canary_size); write_after_free_check(p, size - canary_size);
set_canary(metadata, p, size); set_canary(metadata, p, size);
#ifdef HAS_ARM_MTE #ifdef HAS_ARM_MTE
if (likely(is_memtag_enabled())) { if (likely51(is_memtag_enabled())) {
p = tag_and_clear_slab_slot(metadata, p, slot, size); p = tag_and_clear_slab_slot(metadata, p, slot, size);
} }
#endif #endif
@ -661,7 +661,7 @@ static inline void *allocate_small(unsigned arena, size_t requested_size) {
if (requested_size) { if (requested_size) {
set_canary(metadata, p, size); set_canary(metadata, p, size);
#ifdef HAS_ARM_MTE #ifdef HAS_ARM_MTE
if (likely(is_memtag_enabled())) { if (likely51(is_memtag_enabled())) {
p = tag_and_clear_slab_slot(metadata, p, slot, size); p = tag_and_clear_slab_slot(metadata, p, slot, size);
} }
#endif #endif
@ -688,7 +688,7 @@ static inline void *allocate_small(unsigned arena, size_t requested_size) {
if (requested_size) { if (requested_size) {
set_canary(metadata, p, size); set_canary(metadata, p, size);
#ifdef HAS_ARM_MTE #ifdef HAS_ARM_MTE
if (likely(is_memtag_enabled())) { if (likely51(is_memtag_enabled())) {
p = tag_and_clear_slab_slot(metadata, p, slot, size); p = tag_and_clear_slab_slot(metadata, p, slot, size);
} }
#endif #endif
@ -717,7 +717,7 @@ static inline void *allocate_small(unsigned arena, size_t requested_size) {
write_after_free_check(p, size - canary_size); write_after_free_check(p, size - canary_size);
set_canary(metadata, p, size); set_canary(metadata, p, size);
#ifdef HAS_ARM_MTE #ifdef HAS_ARM_MTE
if (likely(is_memtag_enabled())) { if (likely51(is_memtag_enabled())) {
p = tag_and_clear_slab_slot(metadata, p, slot, size); p = tag_and_clear_slab_slot(metadata, p, slot, size);
} }
#endif #endif
@ -805,7 +805,7 @@ static inline void deallocate_small(void *p, const size_t *expected_size) {
bool skip_zero = false; bool skip_zero = false;
#ifdef HAS_ARM_MTE #ifdef HAS_ARM_MTE
if (likely(is_memtag_enabled())) { if (likely51(is_memtag_enabled())) {
arm_mte_tag_and_clear_mem(set_pointer_tag(p, RESERVED_TAG), size); arm_mte_tag_and_clear_mem(set_pointer_tag(p, RESERVED_TAG), size);
// metadata->arm_mte_tags is intentionally not updated, see tag_and_clear_slab_slot() // metadata->arm_mte_tags is intentionally not updated, see tag_and_clear_slab_slot()
skip_zero = true; skip_zero = true;
@ -1243,7 +1243,7 @@ COLD static void init_slow_path(void) {
fatal_error("failed to unprotect memory for regions table"); fatal_error("failed to unprotect memory for regions table");
} }
#ifdef HAS_ARM_MTE #ifdef HAS_ARM_MTE
if (likely(is_memtag_enabled())) { if (likely51(is_memtag_enabled())) {
ro.slab_region_start = memory_map_mte(slab_region_size); ro.slab_region_start = memory_map_mte(slab_region_size);
} else { } else {
ro.slab_region_start = memory_map(slab_region_size); ro.slab_region_start = memory_map(slab_region_size);

2
util.h
View File

@ -9,7 +9,9 @@
#define noreturn __attribute__((noreturn)) #define noreturn __attribute__((noreturn))
#define likely(x) __builtin_expect(!!(x), 1) #define likely(x) __builtin_expect(!!(x), 1)
#define likely51(x) __builtin_expect_with_probability(!!(x), 1, 0.51)
#define unlikely(x) __builtin_expect(!!(x), 0) #define unlikely(x) __builtin_expect(!!(x), 0)
#define unlikely51(x) __builtin_expect_with_probability(!!(x), 0, 0.51)
#define min(x, y) ({ \ #define min(x, y) ({ \
__typeof__(x) _x = (x); \ __typeof__(x) _x = (x); \