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:

NetBSD Home
NetBSD PR Database Search

(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.