Subject: lib/8793: ld.elf_so symbol breakage
To: None <gnats-bugs@gnats.netbsd.org>
From: None <mason@primenet.com.au>
List: netbsd-bugs
Date: 11/13/1999 21:06:42
>Number:         8793
>Category:       lib
>Synopsis:       recent ld.elf_so changes break some binaries
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    lib-bug-people (Library Bug People)
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Sat Nov 13 21:06:00 1999
>Last-Modified:
>Originator:     Geoff C. Wing
>Organization:
Geoff Wing : <gcw@pobox.com>     Work URL: http://www.primenet.com.au/
Rxvt Stuff : <gcw@rxvt.org>      Ego URL : http://pobox.com/~gcw/
Zsh Stuff  : <gcw@zsh.org>       Phone   : (Australia) 0413 431 874
>Release:        19991112
>Environment:
System: NetBSD c.primenet.com.au 1.4M NetBSD 1.4M (C) #0: Fri Nov 12 10:55:10 EST 1999 mason@c.primenet.com.au:/usr/netbsd/src/sys/arch/i386/compile/C i386


>Description:
	changes to ld.elf_so break my apache binary which does dynamic loading.
	I suspect the one with log:
	"Changes from msaitoh to fix local/global symbol confusion, and to fix
	 weak symbol support"

% gdb apache
.....
(gdb) run -X
.....
(gdb) bt
Program received signal SIGSEGV, Segmentation fault.
0x48087e44 in _rtld_symlook_obj (name=0x4811c5d0 "strncasecmp", 
    hash=166920448, obj=0x48091a00, in_plt=true) at symbol.c:122
122             unsigned long symnum = obj->buckets[hash % obj->nbuckets];
(gdb) bt
#0  0x48087e44 in _rtld_symlook_obj (name=0x4811c5d0 "strncasecmp", 
    hash=166920448, obj=0x48091a00, in_plt=true) at symbol.c:122
#1  0x48087ddd in _rtld_symlook_list (name=0x4811c5d0 "strncasecmp", 
    hash=166920448, objlist=0x4808d9c4, defobj_out=0xefbfb548, in_plt=true)
    at symbol.c:91
#2  0x4808804b in _rtld_find_symdef (obj_list=0x48091000, r_info=7687, 
    name=0x4811c5d0 "strncasecmp", refobj=0x48091800, defobj_out=0xefbfb57c, 
    in_plt=true) at symbol.c:217
#3  0x48087a37 in _rtld_relocate_plt_object (obj=0x48091800, rela=0xefbfb5ac, 
    addrp=0x0, bind_now=true, dodebug=true) at reloc.c:404
#4  0x48087c86 in _rtld_relocate_objects (first=0x48091800, bind_now=true, 
    dodebug=true) at reloc.c:554
#5  0x480872be in _rtld_dlopen (
    name=0x8091b24 "/usr/local/apache/libexec/mod_log_config.so", mode=258)
    at rtld.c:671
.....
(gdb) p obj->nbuckets
$3 = 17
(gdb) p obj->buckets
$4 = (Elf32_Word *) 0x4812009c
(gdb) p *(obj->buckets)
Error accessing memory address 0x4812009c: Invalid argument.


>How-To-Repeat:
	Not sure.  Some programs break, some don't.
	
>Fix:
	?
>Audit-Trail:
>Unformatted: