[Bug 268178] lang/tcl8[6-8]: fix build with clang/lld 15

From: <bugzilla-noreply_at_freebsd.org>
Date: Mon, 05 Dec 2022 18:25:23 UTC
https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=268178

            Bug ID: 268178
           Summary: lang/tcl8[6-8]: fix build with clang/lld 15
           Product: Ports & Packages
           Version: Latest
          Hardware: Any
                OS: Any
            Status: New
          Severity: Affects Some People
          Priority: ---
         Component: Individual Port(s)
          Assignee: ports-bugs@FreeBSD.org
          Reporter: dim@FreeBSD.org

During an exp-run for llvm 15 (see bug 265425), it turned out that lang/tcl86
failed to build with clang (and lld) 15:

...
cc -O2 -O2 -pipe  -fstack-protector-strong -fno-strict-aliasing  -pipe  
-fstack-protector-strong  -Wl,--export-dynamic -shared -o libtcl86.so.1
regcomp.o regexec.o regfree.o regerror.o tclAlloc.o  tclAssembly.o tclAsync
.o tclBasic.o tclBinary.o tclCkalloc.o  tclClock.o tclCmdAH.o tclCmdIL.o
tclCmdMZ.o  tclCompCmds.o tclCompCmdsGR.o tclCompCmdsSZ.o tclCompExpr.o 
tclCompile.o tclConfig.o tclDate.o tclDictObj.o tclDisassemble.o  tclEncod
ing.o tclEnsemble.o  tclEnv.o tclEvent.o tclExecute.o tclFCmd.o tclFileName.o
tclGet.o  tclHash.o tclHistory.o tclIndexObj.o tclInterp.o tclIO.o tclIOCmd.o 
tclIORChan.o tclIORTrans.o tclIOGT.o tclIOSock.o tclIOUtil.o  t
clLink.o tclListObj.o  tclLiteral.o tclLoad.o tclMain.o tclNamesp.o tclNotify.o
 tclObj.o tclOptimize.o tclPanic.o tclParse.o tclPathObj.o tclPipe.o  tclPkg.o
tclPkgConfig.o tclPosixStr.o  tclPreserve.o tclProc.o tclRege
xp.o  tclResolve.o tclResult.o tclScan.o tclStringObj.o  tclStrToD.o
tclThread.o  tclThreadAlloc.o tclThreadJoin.o tclThreadStorage.o tclStubInit.o 
tclTimer.o tclTrace.o tclUtf.o tclUtil.o tclVar.o tclZlib.o  tclTomMath
Interface.o tclUnixChan.o tclUnixEvent.o tclUnixFCmd.o  tclUnixFile.o
tclUnixPipe.o tclUnixSock.o  tclUnixTime.o tclUnixInit.o tclUnixThrd.o 
tclUnixCompat.o tclUnixNotfy.o   tclOO.o tclOOBasic.o tclOOCall.o tclOODefineC
mds.o tclOOInfo.o  tclOOMethod.o tclOOStubInit.o tclLoadDl.o bn_s_mp_reverse.o
bn_s_mp_mul_digs_fast.o  bn_s_mp_sqr_fast.o bn_mp_add.o bn_mp_and.o 
bn_mp_add_d.o bn_mp_clamp.o bn_mp_clear.o bn_mp_clear_multi.o  bn_mp_cmp
.o bn_mp_cmp_d.o bn_mp_cmp_mag.o  bn_mp_cnt_lsb.o bn_mp_copy.o 
bn_mp_count_bits.o bn_mp_div.o bn_mp_div_d.o bn_mp_div_2.o  bn_mp_div_2d.o
bn_mp_div_3.o bn_mp_exch.o bn_mp_expt_u32.o  bn_mp_grow.o bn_mp_init.o 
bn_mp_ini
t_copy.o bn_mp_init_multi.o bn_mp_init_set.o  bn_mp_init_size.o
bn_s_mp_karatsuba_mul.o  bn_s_mp_karatsuba_sqr.o bn_s_mp_balance_mul.o 
bn_mp_lshd.o bn_mp_mod.o bn_mp_mod_2d.o bn_mp_mul.o bn_mp_mul_2.o 
bn_mp_mul_2d.o bn
_mp_mul_d.o bn_mp_neg.o bn_mp_or.o  bn_mp_radix_size.o bn_mp_radix_smap.o 
bn_mp_read_radix.o bn_mp_rshd.o bn_mp_set.o  bn_mp_shrink.o  bn_mp_sqr.o
bn_mp_sqrt.o bn_mp_sub.o bn_mp_sub_d.o  bn_mp_signed_rsh.o  bn_mp_to_ubi
n.o  bn_s_mp_toom_mul.o bn_s_mp_toom_sqr.o bn_mp_to_radix.o  bn_mp_ubin_size.o
bn_mp_xor.o bn_mp_zero.o bn_s_mp_add.o  bn_s_mp_mul_digs.o bn_s_mp_sqr.o
bn_s_mp_sub.o tclDTrace.o   -fstack-protector-strong  -Wl,--export-d
ynamic -ldl -lz -lpthread -lm -Wl,-soname,libtcl86.so.1  
"-Wl,-rpath,/usr/local/lib"
ld: error: duplicate symbol: __dtrace_tcl___obj__create
>>> defined in tclAssembly.o
>>> defined in tclBasic.o

ld: error: duplicate symbol: __dtrace_tcl___obj__create
>>> defined in tclAssembly.o
>>> defined in tclCmdMZ.o

ld: error: duplicate symbol: __dtrace_tcl___obj__free
>>> defined in tclBasic.o
>>> defined in tclCmdMZ.o
... more of those...

This is similar to the problem reported for lang/perl5.* in bug 265516, i.e.
the DTrace-related postprocessing of object files messes up the symbols in such
a way that there are multiple definitions.

And similarly to the perl5.x workaround, I propose adding -Wl,-z,muldefs to
LDFLAGS, to silence the linker errors.

-- 
You are receiving this mail because:
You are the assignee for the bug.