NetBSD Problem Report #586

From gnats  Wed Nov 23 11:42:09 1994
Received: from Collatz.McRCIM.McGill.EDU (Collatz.McRCIM.McGill.EDU [132.206.78.1]) by sun-lamp.cs.berkeley.edu (8.6.9/8.6.9) with ESMTP id LAA03525 for <gnats-bugs@sun-lamp.cs.berkeley.edu>; Wed, 23 Nov 1994 11:41:55 -0800
Message-Id: <199411231941.OAA24594@Collatz.McRCIM.McGill.EDU>
Date: Wed, 23 Nov 1994 14:41:58 -0500
From: der Mouse <mouse@Collatz.McRCIM.McGill.EDU>
Reply-To: mouse@Collatz.McRCIM.McGill.EDU
To: gnats-bugs@sun-lamp.cs.berkeley.edu
Subject: ld doesn't notice multiply defined symbols
X-Send-Pr-Version: 3.2

>Number:         586
>Category:       bin
>Synopsis:       ld doesn't notice multiply defined symbols
>Confidential:   no
>Severity:       serious
>Priority:       low
>Responsible:    gnats-admin
>State:          closed
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Wed Nov 23 11:50:02 +0000 1994
>Closed-Date:    Sat Dec 24 10:53:18 +0000 1994
>Last-Modified:  
>Originator:     der Mouse
>Release:        NetBSD/sparc 1.0
>Organization:
>Environment:
	Sparc IPC, everything built from 1.0 release sources
>Description:
	ld does not notice multiply-defined symbols, under some
	circumstances.
>How-To-Repeat:
	Script started on Wed Nov 23 14:09:12 1994
	[Callisto] 1> std
	[Callisto] 2> cat w.c
	#include <stdio.h>
	extern int foo(void);
	extern int foo1(void);
	extern int foo2(void);
	void main(void);
	void main(void)
	{
	 printf("%d %d %d\n",foo1(),foo2(),foo());
	}
	[Callisto] 3> cat x.c
	int foo(void) { return(1); }
	int foo1(void) { return(1); }
	[Callisto] 4> cat y.c
	int foo(void) { return(2); }
	int foo2(void) { return(2); }
	[Callisto] 5> cc -c w.c
	[Callisto] 6> cc -c x.c
	[Callisto] 7> cc -c y.c
	[Callisto] 8> cc -o w w.o x.o y.o
	[Callisto] 9> w
	1 2 1
	[Callisto] 10> cc -static -o w w.o x.o y.o
	[Callisto] 11> w
	1 2 1
	[Callisto] 12> cc -static -o w w.o y.o x.o
	[Callisto] 13> w
	1 2 2
	[Callisto] 14> exit
	[Callisto] 15> exit

	Script done on Wed Nov 23 14:10:20 1994
>Fix:
	A quick skim of the ld source seems to imply this is because
	both version of foo() are at the same offset in their
	respective text segments.  Interchanging foo() and foo1() in
	x.c produces the expected errors.

	I suspect the "sp->value != p->n_value" on line 1804 of
	gnu/usr.bin/ld/ld.c (1.0 sources) should be removed entirely,
	or possibly only for non-N_COMM symbols.  I am not confident
	enough to attempt this myself now.

					der Mouse

			    mouse@collatz.mcrcim.mcgill.edu
>Release-Note:
>Audit-Trail:
State-Changed-From-To: open->closed 
State-Changed-By: pk 
State-Changed-When: Sat Dec 24 02:53:18 PST 1994 
State-Changed-Why:  
Bug fixed. 
>Unformatted:

NetBSD Home
NetBSD PR Database Search

(Contact us) $NetBSD: query-full-pr,v 1.39 2013/11/01 18:47:49 spz Exp $
$NetBSD: gnats_config.sh,v 1.8 2006/05/07 09:23:38 tsutsui Exp $
Copyright © 1994-2007 The NetBSD Foundation, Inc. ALL RIGHTS RESERVED.