NSPR build fails when using GNU ld on Solaris

RESOLVED FIXED in 4.3

Status

defect
--
blocker
RESOLVED FIXED
17 years ago
17 years ago

People

(Reporter: akopps, Assigned: wtc)

Tracking

other
Sun
Solaris

Firefox Tracking Flags

(Not tracked)

Details

Attachments

(3 attachments, 6 obsolete attachments)

User-Agent:       Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.2) Gecko/20021202
Build Identifier: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.2) Gecko/20021202

I am trying to compile mozilla 1.3b on Solaris 2.6 with recent patch cluster
installed.  I am using gcc-2.95.3 that was configured with gnu binutils-2.13.
When running "gmake -f client.mk build", the build stops with these messages:

gcc -B/usr/ccs/bin/ -shared -Wl,-h,libnspr4.so,-z,combreloc,-z,defs
-Wl,-f,\$ORIGIN/cpu/\$ISALIST/libnspr_flt4.so -o libnspr4.so
-Wl,-M,./nsprmap.sun ./prvrsion.o io/./prfdcach.o io/./prmwait.o io/./prmapopt.o
io/./priometh.o io/./pripv6.o
io/./prlayer.o io/./prlog.o io/./prmmap.o io/./prpolevt.o io/./prprf.o
io/./prscanf.o io/./prstdio.o threads/./prcmon.o threads/./prrwlock.o
threads/./prtpd.o linking/./prlink.o malloc/./prmem.o md/./prosdep.o
memory/./prshm.o memory/./prshma.o memory/./prseg.o misc/./pralarm.o
misc/./pratom.o misc/./prcountr.o misc/./prdtoa.o misc/./prenv.o misc/./prerr.o
misc/./prerror.o misc/./prerrortable.o misc/./prinit.o misc/./prinrval.o
misc/./pripc.o misc/./prlog2.o misc/./prlong.o misc/./prnetdb.o misc/./prolock.o
misc/./prrng.o misc/./prsystem.o misc/./prthinfo.o misc/./prtpool.o
misc/./prtrace.o misc/./prtime.o malloc/./prmalloc.o pthreads/./ptsynch.o
pthreads/./ptio.o pthreads/./ptthread.o pthreads/./ptmisc.o md/unix/./unix.o
md/unix/./unix_errors.o md/unix/./uxproces.o md/unix/./uxrng.o md/unix/./uxshm.o
md/unix/./uxwrap.o md/unix/./solaris.o md/unix/./os_SunOS.o -lpthread -lthread
-lposix4 -lsocket -lnsl -ldl -lc
./nsprmap.sun: file not recognized: File format not recognized
collect2: ld returned 1 exit status
gcc: file path prefix `/usr/ccs/bin/' never used
gmake[5]: *** [libnspr4.so] Error 1
gmake[5]: Leaving directory
`/home/src/akopps/mozilla/cvs_1.3b/mozilla/nsprpub/pr/src'
gmake[4]: *** [export] Error 2
gmake[4]: Leaving directory `/home/src/akopps/mozilla/cvs_1.3b/mozilla/nsprpub/pr'
gmake[3]: *** [export] Error 2
gmake[3]: Leaving directory `/home/src/akopps/mozilla/cvs_1.3b/mozilla/nsprpub'
gmake[2]: *** [nspr] Error 2
gmake[2]: Leaving directory `/home/src/akopps/mozilla/cvs_1.3b/mozilla'
gmake[1]: *** [default] Error 2
gmake[1]: Leaving directory `/home/src/akopps/mozilla/cvs_1.3b/mozilla'
gmake: *** [build] Error 2

I am also wondering why the compiler is being passed -B/usr/ccs/bin/ option if I
am using gcc that was configured to use binutils.

Reproducible: Always

Steps to Reproduce:
1. To reproduce try to compile mozilla-1.3b with gcc-2.95.3 that's using gnu
binutils 2.13 on a Solaris 2.6 system with this .mozconfig:
ac_add_options --disable-tests
ac_add_options --disable-debug
ac_add_options --without-system-nspr
ac_add_options --without-system-zlib
ac_add_options --without-system-jpeg
ac_add_options --without-system-png
ac_add_options --without-system-mng
ac_add_options --enable-optimize
ac_add_options --enable-crypto
ac_add_options --enable-svg
ac_add_options --enable-ldap
ac_add_options --enable-calendar
mk_add_options MOZ_INTERNAL_LIBART_LGPL=1
MOZ_INTERNAL_LIBART_LGPL=1

2.
3.

