summaryrefslogtreecommitdiffstats
path: root/gnu
diff options
context:
space:
mode:
authorcsgr <csgr@FreeBSD.org>1994-06-14 12:45:41 +0000
committercsgr <csgr@FreeBSD.org>1994-06-14 12:45:41 +0000
commit32ebc790cfb8b21f05548ce2d6f485ac2e0b4151 (patch)
tree02df2dea461b3b36c4fd13163c3db83a6b3fecaa /gnu
parentb180b786f2dce401bce6e86ac74f548ffacb9c1b (diff)
downloadFreeBSD-src-32ebc790cfb8b21f05548ce2d6f485ac2e0b4151.zip
FreeBSD-src-32ebc790cfb8b21f05548ce2d6f485ac2e0b4151.tar.gz
Bug reported by Jon-Dean Mountjoy <csjm@cs.ru.ac.za>
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.
Diffstat (limited to 'gnu')
-rw-r--r--gnu/usr.bin/ld/warnings.c11
1 files changed, 10 insertions, 1 deletions
diff --git a/gnu/usr.bin/ld/warnings.c b/gnu/usr.bin/ld/warnings.c
index d98516a..aec2236 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 <sys/param.h>
@@ -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;
OpenPOWER on IntegriCloud