From 7aa81dd2c6f1be13c11e8230b8d5bb39ae290c0a Mon Sep 17 00:00:00 2001 From: ALTracer Date: Thu, 4 Jan 2024 20:20:42 +0300 Subject: [PATCH] crc32: Replace attribute alias with a function wrapper and macros * Aliases are not supported on darwin * Mark actual impls for `static` linkage so that they get inlined --- src/crc32.c | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/src/crc32.c b/src/crc32.c index aaf7c8bb7f9..e4be34a8d96 100644 --- a/src/crc32.c +++ b/src/crc32.c @@ -100,7 +100,7 @@ static uint32_t crc32_calc(const uint32_t crc, const uint8_t data) return (crc << 8U) ^ crc32_table[((crc >> 24U) ^ data) & 0xffU]; } -bool generic_crc32(target_s *const target, uint32_t *const result, const uint32_t base, const size_t len) +static bool generic_crc32(target_s *const target, uint32_t *const result, const uint32_t base, const size_t len) { uint32_t crc = 0xffffffffU; #if PC_HOSTED == 1 @@ -147,13 +147,11 @@ bool generic_crc32(target_s *const target, uint32_t *const result, const uint32_ return true; } -__attribute__((alias("generic_crc32"))) bool bmd_crc32( - target_s *const target, uint32_t *const result, const uint32_t base, const size_t len); #else #include #include "buffer_utils.h" -bool stm32_crc32(target_s *const target, uint32_t *const result, const uint32_t base, const size_t len) +static bool stm32_crc32(target_s *const target, uint32_t *const result, const uint32_t base, const size_t len) { uint8_t bytes[1024U]; /* ADIv5 MEM-AP AutoInc range */ @@ -212,7 +210,15 @@ bool stm32_crc32(target_s *const target, uint32_t *const result, const uint32_t *result = crc; return true; } +#endif -__attribute__((alias("stm32_crc32"))) bool bmd_crc32( - target_s *const target, uint32_t *const result, const uint32_t base, const size_t len); +/* Shim to dispatch host-specific implementation (and keep the `__func__` meaningful) */ +bool bmd_crc32(target_s *const target, uint32_t *const result, const uint32_t base, const size_t len) +{ +#if !defined(STM32F0) && !defined(STM32F1) && !defined(STM32F2) && !defined(STM32F3) && !defined(STM32F4) && \ + !defined(STM32F7) && !defined(STM32L0) && !defined(STM32L1) && !defined(STM32G0) && !defined(STM32G4) + return generic_crc32(target, result, base, len); +#else + return stm32_crc32(target, result, base, len); #endif +}