Date: Sat, 7 Aug 2010 21:09:04 +0300 From: Kostik Belousov <kostikbel@gmail.com> To: Marius Strobl <marius@alchemy.franken.de> Cc: FreeBSD Hackers <freebsd-hackers@freebsd.org>, Jeremie Le Hen <jeremie@le-hen.org>, nwhitehorn@freebsd.org Subject: Re: Avoiding sysctl at program startup using ELF aux vector (was: concurrent sysctl implementation) Message-ID: <20100807180904.GZ22295@deviant.kiev.zoral.com.ua> In-Reply-To: <20100807135939.GA875@alchemy.franken.de> References: <20100806050633.GK14016@felucia.tataz.chchile.org> <20100806090404.GI22295@deviant.kiev.zoral.com.ua> <20100806110807.GA68489@alchemy.franken.de> <20100806111131.GN22295@deviant.kiev.zoral.com.ua> <20100807135939.GA875@alchemy.franken.de>
next in thread | previous in thread | raw e-mail | index | archive | help
--iZGt3Nu4N+9AUM+d Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Content-Transfer-Encoding: quoted-printable On Sat, Aug 07, 2010 at 03:59:39PM +0200, Marius Strobl wrote: > On Fri, Aug 06, 2010 at 02:11:31PM +0300, Kostik Belousov wrote: > > On Fri, Aug 06, 2010 at 01:08:08PM +0200, Marius Strobl wrote: > > > On Fri, Aug 06, 2010 at 12:04:04PM +0300, Kostik Belousov wrote: > > > > On Fri, Aug 06, 2010 at 07:06:33AM +0200, Jeremie Le Hen wrote: > > > > > Hi Kib, > > > > >=20 > > > > > In-Reply-To: <20100629083901.GG13238@deviant.kiev.zoral.com.ua> > > > > > On Tue, Jun 29, 2010 at 11:39:01AM +0300, Kostik Belousov wrote: > > > > > > On Tue, Jun 29, 2010 at 10:26:39AM +0200, Marius Strobl wrote: > > > > > > > On Mon, Jun 28, 2010 at 05:48:59PM +0300, Kostik Belousov wro= te: > > > > > > > > On Wed, Jun 23, 2010 at 11:09:59PM +0200, Jeremie Le Hen wr= ote: > > > > > > > > > Hi Kostik, > > > > > > > > >=20 > > > > > > > > > This patch seems to have faded out from memory. Is it po= ssible to go > > > > > > > > > forward and commit it? > > > > > > > > I refreshed the patch. Hopefully, nobody will object, and I= commit it > > > > > > > > shortly. > > > > > > > >=20 > > > > > > > > >=20 > > > > > > > > > Thanks, > > > > > > > > > Regards. > > > > > > > > >=20 > > > > > > > > > On Sat, Jul 25, 2009 at 12:29:16AM +0300, Kostik Belousov= wrote: > > > > > > > > > > Below is the prototype that seems to work for me both w= ith patched and > > > > > > > > > > old rtld on i386. Patch also contains bits for amd64 th= at I did not > > > > > > > > > > tested yet. All other arches are not buildable for now. > > > > > > > > > >=20 > > > > > > > > > > Patch completely eliminates sysctl syscalls from the rt= ld and libc > > > > > > > > > > startup. Without the patch, a single run of /bin/ls did= 6 sysctls, > > > > > > > > > > with the patch, no sysctls is queried at all. > > > > > > > > > >=20 > > > > > > > > Comparing with the originally posted patch, I added support= for all > > > > > > > > architectures, tested amd64 and ia32 on amd64, and converte= d getpagesizes(3) > > > > > > > > that added two more startup sysctls. > > > > > > > >=20 > > > > > > > > Would be nice to get a testing for at least some !x86 archi= tectures > > > > > > > > before the commit, I added some people who helped me in pas= t, to the Cc:. > > > > > > > >=20 > > > > > > >=20 > > > > > > > Doesn't look good on sparc64: > > > > > > > <...> > > > > > > > NFS ROOT: 192.168.1.40:/usr/data/nfsroot/sparc64 > > > > > > > dc1: link state changed to UP > > > > > > > pid 24 (ifconfig), uid 0: exited on signal 11 > > > > > > > Segmentation fault > > > > > > > Interface IP-Address Broadcast > > > > > > > pid 29 (rcorder), uid 0: exited on signal 11 > > > > > > > Segmentation fault > > > > > > > pid 30 (grep), uid 0: exited on signal 11 > > > > > > > Segmentation fault > > > > > > > pid 31 (rcorder), uid 0: exited on signal 11 > > > > > > > Segmentation fault > > > > > > > =20 > > > > > > > pid 32 (date), uid 0: exited on signal 11 > > > > > > > Segmentation fault > > > > > > > Jun 29 12:20:50 getty[36]: open /dev/ttyv3: No such file or d= irectory > > > > > > > <...> > > > > > > >=20 > > > > > > > Unfortunately, I currently lack the time to debug this. > > > > > >=20 > > > > > > Thank you. > > > > >=20 > > > > > Did yu have time to look at this problem? It would be nice to ha= ve this > > > > > in the tree. > > > >=20 > > > > I cannot move forward without the help from somebody having access = to > > > > sparc64 system where the problem is reproducable. > > >=20 > > > Do you have a debug version of the patch which outputs the necessary > > > information? > >=20 > > I would suggest to build rtld and libc with debugging symbols and > > get full backtrace from the faults. >=20 > v100# gdb /sbin/ifconfig ifconfig.core > GNU gdb 6.1.1 [FreeBSD] > Copyright 2004 Free Software Foundation, Inc. > GDB is free software, covered by the GNU General Public License, and you = are > welcome to change it and/or distribute copies of it under certain conditi= ons. > Type "show copying" to see the conditions. > There is absolutely no warranty for GDB. Type "show warranty" for detail= s. > This GDB was configured as "sparc64-marcel-freebsd"... > Core was generated by `ifconfig'. > Program terminated with signal 11, Segmentation fault. > Reading symbols from /lib/libbsdxml.so.4...done. > Loaded symbols for /lib/libbsdxml.so.4 > Reading symbols from /lib/libjail.so.1...done. > Loaded symbols for /lib/libjail.so.1 > Reading symbols from /lib/libsbuf.so.5...done. > Loaded symbols for /lib/libsbuf.so.5 > Reading symbols from /lib/libipx.so.5...done. > Loaded symbols for /lib/libipx.so.5 > Reading symbols from /lib/libc.so.7...done. > Loaded symbols for /lib/libc.so.7 > Reading symbols from /libexec/ld-elf.so.1...done. > Loaded symbols for /libexec/ld-elf.so.1 > #0 0x000000004089ebdc in getpagesizes (pagesize=3D0x7fdffffe2f8, nelem= =3D1) > at /usr/home/marius/co/head/src/lib/libc/gen/getpagesizes.c:75 > 75 while (nops > 0 && ps[nops - 1] =3D=3D 0) > (gdb) bt > #0 0x000000004089ebdc in getpagesizes (pagesize=3D0x7fdffffe2f8, nelem= =3D1) > at /usr/home/marius/co/head/src/lib/libc/gen/getpagesizes.c:75 > #1 0x00000000407f4314 in malloc_init () > at /usr/home/marius/co/head/src/lib/libc/stdlib/malloc.c:5418 > #2 0x00000000407f67d8 in malloc (size=3D32) > at /usr/home/marius/co/head/src/lib/libc/stdlib/malloc.c:5932 > #3 0x00000000001069ac in clone_setdefcallback (ifprefix=3D0x11b8a8 "wlan= ",=20 > p=3D0x10a1a0 <wlan_create>) > at /usr/home/marius/co/head/src/sbin/ifconfig/ifclone.c:106 > #4 0x0000000000119864 in __do_global_ctors_aux () > #5 0x000000000010243c in _init () > #6 0x0000000000102508 in _start () > #7 0x000000004022719c in .rtld_start () > at /usr/home/marius/co/head/src/libexec/rtld-elf/sparc64/rtld_start.S= :59 > #8 0x000000004022719c in .rtld_start () > at /usr/home/marius/co/head/src/libexec/rtld-elf/sparc64/rtld_start.S= :59 > Previous frame identical to this frame (corrupt stack?) >=20 > All faults I've looked at died the same why. Thank you. I think I found the reason, which was an unitialized variable. I also fixed a sillyness with osrelver. In the patched tree, there is tools/test/auxinfo that could be used to quick-check the system. Updated patch is available at http://people.freebsd.org/~kib/misc/rtld_auxinfo.1.patch --iZGt3Nu4N+9AUM+d Content-Type: application/pgp-signature Content-Disposition: inline -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.10 (FreeBSD) iEYEARECAAYFAkxdoUAACgkQC3+MBN1Mb4i14wCfViUP1Y//ehqpanyIC0ptMprS w8cAn18MZTSDfItH2nytNpZth55p8ehN =YfQx -----END PGP SIGNATURE----- --iZGt3Nu4N+9AUM+d--
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20100807180904.GZ22295>