Re: problem with ld-elf.so.1 install

From: Kenneth D. Merry <ken_at_freebsd.org>
Date: Wed, 18 Feb 2004 23:52:11 -0700
On Sun, Feb 15, 2004 at 18:48:50 -0700, Kenneth D. Merry wrote:
> 
> I just upgraded from -current as of January 31st to -current as of February
> 13th.
> 
> I'm getting core dumps in random binaries.  It's not consistent, but does
> happen occasionally.  e.g.:
> 
> GNU gdb 5.2.1 (FreeBSD)
> Copyright 2002 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 conditions.
> Type "show copying" to see the conditions.
> There is absolutely no warranty for GDB.  Type "show warranty" for details.
> This GDB was configured as "i386-undermydesk-freebsd"...
> (no debugging symbols found)...
> Core was generated by `sh'.
> Program terminated with signal 11, Segmentation fault.
> Reading symbols from /lib/libedit.so.4...(no debugging symbols found)...done.
> Loaded symbols for /lib/libedit.so.4
> Reading symbols from /lib/libncurses.so.5...(no debugging symbols found)...
> done.
> Loaded symbols for /lib/libncurses.so.5
> Reading symbols from /lib/libc.so.5...(no debugging symbols found)...done.
> Loaded symbols for /lib/libc.so.5
> Reading symbols from /libexec/ld-elf.so.1...(no debugging symbols found)...
> done.
> Loaded symbols for /libexec/ld-elf.so.1
> #0  0x28068cb7 in reloc_non_plt () from /libexec/ld-elf.so.1
> (gdb) where
> #0  0x28068cb7 in reloc_non_plt () from /libexec/ld-elf.so.1
> #1  0x28065c86 in find_symdef () from /libexec/ld-elf.so.1
> #2  0x28064810 in _rtld () from /libexec/ld-elf.so.1
> 
> Since it blew up in ld-elf.so.1, I figured I'd look there...
> 
> When I did the installworld, though, ld-elf.so.1 didn't seem to get
> upgraded.  (See the January 31st date below.)  But when I tried to install
> it manually, the install didn't fail, but didn't work either:
> 
> [ looks like we have an old binary, for some reason ]
> =======================================
> # pwd
> /usr/c/ken/perforce/FreeBSD-ken/src/libexec/rtld-elf
> # ls -lao /libexec/
> total 130
> drwxr-xr-x   2 root  wheel  -       512 Feb 15 18:36 ./
> drwxr-xr-x  27 root  wheel  -      1536 Feb 15 17:30 ../
> -r-xr-xr-x   1 root  wheel  schg 128992 Jan 31 16:45 ld-elf.so.1*
> =======================================
> 
> [ try doing the install manually ]
> =======================================
> # make install
> chflags noschg /usr/libexec/ld-elf.so.1
> install -s -o root -g wheel -m 555  -fschg -C -b ld-elf.so.1 /libexec
> install -o root -g wheel -m 444 rtld.1.gz  /usr/share/man/man1
> /usr/share/man/man1/ld-elf.so.1.1.gz -> /usr/share/man/man1/rtld.1.gz
> /usr/share/man/man1/ld.so.1.gz -> /usr/share/man/man1/rtld.1.gz
> /usr/libexec/ld-elf.so.1 -> /libexec/ld-elf.so.1
> =======================================
> 
> [ let's see if it worked ]
> =======================================
> # ls -lao /libexec/
> total 130
> drwxr-xr-x   2 root  wheel  -       512 Feb 15 18:36 ./
> drwxr-xr-x  27 root  wheel  -      1536 Feb 15 17:30 ../
> -r-xr-xr-x   1 root  wheel  schg 128992 Jan 31 16:45 ld-elf.so.1*
> # diff /libexec/ld-elf.so.1 /usr/obj/usr/c/ken/perforce/FreeBSD-ken/src/libex >
> Binary files /libexec/ld-elf.so.1 and /usr/obj/usr/c/ken/perforce/FreeBSD-ken/src/libexec/rtld-elf/ld-elf.so.1 differ
> =======================================
> 
> [ it didn't work, try doing a chflags on the binary first ]
> =======================================
> # chflags noschg /libexec/ld-elf.so.1 
> # make install
> chflags noschg /usr/libexec/ld-elf.so.1
> install -s -o root -g wheel -m 555  -fschg -C -b ld-elf.so.1 /libexec
> install -o root -g wheel -m 444 rtld.1.gz  /usr/share/man/man1
> /usr/share/man/man1/ld-elf.so.1.1.gz -> /usr/share/man/man1/rtld.1.gz
> /usr/share/man/man1/ld.so.1.gz -> /usr/share/man/man1/rtld.1.gz
> /usr/libexec/ld-elf.so.1 -> /libexec/ld-elf.so.1
> =======================================
> 
> [ see if it worked this time ]
> =======================================
> # ls -lao /libexec/
> total 130
> drwxr-xr-x   2 root  wheel  -       512 Feb 15 18:44 ./
> drwxr-xr-x  27 root  wheel  -      1536 Feb 15 17:30 ../
> -r-xr-xr-x   1 root  wheel  schg 128992 Jan 31 16:45 ld-elf.so.1*
> # diff /libexec/ld-elf.so.1 /usr/obj/usr/c/ken/perforce/FreeBSD-ken/src/libex >
> Binary files /libexec/ld-elf.so.1 and /usr/obj/usr/c/ken/perforce/FreeBSD-ken/src/libexec/rtld-elf/ld-elf.so.1 differ
> =======================================
> [ didn't work ]
> 
> Anyone have any ideas on what I'm doing wrong here?

I managed to fix the problem with the old ld-elf.so.1, but I'm still
getting crashes from random binaries.  It varies depending on the boot.
One time it was sysctl:


# gdb /usr/obj/usr/c/ken/perforce/FreeBSD-ken/src/sbin/sysctl/sysctl sysctl.c >
GNU gdb 5.2.1 (FreeBSD)
Copyright 2002 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 conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB.  Type "show warranty" for details.
This GDB was configured as "i386-undermydesk-freebsd"...
(no debugging symbols found)...
Core was generated by `sysctl'.
Program terminated with signal 11, Segmentation fault.
Reading symbols from /lib/libc.so.5...(no debugging symbols found)...done.
Loaded symbols for /lib/libc.so.5
Reading symbols from /libexec/ld-elf.so.1...(no debugging symbols found)...
done.
Loaded symbols for /libexec/ld-elf.so.1
#0  0x28053cb7 in reloc_non_plt () from /libexec/ld-elf.so.1
(gdb) where
#0  0x28053cb7 in reloc_non_plt () from /libexec/ld-elf.so.1
#1  0x28050c86 in relocate_objects () from /libexec/ld-elf.so.1
#2  0x2804f810 in _rtld () from /libexec/ld-elf.so.1

