summaryrefslogtreecommitdiff
path: root/gold
diff options
context:
space:
mode:
authorCary Coutant <ccoutant@google.com>2008-12-10 19:50:14 +0000
committerCary Coutant <ccoutant@google.com>2008-12-10 19:50:14 +0000
commit8c6d1faa6290209107fff8aa84c8e99ff3c2b949 (patch)
tree0adb07818706707ff78341df5364eb07d90bed6e /gold
parent4b174b00dc1dcb01fcbf9f8cdd89610556df91f1 (diff)
downloadbinutils-redhat-8c6d1faa6290209107fff8aa84c8e99ff3c2b949.tar.gz
* layout.cc (Layout::add_comdat): Allow COMDAT group from a replacement
object to override a kept COMDAT group from a plugin object.
Diffstat (limited to 'gold')
-rw-r--r--gold/ChangeLog5
-rw-r--r--gold/layout.cc9
2 files changed, 14 insertions, 0 deletions
diff --git a/gold/ChangeLog b/gold/ChangeLog
index dbfe8f636d..85482bb20e 100644
--- a/gold/ChangeLog
+++ b/gold/ChangeLog
@@ -1,3 +1,8 @@
+2008-12-10 Cary Coutant <ccoutant@google.com>
+
+ * layout.cc (Layout::add_comdat): Allow COMDAT group from a replacement
+ object to override a kept COMDAT group from a plugin object.
+
2008-12-09 Ian Lance Taylor <iant@google.com>
PR 7088
diff --git a/gold/layout.cc b/gold/layout.cc
index 2097b6de7d..a4f17e5355 100644
--- a/gold/layout.cc
+++ b/gold/layout.cc
@@ -47,6 +47,7 @@
#include "reloc.h"
#include "descriptors.h"
#include "layout.h"
+#include "plugin.h"
namespace gold
{
@@ -2959,6 +2960,14 @@ Layout::add_comdat(Relobj* object, unsigned int shndx,
if (ins.first->second.group_)
{
// We've already seen a real section group with this signature.
+ // If the kept group is from a plugin object, and we're in
+ // the replacement phase, accept the new one as a replacement.
+ if (ins.first->second.object_ == NULL
+ && parameters->options().plugins()->in_replacement_phase())
+ {
+ ins.first->second = kept;
+ return true;
+ }
return false;
}
else if (group)