Subject: Re: toolchain/32074
To: None <toolchain-manager@netbsd.org, gnats-admin@netbsd.org,>
From: Nick Hudson <skrll@netbsd.org>
List: netbsd-bugs
Date: 01/12/2006 07:50:02
The following reply was made to PR toolchain/32074; it has been noted by GNATS.

From: Nick Hudson <skrll@netbsd.org>
To: gnats-bugs@netbsd.org
Cc: toolchain-manager@netbsd.org, gnats-admin@netbsd.org,
	netbsd-bugs@netbsd.org, stephen@degler.net, uwe@netbsd.org
Subject: Re: toolchain/32074
Date: Thu, 12 Jan 2006 07:49:26 +0000

 --Boundary-00=_GogxDYeAWYxv7Wn
 Content-Type: text/plain;
   charset="iso-8859-1"
 Content-Transfer-Encoding: 7bit
 Content-Disposition: inline
 
 On Wednesday 11 January 2006 23:30, Valeriy E. Ushakov wrote:
 >  FreeBSD fixed that in 1998:
 >
 >  http://www.freebsd.org/cgi/cvsweb.cgi/src/libexec/rtld-elf/rtld.c#rev1.10
 
 Here's a diff to our rtld.c. It works - are we happy to go with this solution?
 
 Nick
 
 --Boundary-00=_GogxDYeAWYxv7Wn
 Content-Type: text/x-diff;
   charset="iso-8859-1";
   name="rtld.c.diff"
 Content-Transfer-Encoding: 7bit
 Content-Disposition: attachment;
 	filename="rtld.c.diff"
 
 Index: libexec/ld.elf_so/rtld.c
 ===================================================================
 RCS file: /cvsroot/src/libexec/ld.elf_so/rtld.c,v
 retrieving revision 1.107
 diff -u -p -u -r1.107 rtld.c
 --- libexec/ld.elf_so/rtld.c	22 Oct 2004 05:39:57 -0000	1.107
 +++ libexec/ld.elf_so/rtld.c	12 Jan 2006 07:37:47 -0000
 @@ -869,10 +869,20 @@ _rtld_linkmap_add(Obj_Entry *obj)
  		_rtld_debug.r_map = l;
  		return;
  	}
 -	for (prev = _rtld_debug.r_map; prev->l_next != NULL; prev = prev->l_next);
 +
 +	/*
 +	 * Scan to the end of the list, but not past the entry for the
 +	 * dynamic linker, which we want to keep at the very end.
 +	 */
 +	for (prev = _rtld_debug.r_map;
 +	    prev->l_next != NULL && prev->l_next != &_rtld_objself.linkmap;
 +	    prev = prev->l_next);
 +
  	l->l_prev = prev;
 +	l->l_next = prev->l_next;
 +	if (l->l_next != NULL)
 +		l->l_next->l_prev = l;
  	prev->l_next = l;
 -	l->l_next = NULL;
  }
  
  void
 
 --Boundary-00=_GogxDYeAWYxv7Wn--