--- /dev/null
+--- a/gold/archive.cc
++++ a/gold/archive.cc
+@@ -179,7 +179,8 @@ Archive::Archive(const std::string& name, Input_file* input_file,
+ : Library_base(task), name_(name), input_file_(input_file), armap_(),
+ armap_names_(), extended_names_(), armap_checked_(), seen_offsets_(),
+ members_(), is_thin_archive_(is_thin_archive), included_member_(false),
+- nested_archives_(), dirpath_(dirpath), num_members_(0)
++ nested_archives_(), dirpath_(dirpath), num_members_(0),
++ included_all_members_(false)
+ {
+ this->no_export_ =
+ parameters->options().check_excluded_libs(input_file->found_name());
+@@ -847,6 +848,13 @@ bool
+ Archive::include_all_members(Symbol_table* symtab, Layout* layout,
+ Input_objects* input_objects, Mapfile* mapfile)
+ {
++ // Don't include the same archive twice. This can happen if
++ // --whole-archive is nested inside --start-group (PR gold/12163).
++ if (this->included_all_members_)
++ return true;
++
++ this->included_all_members_ = true;
++
+ input_objects->archive_start(this);
+
+ if (this->members_.size() > 0)
+--- a/gold/archive.h
++++ a/gold/archive.h
+@@ -405,6 +405,8 @@ class Archive : public Library_base
+ unsigned int num_members_;
+ // True if we exclude this library archive from automatic export.
+ bool no_export_;
++ // True if this library has been included as a --whole-archive.
++ bool included_all_members_;
+ };
+
+ // This class is used to read an archive and pick out the desired
Patch7: %{name}-libtool-m.patch
Patch8: %{name}-build-id.patch
Patch9: %{name}-tooldir.patch
+Patch10: %{name}-pr12163.patch
URL: http://sources.redhat.com/binutils/
BuildRequires: autoconf >= 2.64
BuildRequires: automake >= 1:1.11
%patch7 -p1
%patch8 -p0
%patch9 -p1
+%patch10 -p1
# file contains hacks for ac 2.59 only
%{__rm} config/override.m4