From 32ebc790cfb8b21f05548ce2d6f485ac2e0b4151 Mon Sep 17 00:00:00 2001 From: csgr Date: Tue, 14 Jun 1994 12:45:41 +0000 Subject: [PATCH] Bug reported by Jon-Dean Mountjoy Paul Kranenburg's description: ld is in error here, assuming that symbols with N_EXT set always have an entry in the (global) symbol table: this is not the case for C++ generated constructor/destructor symbols. I can reproduce your failure by fudging a "multiply defined" constructor symbol by hand. Checking for `g == NULL' seems to be a ok as a fence for now. So: for now, in do_file_warnings() we check if g == NULL, before trying to generate any warning messages. This prevents a NULL pointer dereference. --- gnu/usr.bin/ld/warnings.c | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/gnu/usr.bin/ld/warnings.c b/gnu/usr.bin/ld/warnings.c index d98516aa0b7b..aec223645fe0 100644 --- a/gnu/usr.bin/ld/warnings.c +++ b/gnu/usr.bin/ld/warnings.c @@ -1,5 +1,5 @@ /* - * $Id: warnings.c,v 1.5 1994/01/12 23:14:07 jkh Exp $ + * $Id: warnings.c,v 1.6 1994/02/13 20:41:48 jkh Exp $ */ #include @@ -621,6 +621,15 @@ do_file_warnings (entry, outfile) g = entry->symbols[i].symbol; s = &entry->symbols[i].nzlist.nlist; + /* + * XXX This is a temporary fence to correct an + * incorrect assumption made in the case of symbols + * which do not have entries in the (global) + * symbol table. + */ + if(g == NULL) + continue; + if (!(s->n_type & N_EXT)) continue;