Date: Fri, 25 Aug 2017 16:55:02 +0000 From: bugzilla-noreply@freebsd.org To: freebsd-ports-bugs@FreeBSD.org Subject: [Bug 221808] archivers/lua51-zlib: port passes $LDFLAGS to direct linker invocation, not compiler driver Message-ID: <bug-221808-13@https.bugs.freebsd.org/bugzilla/>
next in thread | raw e-mail | index | archive | help
https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=3D221808 Bug ID: 221808 Summary: archivers/lua51-zlib: port passes $LDFLAGS to direct linker invocation, not compiler driver Product: Ports & Packages Version: Latest Hardware: Any OS: Any Status: New Severity: Affects Only Me Priority: --- Component: Individual Port(s) Assignee: freebsd-ports-bugs@FreeBSD.org Reporter: emaste@freebsd.org CC: sirl33tname@gmail.com Blocks: 214864 CC: sirl33tname@gmail.com Flags: maintainer-feedback?(sirl33tname@gmail.com) I've been investigating building the ports tree with LLVM's lld installed as /usr/bin/ld (via the exp-run in PR 214864). Through this I've found a few common issues, some of which are due to limitations of lld or choices made = by its authors, and some of which are problems in the ports themselves. audio/= oss is affected by one of the latter cases. Normally $LDFLAGS contains flags passed to the compiler driver when invoked= for linking. One issue that affects a small number of ports is passing $LDFLAGS= to direct linker invocation (i.e, $LD $LDFLAGS ...), when $LDFLAGS contains fl= ags that are appropriate only for the compiler driver, not the linker. At one point in the build -fPIC is passed to ld. Normally -fPIC is accepted= by GNU BFD ld but results in a bogus DT_AUXILIARY entry in the output (from another port): % readelf -d work/.build/target/lib/libossmix.so Dynamic section at offset 0x5000 contains 15 entries: Tag Type Name/Value 0x000000007ffffffd AUXILIARY Auxiliary library: [PIC] ... In the case of archivers/lua51-zlib this is masked by another issue: ld's -O flag requires an optimization level: -O level If level is a numeric values greater than zero ld optimizes the output. This might take significantly longer and therefore probably should only be enabled for the final binary. For this port ld is invoked as: ld -O -fPIC -shared -L/usr/local/lib/lua/5.1 -L/usr/local/lib/lua/5.1 lua_zlib.o -lz -lm -o zlib.so it appears that this is interpreted as optimize with level "-fPIC" which is= not a numeric value grater than zero, and so just silently consumed (with BFD l= d), making "-O -fPIC" a no-op. If I remove the -O flag zlib.so indeed gains the bogus DT_AUXILIARY PIC entry. For lld the build fails with: ld -O -fPIC -shared -L/usr/local/lib/lua/5.1 -L/usr/local/lib/lua/5.1 lua_zlib.o -lz -lm -o zlib.so ld: error: unknown argument: -fPIC ld: error: -O: number expected, but got ld: error: unable to find library -lz ld: error: unable to find library -lm (the missing libraries with lld are a separate issue which I hope can be addressed in ports infrastructure) Referenced Bugs: https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=3D214864 [Bug 214864] [exp-run] test build with lld as /usr/bin/ld --=20 You are receiving this mail because: You are the assignee for the bug.=
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?bug-221808-13>