Actual Results:  
The build fails with an error
build config
Assignee: asa → seawood
Component: Browser-General → Build Config
QA Contact: asa → granrose
Hrm.  Looks like another case of us requiring Sun ld to build.  You'll hit a
similar problem (bug 91224) when building NSS (crypto).
Assignee: seawood → wtc
Status: UNCONFIRMED → NEW
Component: Build Config → NSPR
Ever confirmed: true
OS: other → Solaris
Product: Browser → NSPR
QA Contact: granrose → wtc
Hardware: Other → Sun
Summary: Mozilla 1.3b build fails on Solaris with gcc → NSPR build fails when using GNU ld on Solaris
Version: Trunk → other
We only support Solaris ld.  The gcc you are using needs
to be configured to honor the -B/usr/ccs/bin/ flag.

If you can't configure your gcc this way, you can edit
mozilla/nsprpub/pr/src/Makefile.in and comment out this
line:
MKSHLIB += -Wl,-M,$(MAPFILE)
Status: NEW → ASSIGNED
I just realized that two other makefiles also need to be edited.
So the workaround should read:

If you can't configure your gcc to honor -B/usr/ccs/bin/ flag,
you can edit
  mozilla/nsprpub/pr/src/Makefile.in
  mozilla/nsprpub/lib/ds/Makefile.in
  mozilla/nsprpub/lib/libc/src/Makefile.in
and comment out this line:
  MKSHLIB += -Wl,-M,$(MAPFILE)

I think we should document Solaris ld as a build requirement
in the build instructions.  Since Solaris ld and as are included
with all Solaris systems, I don't know why one would want to use
GNU binutils on Solaris.  I'd be interested in knowing why.

Chris, if you would like to implement the proper fix, that would
be fine by me, too.  Otherwise I'm going to resolve this bug
WONTFIX.

The proper fix would be:
1. Verify that GNU ld either supports or has the equivalents of
the Solaris ld flags we are using.
2. Add a configure test to detect GNU ld and use the equivalent
GNU ld flags for the Solaris ld flags that GNU ld doesn't support.
3. For NSS's coreconf build system, we need a new make variable
USE_GNU_LD, which needs to be set by
mozilla/security/manager/Makefile.in before it invokes NSS's
coreconf build system.
I have made an attempt to compile mozilla-1.3b with the same version of
gcc that uses Sun binutils and it worked just fine. I agree too that there
is little reason not to use Sun ld. The reason we had configured gcc with GNU
binutils on this particular system is because GCC installation instructions
claim that certain old versions of Sun as and ld are known to have problems
and this machine is running Solaris 2.6 which uses those old versions of as and
ld. However, desprite of that warning, I haven't had problems using gcc with Sun
binutils. And well, another reason, is that often other open source projects
sometimes assume that your gcc is using gnu binutils and pass incompatible ld
flags to it which later are passed to /usr/ccs/bin/ld which results in an error..
Akop:

Thank you for the information.  Could you tell me how you
configured gcc with GNU binutils on your Solaris 2.6 system?
I guess you used the --with-gnu-as --with-gnu-ld configure
options, right?  I think the --with-gnu-ld configure option
hardwires gcc to always use GNU ld, regardless of your PATH
or the -B/usr/ccs/bin/ flag, right?

Could you try the following on that particular system and
post the output here?

1. Create a simple C file foo.c:

int main() { return 0; }

2. Run these commands.

% ld -V
% /usr/ccs/bin/ld -V
% gcc -Wl,-V foo.c
% gcc -B/usr/ccs/bin/ -Wl,-V foo.c
% gcc -v foo.c
% gcc -B/usr/ccs/bin/ -v foo.c
Posted patch Proposed patch for NSPR TIP (obsolete) — Splinter Review
Hopefully this patch should do the right thing.  Akop, could
you test this patch on your Solaris 2.6 system where gcc is
configured to use GNU ld?

We are using the following Solaris ld flags: -h, -z combreloc,
-z defs, -f, and -M.  It seems that all but -M are supported by
GNU ld on Solaris, and the --version-script flag of GNU ld is
equivalent to the -M flag of Solaris ld.

I adapted the GNU_LD test in mozilla/configure.in to test the
ld used by gcc, which may be different from $LD.  After some
digging in GNU CC documentation, I found the -print-prog-name=ld
flag.

Could you post the output of
    `gcc -print-prog-name=ld` -v
on your Solaris 2.6 system?
Akop,

Earlier I wrote:
> I guess you used the --with-gnu-as --with-gnu-ld configure
> options, right?  I think the --with-gnu-ld configure option
> hardwires gcc to always use GNU ld, regardless of your PATH
> or the -B/usr/ccs/bin/ flag, right?

I now guess it was the --with-ld=/path/to/gnu/ld configure
option (as opposed to --with-gnu-ld) that you used to install
gcc on your Solaris 2.6 system, right?

See http://www.gnu.org/software/gcc/faq.html#gas.
Our gcc with configured with --with-ld=/opt/local/bin/l and
--with-as=/opt/local/bin/as, and not with --with-gnu-ld or --with-gnu-as

Here is the transcript for the commands that you have asked for:

