Skip site navigation (1)Skip section navigation (2)
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>