Hi Simon, On Sun, Apr 30, 2023 at 9:30 AM Simon Glass <s...@chromium.org> wrote: > > Weak symbols are not well supported by the PE format, so disable them. > 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 <s...@chromium.org> > --- > > (no changes since v1) > > Kconfig | 12 ++++++++++++ > include/linux/compiler_attributes.h | 4 ++++ > 2 files changed, 16 insertions(+) > > diff --git a/Kconfig b/Kconfig > index 9ac816abef1c..985b09680934 100644 > --- a/Kconfig > +++ b/Kconfig > @@ -75,6 +75,18 @@ config CLANG_VERSION > 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 */ > --
I am adding Fangrui who is a toolchain expert to this thread. I chatted with him off-line, he thought we could probably go with the GCC+lld-link route. GNU ld's PE/COFF support is quite out of date. Maybe switching to lld-link could also solve the linker script issue you are trying to resolve in patch#23 "sandbox: Augment the linker script for MSYS2" ? Regards, Bin