akopps@snoop:~/src/tmp$ ld -V
ld: Software Generation Utilities - Solaris Link Editors: 5.6-1.274

akopps@snoop:~/src/tmp$ /usr/ccs/bin/ld -V
ld: Software Generation Utilities - Solaris Link Editors: 5.6-1.274

akopps@snoop:~/src/tmp$ gcc -Wl,-V foo.c
GNU ld version 2.13
  Supported emulations:
   elf32_sparc

akopps@snoop:~/src/tmp$ gcc -B/usr/ccs/bin/ -Wl,-V foo.c
GNU ld version 2.13
  Supported emulations:
   elf32_sparc
gcc: file path prefix `/usr/ccs/bin/' never used

akopps@snoop:~/src/tmp$ gcc -v foo.c
Reading specs from
/local/sol/2.6/depot/gcc-2.95.3-1/lib/gcc-lib/sparc-sun-solaris2.6/2.95.3/specs
gcc version 2.95.3 20010315 (release)
 /local/sol/2.6/depot/gcc-2.95.3-1/lib/gcc-lib/sparc-sun-solaris2.6/2.95.3/cpp0
-lang-c -v -D__GNUC__=2 -D__GNUC_MINOR__=95 -Dsparc -Dsun -Dunix -D__svr4__
-D__SVR4 -D__sparc__ -D__sun__ -D__unix__ -D__svr4__ -D__SVR4 -D__sparc -D__sun
-D__unix -Asystem(unix) -Asystem(svr4) -D__GCC_NEW_VARARGS__ -Acpu(sparc)
-Amachine(sparc) foo.c /var/tmp/cc8KeUE7.i
GNU CPP version 2.95.3 20010315 (release) (sparc)
#include "..." search starts here:
#include <...> search starts here:
 /usr/local/include
 /local/sol/2.6/depot/gcc-2.95.3-1/lib/gcc-lib/sparc-sun-solaris2.6/2.95.3/../../../../sparc-sun-solaris2.6/include
 /local/sol/2.6/depot/gcc-2.95.3-1/lib/gcc-lib/sparc-sun-solaris2.6/2.95.3/include
 /usr/include
End of search list.
The following default directories have been omitted from the search path:
 /local/sol/2.6/depot/gcc-2.95.3-1/lib/gcc-lib/sparc-sun-solaris2.6/2.95.3/../../../../include/g++-3
End of omitted list.
 /local/sol/2.6/depot/gcc-2.95.3-1/lib/gcc-lib/sparc-sun-solaris2.6/2.95.3/cc1
/var/tmp/cc8KeUE7.i -quiet -dumpbase foo.c -version -o /var/tmp/ccILIpW6.s
GNU C version 2.95.3 20010315 (release) (sparc-sun-solaris2.6) compiled by GNU C
version 2.95.3 20010315 (release).
 /opt/local/bin/as -V -Qy -s -o /var/tmp/ccu4wQR9.o /var/tmp/ccILIpW6.s
GNU assembler version 2.13 (sparc-sun-solaris2.6) using BFD version 2.13
 /local/sol/2.6/depot/gcc-2.95.3-1/lib/gcc-lib/sparc-sun-solaris2.6/2.95.3/collect2 -V -Y P,/usr/ccs/lib:/usr/lib -Qy /local/sol/2.6/depot/gcc-2.95.3-1/lib/gcc-lib/sparc-sun-solaris2.6/2.95.3/crt1.o /local/sol/2.6/depot/gcc-2.95.3-1/lib/gcc-lib/sparc-sun-solaris2.6/2.95.3/crti.o /usr/ccs/lib/values-Xa.o /local/sol/2.6/depot/gcc-2.95.3-1/lib/gcc-lib/sparc-sun-solaris2.6/2.95.3/crtbegin.o -L/local/sol/2.6/depot/gcc-2.95.3-1/lib/gcc-lib/sparc-sun-solaris2.6/2.95.3 -L/usr/ccs/bin -L/usr/ccs/lib -L/local/sol/2.6/depot/gcc-2.95.3-1/lib /var/tmp/ccu4wQR9.o -lgcc -lc -lgcc /local/sol/2.6/depot/gcc-2.95.3-1/lib/gcc-lib/sparc-sun-solaris2.6/2.95.3/crtend.o /local/sol/2.6/depot/gcc-2.95.3-1/lib/gcc-lib/sparc-sun-solaris2.6/2.95.3/crtn.o
GNU ld version 2.13
  Supported emulations:
   elf32_sparc

akopps@snoop:~/src/tmp$ gcc -B/usr/ccs/bin/ -v foo.c
Reading specs from
/local/sol/2.6/depot/gcc-2.95.3-1/lib/gcc-lib/sparc-sun-solaris2.6/2.95.3/specs
gcc version 2.95.3 20010315 (release)
 /local/sol/2.6/depot/gcc-2.95.3-1/lib/gcc-lib/sparc-sun-solaris2.6/2.95.3/cpp0
-lang-c -v -isystem /usr/ccs/bin/include -D__GNUC__=2 -D__GNUC_MINOR__=95
-Dsparc -Dsun -Dunix -D__svr4__ -D__SVR4 -D__sparc__ -D__sun__ -D__unix__
-D__svr4__ -D__SVR4 -D__sparc -D__sun -D__unix -Asystem(unix) -Asystem(svr4)
-D__GCC_NEW_VARARGS__ -Acpu(sparc) -Amachine(sparc) foo.c /var/tmp/cci0uNeg.i
GNU CPP version 2.95.3 20010315 (release) (sparc)
#include "..." search starts here:
#include <...> search starts here:
 /usr/local/include
 /local/sol/2.6/depot/gcc-2.95.3-1/lib/gcc-lib/sparc-sun-solaris2.6/2.95.3/../../../../sparc-sun-solaris2.6/include
 /local/sol/2.6/depot/gcc-2.95.3-1/lib/gcc-lib/sparc-sun-solaris2.6/2.95.3/include
 /usr/include
End of search list.
The following default directories have been omitted from the search path:
 /local/sol/2.6/depot/gcc-2.95.3-1/lib/gcc-lib/sparc-sun-solaris2.6/2.95.3/../../../../include/g++-3
End of omitted list.
 /local/sol/2.6/depot/gcc-2.95.3-1/lib/gcc-lib/sparc-sun-solaris2.6/2.95.3/cc1
/var/tmp/cci0uNeg.i -quiet -dumpbase foo.c -version -o /var/tmp/ccxLrAbh.s
GNU C version 2.95.3 2001
Which source three is this patch supposed to apply to? I am getting failed hunks
when trying to apply it to 1.3b source tree. Should I pull some other source
tree from CVS?


-akop
Comment on attachment 116447 [details] [diff] [review]
Proposed patch for NSPR TIP

This patch is for the current NSPR TIP.  I will attach a
patch for Mozilla 1.3b next.
Attachment #116447 - Attachment description: Proposed patch → Proposed patch for NSPR TIP
This is the same patch adapted for the mozilla 1.3b source tree.
With the last patch, the build now fails with this command:

c++ -I/usr/openwin/include -fno-rtti -fno-exceptions -pedantic -Wno-long-long
-pthreads  -DNDEBUG -DTRIMMED -O -fPIC -G -h libxpconnect.so -o libxpconnect.so
 nsScriptError.o nsXPConnect.o xpccallcontext.o xpccomponents.o xpccontext.o
xpcconvert.o xpcdebug.o xpcexception.o xpcjsid.o xpcjsruntime.o xpclog.o
xpcmaps.o xpcmodule.o xpcruntimesvc.o xpcstack.o xpcstring.o xpcthreadcontext.o
xpcthrower.o xpcwrappedjs.o xpcvariant.o xpcwrappedjsclass.o xpcwrappednative.o
xpcwrappednativeinfo.o xpcwrappednativejsops.o xpcwrappednativeproto.o
xpcwrappednativescope.o       -Wl,--whole-archive
../../../../dist/lib/libjsloader_s.a  -Wl,--no-whole-archive
-L../../../../dist/bin -lxpcom  -L../../../../dist/bin
-L/home/src/akopps/mozilla/cvs-1.3b/mozilla/dist/lib -lplds4 -lplc4 -lnspr4
-lposix4  -L../../../../dist/bin -lmozjs  -Wl,-M
-Wl,../../../../build/unix/gnu-ld-scripts/components-mapfile -lsocket -ldl -lm
/opt/local/bin/ld:../../../../build/unix/gnu-ld-scripts/components-mapfile: file
format not recognized; treating as linker script
/opt/local/bin/ld:../../../../build/unix/gnu-ld-scripts/components-mapfile:1:
parse error
Archive member included because of file (symbol)

../../../../dist/lib/libjsloader_s.a(mozJSComponentLoader.o)
                              (--whole-archive)
../../../../dist/lib/libjsloader_s.a(mozJSSubScriptLoader.o)
                              (--whole-archive)
collect2: ld returned 1 exit status
gmake[4]: *** [libxpconnect.so] Error 1
gmake[4]: Leaving directory
`/home/src/akopps/mozilla/cvs-1.3b/mozilla/js/src/xpconnect/src'
gmake[3]: *** [libs] Error 2
gmake[3]: Leaving directory
`/home/src/akopps/mozilla/cvs-1.3b/mozilla/js/src/xpconnect'
gmake[2]: *** [tier_9] Error 2
gmake[2]: Leaving directory `/home/src/akopps/mozilla/cvs-1.3b/mozilla'
gmake[1]: *** [default] Error 2
gmake[1]: Leaving directory `/home/src/akopps/mozilla/cvs-1.3b/mozilla'
gmake: *** [build] Error 2

This is a problem of mozilla/configure.in.  Here is the relevant
fragment from the version in mozilla 1.3b:

1463      *-solaris*)
1464          if test -z "$GNU_LD"; then
1465           if test -z "$GNU_CC"; then
1466            MOZ_COMPONENTS_VERSION_SCRIPT_LDFLAGS='-M
$(BUILD_TOOLS)/gnu-ld-scripts/components-mapfile'
1467           else
1468            MOZ_COMPONENTS_VERSION_SCRIPT_LDFLAGS='-Wl,-M
-Wl,$(BUILD_TOOLS)/gnu-ld-scripts/components-mapfile'
1469           fi
1470          fi
1471          ;;

Apparently GNU_LD is not set (I bet 'which ld' returns /usr/ccs/bin/ld)
but c++ is hardwired to use GNU ld.  $(GNU_LD) is the wrong variable to
test here because it is not necessarily the ld used by c++.  I think
the solution is to add the same test I proposed for NSPR to
mozilla/configure.in to detect whether c++ uses GNU ld or Solaris ld.

Akop, your workaround is to set your PATH so that 'which ld' returns
/opt/local/bin/ld on your system.  This should get you past this error
but your build will eventually fail in mozilla/security/nss (see comment
2).
Akop, this patch should do the trick.  To test this patch,
you should NOT change your PATH to pick up /opt/local/bin/ld.
Unfortunately, the build fails again, now with these messages:

gcc -B/usr/ccs/bin/ -shared -Wl,-h,libnspr4.so,-z,combreloc,-z,defs
-Wl,-f,\$ORIGIN/cpu/\$ISALIST/libnspr_flt4.so -o libnspr4.so
-Wl,-M,./nsprmap.sun ./prvrsion.o io/./prfdcach.o io/./prmwait.o io/./prmapopt.o
io/./priometh.o io/./pripv6.o
io/./prlayer.o io/./prlog.o io/./prmmap.o io/./prpolevt.o io/./prprf.o
io/./prscanf.o io/./prstdio.o threads/./prcmon.o threads/./prrwlock.o
threads/./prtpd.o linking/./prlink.o malloc/./prmem.o md/./prosdep.o
memory/./prshm.o memory/./prshma.o memory/./prseg.o misc/./pralarm.o
misc/./pratom.o misc/./prcountr.o misc/./prdtoa.o misc/./prenv.o misc/./prerr.o
misc/./prerror.o misc/./prerrortable.o misc/./prinit.o misc/./prinrval.o
misc/./pripc.o misc/./prlog2.o misc/./prlong.o misc/./prnetdb.o misc/./prolock.o
misc/./prrng.o misc/./prsystem.o misc/./prthinfo.o misc/./prtpool.o
misc/./prtrace.o misc/./prtime.o malloc/./prmalloc.o pthreads/./ptsynch.o
pthreads/./ptio.o pthreads/./ptthread.o pthreads/./ptmisc.o md/unix/./unix.o
md/unix/./unix_errors.o md/unix/./uxproces.o md/unix/./uxrng.o md/unix/./uxshm.o
md/unix/./uxwrap.o md/unix/./solaris.o md/unix/./os_SunOS.o -lpthread -lthread
-lposix4 -lsocket -lnsl -ldl -lc
./nsprmap.sun: file not recognized: File format not recognized
collect2: ld returned 1 exit status
gcc: file path prefix `/usr/ccs/bin/' never used
gmake[5]: *** [libnspr4.so] Error 1
gmake[5]: Leaving directory
`/home/src/akopps/mozilla/cvs-1.3b/mozilla/nsprpub/pr/src'
gmake[4]: *** [export] Error 2
gmake[4]: Leaving directory `/home/src/akopps/mozilla/cvs-1.3b/mozilla/nsprpub/pr'
gmake[3]: *** [export] Error 2
gmake[3]: Leaving directory `/home/src/akopps/mozilla/cvs-1.3b/mozilla/nsprpub'
gmake[2]: *** [nspr] Error 2
gmake[2]: Leaving directory `/home/src/akopps/mozilla/cvs-1.3b/mozilla'
gmake[1]: *** [default] Error 2
gmake[1]: Leaving directory `/home/src/akopps/mozilla/cvs-1.3b/mozilla'
gmake: *** [build] Error 2


I didn't change my PATH (which is set to
/usr/bin:/usr/dt/bin:/usr/openwin/bin:/usr/ccs/bin:/opt/local/bin:/usr/ucb:/usr/sbin:/usr/proc/bin)
or the rest of my environment.

-akop
Akop,

Sorry I wasn't clear.  You actually had to apply both patches.
To avoid future confusion, I combined the two patches into this
patch.	You just need to apply this patch to the mozilla 1.3b
source tree.

Again, your build will eventually fail in mozilla/security/nss.
I will address that build failure when we get there.

Could you post the output of
    `gcc -print-prog-name=ld` -v
on your Solaris 2.6 system?  Thanks.
Attachment #116819 - Attachment is obsolete: true
Attachment #116923 - Attachment is obsolete: true
$ `gcc -print-prog-name=ld` -v
GNU ld version 2.13


With the last patch, the build fails at this point:

gcc -B/usr/ccs/bin/ -shared -h,libfreebl_hybrid_3.so
-Wl,-B,symbolic,-z,defs,-z,now,-z,text,-M,mapfile.Solaris -o
SunOS5.6_OPT.OBJ/libfreebl_hybrid_3.so SunOS5.6_OPT.OBJ/ldvector.o
SunOS5.6_OPT.OBJ/prng_fips1861.o SunOS5.6_OPT.OBJ/sysrand.o
SunOS5.6_OPT.OBJ/sha_fast.o SunOS5.6_OPT.OBJ/md2.o SunOS5.6_OPT.OBJ/md5.o
SunOS5.6_OPT.OBJ/alg2268.o SunOS5.6_OPT.OBJ/arcfour.o SunOS5.6_OPT.OBJ/arcfive.o
SunOS5.6_OPT.OBJ/desblapi.o SunOS5.6_OPT.OBJ/des.o SunOS5.6_OPT.OBJ/rijndael.o
SunOS5.6_OPT.OBJ/dh.o SunOS5.6_OPT.OBJ/pqg.o SunOS5.6_OPT.OBJ/dsa.o
SunOS5.6_OPT.OBJ/rsa.o SunOS5.6_OPT.OBJ/mpprime.o SunOS5.6_OPT.OBJ/mpmontg.o
SunOS5.6_OPT.OBJ/mplogic.o SunOS5.6_OPT.OBJ/mpi.o SunOS5.6_OPT.OBJ/mpi_sparc.o
SunOS5.6_OPT.OBJ/mpv_sparcv8.o SunOS5.6_OPT.OBJ/montmulfv8.o  
/home/src/akopps/mozilla/cvs-1.3b/mozilla/dist/lib/libsecutil.a 
-L/home/src/akopps/mozilla/cvs-1.3b/mozilla/dist/lib/ -lplc4 -lplds4 -lnspr4 -lc
/opt/local/bin/ld: unrecognized option '-B'
/opt/local/bin/ld: use the --help option for usage information
collect2: ld returned 1 exit status
gcc: file path prefix `/usr/ccs/bin/' never used
gmake[6]: *** [SunOS5.6_OPT.OBJ/libfreebl_hybrid_3.so] Error 1
gmake[6]: Leaving directory
`/home/src/akopps/mozilla/cvs-1.3b/mozilla/security/nss/lib/freebl'
gmake[5]: *** [libs] Error 2
gmake[5]: Leaving directory
`/home/src/akopps/mozilla/cvs-1.3b/mozilla/security/nss/lib/freebl'
gmake[4]: *** [libs] Error 2
gmake[4]: Leaving directory
`/home/src/akopps/mozilla/cvs-1.3b/mozilla/security/nss/lib'
gmake[3]: *** [libs] Error 2
gmake[3]: Leaving directory
`/home/src/akopps/mozilla/cvs-1.3b/mozilla/security/manager'
gmake[2]: *** [tier_95] Error 2
gmake[2]: Leaving directory `/home/src/akopps/mozilla/cvs-1.3b/mozilla'
gmake[1]: *** [default] Error 2
gmake[1]: Leaving directory `/home/src/akopps/mozilla/cvs-1.3b/mozilla'
gmake: *** [build] Error 2


