[PATCH 24/31] build: Disable weak symbols for MSYS2

Pali Rohár pali at kernel.org
Tue Apr 25 18:21:08 CEST 2023


On Monday 24 April 2023 17:08:29 Simon Glass wrote:
> Weak symbols are not well supported by the PE format, so disable them.

They are supported by PE format. This is likely issue of (older)
toolchain. What about rather requiring better toolchain version and
fix special cases of weak functions do not work correctly?

> We need to manually ensure that only one function is present in the source
> code.
> 
> Add a Kconfig option to control this and enable it when building for
> Windows.
> 
> Signed-off-by: Simon Glass <sjg at chromium.org>
> ---
> 
>  Kconfig                             | 15 +++++++++++++++
>  include/linux/compiler_attributes.h |  4 ++++
>  2 files changed, 19 insertions(+)
> 
> diff --git a/Kconfig b/Kconfig
> index f24e4f0a331e..ca1402d09d10 100644
> --- a/Kconfig
> +++ b/Kconfig
> @@ -72,6 +72,21 @@ config CLANG_VERSION
>  	int
>  	default $(shell,$(srctree)/scripts/clang-version.sh $(CC))
>  
> +config CC_IS_MSYS
> +	def_bool $(success,uname -o | grep -q Msys)
> +
> +config WEAK_SYMBOLS
> +	bool "Enable use of weak symbols"
> +	default y if !CC_IS_MSYS
> +	help
> +	  The Portable Executable (PE) format used by Windows does not support
> +	  weak symbols very well. Even where it can be made to work, the __weak
> +	  function attribute cannot be made to work with PE. Supporting weak
> +	  symbols would involve changing the source code in undesirable ways.
> +
> +	  This option controls whether weak symbols are used, or not. When
> +	  disabled, the __weak function attribute does nothing.
> +
>  choice
>  	prompt "Optimization level"
>  	default CC_OPTIMIZE_FOR_SIZE
> diff --git a/include/linux/compiler_attributes.h b/include/linux/compiler_attributes.h
> index 44c9a08d7346..c954109a065b 100644
> --- a/include/linux/compiler_attributes.h
> +++ b/include/linux/compiler_attributes.h
> @@ -268,6 +268,10 @@
>   *   gcc: https://gcc.gnu.org/onlinedocs/gcc/Common-Function-Attributes.html#index-weak-function-attribute
>   *   gcc: https://gcc.gnu.org/onlinedocs/gcc/Common-Variable-Attributes.html#index-weak-variable-attribute
>   */
> +#ifdef CONFIG_WEAK_SYMBOLS
>  #define __weak                          __attribute__((__weak__))
> +#else
> +#define __weak
> +#endif
>  
>  #endif /* __LINUX_COMPILER_ATTRIBUTES_H */
> -- 
> 2.40.0.634.g4ca3ef3211-goog
> 


More information about the U-Boot mailing list