Subject: Re: BFD/ld lossage on MIPS with NEW_TOOLCHAIN
To: Rafal Boni <rafal@mediaone.net>
From: Charles M. Hannum <abuse@spamalicious.com>
List: tech-toolchain
Date: 10/08/2001 06:12:11
> Index: symbol.c
> ===================================================================
> RCS file: /cvsroot/basesrc/libexec/ld.elf_so/symbol.c,v
> retrieving revision 1.10
> diff -b -u -r1.10 symbol.c
> --- symbol.c	2000/10/11 20:46:08	1.10
> +++ symbol.c	2001/10/07 03:22:47
> @@ -163,7 +163,7 @@
>  	bool in_plt;
>  {
>  	Elf_Addr symnum = ELF_R_SYM(r_info);
> -	const Elf_Sym  *ref = NULL;
> +	const Elf_Sym  *ref;
>  	const Elf_Sym  *def;
>  	const Elf_Sym  *symp;
>  	const Obj_Entry *obj;
> @@ -171,10 +171,10 @@
>  	const Objlist_Entry *elm;
>  	unsigned long   hash;
>  
> -	if (name == NULL) {
>  		ref = refobj->symtab + symnum;
> +	if (name == NULL)
>  		name = refobj->strtab + ref->st_name;
> -	}
> +
>  	hash = _rtld_elf_hash(name);
>  	def = NULL;
>  	defobj = NULL;
> @@ -227,6 +227,7 @@
>  	 * symbol as having the value zero.
>  	 */
>  	if (def == NULL && ELF_ST_BIND(ref->st_info) == STB_WEAK) {
> +		rdbg(1, ("  returning _rtld_sym_zero@_rtld_objmain"));
>  		def = &_rtld_sym_zero;
>  		defobj = _rtld_objmain;
>  	}

If I read this correctly, "ref" was previously uninitialized here in the
name!=NULL case.  Is that correct?