-akop
Akop,

That is the failure in mozilla/security/nss that we
told you about.  Please try this patch.  Hopefully
this will get you past the build failure and complete
the build.  Thanks.
Attachment #117028 - Attachment is obsolete: true
This version of the patch has a fix in
mozilla/{configure,configure.in} that does not
affect gcc users.
Attachment #117283 - Attachment is obsolete: true
Hello. I have applied patch ID 117287 to mozilla 1.3b and it compiled fine.
However, the build now fails if I use the same version of gcc with the only
difference that this gcc is using Sun binutils as opposed to GNU binutils.
The error message is below:


gcc -shared -Wl,-h,libnspr4.so,-z,combreloc,-z,defs -Wl,-f,\$ORIGIN/cpu/\$ISALIS
T/libnspr_flt4.so -o libnspr4.so -Wl,--version-script,./nsprmap.sun ./prvrsion.o
 io/./prfdcach.o io/./prmwait.o io/./prmapopt.o io/./priometh.o io/./pripv6.o io
/./prlayer.o io/./prlog.o io/./prmmap.o io/./prpolevt.o io/./prprf.o io/./prscan
f.o io/./prstdio.o threads/./prcmon.o threads/./prrwlock.o threads/./prtpd.o lin
king/./prlink.o malloc/./prmem.o md/./prosdep.o memory/./prshm.o memory/./prshma
.o memory/./prseg.o misc/./pralarm.o misc/./pratom.o misc/./prcountr.o misc/./pr
dtoa.o misc/./prenv.o misc/./prerr.o misc/./prerror.o misc/./prerrortable.o misc
/./prinit.o misc/./prinrval.o misc/./pripc.o misc/./prlog2.o misc/./prlong.o mis
c/./prnetdb.o misc/./prolock.o misc/./prrng.o misc/./prsystem.o misc/./prthinfo.
o misc/./prtpool.o misc/./prtrace.o misc/./prtime.o malloc/./prmalloc.o pthreads
/./ptsynch.o pthreads/./ptio.o pthreads/./ptthread.o pthreads/./ptmisc.o md/unix
/./unix.o md/unix/./unix_errors.o md/unix/./uxproces.o md/unix/./uxrng.o md/unix
/./uxshm.o md/unix/./uxwrap.o md/unix/./solaris.o md/unix/./os_SunOS.o -lpthread
 -lthread -lposix4 -lsocket -lnsl -ldl -lc
