Bug 221801 - www/tdom: port passes $LDFLAGS to direct linker invocation, not compiler driver
Summary: www/tdom: port passes $LDFLAGS to direct linker invocation, not compiler driver
Status: Closed FIXED
Alias: None
Product: Ports & Packages
Classification: Unclassified
Component: Individual Port(s) (show other bugs)
Version: Latest
Hardware: Any Any
: --- Affects Only Me
Assignee: Mikhail T.
Depends on:
Blocks: 214864
  Show dependency treegraph
Reported: 2017-08-25 12:58 UTC by Ed Maste
Modified: 2018-03-31 18:47 UTC (History)
3 users (show)

See Also:
bugzilla: maintainer-feedback? (mi)


Note You need to log in before you can comment on or make changes to this bug.
Description Ed Maste freebsd_committer 2017-08-25 12:58:32 UTC
I've been investigating the state of the ports tree with LLVM's lld installed as /usr/bin/ld (from the exp-run in PR 214864).

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), where it contains flags that are appropriate only for the compiler driver, not the linker.

In several instances this comes from bsd.ssp.mk, which adds -fstack-protector to LDFLAGS.  GNU BFD ld accepts the flag but produces undesired output, while lld produces an error:

ld -fstack-protector -shared -o libcfg+.so.0 ../src/cfg+.o ../src/parse.o ../src/props.o ../src/cmdline.o ../src/cfgfile.o ../src/shared.o ../src/platon/str/strplus.o ../src/platon/str/strctype.o ../src/platon/str/strdyn.o ../src/platon/str/dynfgets.o
ld: error: unknown argument: -fstack-protector
(from devel/libcfg)

(GNU ld produces output with a bogus DT_AUXILIARY "stack-protector" entry for this case.)

This affects at least the following ports:

www/tdom build excerpt:
ld -Bshareable -x -o libtdom0.8.3.so xmlrole.o xmltok.o xmlparse.o xmlsimple.o utf8conv.o dom.o domhtml.o domxpath.o domxslt.o domlock.o tcldom.o nodecmd.o tdominit.o tclexpat.o tdomStubInit.o  -L/usr/local/lib -ltclstub86  -fstack-protector -export-dynamic
ld: error: unknown argument: -fstack-protector
Comment 1 Walter Schwarzenfeld freebsd_triage 2018-01-13 02:16:47 UTC
Maintainer feedback, please!
Comment 2 Mikhail T. 2018-01-13 04:16:07 UTC
Sorry, I totally forgot about this - assigning to myself now.
Comment 3 Mikhail T. 2018-02-04 21:48:12 UTC
Looking deeper at this, yes, the undesirable -fstack-protector flag is added to LDFLAGS by the bsd.ssp.mk:

% make -C /usr/ports/www/tdom -V LDFLAGS

I don't think, it should be the port's job to remove it -- it would seem, bsd.ssp.mk is wrong.

Comment 4 Ed Maste freebsd_committer 2018-03-27 20:36:14 UTC
(In reply to Mikhail T. from comment #3)
The port should not remove it, but should also not pass $LDFLAGS directly to the linker; in the normal case it should link by invoking cc $LDFLAGS