RISCV: fix flush cache for linux riscv when clang <= 18

for __builtin___clear_cache, clang-18 generates __clear_cache:
https://godbolt.org/z/K5Kx6EEhq, which is an empty function.
clang-19 can generates __riscv_flush_icache:
https://godbolt.org/z/TKe6Kh61a
This commit is contained in:
Mark Zhuang 2025-06-03 09:35:52 +08:00 committed by Stenzek
parent d9367229e9
commit 62c0a1e7d4
No known key found for this signature in database

View File

@ -35,6 +35,9 @@
#include <sys/mman.h>
#include <unistd.h>
#endif
#if defined(__linux__) && defined(CPU_ARCH_RISCV64)
#include <sys/cachectl.h>
#endif
#if defined(__linux__) && !defined(MAP_FIXED_NOREPLACE)
// Compatibility with old libc.
@ -812,7 +815,11 @@ void MemMap::ReleaseJITMemory(void* ptr, size_t size)
void MemMap::FlushInstructionCache(void* address, size_t size)
{
#if defined(CPU_ARCH_RISCV64) && defined(__linux__) && defined(__clang__) && (__clang_major__ <= 18)
__riscv_flush_icache(reinterpret_cast<char*>(address), reinterpret_cast<char*>(address) + size, 0);
#else
__builtin___clear_cache(reinterpret_cast<char*>(address), reinterpret_cast<char*>(address) + size);
#endif
}
#endif