/usr/ccs/bin/ld: illegal option -- -
/usr/ccs/bin/ld: illegal option -- v
usage: ld [-6:abc:d:e:f:h:il:mo:p:rstu:z:B:CD:F:GI:L:M:N:P:Q:R:S:VY:?] file(s)
        [-64]           enforce a 64-bit link-edit
        [-a]            create an absolute file
        [-b]            do not do special PIC relocations in a.out
        [-B direct]     specify `direct' bindings for executable when run
        [-B dynamic | static]
                        search for shared libraries|archives
        [-B eliminate]  eliminate unqualified global symbols from the
                        symbol table
        [-B group]      relocate object from within group
        [-B local]      reduce unqualified global symbols to local
        [-B reduce]     process symbol reductions
        [-B symbolic]   bind external references to definitions when creating
                        shared objects
        [-c name]       record configuration file `name'
        [-C]            demangle C++ symbol name diagnostics
        [-d y | n]      operate in dynamic|static mode
        [-D token,...]  print diagnostic messages
        [-e epsym]      use `epsym' as entry point address
        [-f name]       specify library for which this file is an auxiliary
                        filter
        [-F name]       specify library for which this file is a filter
        [-G]            create a shared object
        [-h name]       use `name' as internal shared object identifier
        [-i]            ignore LD_LIBRARY_PATH setting
        [-I name]       use `name' as path of interpreter
        [-l x]          search for libx.so or libx.a
        [-L path]       search for libraries in directory `path'
        [-m]            print memory map
        [-M mapfile]    use processing directives contained in `mapfile'
        [-N string]     create a dynamic dependency for `string'
        [-o outfile]    name the output file `outfile'
        [-p auditlib]   identify audit library to accompany this object
        [-P auditlib]   identify audit library for processing the dependencies
                        of this object
        [-Q y | n]      do|do not place version information in output file
        [-r]            create a relocatable object
        [-R path]       specify a library search path to be used at run time
        [-s]            strip any symbol and debugging information
        [-S supportlib]
                        specify a link-edit support library
        [-t]            do not warn of multiply-defined symbols that have
                        different sizes or alignments
        [-u symname]    create an undefined symbol `symname'
        [-V]            print version information
        [-Y P,dirlist]  use `dirlist' as a default path when searching for
                        libraries
        [-z absexec]    when building an executable absolute symbols
                        referenced in dynamic objects are promoted to
                        the executable
        [-z allextract | defaultextract | weakextract]
                        extract all member files, only members that resolve
                        undefined tor tentative symbols, or allow extraction of
                        archive members to resolvetweak references from 
                        archive files
        [-z combreloc]  combine multiple relocation sections
        [-z defs]       tdisallow undefined symbol references
        [-z endfiltee]  marks a filtee such that it will terminate a filters
                        search
        [-z finiarray=function]
                        name of function to be appended to the .finiarray
        [-z groupperm | nogroupperm]
                        enable|disable setting of group permissions
                        on dynamic dependencies
        [-z ignore | record]
                        ignore|record unused dynamic dependencies
        [-z initarray=function]
                        name of function to be appended to the .initarray
        [-z initfirst]  mark object to indicate that its .init section should
                        be executed before the .init section of any other
                        objects
        [-z interpose]  dynamic object is to be an `interposer' on direct
                        bindings
        [-z lazyload | nolazyload]
                        enable|disable delayed loading of shared objects
        [-z ld32=arg1,arg2,...]
                        define arguments applicable to the 32-bit class of ld(1)
        [-z ld64=arg1,arg2,...]
                        define arguments applicable to the 64-bit class of ld(1)
        [-z loadfltr]   mark filter as requiring immediate loading of its
                        filtees at runtime
        [-z muldefs]    allow multiply-defined symbols
        [-z nodefs]     allow undefined symbol references
        [-z nodefaultlib]
                        mark object to ignore any default library search path
        [-z nodelete]   mark object as non-deletable
        [-z nodlopen]   mark object as non-dlopen()'able
        [-z nodump]     mark object as non-dldump()'able
        [-z nopartial]  expand any partially initialized symbols
        [-z noversion]  don't record any version sections
        [-z now]        mark object as requiring non-lazy binding
        [-z origin]     mark object as requiring $ORIGIN processing
        [-z preinitarray=function]
                        name of function to be appended to the .preinitarray
        [-z redlocsym]  reduce local syms in .symtab to a minimum
        [-z rescan]     rescan archive list until no further member
                        extraction occurs
        [-z text]       disallow output relocations against text
        [-z textoff]    allow output relocations against text
        [-z textwarn]   warn if there are relocations against text
        [-z verbose]    generate warnings for suspicious processings
