diff options
| -rw-r--r-- | include/asm-generic/vmlinux.lds.h | 20 | 
1 files changed, 20 insertions, 0 deletions
diff --git a/include/asm-generic/vmlinux.lds.h b/include/asm-generic/vmlinux.lds.h index f1f02a2f71b7..6b89a03e636e 100644 --- a/include/asm-generic/vmlinux.lds.h +++ b/include/asm-generic/vmlinux.lds.h @@ -954,7 +954,27 @@  	EXIT_DATA  #endif +/* + * Clang's -fsanitize=kernel-address and -fsanitize=thread produce + * unwanted sections (.eh_frame and .init_array.*), but + * CONFIG_CONSTRUCTORS wants to keep any .init_array.* sections. + * https://bugs.llvm.org/show_bug.cgi?id=46478 + */ +#if defined(CONFIG_KASAN_GENERIC) || defined(CONFIG_KCSAN) +# ifdef CONFIG_CONSTRUCTORS +#  define SANITIZER_DISCARDS						\ +	*(.eh_frame) +# else +#  define SANITIZER_DISCARDS						\ +	*(.init_array) *(.init_array.*)					\ +	*(.eh_frame) +# endif +#else +# define SANITIZER_DISCARDS +#endif +  #define COMMON_DISCARDS							\ +	SANITIZER_DISCARDS						\  	*(.discard)							\  	*(.discard.*)							\  	*(.modinfo)							\  | 
