public inbox for binutils@sourceware.org
 help / color / mirror / Atom feed
* gold patch committed: Fix race condition
@ 2011-02-10  1:16 Ian Lance Taylor
  0 siblings, 0 replies; only message in thread
From: Ian Lance Taylor @ 2011-02-10  1:16 UTC (permalink / raw)
  To: binutils

[-- Attachment #1: Type: text/plain, Size: 990 bytes --]

Until now gold released local symbol information after doing all
relocations.  However, when I added support for STT_GNU_IFUNC, it became
possible for there to be an IRELATIVE relocation referring to the value
of a local symbol, which requires the value of the local symbol when
writing out the relocation.  That was not a problem in the normal
unthreaded mode, because the relocations would be written out before the
local values were discarded.  When threading, though, there is no
required ordering between these operations, so it was possible for gold
to attempt to fetch the local symbol value after it had been released,
leading to an assertion failure.  Ths patch fixes the problem by simply
not freeing the local symbol information.  Committed to mainline and
2.21 branch.

Ian


2011-02-09  Ian Lance Taylor  <iant@google.com>

	PR gold/12316
	* object.h (class Sized_relobj): Remove clear_local_symbols.
	* reloc.cc (Sized_relobj::do_relocate): Don't call
	clear_local_symbols.



[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: patch --]
[-- Type: text/x-diff, Size: 1870 bytes --]

Index: object.h
===================================================================
RCS file: /cvs/src/src/gold/object.h,v
retrieving revision 1.104
diff -u -r1.104 object.h
--- object.h	14 Dec 2010 19:03:30 -0000	1.104
+++ object.h	10 Feb 2011 01:11:03 -0000
@@ -1,6 +1,6 @@
 // object.h -- support for an object file for linking in gold  -*- C++ -*-
 
-// Copyright 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
+// Copyright 2006, 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc.
 // Written by Ian Lance Taylor <iant@google.com>.
 
 // This file is part of gold.
@@ -2165,15 +2165,6 @@
 		      Output_symtab_xindex*,
 		      Output_symtab_xindex*);
 
-  // Clear the local symbol information.
-  void
-  clear_local_symbols()
-  {
-    this->local_values_.clear();
-    this->local_got_offsets_.clear();
-    this->local_plt_offsets_.clear();
-  }
-
   // Record a mapping from discarded section SHNDX to the corresponding
   // kept section.
   void
Index: reloc.cc
===================================================================
RCS file: /cvs/src/src/gold/reloc.cc,v
retrieving revision 1.62
diff -u -r1.62 reloc.cc
--- reloc.cc	14 Dec 2010 19:03:30 -0000	1.62
+++ reloc.cc	10 Feb 2011 01:11:03 -0000
@@ -1,6 +1,6 @@
 // reloc.cc -- relocate input files for gold.
 
-// Copyright 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
+// Copyright 2006, 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc.
 // Written by Ian Lance Taylor <iant@google.com>.
 
 // This file is part of gold.
@@ -685,9 +685,6 @@
   // Write out the local symbols.
   this->write_local_symbols(of, layout->sympool(), layout->dynpool(),
 			    layout->symtab_xindex(), layout->dynsym_xindex());
-
-  // We should no longer need the local symbol values.
-  this->clear_local_symbols();
 }
 
 // Sort a Read_multiple vector by file offset.

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2011-02-10  1:16 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2011-02-10  1:16 gold patch committed: Fix race condition Ian Lance Taylor

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).