The diff below changes bsd.lib.mk such that we set the DT_SONAME entry for shared libraries to the name of the shared library. This brings us in line with other ELF systems and allows us to use symlinks to tell the linker which shared libraries to link against. That in turn would allow us to drop some OpenBSD-specific local modifications from our linkers.
ok? Index: share/mk/bsd.lib.mk =================================================================== RCS file: /cvs/src/share/mk/bsd.lib.mk,v retrieving revision 1.91 diff -u -p -r1.91 bsd.lib.mk --- share/mk/bsd.lib.mk 5 Nov 2017 10:29:24 -0000 1.91 +++ share/mk/bsd.lib.mk 13 Nov 2017 20:20:47 -0000 @@ -211,19 +211,19 @@ ${FULLSHLIBNAME}: ${SOBJS} ${DPADD} @echo building shared ${LIB} library \(version ${SHLIB_MAJOR}.${SHLIB_MINOR}\) @rm -f ${.TARGET} .if defined(SYSPATCH_PATH) - ${CC} -shared ${PICFLAG} -o ${.TARGET} \ + ${CC} -shared -Wl,-soname,${FULLSHLIBNAME} ${PICFLAG} -o ${.TARGET} \ `readelf -Ws ${SYSPATCH_PATH}${LIBDIR}/${.TARGET} | \ awk '/ FILE/{sub(".*/", "", $$NF); gsub(/\..*/, ".so", $$NF); print $$NF}' | \ egrep -v "(cmll-586|libgcc2|unwind-dw2|mul(d|s|x)c3)" | awk '!x[$$0]++'` ${LDADD} .else - ${CC} -shared ${PICFLAG} -o ${.TARGET} \ + ${CC} -shared -Wl,-soname,${FULLSHLIBNAME} ${PICFLAG} -o ${.TARGET} \ `echo ${SOBJS} | tr ' ' '\n' | sort -R` ${LDADD} .endif ${FULLSHLIBNAME}.a: ${SOBJS} @echo building shared ${LIB} library \(version ${SHLIB_MAJOR}.${SHLIB_MINOR}\) ar @rm -f ${.TARGET} - @echo ${PICFLAG} ${LDADD} > .ldadd + @echo -Wl,-soname,${FULLSHLIBNAME} ${PICFLAG} ${LDADD} > .ldadd ar cqD ${FULLSHLIBNAME}.a ${SOBJS} .ldadd ${SYMBOLSMAP} # all .do files...