diff --git a/lib/builtins/clear_cache.c b/lib/builtins/clear_cache.c index d8fa0aa333..a5cfac070f 100644 --- a/lib/builtins/clear_cache.c +++ b/lib/builtins/clear_cache.c @@ -49,12 +49,12 @@ __clear_cache(void* start, void* end) sysarch(ARM_SYNC_ICACHE, &arg); #elif defined(ANDROID) - const register int start_reg __asm("r0") = (int) (intptr_t) start; + register int start_reg __asm("r0") = (int) (intptr_t) start; const register int end_reg __asm("r1") = (int) (intptr_t) end; const register int flags __asm("r2") = 0; const register int syscall_nr __asm("r7") = __ARM_NR_cacheflush; __asm __volatile("svc 0x0" : "=r"(start_reg) - : "r"(syscall_nr), "r"(start_reg), "r"(end_reg), "r"(flags) : "r0"); + : "r"(syscall_nr), "r"(start_reg), "r"(end_reg), "r"(flags)); if (start_reg != 0) { compilerrt_abort(); } diff --git a/make/platform/triple.mk b/make/platform/triple.mk index ce4bfe3b63..7ea152a363 100644 --- a/make/platform/triple.mk +++ b/make/platform/triple.mk @@ -23,5 +23,34 @@ endif # Filter out stuff that gcc cannot compile (these are only needed for clang-generated code anywasys). CommonFunctions_gcc := $(filter-out atomic enable_execute_stack,$(CommonFunctions)) -FUNCTIONS.builtins := $(CommonFunctions_gcc) $(value ArchFunctions.$(Arch)) +# Filter out stuff which is not available on specific target +# For example, sync_fetch_and_add_4 uses Thumb instructions, which are unavailable +# when building for arm-linux-androideabi +ifeq ($(TargetTriple),arm-linux-androideabi) + ArchDisabledFunctions := \ + sync_fetch_and_add_4 \ + sync_fetch_and_sub_4 \ + sync_fetch_and_and_4 \ + sync_fetch_and_or_4 \ + sync_fetch_and_xor_4 \ + sync_fetch_and_nand_4 \ + sync_fetch_and_max_4 \ + sync_fetch_and_umax_4 \ + sync_fetch_and_min_4 \ + sync_fetch_and_umin_4 \ + sync_fetch_and_add_8 \ + sync_fetch_and_sub_8 \ + sync_fetch_and_and_8 \ + sync_fetch_and_or_8 \ + sync_fetch_and_xor_8 \ + sync_fetch_and_nand_8 \ + sync_fetch_and_max_8 \ + sync_fetch_and_umax_8 \ + sync_fetch_and_min_8 \ + sync_fetch_and_umin_8 +endif + +ArchEnabledFunctions := $(filter-out $(ArchDisabledFunctions),$(value ArchFunctions.$(Arch))) + +FUNCTIONS.builtins := $(CommonFunctions_gcc) $(ArchEnabledFunctions)