NetBSD Problem Report #47922
From kardel@pip.acrys.com Wed Jun 12 14:51:53 2013
Return-Path: <kardel@pip.acrys.com>
Received: from mail.netbsd.org (mail.netbsd.org [149.20.53.66])
(using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits))
(Client CN "mail.NetBSD.org", Issuer "Postmaster NetBSD.org" (verified OK))
by mollari.NetBSD.org (Postfix) with ESMTPS id 9822E7069D
for <gnats-bugs@gnats.NetBSD.org>; Wed, 12 Jun 2013 14:51:53 +0000 (UTC)
Message-Id: <201306121451.r5CEpiak027979@pip.acrys.com>
Date: Wed, 12 Jun 2013 16:51:44 +0200 (CEST)
From: kardel@netbsd.org
Reply-To: kardel@netbsd.org
To: gnats-bugs@NetBSD.org
Subject: build fail/risk building 6.1.x on 6.99.x>19 (ld picks wrong lib)
X-Send-Pr-Version: 3.95
>Number: 47922
>Category: bin
>Synopsis: build fail/risk building 6.1.x on 6.99.x>19 (ld picks wrong lib)
>Confidential: no
>Severity: serious
>Priority: medium
>Responsible: joerg
>State: closed
>Class: sw-bug
>Submitter-Id: net
>Arrival-Date: Wed Jun 12 14:55:00 +0000 2013
>Closed-Date: Thu Jun 27 01:39:14 +0000 2013
>Last-Modified: Thu Jun 27 01:39:14 +0000 2013
>Originator: Frank Kardel
>Release: NetBSD 6.99.20
>Organization:
>Environment:
System: NetBSD pip.kardel.name 6.99.20 NetBSD 6.99.20 (PIPGEN) #34: Sun May 26 16:57:25 CEST 2013 kardel@pip.kardel.name:/fs/raid1a/src/NetBSD/cur/src/obj.amd64/sys/arch/amd64/compile/PIPGEN amd64
Architecture: x86_64
Machine: amd64
>Description:
When doing a build.sh release of a 6.1.x tree the npfctl link
fails with:
link npfctl/npfctl
/lib/libcrypt.so.1: undefined reference to `__explicit_bzero'
collect2: ld returned 1 exit status
Note, that /lib/libcrypt.so.1 is referenced (consequently tripping
over the missing __explicit_bzero). ld should never reference
host libs when linking for a release build.
Root cause is a missing -lcrypt in the link parameters for
npfctl.
Maybe it is useful to add safeguards/fix build logic.
ld should have searched for indirect references to libraries
in the --systemroot hierarchy.
There are quit a few more oversights wrt/ needed libraries.
see below.
BTW: when cross building (i386 on amd64) everything is fine.
This looks like there may be some risks lurking when
ld searches for dependent libraries by itself.
>How-To-Repeat:
Attempt to build.sh release 6.1 on a 6.99.x>19 host
>Fix:
Add missing libraries? fix ld to honor --systemroot?
Quick and dirty patch to fix implicit host library references.
Index: external/mit/xorg/bin/bdftopcf/Makefile
===================================================================
RCS file: /cvsroot/src/external/mit/xorg/bin/bdftopcf/Makefile,v
retrieving revision 1.2
diff -u -r1.2 Makefile
--- external/mit/xorg/bin/bdftopcf/Makefile 23 Jul 2011 23:42:02 -0000 1.2
+++ external/mit/xorg/bin/bdftopcf/Makefile 12 Jun 2013 12:44:56 -0000
@@ -4,7 +4,7 @@
PROG= bdftopcf
-LDADD+= -lXfont -lfontenc -lfreetype -lm -lz -lbz2
+LDADD+= -lXfont -lICE -lfontenc -lfreetype -lXt -lX11 -lm -lz -lbz2
DPADD+= ${LIBXFONT} ${LIBFONTENC} ${LIBFREETYPE} ${LIBM} ${LIBZ} ${LIBBZ2}
.PATH: ${X11SRCDIR.${PROG}}
Index: external/mit/xorg/bin/xbiff/Makefile
===================================================================
RCS file: /cvsroot/src/external/mit/xorg/bin/xbiff/Makefile,v
retrieving revision 1.2
diff -u -r1.2 Makefile
--- external/mit/xorg/bin/xbiff/Makefile 21 Feb 2011 04:40:24 -0000 1.2
+++ external/mit/xorg/bin/xbiff/Makefile 12 Jun 2013 12:44:56 -0000
@@ -5,7 +5,7 @@
PROG= xbiff
SRCS= xbiff.c Mailbox.c
-LDADD+= -lXext -lXaw -lXmu -lXt -lX11 -lSM -lICE -lXau
+LDADD+= -lXext -lXaw -lXmu -lXt -lX11 -lSM -lICE -lXau -lXpm
DPADD+= ${LIBXEXT} ${LIBXAW} ${LIBXMU} ${LIBXT} ${LIBX11} ${LIBSM} ${LIBICE} \
${LIBXAU}
Index: external/mit/xorg/bin/xfs/Makefile
===================================================================
RCS file: /cvsroot/src/external/mit/xorg/bin/xfs/Makefile,v
retrieving revision 1.8
diff -u -r1.8 Makefile
--- external/mit/xorg/bin/xfs/Makefile 21 Nov 2010 02:33:41 -0000 1.8
+++ external/mit/xorg/bin/xfs/Makefile 12 Jun 2013 12:44:56 -0000
@@ -59,7 +59,7 @@
FILESDIR= ${XFSCONFIGDIR}
-LDADD+= -lXfont -lfontenc -lXfontcache -lXext -lX11 -lfreetype -lm -lz
+LDADD+= -lXfont -lfontenc -lXfontcache -lXext -lXt -lICE -lX11 -lfreetype -lm -lz
DPADD+= ${LIBXFONT} ${LIBFONTENC} ${LIBXFONTCACHE} ${LIBXEXT} ${LIBX11} \
${LIBFREETYPE} ${LIBM} ${LIBZ}
Index: external/mit/xorg/server/xorg-server/hw/vfb/Makefile
===================================================================
RCS file: /cvsroot/src/external/mit/xorg/server/xorg-server/hw/vfb/Makefile,v
retrieving revision 1.11
diff -u -r1.11 Makefile
--- external/mit/xorg/server/xorg-server/hw/vfb/Makefile 2 Aug 2011 09:11:38 -0000 1.11
+++ external/mit/xorg/server/xorg-server/hw/vfb/Makefile 12 Jun 2013 12:44:56 -0000
@@ -76,10 +76,13 @@
-lXfont \
-lfreetype \
-lXau \
+ -lICE \
+ -lXt \
-lfontenc \
${LIBCWRAPPER} \
-lpixman-1 \
-lXdmcp \
+ -lX11 \
-lz \
-lm \
-lcrypto
Index: external/mit/xorg/server/xorg-server/hw/xfree86/Xorg/Makefile
===================================================================
RCS file: /cvsroot/src/external/mit/xorg/server/xorg-server/hw/xfree86/Xorg/Makefile,v
retrieving revision 1.4
diff -u -r1.4 Makefile
--- external/mit/xorg/server/xorg-server/hw/xfree86/Xorg/Makefile 22 Oct 2011 14:40:41 -0000 1.4
+++ external/mit/xorg/server/xorg-server/hw/xfree86/Xorg/Makefile 12 Jun 2013 12:44:56 -0000
@@ -60,8 +60,8 @@
LDADD+= ${LDADD.hw/xfree86/dri}
LDADD+= ${LDADD.hw/xfree86/dixmods/fb}
LDADD+= ${LDADD.hw/xfree86/dixmods/xorgxkb}
-LDADD+= -lpixman-1 -lXfont -lfreetype -lXau -lfontenc -lXdmcp
-LDADD+= -lpciaccess -ldrm
+LDADD+= -lpixman-1 -lXfont -lfreetype -lXt -lICE -lXau -lfontenc -lXdmcp
+LDADD+= -lX11 -lpciaccess -ldrm
LDADD+= -lcrypto
LDADD+= -Wl,--no-whole-archive
Index: external/mit/xorg/server/xorg-server/hw/xnest/Makefile
===================================================================
RCS file: /cvsroot/src/external/mit/xorg/server/xorg-server/hw/xnest/Makefile,v
retrieving revision 1.14
diff -u -r1.14 Makefile
--- external/mit/xorg/server/xorg-server/hw/xnest/Makefile 2 Aug 2011 09:11:38 -0000 1.14
+++ external/mit/xorg/server/xorg-server/hw/xnest/Makefile 12 Jun 2013 12:44:56 -0000
@@ -70,7 +70,7 @@
${LDADD.os} \
${LDADD.glx} \
-lXfont -lXext -lfontenc \
- -lpixman-1 -lX11 -lXau \
+ -lpixman-1 -lXt -lICE -lX11 -lXau \
-lXdmcp -lfreetype -lm -lcrypto
DPADD+= ${LDADD.dix} \
Index: usr.sbin/npf/npfctl/Makefile
===================================================================
RCS file: /cvsroot/src/usr.sbin/npf/npfctl/Makefile,v
retrieving revision 1.5.2.5
diff -u -r1.5.2.5 Makefile
--- usr.sbin/npf/npfctl/Makefile 11 Feb 2013 21:49:48 -0000 1.5.2.5
+++ usr.sbin/npf/npfctl/Makefile 12 Jun 2013 12:45:11 -0000
@@ -11,7 +11,7 @@
SRCS+= npf_scan.l npf_parse.y
YHEADER= 1
-LDADD+= -lnpf -lprop -lcrypto -lutil -ly
+LDADD+= -lnpf -lprop -lcrypto -lcrypt -lutil -ly
DPADD+= ${LIBNPF} ${LIBPROP} ${LIBUTIL}
WARNS= 5
>Release-Note:
>Audit-Trail:
Responsible-Changed-From-To: bin-bug-people->joerg
Responsible-Changed-By: msaitoh@NetBSD.org
Responsible-Changed-When: Mon, 24 Jun 2013 07:56:50 +0000
Responsible-Changed-Why:
His.
From: Joerg Sonnenberger <joerg@britannica.bec.de>
To: gnats-bugs@NetBSD.org
Cc:
Subject: Re: bin/47922 (build fail/risk building 6.1.x on 6.99.x>19 (ld picks
wrong lib))
Date: Mon, 24 Jun 2013 22:07:27 +0200
--Kj7319i9nmIyA2yE
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
Please try the following patch.
Joerg
--Kj7319i9nmIyA2yE
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment; filename="elf32.em.diff"
Index: elf32.em
===================================================================
RCS file: /home/joerg/repo/netbsd/src/external/gpl3/binutils/dist/ld/emultempl/elf32.em,v
retrieving revision 1.5
diff -u -p -r1.5 elf32.em
--- elf32.em 7 Aug 2012 01:09:13 -0000 1.5
+++ elf32.em 24 Jun 2013 20:03:09 -0000
@@ -310,11 +310,17 @@ gld${EMULATION_NAME}_try_needed (struct
int force)
{
bfd *abfd;
- const char *name = needed->name;
+ char *name;
const char *soname;
int link_class;
+ if (ld_sysroot)
+ name = concat(ld_sysroot, "/", needed->name, (const char *)NULL);
+ else
+ name = needed->name;
abfd = bfd_openr (name, bfd_get_target (link_info.output_bfd));
+ if (ld_sysroot)
+ free(name);
if (abfd == NULL)
return FALSE;
--Kj7319i9nmIyA2yE--
From: Joerg Sonnenberger <joerg@britannica.bec.de>
To: gnats-bugs@NetBSD.org
Cc:
Subject: Re: bin/47922 (build fail/risk building 6.1.x on 6.99.x>19 (ld picks
wrong lib))
Date: Tue, 25 Jun 2013 00:03:36 +0200
--Dxnq1zWXvFF0Q93v
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
Newer version of the patch.
--Dxnq1zWXvFF0Q93v
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment; filename="elf32.em.diff"
Index: binutils/dist/ld/emultempl/elf32.em
===================================================================
RCS file: /home/joerg/repo/netbsd/src/external/gpl3/binutils/dist/ld/emultempl/elf32.em,v
retrieving revision 1.5
diff -u -p -r1.5 elf32.em
--- binutils/dist/ld/emultempl/elf32.em 7 Aug 2012 01:09:13 -0000 1.5
+++ binutils/dist/ld/emultempl/elf32.em 24 Jun 2013 22:02:07 -0000
@@ -452,15 +452,25 @@ fragment <<EOF
static bfd_boolean
gld${EMULATION_NAME}_search_needed (const char *path,
- struct dt_needed *n, int force)
+ struct dt_needed *n, int force, int prepend_sysroot)
{
const char *s;
const char *name = n->name;
size_t len;
struct dt_needed needed;
- if (name[0] == '/')
+ if (name[0] == '/') {
+ if (prepend_sysroot && ld_sysroot) {
+ bfd_boolean rv;
+ needed.by = n->by;
+ char *filename= concat(ld_sysroot, n->name, (const char *)NULL);
+ needed.name = filename;
+ rv = gld${EMULATION_NAME}_try_needed (&needed, force);
+ free(filename);
+ return rv;
+ }
return gld${EMULATION_NAME}_try_needed (n, force);
+ }
if (path == NULL || *path == '\0')
return FALSE;
@@ -499,6 +509,13 @@ gld${EMULATION_NAME}_search_needed (cons
}
strcpy (sset, name);
+ if (prepend_sysroot && filename[0] == '=')
+ abort();
+ if (filename[0] == '/' && prepend_sysroot && ld_sysroot) {
+ char *filename2 = concat(ld_sysroot, filename, (const char *)NULL);
+ free(filename);
+ filename = filename2;
+ }
needed.name = filename;
if (gld${EMULATION_NAME}_try_needed (&needed, force))
return TRUE;
@@ -613,7 +630,7 @@ gld${EMULATION_NAME}_check_ld_elf_hints
needed.by = NULL;
needed.name = name;
return gld${EMULATION_NAME}_search_needed (ld_elf_hints, & needed,
- force);
+ force, 0);
}
EOF
# FreeBSD
@@ -824,7 +841,7 @@ gld${EMULATION_NAME}_check_ld_so_conf (c
needed.by = NULL;
needed.name = name;
- return gld${EMULATION_NAME}_search_needed (ld_so_conf, &needed, force);
+ return gld${EMULATION_NAME}_search_needed (ld_so_conf, &needed, force, 0);
}
EOF
@@ -1256,13 +1273,13 @@ fi
fragment <<EOF
if (gld${EMULATION_NAME}_search_needed (command_line.rpath_link,
- &n, force))
+ &n, force, 0))
break;
EOF
if [ "x${USE_LIBPATH}" = xyes ] ; then
fragment <<EOF
if (gld${EMULATION_NAME}_search_needed (command_line.rpath,
- &n, force))
+ &n, force, 1))
break;
EOF
fi
@@ -1273,11 +1290,11 @@ fragment <<EOF
{
lib_path = (const char *) getenv ("LD_RUN_PATH");
if (gld${EMULATION_NAME}_search_needed (lib_path, &n,
- force))
+ force, 0))
break;
}
lib_path = (const char *) getenv ("LD_LIBRARY_PATH");
- if (gld${EMULATION_NAME}_search_needed (lib_path, &n, force))
+ if (gld${EMULATION_NAME}_search_needed (lib_path, &n, force, 0))
break;
EOF
fi
@@ -1287,12 +1304,10 @@ fragment <<EOF
rp = bfd_elf_get_runpath_list (link_info.output_bfd, &link_info);
for (; !found && rp != NULL; rp = rp->next)
{
- char *tmpname = gld${EMULATION_NAME}_add_sysroot (rp->name);
found = (rp->by == l->by
- && gld${EMULATION_NAME}_search_needed (tmpname,
+ && gld${EMULATION_NAME}_search_needed (rp->name,
&n,
- force));
- free (tmpname);
+ force, 1));
}
if (found)
break;
--Dxnq1zWXvFF0Q93v--
From: Frank Kardel <kardel@netbsd.org>
To: gnats-bugs@NetBSD.org
Cc: Joerg Sonnenberger <joerg@britannica.bec.de>, joerg@NetBSD.org,
netbsd-bugs@NetBSD.org
Subject: Re: bin/47922 (build fail/risk building 6.1.x on 6.99.x>19 (ld picks
wrong lib))
Date: Tue, 25 Jun 2013 09:26:34 +0200
That one works - thanks!
A pullup to netbsd-6 might be advisable too. I haven't checked whether
netbsd-5 is affected though.
Frank
On 06/25/13 00:05, Joerg Sonnenberger wrote:
> The following reply was made to PR bin/47922; it has been noted by GNATS.
>
> From: Joerg Sonnenberger <joerg@britannica.bec.de>
> To: gnats-bugs@NetBSD.org
> Cc:
> Subject: Re: bin/47922 (build fail/risk building 6.1.x on 6.99.x>19 (ld picks
> wrong lib))
> Date: Tue, 25 Jun 2013 00:03:36 +0200
>
> --Dxnq1zWXvFF0Q93v
> Content-Type: text/plain; charset=us-ascii
> Content-Disposition: inline
>
> Newer version of the patch.
>
> --Dxnq1zWXvFF0Q93v
> Content-Type: text/x-diff; charset=us-ascii
> Content-Disposition: attachment; filename="elf32.em.diff"
>
>
From: Thomas Klausner <wiz@NetBSD.org>
To: gnats-bugs@NetBSD.org
Cc:
Subject: Re: bin/47922 (build fail/risk building 6.1.x on 6.99.x>19 (ld picks
wrong lib))
Date: Tue, 25 Jun 2013 13:44:34 +0200
The second version of the patch lets me finish a "build.sh
distribution" on 6.99.20/amd64, which didn't work before.
Thomas
From: Paul Goyette <paul@whooppee.com>
To: gnats-bugs@netbsd.org
Cc:
Subject: Re: bin/47922 (build fail/risk building 6.1.x on 6.99.x>19 (ld picks
wrong lib))
Date: Tue, 25 Jun 2013 08:28:46 -0700 (PDT)
The revised patch also works for me. Please commit soon so the
automated test beds can resume checking for other errors!
-------------------------------------------------------------------------
| Paul Goyette | PGP Key fingerprint: | E-mail addresses: |
| Customer Service | FA29 0E3B 35AF E8AE 6651 | paul at whooppee.com |
| Network Engineer | 0786 F758 55DE 53BA 7731 | pgoyette at juniper.net |
| Kernel Developer | | pgoyette at netbsd.org |
-------------------------------------------------------------------------
From: "Joerg Sonnenberger" <joerg@netbsd.org>
To: gnats-bugs@gnats.NetBSD.org
Cc:
Subject: PR/47922 CVS commit: src/external/gpl3/binutils/dist/ld/emultempl
Date: Tue, 25 Jun 2013 19:38:55 +0000
Module Name: src
Committed By: joerg
Date: Tue Jun 25 19:38:55 UTC 2013
Modified Files:
src/external/gpl3/binutils/dist/ld/emultempl: elf32.em
Log Message:
PR 47922: Properly resolve DT_NEEDED entries under sysroot and don't
accidently try the installed system.
To generate a diff of this commit:
cvs rdiff -u -r1.5 -r1.6 \
src/external/gpl3/binutils/dist/ld/emultempl/elf32.em
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
From: "SAITOH Masanobu" <msaitoh@netbsd.org>
To: gnats-bugs@gnats.NetBSD.org
Cc:
Subject: PR/47922 CVS commit: [netbsd-6] src/external/gpl3/binutils/dist/ld/emultempl
Date: Thu, 27 Jun 2013 01:18:32 +0000
Module Name: src
Committed By: msaitoh
Date: Thu Jun 27 01:18:32 UTC 2013
Modified Files:
src/external/gpl3/binutils/dist/ld/emultempl [netbsd-6]: elf32.em
Log Message:
Pull up following revision(s) (requested by joerg in ticket #911):
external/gpl3/binutils/dist/ld/emultempl/elf32.em: revision 1.6
PR 47922: Properly resolve DT_NEEDED entries under sysroot and don't
accidently try the installed system.
To generate a diff of this commit:
cvs rdiff -u -r1.4 -r1.4.4.1 \
src/external/gpl3/binutils/dist/ld/emultempl/elf32.em
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
From: "SAITOH Masanobu" <msaitoh@netbsd.org>
To: gnats-bugs@gnats.NetBSD.org
Cc:
Subject: PR/47922 CVS commit: [netbsd-6-0] src/external/gpl3/binutils/dist/ld/emultempl
Date: Thu, 27 Jun 2013 01:26:36 +0000
Module Name: src
Committed By: msaitoh
Date: Thu Jun 27 01:26:36 UTC 2013
Modified Files:
src/external/gpl3/binutils/dist/ld/emultempl [netbsd-6-0]: elf32.em
Log Message:
Pull up following revision(s) (requested by joerg in ticket #911):
external/gpl3/binutils/dist/ld/emultempl/elf32.em: revision 1.6
PR 47922: Properly resolve DT_NEEDED entries under sysroot and don't
accidently try the installed system.
To generate a diff of this commit:
cvs rdiff -u -r1.4 -r1.4.8.1 \
src/external/gpl3/binutils/dist/ld/emultempl/elf32.em
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
From: "SAITOH Masanobu" <msaitoh@netbsd.org>
To: gnats-bugs@gnats.NetBSD.org
Cc:
Subject: PR/47922 CVS commit: [netbsd-6-1] src/external/gpl3/binutils/dist/ld/emultempl
Date: Thu, 27 Jun 2013 01:29:54 +0000
Module Name: src
Committed By: msaitoh
Date: Thu Jun 27 01:29:54 UTC 2013
Modified Files:
src/external/gpl3/binutils/dist/ld/emultempl [netbsd-6-1]: elf32.em
Log Message:
Pull up following revision(s) (requested by joerg in ticket #911):
external/gpl3/binutils/dist/ld/emultempl/elf32.em: revision 1.6
PR 47922: Properly resolve DT_NEEDED entries under sysroot and don't
accidently try the installed system.
To generate a diff of this commit:
cvs rdiff -u -r1.4 -r1.4.10.1 \
src/external/gpl3/binutils/dist/ld/emultempl/elf32.em
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
State-Changed-From-To: open->closed
State-Changed-By: msaitoh@NetBSD.org
State-Changed-When: Thu, 27 Jun 2013 01:39:14 +0000
State-Changed-Why:
Fixed and pulled up to all netbsd-6* branches.
>Unformatted:
(Contact us)
$NetBSD: query-full-pr,v 1.39 2013/11/01 18:47:49 spz Exp $
$NetBSD: gnats_config.sh,v 1.8 2006/05/07 09:23:38 tsutsui Exp $
Copyright © 1994-2007
The NetBSD Foundation, Inc. ALL RIGHTS RESERVED.