With following code and script:
.global foo foo: VER1 { global: foo ; local: * ; } ;
ld.bfd does not allow to redefine symbol:
++ ld.bfd --defsym=foo=2 --version-script version.txt -shared test.o -o test.so test.o: In function `foo': (.text+0x0): multiple definition of `foo'
So semantic of --defsym is like a symbol declaration.
LLD allowed that, patch fixes it.