The next time it was ipfw:

# gdb /usr/obj/usr/c/ken/perforce/FreeBSD-ken/src/sbin/ipfw/ipfw ipfw.core 
GNU gdb 5.2.1 (FreeBSD)
Copyright 2002 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 conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB.  Type "show warranty" for details.
This GDB was configured as "i386-undermydesk-freebsd"...
(no debugging symbols found)...
Core was generated by `ipfw'.
Program terminated with signal 11, Segmentation fault.
Reading symbols from /lib/libc.so.5...(no debugging symbols found)...done.
Loaded symbols for /lib/libc.so.5
Reading symbols from /libexec/ld-elf.so.1...(no debugging symbols found)...
done.
Loaded symbols for /libexec/ld-elf.so.1
#0  0x2805bcb7 in reloc_non_plt () from /libexec/ld-elf.so.1
(gdb) where
#0  0x2805bcb7 in reloc_non_plt () from /libexec/ld-elf.so.1
#1  0x28058c86 in relocate_objects () from /libexec/ld-elf.so.1
#2  0x28057810 in _rtld () from /libexec/ld-elf.so.1

Does anyone have any ideas?  This didn't happen with a -current from
January 31st.  This is with -current from February 13th.

Thanks,

Ken
-- 
Kenneth Merry
ken_at_FreeBSD.org
Received on Wed Feb 18 2004 - 21:52:13 UTC

This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:37:43 UTC