https://gcc.gnu.org/bugzilla/show_bug.cgi?id=82641
--- Comment #23 from Arnd Bergmann <arnd at linaro dot org> --- I've done some more testing with '#pragma GCC target("arch=armv5te")' in place, but ran into another problem: <built-in>: note: this is the location of the previous definition In file included from /git/arm-soc/include/linux/thread_info.h:38, from /git/arm-soc/include/asm-generic/current.h:5, from ./arch/arm/include/generated/asm/current.h:1, from /git/arm-soc/include/linux/sched.h:12, from /git/arm-soc/arch/arm/kernel/xscale-cp0.c:14: /git/arm-soc/arch/arm/kernel/xscale-cp0.c: In function 'dsp_do': /git/arm-soc/arch/arm/include/asm/thread_info.h:88:35: error: inlining failed in call to always_inline 'current_thread_info': target specific option mismatch static inline struct thread_info *current_thread_info(void) ^~~~~~~~~~~~~~~~~~~ /git/arm-soc/arch/arm/kernel/xscale-cp0.c:48:18: note: called from here dsp_save_state(current_thread_info()->cpu_context.extra); ^~~~~~~~~~~~~~~~~~~~~ I've worked around that now by separating the parts that use inline assembly into standalone functions with GCC push_options/pop_options around them, so they are not mixed with normal code that might call an inline function, but this is getting increasingly ugly.