collect2: ld returned 1 exit status
gmake[5]: *** [libnspr4.so] Error 1
gmake[5]: Leaving directory `/home/src/akopps/mozilla/cvs-1.3b/mozilla/nsprpub/p
r/src'
gmake[4]: *** [export] Error 2
gmake[4]: Leaving directory `/home/src/akopps/mozilla/cvs-1.3b/mozilla/nsprpub/p
r'
gmake[3]: *** [export] Error 2
gmake[3]: Leaving directory `/home/src/akopps/mozilla/cvs-1.3b/mozilla/nsprpub'
gmake[2]: *** [nspr] Error 2
gmake[2]: Leaving directory `/home/src/akopps/mozilla/cvs-1.3b/mozilla'
gmake[1]: *** [default] Error 2
gmake[1]: Leaving directory `/home/src/akopps/mozilla/cvs-1.3b/mozilla'
gmake: *** [build] Error 2

Akop,

Thank you very much for testing the patch.  I found that
my previous patch has a serious bug.  It happens to work
with the gcc that uses GNU binutils, and manifests itself
when you switch to the gcc that uses Sun binutils.

I've fixed the bug in this patch.  Unfortunately, you will
need to test it with both gcc's (using GNU and Sun binutils).
Attachment #117287 - Attachment is obsolete: true
This patch is for code review only because it doesn't
have the changes to mozilla/nsprpub/configure.	Do not
apply this patch to your source tree.
Attachment #116447 - Attachment is obsolete: true
Attachment #118135 - Flags: review?(seawood)
The mozilla 1.3b with patch from attachment 117541 [details] [diff] [review] now compiles fine with both
gcc configurations.
Comment on attachment 118135 [details] [diff] [review]
Proposed patch for NSPR TIP (for code review only)

r=cls
Attachment #118135 - Flags: review?(seawood) → review+
Akop, thank you very much for testing the patch from attachment
117541 [details] [diff] [review] for both gcc's.	Your help is very valuable.

I've checked in the NSPR and NSS patches.  They will appear in
mozilla 1.4alpha.

This is the patch for the current Mozilla tip, excluding NSPR
and NSS.  (For ease of code review, this patch does not contain
the changes to mozilla/configure.  Do not apply this patch to a
source tree.)
Comment on attachment 118165 [details] [diff] [review]
Proposed patch for Mozilla TIP, excluding NSPR and NSS (for code review only)

cls, please review this patch.

I have a question about the test for GNU_LD.  Why is there an
"echo" command with no arguments at the beginning of the pipeline?

> if test "`echo | $LD -v 2>&1 | grep -c GNU`" != "0"; then
>     GNU_LD=1
> fi

My test for GCC_USE_GNU_LD does not use this "echo" command.
Should it?
Attachment #118165 - Flags: review?(seawood)
Comment on attachment 118165 [details] [diff] [review]
Proposed patch for Mozilla TIP, excluding NSPR and NSS (for code review only)

I don't think the echo is needed.  It was probably just copy-n-pasted from the
as test (which does need the echo since it takes input from stdin).

r=cls
Attachment #118165 - Flags: review?(seawood) → review+
All patches have been checked in.
Status: ASSIGNED → RESOLVED
Closed: 17 years ago
Resolution: --- → FIXED
Target Milestone: --- → 4.3
*** Bug 200090 has been marked as a duplicate of this bug. ***
Hello all,
I resolved this with a specific "configure" command in the mozilla/nsprpub
directory, and it found the right Sun Compiler and associated binutils rather
than my GNU CC and GNU Binutils.
In fact, if this configure is done from the top tree, it fails because it tries
to use the GNU gcc and associated binutils.

So my mozilla is running fine, but was compiled both with GNU and SUN cc, and
GNU and SUN binutils.

But I'll keep in mind the _real_ patch exists...

Manys thanks for this help,
Sylvain.
You need to log in before you can comment on or make changes to this bug.