[builtins][LoongArch] Port __clear_cache to LoongArch Linux
authorYouling Tang <tangyouling@loongson.cn>
Tue, 1 Nov 2022 12:14:06 +0000 (20:14 +0800)
committerWeining Lu <luweining@loongson.cn>
Tue, 1 Nov 2022 12:15:09 +0000 (20:15 +0800)
There are two failures in the current builtins,
Failed Tests (2):
  Builtins-loongarch64-linux :: clear_cache_test.c
  Builtins-loongarch64-linux :: enable_execute_stack_test.c

It is caused by __clear_cache not being implemented and triggering `abort`.

"__clear_cache" is implemented in the same way as "clear_cache" in gcc (
in gcc/config/loongarch/loongarch.md)

Differential Revision: https://reviews.llvm.org/D136921

compiler-rt/lib/builtins/clear_cache.c

index 9816940..bcc5922 100644 (file)
@@ -91,6 +91,8 @@ void __clear_cache(void *start, void *end) {
 #else
   compilerrt_abort();
 #endif
+#elif defined(__linux__) && defined(__loongarch__)
+  __asm__ volatile("ibar 0");
 #elif defined(__linux__) && defined(__mips__)
   const uintptr_t start_int = (uintptr_t)start;
   const uintptr_t end_int = (uintptr_t)end;