--- binutils-2.22.orig/debian/binutils-gold.postrm
+++ binutils-2.22/debian/binutils-gold.postrm
@@ -0,0 +1,15 @@
+#! /bin/sh
+
+set -e
+
+if [ "$1" = "remove" -o "$1" = "abort-install" ]; then
+	dpkg-divert \
+		--package binutils-gold \
+		--remove --rename \
+		--divert /usr/bin/ld.bfd-link /usr/bin/ld
+	dpkg-divert \
+		--package binutils-gold \
+		--remove --rename \
+		--divert /usr/share/man/man1/ld.bfd-link.1.gz /usr/share/man/man1/ld.1.gz
+
+fi
--- binutils-2.22.orig/debian/binutils-multiarch.postrm.in
+++ binutils-2.22/debian/binutils-multiarch.postrm.in
@@ -0,0 +1,49 @@
+#! /bin/sh
+set -e
+this_ver=@DEB_VER@; # this version
+# action: upgrade, abort-upgrade, remove, abort-install, disappear,
+# purge, or failed-upgrade.
+context=$1
+if
+	test "$context" = failed-upgrade &&
+	dpkg --compare-versions "$this_ver" lt "$2"
+then
+	# postrm of the future failed.
+	# Who knows what it was supposed to do?  Abort.
+	exit 1
+fi
+new_ver=; # version replacing this one, if any.
+case "$context" in
+failed-upgrade)
+	new_ver=$this_ver ;;
+abort-install|disappear)
+	new_ver= ;;
+*)
+	new_ver=$2 ;;
+esac
+
+diversion() {
+	local added_ver divertto file
+	added_ver=$1
+	file=$2
+	divertto=${3-$file.single}
+
+	if
+		test "$context" != purge &&
+		dpkg --compare-versions "$new_ver" lt "$added_ver"
+	then
+		dpkg-divert --package binutils-multiarch \
+			--remove --rename --divert "$divertto" "$file"
+	fi
+}
+
+
+for prog in nm objdump objcopy strings strip size \
+            ar ranlib addr2line gprof readelf
+do
+	diversion 2.9.5.0.16-1 "/usr/bin/$prog"
+done
+
+if [ "$1" = "remove" ]; then
+	ldconfig
+fi
--- binutils-2.22.orig/debian/binutils-multiarch.preinst.in
+++ binutils-2.22/debian/binutils-multiarch.preinst.in
@@ -0,0 +1,27 @@
+#! /bin/sh
+set -e
+new_ver=@DEB_VER@; # this version
+context=$1; # why to install (install, upgrade, or abort-upgrade)
+old_ver=$2; # version being replaced, if any
+
+diversion() {
+	local added_ver divertto file
+	added_ver=$1
+	file=$2
+	divertto=${3-$file.single}
+
+	if
+		test "$context" = install ||
+		dpkg --compare-versions "$old_ver" lt "$added_ver" ||
+		dpkg --compare-versions "$new_ver" le "$old_ver"
+	then
+		dpkg-divert --package binutils-multiarch \
+			--add --rename --divert "$divertto" "$file"
+	fi
+}
+
+for prog in nm objdump objcopy strings strip size \
+            ar ranlib addr2line gprof readelf
+do
+	diversion 2.9.5.0.16-1 "/usr/bin/$prog"
+done
--- binutils-2.22.orig/debian/binutils-hppa64.postrm
+++ binutils-2.22/debian/binutils-hppa64.postrm
@@ -0,0 +1,7 @@
+#! /bin/sh
+
+set -e
+
+if [ "$1" = "remove" ]; then
+	ldconfig
+fi
--- binutils-2.22.orig/debian/test-suite-compare.py
+++ binutils-2.22/debian/test-suite-compare.py
@@ -0,0 +1,230 @@
+#!/usr/bin/env python
+
+# Quick'n'dirty regression check for dejagnu testsuites
+# Copyright (C) 2003, 2004, 2005, 2006, 2007  James Troup <james@nocrew.org>
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU;5B General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+################################################################################
+
+import optparse
+import os
+import sys
+
+################################################################################
+
+def fubar(msg, exit_code=1):
+    sys.stderr.write("E: %s\n" % (msg))
+    sys.exit(exit_code)
+
+def warn(msg):
+    sys.stderr.write("W: %s\n" % (msg))
+
+def info(msg):
+    sys.stderr.write("I: %s\n" % (msg))
+
+################################################################################
+
+def read_testsummary(filename):
+    results = {}
+    file = open(filename)
+    for line in file.readlines():
+        if not line:
+            continue
+        if line.startswith("Running"):
+            s = line.split()
+            if "/" in s[1]:
+                x = s[1]
+                if x.find("/testsuite/") == -1:
+                    fubar("Can't find /testsuite/ in '%s'." % (x))
+                # 'Running /home/james/debian/packages/binutils/binutils-2.14.90.0.7/gas/testsuite/gas/hppa/unsorted/unsorted.exp ...' -> 'gas/hppa/unsorted/unsorted.exp'
+                # ... since using basename() isn't dupe safe.
+                section = x[x.find("/testsuite/"):].replace("/testsuite/","").split()[0]
+
+                # Tests can be duplicated, e.g. hppa/basic/basic.exp
+                # is run twice, once for hppa-linux and once for
+                # hppa64-linux.  This is of course a horrible bodge,
+                # but I can't think of anything trivial and better off
+                # hand.
+
+                if results.has_key(section):
+                    extra = 1
+                    too_many = 10
+                    while results.has_key(section) and extra < too_many:
+                        section = "%s.%s" % (section, extra)
+                        extra += 1
+                        if extra >= too_many:
+                            fubar("gave up trying to unduplicate %s." % (section))
+
+                results[section] = {}
+                continue
+
+        got_state = 0
+        for state in [ "PASS", "XPASS", "FAIL", "XFAIL", "UNRESOLVED",
+                       "UNTESTED", "UNSUPPORTED" ]:
+            if line.startswith(state):
+                s = line.split(':')
+                state = s[0]
+                test = ':'.join(s[1:]).strip()
+                if results.has_key(test):
+                    warn("%s/%s is duplicated." % (section, test))
+                results[section][test] = state
+                got_state = 1
+                break
+
+        if got_state:
+            continue
+
+    return results
+
+################################################################################
+
+def compare_results(old, new):
+    total_num = 0
+    pass_count = 0
+    fail_count = 0
+    xfail_count = 0
+    untested_count = 0
+    regression_count = 0
+    progression_count = 0
+    change_count = 0
+
+    for section in new.keys():
+        for test in new[section].keys():
+            state = new[section][test]
+
+            # Stats pr0n
+            total_num += 1
+            if state == "PASS" or state == "XPASS":
+                pass_count += 1
+            elif state == "FAIL" or state == "UNRESOLVED":
+                fail_count += 1
+            elif state == "XFAIL":
+                xfail_count += 1
+            elif state == "UNTESTED":
+                untested_count += 1
+
+            # Compare to old
+            if not old.has_key(section):
+                continue
+            if not old[section].has_key(test):
+                continue
+            old_state = old[section][test]
+            if state == "PASS":
+                if old_state != "PASS":
+                    progression_count += 1
+                    info("[%s] progression (%s -> %s): %s" % (section, old_state, state, test))
+            elif state == "XPASS":
+                if old_state != "XPASS" and old_state != "PASS":
+                    progression_count += 1
+                    warn("[%s] %s: %s" % (section, state, test))
+            elif state == "FAIL":
+                if old_state != "FAIL":
+                    regression_count += 1
+                    warn("[%s] REGRESSION (%s -> %s): %s" % (section, old_state, state, test))
+            elif state == "XFAIL":
+                if old_state != "XFAIL":
+                    change_count += 1
+                    info("[%s] change (%s -> %s): %s" % (section, old_state, state, test))
+            elif state == "UNRESOLVED":
+                if old_state != "UNRESOLVED" and old_state != "FAIL":
+                    regression_count += 1
+                    warn("[%s] REGRESSION (%s -> %s): %s" % (section, old_state, state, test))
+                if old_state == "FAIL":
+                    change_count += 1
+                    info("[%s] change (%s -> %s): %s" % (section, old_state, state, test))
+            elif state == "UNTESTED":
+                if old_state != "UNTESTED":
+                    change_count += 1
+                    warn("[%s] REGRESSION (%s -> %s): %s" % (section, old_state, state, test))
+
+    if regression_count:
+        print "%d REGRESSIONS (%.2f%%)." % (regression_count, (float(regression_count)/total_num)*100)
+    if progression_count:
+        print "%d progressions (%.2f%%)." % (progression_count, (float(progression_count)/total_num)*100)
+
+    if change_count:
+        print "%d changes (%.2f%%)." % (change_count, (float(change_count)/total_num)*100)
+
+    print "%d tests: %d pass (%.2f%%), %d fail (%.2f%%), %d xfail (%.2f%%) %d untested (%.2f%%)." \
+          % (total_num, pass_count, (float(pass_count)/total_num)*100,
+             fail_count, (float(fail_count)/total_num)*100,
+             xfail_count, (float(xfail_count)/total_num)*100,
+             untested_count, (float(untested_count)/total_num)*100)
+
+    if regression_count:
+        sys.exit(1)
+
+################################################################################
+
+def compare_multiple(directory, first_version, second_version):
+    architectures = [ "alpha", "arm", "hppa", "i386", "ia64", "mips",
+                      "m68k", "mipsel", "powerpc", "s390", "sparc" ]
+
+    for arch in architectures:
+        print "*********************************** %s ******************************" % (arch)
+        second_filename = "%s/%s_%s" % (directory, second_version, arch)
+        if not os.path.exists(second_filename):
+            print "   -- NOT AVAILABLE --"
+            continue
+
+        new = read_testsummary(second_filename)
+        first_filename = "%s/%s_%s" % (directory, first_version, arch)
+        old = read_testsummary(first_filename)
+        compare_results(old, new)
+
+################################################################################
+
+def init():
+    """Initalization, including parsing of options."""
+
+    usage = """usage: %prog [OPTIONS] <OLD> <NEW>
+compare (binutils) dejagnu testsuite results.
+
+Example usage:
+
+  test-suite-compare.py binutils-2.17/test-summary binutils-2.18/test-summary
+
+Or to compare across all architectures (with test results stored in a
+'test-summary' directory):
+
+  test-suite-compare.py -mtest-summary 2.17-3 2.18-1"""
+    parser = optparse.OptionParser(usage)
+    parser.add_option("-m", "--multiple", dest="multiple",
+                      nargs=1, type="string",
+                      help="compare multiple architectures")
+    (options, args) = parser.parse_args()
+
+    if len(args) > 2 or len(args) < 2:
+        parser.error("takes 2 arguments (old and new)")
+    (old_version, new_version) = args
+
+    return options, old_version, new_version
+            
+################################################################################
+
+def main():
+    (options, old_version, new_version) = init()
+    if options.multiple:
+        compare_multiple(options.multiple, old_version, new_version)
+    else:
+        old = read_testsummary(old_version)
+        new = read_testsummary(new_version)
+        compare_results(old, new)
+
+################################################################################
+
+if __name__ == '__main__':
+    main()
--- binutils-2.22.orig/debian/README.cross
+++ binutils-2.22/debian/README.cross
@@ -0,0 +1,26 @@
+Cross-binutils debian packages can be built directly from the binutils
+source package.
+
+To build a cross-binutils package:
+
+ o Download and unpack the binutils source package:
+
+    apt-get source binutils
+
+ o Ensure you have the binutils build-dependencies installed:
+
+    apt-get build-dep binutils
+
+ o Then build the cross-binutils package:
+   
+    TARGET=<your-target> dpkg-buildpackage -b -uc -us 
+    or 
+    echo arm >debian/target; dpkg-buildpackage -b -uc -us
+
+   (substitute your target name, e.g. "arm" or "m68k", instead of
+    "<your-target>")
+
+---
+Nikita Youshchenko <yoush@cs.msu.su>
+Hector Oron <zumbi@debian.org>
+Marcin Juszkiewicz <marcin.juszkiewicz@linaro.org>
--- binutils-2.22.orig/debian/ld.gold.1
+++ binutils-2.22/debian/ld.gold.1
@@ -0,0 +1,678 @@
+.\" DO NOT MODIFY THIS FILE!  It was generated by help2man 1.40.10.
+.TH GOLD "1" "July 2012" "gold (GNU Binutils for Debian 2.22) 1.11" "User Commands"
+.SH NAME
+gold \- The GNU ELF linker
+.SH SYNOPSIS
+.B ld.gold
+[\fIoptions\fR] \fIfile\fR...
+.SH OPTIONS
+.TP
+\fB\-\-help\fR
+Report usage information
+.TP
+\fB\-v\fR, \fB\-\-version\fR
+Report version information
+.TP
+\fB\-V\fR
+Report version and target information
+.TP
+\fB\-\-add\-needed\fR
+Not supported
+.TP
+\fB\-\-no\-add\-needed\fR
+Do not copy DT_NEEDED tags from shared libraries
+.HP
+\fB\-\-allow\-multiple\-definition\fR Allow multiple definitions of symbols
+.TP
+\fB\-\-no\-allow\-multiple\-definition\fR
+Do not allow multiple definitions
+.TP
+\fB\-\-allow\-shlib\-undefined\fR
+Allow unresolved references in shared libraries
+.TP
+\fB\-\-no\-allow\-shlib\-undefined\fR
+Do not allow unresolved references in shared libraries
+.TP
+\fB\-\-as\-needed\fR
+Only set DT_NEEDED for shared libraries if used
+.TP
+\fB\-\-no\-as\-needed\fR
+Always DT_NEEDED for shared libraries
+.TP
+\fB\-assert\fR [ignored]
+Ignored
+.TP
+\fB\-b\fR [elf,binary], \fB\-\-format\fR [elf,binary]
+Set input format
+.HP
+\fB\-Bdynamic\fR                   \fB\-l\fR searches for shared libraries
+.HP
+\fB\-Bstatic\fR                    \fB\-l\fR does not search for shared libraries
+.TP
+\fB\-dy\fR
+alias for \fB\-Bdynamic\fR
+.TP
+\fB\-dn\fR
+alias for \fB\-Bstatic\fR
+.TP
+\fB\-Bgroup\fR
+Use group name lookup rules for shared library
+.TP
+\fB\-Bsymbolic\fR
+Bind defined symbols locally
+.TP
+\fB\-Bsymbolic\-functions\fR
+Bind defined function symbols locally
+.TP
+\fB\-\-build\-id\fR [=STYLE]
+Generate build ID note
+.TP
+\fB\-\-check\-sections\fR
+Check segment addresses for overlaps (default)
+.TP
+\fB\-\-no\-check\-sections\fR
+Do not check segment addresses for overlaps
+.TP
+\fB\-\-compress\-debug\-sections\fR [none,zlib]
+Compress .debug_* sections in the output file
+.TP
+\fB\-\-copy\-dt\-needed\-entries\fR
+Not supported
+.HP
+\fB\-\-no\-copy\-dt\-needed\-entries\fR Do not copy DT_NEEDED tags from shared libraries
+.TP
+\fB\-\-cref\fR
+Output cross reference table
+.TP
+\fB\-\-no\-cref\fR
+Do not output cross reference table
+.TP
+\fB\-\-ctors\-in\-init\-array\fR
+Use DT_INIT_ARRAY for all constructors (default)
+.TP
+\fB\-\-no\-ctors\-in\-init\-array\fR
+Handle constructors as directed by compiler
+.TP
+\fB\-d\fR, \fB\-\-define\-common\fR
+Define common symbols
+.TP
+\fB\-\-no\-define\-common\fR
+Do not define common symbols
+.TP
+\fB\-dc\fR
+Alias for \fB\-d\fR
+.TP
+\fB\-dp\fR
+Alias for \fB\-d\fR
+.TP
+\fB\-\-debug\fR [all,files,script,task][,...]
+Turn on debugging
+.TP
+\fB\-\-defsym\fR SYMBOL=EXPRESSION
+Define a symbol
+.TP
+\fB\-\-demangle\fR [=STYLE]
+Demangle C++ symbols in log messages
+.TP
+\fB\-\-no\-demangle\fR
+Do not demangle C++ symbols in log messages
+.TP
+\fB\-\-detect\-odr\-violations\fR
+Look for violations of the C++ One Definition Rule
+.TP
+\fB\-\-no\-detect\-odr\-violations\fR
+Do not look for violations of the C++ One Definition Rule
+.TP
+\fB\-x\fR, \fB\-\-discard\-all\fR
+Delete all local symbols
+.TP
+\fB\-X\fR, \fB\-\-discard\-locals\fR
+Delete all temporary local symbols
+.TP
+\fB\-\-dynamic\-list\-data\fR
+Add data symbols to dynamic symbols
+.TP
+\fB\-\-dynamic\-list\-cpp\-new\fR
+Add C++ operator new/delete to dynamic symbols
+.HP
+\fB\-\-dynamic\-list\-cpp\-typeinfo\fR Add C++ typeinfo to dynamic symbols
+.TP
+\fB\-\-dynamic\-list\fR FILE
+Read a list of dynamic symbols
+.HP
+\fB\-e\fR ADDRESS, \fB\-\-entry\fR ADDRESS Set program start address
+.TP
+\fB\-\-exclude\-libs\fR lib,lib ...
+Exclude libraries from automatic export
+.TP
+\fB\-E\fR, \fB\-\-export\-dynamic\fR
+Export all dynamic symbols
+.TP
+\fB\-\-no\-export\-dynamic\fR
+Do not export all dynamic symbols (default)
+.TP
+\fB\-EB\fR
+Link big\-endian objects.
+.TP
+\fB\-EL\fR
+Link little\-endian objects.
+.TP
+\fB\-\-eh\-frame\-hdr\fR
+Create exception frame header
+.TP
+\fB\-\-no\-enum\-size\-warning\fR
+(ARM only) Do not warn about objects with incompatible enum sizes
+.HP
+\fB\-f\fR SHLIB, \fB\-\-auxiliary\fR SHLIB Auxiliary filter for shared object symbol table
+.TP
+\fB\-F\fR SHLIB, \fB\-\-filter\fR SHLIB
+Filter for shared object symbol table
+.TP
+\fB\-\-fatal\-warnings\fR
+Treat warnings as errors
+.TP
+\fB\-\-no\-fatal\-warnings\fR
+Do not treat warnings as errors
+.TP
+\fB\-fini\fR SYMBOL
+Call SYMBOL at unload\-time
+.TP
+\fB\-\-fix\-cortex\-a8\fR
+(ARM only) Fix binaries for Cortex\-A8 erratum.
+.TP
+\fB\-\-no\-fix\-cortex\-a8\fR
+(ARM only) Do not fix binaries for Cortex\-A8 erratum.
+.TP
+\fB\-\-fix\-arm1176\fR
+(ARM only) Fix binaries for ARM1176 erratum.
+.TP
+\fB\-\-no\-fix\-arm1176\fR
+(ARM only) Do not fix binaries for ARM1176 erratum.
+.TP
+\fB\-\-merge\-exidx\-entries\fR
+(ARM only) Merge exidx entries in debuginfo.
+.TP
+\fB\-\-no\-merge\-exidx\-entries\fR
+(ARM only) Do not merge exidx entries in debuginfo.
+.TP
+\fB\-\-fix\-v4bx\fR
+(ARM only) Rewrite BX rn as MOV pc, rn for ARMv4
+.TP
+\fB\-\-fix\-v4bx\-interworking\fR
+(ARM only) Rewrite BX rn branch to ARMv4 interworking veneer
+.TP
+\fB\-g\fR
+Ignored
+.TP
+\fB\-\-gnu\-unique\fR
+Enable STB_GNU_UNIQUE symbol binding (default)
+.TP
+\fB\-\-no\-gnu\-unique\fR
+Disable STB_GNU_UNIQUE symbol binding
+.TP
+\fB\-h\fR FILENAME, \fB\-soname\fR FILENAME
+Set shared library name
+.TP
+\fB\-\-hash\-bucket\-empty\-fraction\fR FRACTION
+Min fraction of empty buckets in dynamic hash
+.TP
+\fB\-\-hash\-style\fR [sysv,gnu,both]
+Dynamic hash style
+.TP
+\fB\-I\fR PROGRAM, \fB\-\-dynamic\-linker\fR PROGRAM
+Set dynamic linker path
+.TP
+\fB\-\-incremental\fR
+Do an incremental link if possible; otherwise, do a full link and prepare output for incremental linking
+.TP
+\fB\-\-no\-incremental\fR
+Do a full link (default)
+.TP
+\fB\-\-incremental\-full\fR
+Do a full link and prepare output for incremental linking
+.TP
+\fB\-\-incremental\-update\fR
+Do an incremental link; exit if not possible
+.TP
+\fB\-\-incremental\-base\fR FILE
+Set base file for incremental linking (default is output file)
+.TP
+\fB\-\-incremental\-changed\fR
+Assume files changed
+.TP
+\fB\-\-incremental\-unchanged\fR
+Assume files didn't change
+.TP
+\fB\-\-incremental\-unknown\fR
+Use timestamps to check files (default)
+.TP
+\fB\-\-incremental\-startup\-unchanged\fR
+Assume startup files unchanged (files preceding this option)
+.HP
+\fB\-\-incremental\-patch\fR PERCENT Amount of extra space to allocate for patches
+.TP
+\fB\-init\fR SYMBOL
+Call SYMBOL at load\-time
+.TP
+\fB\-\-just\-symbols\fR FILE
+Read only symbol values from FILE
+.TP
+\fB\-\-map\-whole\-files\fR
+Map whole files to memory (default on 64\-bit hosts)
+.TP
+\fB\-\-no\-map\-whole\-files\fR
+Map relevant file parts to memory (default on 32\-bit hosts)
+.TP
+\fB\-\-keep\-files\-mapped\fR
+Keep files mapped across passes (default)
+.TP
+\fB\-\-no\-keep\-files\-mapped\fR
+Release mapped files after each pass
+.TP
+\fB\-\-ld\-generated\-unwind\-info\fR
+Generate unwind information for PLT (default)
+.TP
+\fB\-\-no\-ld\-generated\-unwind\-info\fR
+Do not generate unwind information for PLT
+.TP
+\fB\-l\fR LIBNAME, \fB\-\-library\fR LIBNAME
+Search for library LIBNAME
+.TP
+\fB\-L\fR DIR, \fB\-\-library\-path\fR DIR
+Add directory to search path
+.TP
+\fB\-nostdlib\fR
+Only search directories specified on the command line.
+.TP
+\fB\-\-rosegment\fR
+Put read\-only non\-executable sections in their own segment
+.TP
+\fB\-m\fR EMULATION
+Set GNU linker emulation; obsolete
+.TP
+\fB\-M\fR, \fB\-\-print\-map\fR
+Write map file on standard output
+.TP
+\fB\-Map\fR MAPFILENAME
+Write map file
+.TP
+\fB\-n\fR, \fB\-\-nmagic\fR
+Do not page align data
+.TP
+\fB\-N\fR, \fB\-\-omagic\fR
+Do not page align data, do not make text readonly
+.TP
+\fB\-\-no\-omagic\fR
+Page align data, make text readonly
+.TP
+\fB\-\-enable\-new\-dtags\fR
+Enable use of DT_RUNPATH and DT_FLAGS
+.TP
+\fB\-\-disable\-new\-dtags\fR
+Disable use of DT_RUNPATH and DT_FLAGS
+.TP
+\fB\-\-noinhibit\-exec\fR
+Create an output file even if errors occur
+.TP
+\fB\-\-no\-undefined\fR
+Report undefined symbols (even with \fB\-\-shared\fR)
+.TP
+\fB\-o\fR FILE, \fB\-\-output\fR FILE
+Set output file name
+.TP
+\fB\-O\fR LEVEL, \fB\-optimize\fR LEVEL
+Optimize output file size
+.TP
+\fB\-\-oformat\fR [binary]
+Set output format
+.TP
+\fB\-p\fR
+(ARM only) Ignore for backward compatibility
+.TP
+\fB\-pie\fR
+Create a position independent executable
+.TP
+\fB\-\-pic\-executable\fR
+Create a position independent executable
+.TP
+\fB\-no\-pipeline\-knowledge\fR
+(ARM only) Ignore for backward compatibility
+.TP
+\fB\-\-plugin\fR PLUGIN
+Load a plugin library
+.TP
+\fB\-\-plugin\-opt\fR OPTION
+Pass an option to the plugin
+.TP
+\fB\-\-preread\-archive\-symbols\fR
+Preread archive symbols when multi\-threaded
+.TP
+\fB\-\-print\-output\-format\fR
+Print default output format
+.TP
+\fB\-\-print\-symbol\-counts\fR FILENAME
+Print symbols defined and used for each input
+.TP
+\fB\-Qy\fR
+Ignored for SVR4 compatibility
+.TP
+\fB\-q\fR, \fB\-\-emit\-relocs\fR
+Generate relocations in output
+.TP
+\fB\-r\fR, \fB\-relocatable\fR
+Generate relocatable output
+.TP
+\fB\-i\fR
+Synonym for \fB\-r\fR
+.TP
+\fB\-\-relax\fR
+Relax branches on certain targets
+.TP
+\fB\-\-retain\-symbols\-file\fR FILE
+keep only symbols listed in this file
+.TP
+\fB\-R\fR DIR
+Add DIR to runtime search path
+.TP
+\fB\-rpath\fR DIR
+Add DIR to runtime search path
+.TP
+\fB\-\-rpath\-link\fR DIR
+Add DIR to link time shared library search path
+.TP
+\fB\-\-section\-ordering\-file\fR FILENAME
+Layout sections in the order specified.
+.TP
+\fB\-\-section\-start\fR SECTION=ADDRESS
+Set address of section
+.TP
+\fB\-\-sort\-common\fR [={ascending,descending}]
+Sort common symbols by alignment
+.TP
+\fB\-\-spare\-dynamic\-tags\fR COUNT
+Dynamic tag slots to reserve (default 5)
+.TP
+\fB\-s\fR, \fB\-\-strip\-all\fR
+Strip all symbols
+.TP
+\fB\-S\fR, \fB\-\-strip\-debug\fR
+Strip debugging information
+.TP
+\fB\-\-strip\-debug\-non\-line\fR
+Emit only debug line number information
+.TP
+\fB\-\-strip\-debug\-gdb\fR
+Strip debug symbols that are unused by gdb (at least versions <= 6.7)
+.TP
+\fB\-\-strip\-lto\-sections\fR
+Strip LTO intermediate code sections
+.TP
+\fB\-\-stub\-group\-size\fR SIZE
+(ARM only) The maximum distance from instructions in a group of sections to their stubs.  Negative values mean stubs are always after the group. 1 means using default size.
+.TP
+\fB\-\-no\-keep\-memory\fR
+Use less memory and more disk I/O (included only for compatibility with GNU ld)
+.TP
+\fB\-G\fR, \fB\-shared\fR
+Generate shared library
+.TP
+\fB\-Bshareable\fR
+Generate shared library
+.TP
+\fB\-\-split\-stack\-adjust\-size\fR SIZE
+Stack size when \fB\-fsplit\-stack\fR function calls non\-split
+.TP
+\fB\-static\fR
+Do not link against shared libraries
+.TP
+\fB\-\-icf\fR [none,all,safe]
+Identical Code Folding. '\-\-icf=safe' Folds ctors, dtors and functions whose pointers are definitely not taken.
+.TP
+\fB\-\-icf\-iterations\fR COUNT
+Number of iterations of ICF (default 2)
+.TP
+\fB\-\-print\-icf\-sections\fR
+List folded identical sections on stderr
+.TP
+\fB\-\-no\-print\-icf\-sections\fR
+Do not list folded identical sections
+.TP
+\fB\-\-keep\-unique\fR SYMBOL
+Do not fold this symbol during ICF
+.TP
+\fB\-\-gc\-sections\fR
+Remove unused sections
+.TP
+\fB\-\-no\-gc\-sections\fR
+Don't remove unused sections (default)
+.TP
+\fB\-\-print\-gc\-sections\fR
+List removed unused sections on stderr
+.TP
+\fB\-\-no\-print\-gc\-sections\fR
+Do not list removed unused sections
+.TP
+\fB\-\-stats\fR
+Print resource usage statistics
+.TP
+\fB\-\-sysroot\fR DIR
+Set target system root directory
+.TP
+\fB\-t\fR, \fB\-\-trace\fR
+Print the name of each input file
+.TP
+\fB\-T\fR FILE, \fB\-\-script\fR FILE
+Read linker script
+.TP
+\fB\-\-threads\fR
+Run the linker multi\-threaded
+.TP
+\fB\-\-no\-threads\fR
+Do not run the linker multi\-threaded
+.TP
+\fB\-\-thread\-count\fR COUNT
+Number of threads to use
+.TP
+\fB\-\-thread\-count\-initial\fR COUNT
+Number of threads to use in initial pass
+.HP
+\fB\-\-thread\-count\-middle\fR COUNT Number of threads to use in middle pass
+.TP
+\fB\-\-thread\-count\-final\fR COUNT
+Number of threads to use in final pass
+.TP
+\fB\-Tbss\fR ADDRESS
+Set the address of the bss segment
+.TP
+\fB\-Tdata\fR ADDRESS
+Set the address of the data segment
+.TP
+\fB\-Ttext\fR ADDRESS
+Set the address of the text segment
+.TP
+\fB\-u\fR SYMBOL, \fB\-\-undefined\fR SYMBOL
+Create undefined reference to SYMBOL
+.TP
+\fB\-\-unresolved\-symbols\fR ignore\-all,report\-all,ignore\-in\-object\-files,ignore\-in\-shared\-libs
+How to handle unresolved symbols
+.TP
+\fB\-\-verbose\fR
+Synonym for \fB\-\-debug\fR=\fIfiles\fR
+.TP
+\fB\-\-version\-script\fR FILE
+Read version script
+.TP
+\fB\-\-warn\-common\fR
+Warn about duplicate common symbols
+.TP
+\fB\-\-no\-warn\-common\fR
+Do not warn about duplicate common symbols (default)
+.TP
+\fB\-\-warn\-constructors\fR
+Ignored
+.TP
+\fB\-\-no\-warn\-constructors\fR
+Ignored
+.TP
+\fB\-\-warn\-execstack\fR
+Warn if the stack is executable
+.TP
+\fB\-\-no\-warn\-execstack\fR
+Do not warn if the stack is executable (default)
+.TP
+\fB\-\-no\-warn\-mismatch\fR
+Don't warn about mismatched input files
+.TP
+\fB\-\-warn\-multiple\-gp\fR
+Ignored
+.TP
+\fB\-\-warn\-search\-mismatch\fR
+Warn when skipping an incompatible library
+.TP
+\fB\-\-no\-warn\-search\-mismatch\fR
+Don't warn when skipping an incompatible library
+.TP
+\fB\-\-warn\-shared\-textrel\fR
+Warn if text segment is not shareable
+.TP
+\fB\-\-no\-warn\-shared\-textrel\fR
+Do not warn if text segment is not shareable (default)
+.TP
+\fB\-\-warn\-unresolved\-symbols\fR
+Report unresolved symbols as warnings
+.TP
+\fB\-\-error\-unresolved\-symbols\fR
+Report unresolved symbols as errors
+.TP
+\fB\-\-no\-wchar\-size\-warning\fR
+(ARM only) Do not warn about objects with incompatible wchar_t sizes
+.TP
+\fB\-\-whole\-archive\fR
+Include all archive contents
+.TP
+\fB\-\-no\-whole\-archive\fR
+Include only needed archive contents
+.TP
+\fB\-\-wrap\fR SYMBOL
+Use wrapper functions for SYMBOL
+.TP
+\fB\-y\fR SYMBOL, \fB\-\-trace\-symbol\fR SYMBOL
+Trace references to symbol
+.TP
+\fB\-\-undefined\-version\fR
+Allow unused version in script (default)
+.TP
+\fB\-\-no\-undefined\-version\fR
+Do not allow unused version in script
+.TP
+\fB\-Y\fR PATH
+Default search path for Solaris compatibility
+.TP
+\-(, \fB\-\-start\-group\fR
+Start a library search group
+.TP
+\-), \fB\-\-end\-group\fR
+End a library search group
+.TP
+\fB\-\-start\-lib\fR
+Start a library
+.TP
+\fB\-\-end\-lib\fR
+End a library
+.TP
+\fB\-z\fR combreloc
+Sort dynamic relocs
+.TP
+\fB\-z\fR nocombreloc
+Do not sort dynamic relocs
+.TP
+\fB\-z\fR common\-page\-size=SIZE
+Set common page size to SIZE
+.TP
+\fB\-z\fR defs
+Report undefined symbols (even with \fB\-\-shared\fR)
+.TP
+\fB\-z\fR execstack
+Mark output as requiring executable stack
+.TP
+\fB\-z\fR initfirst
+Mark DSO to be initialized first at runtime
+.TP
+\fB\-z\fR interpose
+Mark object to interpose all DSOs but executable
+.TP
+\fB\-z\fR lazy
+Mark object for lazy runtime binding (default)
+.TP
+\fB\-z\fR loadfltr
+Mark object requiring immediate process
+.TP
+\fB\-z\fR max\-page\-size=SIZE
+Set maximum page size to SIZE
+.TP
+\fB\-z\fR muldefs
+Allow multiple definitions of symbols
+.TP
+\fB\-z\fR nocopyreloc
+Do not create copy relocs
+.TP
+\fB\-z\fR nodefaultlib
+Mark object not to use default search paths
+.TP
+\fB\-z\fR nodelete
+Mark DSO non\-deletable at runtime
+.TP
+\fB\-z\fR nodlopen
+Mark DSO not available to dlopen
+.TP
+\fB\-z\fR nodump
+Mark DSO not available to dldump
+.TP
+\fB\-z\fR noexecstack
+Mark output as not requiring executable stack
+.TP
+\fB\-z\fR now
+Mark object for immediate function binding
+.TP
+\fB\-z\fR origin
+Mark DSO to indicate that needs immediate $ORIGIN processing at runtime
+.TP
+\fB\-z\fR relro
+Where possible mark variables read\-only after relocation
+.TP
+\fB\-z\fR norelro
+Don't mark variables read\-only after relocation
+.TP
+\fB\-z\fR text
+Do not permit relocations in read\-only segments
+.TP
+\fB\-z\fR notext
+Permit relocations in read\-only segments (default)
+.TP
+\fB\-z\fR textoff
+Permit relocations in read\-only segments (default)
+.TP
+\fB\-z\fR buildd
+Dummy z option
+.PP
+ld.gold: supported targets: elf32\-bigarm elf32\-littlearm elf64\-powerpcle elf64\-powerpc elf32\-powerpcle elf32\-powerpc elf64\-sparc elf32\-sparc elf64\-x86\-64 elf64\-x86\-64\-freebsd elf32\-i386 elf32\-i386\-freebsd
+ld.gold: supported emulations: armelfb armelf elf64lppc elf64ppc elf32lppc elf32ppc elf64_sparc elf32_sparc elf_x86_64 elf_i386
+.SH "REPORTING BUGS"
+Report bugs to <http://www.sourceware.org/bugzilla/>
+.SH COPYRIGHT
+Copyright 2011 Free Software Foundation, Inc.
+This program is free software; you may redistribute it under the terms of
+the GNU General Public License version 3 or (at your option) a later version.
+This program has absolutely no warranty.
+.SH "SEE ALSO"
+The full documentation for
+.B gold
+is maintained as a Texinfo manual.  If the
+.B info
+and
+.B gold
+programs are properly installed at your site, the command
+.IP
+.B info gold
+.PP
+should give you access to the complete manual.
--- binutils-2.22.orig/debian/binutils.postrm
+++ binutils-2.22/debian/binutils.postrm
@@ -0,0 +1,7 @@
+#! /bin/sh
+
+set -e
+
+if [ "$1" = "remove" ]; then
+	ldconfig
+fi
--- binutils-2.22.orig/debian/binutils-hppa64.overrides
+++ binutils-2.22/debian/binutils-hppa64.overrides
@@ -0,0 +1,8 @@
+# don't warn about missing man pages for diverted binaries
+binutils-hppa64 binary: binary-without-manpage
+
+# the API of the shared libs is not public, don't care about the name
+binutils-hppa64 binary: package-name-doesnt-match-sonames
+
+# it's a cross toolchain
+binutils-hppa64 binary: binary-or-shlib-defines-rpath
--- binutils-2.22.orig/debian/binutils.presubj
+++ binutils-2.22/debian/binutils.presubj
@@ -0,0 +1,25 @@
+When reporting binutils errors, please provide the actual input files
+and options given to the tool (gas, objcopy, ld, etc.) at run time.
+This can mean the difference between a pleasant debugging experience
+and a heisenbug that becomes unreproducible when gcc's code generation
+changes.
+
+For example, to create a testcase for an "ld" problem, first find the
+"gcc" command line that triggers the error:
+
+ $ make
+ ... output ending in an error ...
+ $ make V=1 VERBOSE=1 2>&1 | head -1
+
+Add "-v" after gcc and run it again.  One of the early output lines
+will be an invocation of collect2.  Replace collect2 with "ld" and
+it should reproduce the same error.  If you collect all the objects
+(including system libraries) mentioned on the "ld" command line in a
+tarball and send it along with the ld command line then that is a
+testcase.
+
+A possible step after that is to try omitting some objects from the
+ld command line and see if it still triggers the same error, but
+that's just icing on the cake.
+
+Happy debugging!
--- binutils-2.22.orig/debian/binutils-gold.overrides
+++ binutils-2.22/debian/binutils-gold.overrides
@@ -0,0 +1,5 @@
+# don't warn about missing man pages for diverted binaries
+binutils-gold binary: binary-without-manpage
+
+# the API of the shared libs is not public, don't care about the name
+binutils-multiarch binary: package-name-doesnt-match-sonames
--- binutils-2.22.orig/debian/binutils.overrides
+++ binutils-2.22/debian/binutils.overrides
@@ -0,0 +1,5 @@
+# the API of the shared libs is not public, don't care about the name
+binutils binary: package-name-doesnt-match-sonames
+
+# big tables
+binutils binary: manpage-has-errors-from-man
--- binutils-2.22.orig/debian/copyright
+++ binutils-2.22/debian/copyright
@@ -0,0 +1,44 @@
+This is the Debian GNU/Linux prepackaged version of the GNU assembler,
+linker, and binary utilities.
+
+This package was put together by me, James Troup <james@nocrew.org>,
+from sources, which I obtained from:
+
+  ftp://ftp.gnu.org/pub/gnu/binutils/
+
+and:
+
+  cvs://:pserver:anoncvs@sources.redhat.com:/cvs/src
+
+It was previously maintained by Christopher C. Chimelis <chris@debian.org>
+
+GNU Binutils is Copyright (C) 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997,
+1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software
+Foundation, Inc.
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 3 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+   MA 02110-1301, USA.  */
+
+On Debian GNU/Linux systems, the complete text of the GNU General
+Public License can be found in `/usr/share/common-licenses/GPL'
+and `/usr/share/common-licenses/LGPL'.
+
+The binutils manuals and associated documentation are also Copyright
+(C) Free Software Foundation, Inc.  They are distributed under the GNU
+Free Documentation License Version 1.3 or any later version published
+by the Free Software Foundation, with no Invariant Sections, with no
+with no Front-Cover Texts, and with no Back-Cover Texts.
+On Debian GNU/Linux systems, the complete text of the GFDL can be found
+in `/usr/share/common-licenses/GFDL'.
--- binutils-2.22.orig/debian/binutils-spu.postrm
+++ binutils-2.22/debian/binutils-spu.postrm
@@ -0,0 +1,7 @@
+#! /bin/sh
+
+set -e
+
+if [ "$1" = "remove" ]; then
+	ldconfig
+fi
--- binutils-2.22.orig/debian/control.cross.in
+++ binutils-2.22/debian/control.cross.in
@@ -0,0 +1,11 @@
+Package: binutils-__TARGET__
+Architecture: any
+Depends: binutils, ${shlibs:Depends}
+Suggests: binutils-doc (= ${Source-Version})
+Priority: extra
+Description: GNU binary utilities, for __TARGET__ target
+ This package provides GNU assembler, linker and binary utilities
+ for __TARGET__ target, for use in a cross-compilation environment.
+ .
+ You don't need this package unless you plan to cross-compile programs
+ for __TARGET__.
--- binutils-2.22.orig/debian/changelog
+++ binutils-2.22/debian/changelog
@@ -0,0 +1,3611 @@
+binutils (2.22-8.29.201403142056) ucs4-0-0-0; urgency=low
+
+  * UCS auto build. No patches were applied to the original source package
+
+ -- Univention builddaemon <buildd@univention.de>  Fri, 14 Mar 2014 20:56:25 +0100
+
+binutils (2.22-8) unstable; urgency=low
+
+  * Fix PR other/54411: integer overflow in objalloc_alloc.
+    CVE-2012-3509. Closes: #688951.
+
+ -- Matthias Klose <doko@debian.org>  Sat, 23 Feb 2013 02:28:11 +0100
+
+binutils (2.22-7.1) unstable; urgency=low
+
+  * Non-maintainer upload.
+    ACK'd NMU by Matthias. Thank you.
+  * Fix PR binutils/14319. (Closes: #681597)
+    Add patches/pr14319.diff.
+
+ -- Nobuhiro Iwamatsu <iwamatsu@debian.org>  Sat, 14 Jul 2012 23:31:31 +0900
+
+binutils (2.22-7) unstable; urgency=low
+
+  * Update from the binutils-2_22-branch 20120704.
+    - Fix PR ld/13991 and a gold issue on ARM.
+  * Fix strict-alias warning building libiberty/md5.c. Closes: #674831.
+  * Enable x86_64-pep in binutils-multiarch. Closes: #675364.
+
+ -- Matthias Klose <doko@debian.org>  Wed, 04 Jul 2012 11:00:14 +0200
+
+binutils (2.22-6.1) unstable; urgency=low
+
+  * Non-maintainer upload.
+  * Fix PR ld/14069 (hurd-i386) (Closes: #671804).
+
+ -- Samuel Thibault <sthibault@debian.org>  Fri, 18 May 2012 11:52:14 +0200
+
+binutils (2.22-6) unstable; urgency=low
+
+  * Update from the binutils-2_22-branch 20120307.
+    - Fix PR ld/12161 (avr), PR binutils/13622 (readelf crash),
+      PR binutils/13476 (hppa), PR ld/13387 (hppa), 
+  * Fix typo in elf64-x86-64.c, follow-up patch to PR ld/13302.
+
+ -- Matthias Klose <doko@debian.org>  Thu, 08 Mar 2012 18:52:20 +0100
+
+binutils (2.22-5) unstable; urgency=low
+
+  * Update from the binutils-2_22-branch 20120124.
+    - Fix PR ld/13581 (x32).
+  * Fix PR gas/13449 (ARM), taken from the trunk.
+
+ -- Matthias Klose <doko@debian.org>  Tue, 24 Jan 2012 21:26:43 +0100
+
+binutils (2.22-4) unstable; urgency=low
+
+  * Don't bump the soversion (revert the change in 2.22-3).
+  * Apply proposed patch for PR binutils/13534, allowing ar to handle
+    files bigger than 2GB (Francois Gouget). Closes: #652887).
+  * Recognize DW_LANG_Go in readelf (backport from trunk).
+
+ -- Matthias Klose <doko@debian.org>  Sat, 07 Jan 2012 09:07:25 +0100
+
+binutils (2.22-3) unstable; urgency=low
+
+  * Update from the binutils-2_22-branch 20120102.
+    - gold updates.
+    - mips updates.
+
+ -- Matthias Klose <doko@debian.org>  Tue, 03 Jan 2012 06:06:20 +0100
+
+binutils (2.22-2) unstable; urgency=low
+
+  * Update from the binutils-2_22-branch 20111211.
+  * Fix build failure with make 3.82 (Daniel Schepler). Closes: #650064.
+
+ -- Matthias Klose <doko@debian.org>  Sun, 11 Dec 2011 16:30:14 +0000
+
+binutils (2.22-1) unstable; urgency=low
+
+  * Binutils 2.22 release.
+
+ -- Matthias Klose <doko@debian.org>  Mon, 21 Nov 2011 16:50:53 +0100
+
+binutils (2.21.90.20111025-1) unstable; urgency=low
+
+  * Snapshot, taken from the binutils-2_22-branch 20111025.
+  * Fix lintian warnings.
+
+ -- Matthias Klose <doko@debian.org>  Tue, 25 Oct 2011 15:06:46 +0200
+
+binutils (2.21.90.20111019-3) unstable; urgency=low
+
+  * Fix PR ld/13302, taken from the trunk.
+
+ -- Matthias Klose <doko@debian.org>  Sun, 23 Oct 2011 13:15:07 +0200
+
+binutils (2.21.90.20111019-2) unstable; urgency=low
+
+  * Fix PR ld/13287, taken from the trunk. LP: #872687.
+
+ -- Matthias Klose <doko@debian.org>  Thu, 20 Oct 2011 12:29:18 +0200
+
+binutils (2.21.90.20111019-1) unstable; urgency=low
+
+  * Snapshot, taken from the binutils-2_22-branch 20111019.
+
+ -- Matthias Klose <doko@debian.org>  Wed, 19 Oct 2011 22:25:05 +0200
+
+binutils (2.21.90.20111004-2) unstable; urgency=low
+
+  * Fix PR ld/13250, preserve the maximum alignment and size for common
+    symbols (H.J. Lu). Closes: #608901. LP: #697229.
+
+ -- Matthias Klose <doko@debian.org>  Thu, 06 Oct 2011 08:06:04 +0200
+
+binutils (2.21.90.20111004-1) unstable; urgency=medium
+
+  * Snapshot, taken from the binutils-2_22-branch 20111004.
+  * Fix PR ld/13195, taken from the trunk. Closes: #643858, #644183.
+
+ -- Matthias Klose <doko@debian.org>  Tue, 04 Oct 2011 12:12:16 +0200
+
+binutils (2.21.53.20110922-1) unstable; urgency=low
+
+  * Snapshot, taken from the binutils-2_22-branch 20110924.
+
+ -- Matthias Klose <doko@debian.org>  Sat, 24 Sep 2011 09:55:38 +0200
+
+binutils (2.21.53.20110910-1) unstable; urgency=low
+
+  * Snapshot, taken from the trunk 20110910.
+    - Fix PR gas/13024. Closes: #635592.
+  * Build with proposed patch for PR ld/12965.
+  * Don't ship .la files in the cross binutils packages.
+  * For native builds, add the multiarch directories to the default
+    search path.
+
+ -- Matthias Klose <doko@debian.org>  Sat, 10 Sep 2011 13:06:01 +0200
+
+binutils (2.21.53.20110823-3) unstable; urgency=low
+
+  * Revert the last change:
+    - Default to --hash-style=both in ld.bfd and ld.gold.
+
+ -- Matthias Klose <doko@debian.org>  Thu, 25 Aug 2011 10:48:28 +0200
+
+binutils (2.21.53.20110823-2) unstable; urgency=low
+
+  * Default to --hash-style=both in ld.bfd and ld.gold.
+  * Fix s390x build (Aurelian Jarno). Closes: #635167.
+
+ -- Matthias Klose <doko@debian.org>  Wed, 24 Aug 2011 13:06:48 +0200
+
+binutils (2.21.53.20110823-1) unstable; urgency=low
+
+  * Snapshot, taken from the trunk 20110823.
+    - ld --no-copy-dt-needed-entries/--no-add-needed is now the default.
+
+ -- Matthias Klose <doko@debian.org>  Tue, 23 Aug 2011 21:23:38 +0200
+
+binutils (2.21.53.20110805-1) unstable; urgency=low
+
+  * Snapshot, taken from the trunk 20110805.
+
+ -- Matthias Klose <doko@ubuntu.com>  Fri, 05 Aug 2011 12:25:49 +0200
+
+binutils (2.21.53.20110729-1) unstable; urgency=low
+
+  * Snapshot, taken from the trunk 20110729.
+  * Fix s390x build (Aurelian Jarno). Closes: #635167.
+
+ -- Matthias Klose <doko@debian.org>  Fri, 29 Jul 2011 19:04:46 +0200
+
+binutils (2.21.53.20110720-1) unstable; urgency=low
+
+  * Snapshot, taken from the trunk 20110720.
+    - Fix PR ld/12978. Closes: #632681.
+
+ -- Matthias Klose <doko@debian.org>  Wed, 20 Jul 2011 20:54:51 +0200
+
+binutils (2.21.52.20110707-1) unstable; urgency=low
+
+  * Snapshot, taken from the trunk 20110707.
+    - Fix build failure on mips/mipsel. Closes: #632690.
+    - Fix issues on kfreebsd-amd64. Closes: #632671.
+
+ -- Matthias Klose <doko@debian.org>  Thu, 07 Jul 2011 06:48:33 +0200
+
+binutils (2.21.52.20110703-1) unstable; urgency=low
+
+  * Snapshot, taken from the trunk 20110703.
+
+ -- Matthias Klose <doko@debian.org>  Sun, 03 Jul 2011 21:56:44 +0200
+
+binutils (2.21.52.20110606-2) unstable; urgency=low
+
+  * Fix PR ld/12845, taken from the trunk. Closes: #628685.
+
+ -- Matthias Klose <doko@debian.org>  Thu, 09 Jun 2011 12:45:15 +0200
+
+binutils (2.21.52.20110606-1) unstable; urgency=low
+
+  * Snapshot, taken from the trunk 20110606.
+    - Fix PR ld/12833. Closes: #628770.
+    - Fix spelling errors. Closes: #604696.
+  * Let gold accept a dummy -z buildd-<random-string> option.
+  * Add a /usr/share/bug/binutils/presubj file for reportbug (and symlinks
+    from the other /usr/share/bug/binutils-foo directories) explaining how
+    to make a self-contained testcase (Jonathan Nieder). Closes: #629147.
+  * Fix ld crash cause of invalid pointer in munmap_chunk. Closes: #628916.
+
+ -- Matthias Klose <doko@debian.org>  Tue, 07 Jun 2011 00:03:47 +0200
+
+binutils (2.21.51.20110523-1) unstable; urgency=low
+
+  * Snapshot, taken from the trunk 20110523.
+
+ -- Matthias Klose <doko@debian.org>  Mon, 23 May 2011 23:38:52 +0200
+
+binutils (2.21.51.20110421-6) unstable; urgency=low
+
+  [ Marcin Juszkiewicz ]
+  * Use pregenerated ld.gold.1 for cross builds.
+
+  [ Matthias Klose ]
+  * Redefine STRIP and install_binary for cross builds (Ken Werner).
+  * Apply fix for PR ld/12726, taken from the trunk.
+
+ -- Matthias Klose <doko@debian.org>  Thu, 19 May 2011 15:51:22 +0200
+
+binutils (2.21.51.20110421-5) unstable; urgency=medium
+
+  * Use a symlink for /usr/bin/ld, even if gold is not built. Closes: #615262.
+
+ -- Matthias Klose <doko@debian.org>  Tue, 17 May 2011 17:58:17 +0200
+
+binutils (2.21.51.20110421-4) unstable; urgency=low
+
+  * Fix PR ld/12730, taken from the trunk. Closes: #625616.
+  * Cortex A8 workarounds for PLT tail calls (Richard Sandiford).
+
+ -- Matthias Klose <doko@debian.org>  Sun, 08 May 2011 02:06:22 +0200
+
+binutils (2.21.51.20110421-3) unstable; urgency=low
+
+  * Fix segfault in ar, delete_members.
+
+ -- Matthias Klose <doko@debian.org>  Sun, 01 May 2011 17:30:42 +0200
+
+binutils (2.21.51.20110421-2) unstable; urgency=low
+
+  * Fix typo in the patch for PR gas/12698.
+
+ -- Matthias Klose <doko@debian.org>  Wed, 27 Apr 2011 21:33:47 +0200
+
+binutils (2.21.51.20110421-1) unstable; urgency=low
+
+  * Snapshot, taken from the trunk 20110421.
+  * Install a man page for ld.gold, generated by help2man. Closes: #619823.
+  * Apply proposed patch for PR gas/12698. Closes: #623964.
+
+ -- Matthias Klose <doko@debian.org>  Wed, 27 Apr 2011 18:14:39 +0200
+
+binutils (2.21.51.20110419-2) unstable; urgency=low
+
+  * Fix powerpcspe and sparc builds.
+
+ -- Matthias Klose <doko@debian.org>  Tue, 19 Apr 2011 13:47:56 +0200
+
+binutils (2.21.51.20110419-1) unstable; urgency=low
+
+  * Snapshot, taken from the trunk 20110419.
+
+ -- Matthias Klose <doko@debian.org>  Tue, 19 Apr 2011 10:18:14 +0200
+
+binutils (2.21.51.20110409-1) experimental; urgency=low
+
+  * Snapshot, taken from the trunk 20110409.
+
+ -- Matthias Klose <doko@debian.org>  Sat, 09 Apr 2011 13:53:24 +0200
+
+binutils (2.21.51.20110403-1) experimental; urgency=low
+
+  * Snapshot, taken from the trunk 20110403.
+
+ -- Matthias Klose <doko@debian.org>  Sun, 03 Apr 2011 23:54:13 +0200
+
+binutils (2.21.0.20110327-3) unstable; urgency=high
+
+  * Fix architecture field for binutils-gold (powerpcspe).
+  * Add support for arm-*-gnueabihf targets. Closes: #621029.
+  * Fix PR ld/12654: Properly handle R_386_TLS_LDO_32 for PIE. LP: #663294.
+  * Fix PR ld/12637, reloc overflow for R_MIPS_TLS_LDM (Richard Sandiford),
+    taken from the trunk.
+
+ -- Matthias Klose <doko@debian.org>  Sun, 10 Apr 2011 17:23:40 +0200
+
+binutils (2.21.0.20110327-2) unstable; urgency=low
+
+  * Fix architecture field for binutils-gold.
+  * Configure with --disable-werror on armhf.
+
+ -- Matthias Klose <doko@debian.org>  Tue, 29 Mar 2011 19:38:55 +0200
+
+binutils (2.21.0.20110327-1) unstable; urgency=low
+
+  * Update from the 2.21 branch 20110327.
+  * Add multiarch directories to linker search path. Closes: #369064.
+    LP: #738098.
+
+ -- Matthias Klose <doko@debian.org>  Sun, 27 Mar 2011 22:32:57 +0100
+
+binutils (2.21.0.20110322-1) unstable; urgency=low
+
+  * Update from the 2.21 branch 20110322.
+  * S/390: Make as to accept all instructions if no -march option given.
+    taken from the trunk (Aurelian Jarno). Closes: #618751.
+  * Extend support for armhf (Loic Minier).
+    - debian/control.in, debian/control, debian/rules: Enable gold for armhf.
+    - debian/rules: Introduce $(CROSS) (set to $(DEB_HOST_GNU_TYPE)- when
+      cross-building) and call $(CROSS)cpp to check whether -marm is needed or
+      not instead of testing for armel; an alternative would be to
+      unconditionally set -marm if DEB_HOST_ARCH_CPU is arm.
+    - debian/rules: commented out -fno-section-anchors CFLAGS handling would
+      also be enabled for armhf.
+    - debian/rules: ignore regressions on armhf as well; note that
+      ignore_regressions is set three times.
+
+ -- Matthias Klose <doko@debian.org>  Tue, 22 Mar 2011 23:12:39 +0100
+
+binutils (2.21.0.20110302-2) unstable; urgency=low
+
+  [ Carlos O'Donell ]
+  * Fix binutils-hppa64 build.
+
+  [ Matthias Klose ]
+  * Fix PR ld/12376 (John David Anglin), taken from the trunk.
+  * Update to the 2.21 branch, 20110310.
+
+ -- Matthias Klose <doko@debian.org>  Thu, 10 Mar 2011 21:35:07 +0100
+
+binutils (2.21.0.20110302-1) unstable; urgency=low
+
+  * Update from the 2.21 branch.
+
+  [ Thorsten Glaser ]
+  * patches/640_m68k_fix-TLS_GD-relocation: new, temp. Closes: #611768.
+
+  [ Matthias Klose ]
+  * On ppc64, look for 32 bit target libraries in /lib32, /usr/lib32 etc.,
+    first.
+
+ -- Matthias Klose <doko@debian.org>  Wed, 02 Mar 2011 02:41:17 +0100
+
+binutils (2.21.0.20110216-2) unstable; urgency=low
+
+  * Upload to unstable.
+
+ -- Matthias Klose <doko@debian.org>  Tue, 22 Feb 2011 20:35:16 +0100
+
+binutils (2.21.0.20110216-1) experimental; urgency=low
+
+  * Update from the 2.21 branch.
+
+ -- Matthias Klose <doko@debian.org>  Wed, 16 Feb 2011 15:54:15 +0100
+
+binutils (2.21-5) experimental; urgency=low
+
+  * Update gold to 1.11, taken from the 2.21 branch.
+  * Add the arm-linux-gnueabi target to binutils-multiarch (Loic Minier).
+
+ -- Matthias Klose <doko@ubuntu.com>  Tue, 25 Jan 2011 00:51:38 +0100
+
+binutils (2.21-4) experimental; urgency=low
+
+  * Fix handling of writable .eh_frame section in gold, taken from the
+    2.21 branch.
+
+ -- Matthias Klose <doko@debian.org>  Wed, 12 Jan 2011 00:42:15 +0100
+
+binutils (2.21-3) experimental; urgency=low
+
+  [ Matthias Klose ]
+  * Don't include `-system' in the bfd version identifier.
+
+  [ Sedat Dilek ]
+  * 160_pr12327.patch: Fix PR ld/12327, taken from the trunk.
+
+ -- Matthias Klose <doko@debian.org>  Thu, 29 Dec 2010 23:51:35 +0100
+
+binutils (2.21-2) experimental; urgency=low
+
+  * Don't install ld.bfd in binutils-multiarch.
+  * Fix assembler bug blocking Thumb-2 kernel builds (CS issue #8775).
+
+ -- Matthias Klose <doko@debian.org>  Fri, 10 Dec 2010 13:45:00 +0100
+
+binutils (2.21-1) experimental; urgency=low
+
+  * binutils 2.21 release.
+
+  [ Marcin Juszkiewicz ]
+  * Enable building gold in cross builds. LP: #686530.
+  * Allow to build only the -source package, and include the version
+    in the package name. LP: #682646.
+
+ -- Matthias Klose <doko@debian.org>  Thu, 09 Dec 2010 23:24:49 +0100
+
+binutils (2.20.90.20101121-1) experimental; urgency=low
+
+  * Update from the binutils 2.21 release branch.
+
+ -- Matthias Klose <doko@debian.org>  Sun, 21 Nov 2010 14:03:14 +0100
+
+binutils (2.20.90.20101105-2) experimental; urgency=low
+
+  * binutils 2.21 prerelease 1.
+
+ -- Matthias Klose <doko@debian.org>  Wed, 10 Nov 2010 01:04:59 +0100
+
+binutils (2.20.51.20101028-1) experimental; urgency=low
+
+  * Snapshot, taken from the trunk 20101028.
+
+ -- Matthias Klose <doko@debian.org>  Thu, 28 Oct 2010 16:57:11 +0200
+
+binutils (2.20.51.20101009-1) experimental; urgency=low
+
+  * Snapshot, taken from the trunk 20101009.
+
+ -- Matthias Klose <doko@debian.org>  Sat, 09 Oct 2010 14:41:08 +0200
+
+binutils (2.20.51.20100925-2) experimental; urgency=low
+
+  * Allow ar scripts to contain ~ in the filename (Zygmunt Krynicki, taken
+    from Linaro). LP: #641488.
+
+ -- Matthias Klose <doko@debian.org>  Thu, 30 Sep 2010 10:20:41 +0200
+
+binutils (2.20.51.20100925-1) experimental; urgency=low
+
+  * Snapshot, taken from the trunk 20100925.
+  * Fix PR ld/10144, mips/ld: non-dynamic relocations refer to dynamic symbol
+    Closes: #519006.
+
+ -- Matthias Klose <doko@debian.org>  Sat, 25 Sep 2010 16:24:20 +0200
+
+binutils (2.20.51.20100908-1) experimental; urgency=low
+
+  * Snapshot, taken from the trunk 20100908.
+  * Link executables statically when `static' is passed in DEB_BUILD_OPTIONS
+    (Jim Heck). Closes: #590101.
+  * Apply proposed patch for PR ld/10340 (ld doesn't honor sysroot prefix
+    for ldscripts). LP: #625320.
+  * Build binutils-hppa64 in cross builds (Al Viro). Closes: #595319.
+  * Fix some lintian warnings.
+
+ -- Matthias Klose <doko@debian.org>  Wed, 08 Sep 2010 16:31:47 +0200
+
+binutils (2.20.51.20100813-1) experimental; urgency=low
+
+  * Snapshot, taken from the trunk 20100813.
+
+  [ Jonathan Nieder ]
+  * Remove ld.bfd from binutils-multiarch (not that useful without an
+    multiarch assembler).
+
+  [ Marcin Juszkiewicz ]
+  * Revert sysroot to / for cross builds. LP: #598389.
+  * Generate debian/control for native and cross builds. LP: #612629.
+  * Provide packaging rules in -source package. LP: #608745.
+
+  [ Matthias Klose ]
+  * Don't apply patches, when PATCHED_SOURCES is set to `yes'.
+  * Proposed patch for PR11889, readelf crashes for malformed binaries
+    (Dan Rosenberg). LP: #614206.
+
+ -- Matthias Klose <doko@debian.org>  Fri, 13 Aug 2010 11:10:14 +0200
+
+binutils (2.20.51.20100710-2) experimental; urgency=medium
+
+  * Don't use configury for cross builds for native builds. LP: #604134.
+
+ -- Matthias Klose <doko@debian.org>  Sun, 11 Jul 2010 10:24:28 +0200
+
+binutils (2.20.51.20100710-1) experimental; urgency=low
+
+  * Snapshot, taken from the trunk 20100710.
+    - Fix PR gas/10531. LP: #599485.
+  * debian/rules: Introduce PF macros (Jim Heck). Closes: #588357.
+
+  [ Marcin Juszkiewicz ]
+  * Don't install documentation files in -cross packages.  Closes: #586636.
+  * Set sysroot to /usr/$(TARGET) for cross builds. LP: #598389.
+
+ -- Matthias Klose <doko@debian.org>  Sat, 10 Jul 2010 10:42:55 +0200
+
+binutils (2.20.51.20100617-1) experimental; urgency=low
+
+  * Snapshot, taken from the trunk 20100617.
+  * Merge 'binary-cross' target into 'binary' one (Marcin Juszkiewicz).
+  * debian/copyright: Update to GFDL 1.3.
+
+ -- Matthias Klose <doko@debian.org>  Thu, 17 Jun 2010 15:20:34 +0200
+
+binutils (2.20.51.20100527-1) experimental; urgency=low
+
+  * Snapshot, taken from the trunk 20100527.
+
+  [ Jonathan Nieder ]
+  * debian/binutils-multiarch.preinst.in: Re-add diversions on reinstall.
+    Closes: #581156.
+  * Remove c++filt from binutils-multiarch.
+  * Rename /usr/bin/ld from multiarch build to ld.bfd. Closes: #582490.
+
+ -- Matthias Klose <doko@debian.org>  Thu, 27 May 2010 10:40:48 +0200
+
+binutils (2.20.51.20100518-1) experimental; urgency=low
+
+  * Snapshot, taken from the trunk 20100518.
+
+ -- Matthias Klose <doko@debian.org>  Tue, 18 May 2010 13:29:45 +0200
+
+binutils (2.20.51.20100428-1) experimental; urgency=low
+
+  * Snapshot, taken from the trunk 20100428.
+
+ -- Matthias Klose <doko@debian.org>  Wed, 28 Apr 2010 10:07:28 +0200
+
+binutils (2.20.51.20100418-2) experimental; urgency=low
+
+  * Add upper dependency 
+
+ -- Matthias Klose <doko@debian.org>  Sun, 18 Apr 2010 20:52:41 +0200
+
+binutils (2.20.51.20100418-1) experimental; urgency=low
+
+  * Snapshot, taken from the trunk 20100418.
+  * debian/*.shlibs.in: Automate upstream version changes.
+  * Configure native build --with-sysroot=/. Closes: #556126.
+  * Move the ld.gold binary into the binutils package, just keep the
+    diversion (ld) in the binutils-gold package.
+  * Linker selection: ld is used by default, to use the gold linker,
+    pass -fuse-linker-plugin (no other side effects if -flto/-fwhopr
+    is not passed). To force ld.bfd or ld.gold, pass -B/usr/lib/compat-ld
+    for ld.bfd or /usr/lib/gold-ld for ld.gold.
+  * Apply proposed patch for ARM: Add option to disable merging of adjacent
+    exidx unwinder entries.
+
+  [ Jonathan Nieder ]
+  * Clean up diversion handling in binutils-multiarch:
+    - remove diversion of libbfd.a and libopcodes.a.  Closes: #545067.
+    - wait for the new version to be unpacked before removing old diversions
+    - avoid messages from re-adding diversions when upgrading from a version
+      that already has them
+    - remove diversions when downgrading to a version that does not have
+      them (for example, when recovering from an upgrade failure)
+  * Add diversion for ld.bfd in binutils-multiarch.
+  * Update comment in debian/rules to acknowledge that binutils-multiarch
+    includes a linker now.
+  * Add c++filt to binutils-multiarch.
+  * Remove elfedit from binutils-multiarch.
+    Its functionality does not depend on the list of supported targets.
+  * Fixup to version changes handling.
+
+ -- Matthias Klose <doko@debian.org>  Sun, 18 Apr 2010 14:18:59 +0200
+
+binutils (2.20.51.20100405-1) experimental; urgency=low
+
+  * Snapshot, taken from the trunk 20100405.
+  * debian/*.shlibs: Update to the version from the trunk.
+  * Mangle the soname of the binutils libraries to be different than
+    the default name. Closes: #557620.
+    Packaged cross builds should do the same.
+  * Add diversion for elfedit in binutils-multiarch (Jonathan Nieder).
+    Closes: #576126.
+  * Convert to quilt (Sedat Dilek).
+  * Update to proposed patch to enable both gold and ld in a single toolchain.
+    The gold binary is now installed as `gold'. Keep the name `ld.gold'.
+
+ -- Matthias Klose <doko@debian.org>  Mon, 05 Apr 2010 14:49:46 +0200
+
+binutils (2.20.51.20100227-1) experimental; urgency=low
+
+  * Snapshot, taken from the trunk 20100227.
+  * debian/*.shlibs: Update to the version from the trunk.
+
+ -- Matthias Klose <doko@debian.org>  Sat, 27 Feb 2010 08:55:05 +0100
+
+binutils (2.20.51.20100222-1) experimental; urgency=low
+
+  * Snapshot, taken from the trunk 20100222.
+  * debian/*.shlibs: Update to the version from the trunk.
+  * binutils-dev: Install plugin-api.h.
+  * Ignore testsuite regressions on armel.
+
+ -- Matthias Klose <doko@debian.org>  Tue, 23 Feb 2010 02:27:28 +0100
+
+binutils (2.20.51.20100216-1) experimental; urgency=low
+
+  * Snapshot, taken from the trunk 20100216.
+  * debian/*.shlibs: Update to the version from the trunk.
+
+ -- Matthias Klose <doko@debian.org>  Tue, 16 Feb 2010 17:49:47 +0100
+
+binutils (2.20.51.20100112-1) experimental; urgency=low
+
+  * Snapshot, taken from the trunk 20100112.
+  * debian/*.shlibs: Update to the version from the trunk.
+
+ -- Matthias Klose <doko@debian.org>  Tue, 12 Jan 2010 09:06:51 +0100
+
+binutils (2.20.51.20100109-2) experimental; urgency=low
+
+  * Regenerate ld/configure (includes ld in the binutils package).
+
+ -- Matthias Klose <doko@debian.org>  Mon, 11 Jan 2010 01:48:09 +0100
+
+binutils (2.20.51.20100109-1) experimental; urgency=low
+
+  * Snapshot, taken from the trunk 20100109.
+    - PR gold/10980: Support more options available by current GNU ld.
+      Closes: #555886.
+    - Fix PR gold/11072: Discard .gnu_debuglink sections, taken from the trunk.
+      Closes: #563366.
+  * debian/*.shlibs: Update to the version from the trunk.
+
+ -- Matthias Klose <doko@debian.org>  Sat, 09 Jan 2010 14:32:33 +0100
+
+binutils (2.20.51.20100101-1) experimental; urgency=low
+
+  * Snapshot, taken from the trunk 20100101.
+  * debian/*.shlibs: Update to the version from the trunk.
+  * Remove patches available on the trunk.
+
+ -- Matthias Klose <doko@debian.org>  Fri, 01 Jan 2010 18:49:42 +0100
+
+binutils (2.20.1-11) unstable; urgency=medium
+
+  * Fix PR gold/10893, IFUNC support for gold backported from the trunk
+    (Aurelian Jarno). Closes: #585051.
+
+ -- Matthias Klose <doko@debian.org>  Mon, 14 Jun 2010 07:17:13 +0200
+
+binutils (2.20.1-10) unstable; urgency=low
+
+  * Drop build dependency on expect-tcl8.3. Closes: #472964.
+
+ -- Matthias Klose <doko@debian.org>  Sun, 30 May 2010 12:23:46 +0200
+
+binutils (2.20.1-9) unstable; urgency=high
+
+  * [arm] branches to weak symbols, update patch from the trunk.
+
+ -- Matthias Klose <doko@debian.org>  Thu, 06 May 2010 15:42:22 +0200
+
+binutils (2.20.1-8) unstable; urgency=low
+
+  * [arm] branches to weak symbols, patch taken from the trunk.
+
+ -- Matthias Klose <doko@debian.org>  Thu, 29 Apr 2010 20:36:07 +0200
+
+binutils (2.20.1-7) unstable; urgency=low
+
+  * Apply proposed patch for ARM: Add option to disable merging of adjacent
+    exidx unwinder entries. Addresses PR libgcj/40860.
+
+ -- Matthias Klose <doko@debian.org>  Tue, 20 Apr 2010 22:51:35 +0000
+
+binutils (2.20.1-6) unstable; urgency=low
+
+  * Move the ld.gold binary into the binutils package, just keep the
+    diversion (ld) in the binutils-gold package.
+  * Linker selection: ld is used by default, to use the gold linker,
+    pass -fuse-linker-plugin (no other side effects if -flto/-fwhopr
+    is not passed). To force ld.bfd or ld.gold, pass -B/usr/lib/compat-ld
+    for ld.bfd or /usr/lib/gold-ld for ld.gold.
+  * Disable building gold on arm. Use gold from the trunk, if needed.
+  * Backport fixups of Loongson2F from the trunk.
+
+ -- Matthias Klose <doko@debian.org>  Sat, 17 Apr 2010 18:27:45 +0200
+
+binutils (2.20.1-5) unstable; urgency=medium
+
+  * Apply patch for PR gas/11456: Use memcpy to copy overlap memory.
+
+ -- Matthias Klose <doko@debian.org>  Fri, 02 Apr 2010 01:36:07 +0200
+
+binutils (2.20.1-4) unstable; urgency=low
+
+  * Mangle the soname of the binutils libraries to be different than
+    the default name. Closes: #557620.
+    Packaged cross builds should do the same.
+  * Reduce ARM linking time (backport from the trunk).
+  * Apply fix for PR ld/11426, taken from the trunk.
+
+ -- Matthias Klose <doko@debian.org>  Tue, 30 Mar 2010 22:32:12 +0200
+
+binutils (2.20.1-3) unstable; urgency=low
+
+  * binutils-gold: Install the gold binary as `gold' as well, as proposed
+    by a patch to enable both gold and ld in a single toolchain.
+
+ -- Matthias Klose <doko@debian.org>  Sun, 21 Mar 2010 06:43:48 +0100
+
+binutils (2.20.1-2) unstable; urgency=low
+
+  * Fix version in debian/*shlibs to match the release version;
+    the 2.20.1 upstream release identifies as 2.20.1.20100303.
+
+ -- Matthias Klose <doko@debian.org>  Mon, 08 Mar 2010 18:01:22 +0100
+
+binutils (2.20.1-1) unstable; urgency=low
+
+  * New upstream release.
+  * Don't set has_ifunc_symbols if the symbol comes from a shared library
+    (backport from the trunk).
+  * Don't include documentation files in the -cross packages. 
+    Closes: #571522. LP: #514509.
+  * Fix typo in ld documentation. LP: #497923.
+  * Add readelf --unwind support for ARM.
+
+ -- Matthias Klose <doko@debian.org>  Mon, 08 Mar 2010 04:47:46 +0100
+
+binutils (2.20-6) unstable; urgency=low
+
+  * Apply updates from the 2.20 branch up to 20100205
+    - 135_arm_dis_thumb2.dpatch: Remove, applied upstream.
+    - 136_gold_gnu_debuglink.dpatch: Remove, applied upstream.
+  * armel: Fix ld-shared/shared.exp and ld-elfvsb/elfvsb.exp failures
+    (proposed patch, Matthew Gretton-Dann). Closes: #564685. LP: #446478.
+  * Fix PR other/42602: demangling a global constructors symbol.
+    Closes: #561150.
+
+ -- Matthias Klose <doko@debian.org>  Fri, 05 Feb 2010 20:01:20 +0100
+
+binutils (2.20-5) unstable; urgency=low
+
+  * Apply updates from the 2.20 branch up to 20100109
+  * Apply patches from the trunk:
+    - [arm] Prevent disassembler from aborting on an invalid Thumb2 instruction.
+    - Fix PR gold/11072: Discard .gnu_debuglink sections.  Closes: #563366.
+    - Fix PR ld/11138: internal error when DSO is before object files.
+      Closes: #562822.
+    - Fix PR gold/11042: COPY relocs need for the dynamic object.
+      Closes: #559183.
+    - Fix PR gold/10916: Fix --exclude-libs with undefined symbol.
+      Closes: #555012.
+    - Fix PR gold/10979: gold linker crashes. Closes: #553916.
+    - Fix PR gas/10740: Intel syntax far jumps broken. Closes: #541535.
+
+ -- Matthias Klose <doko@debian.org>  Sat, 09 Jan 2010 10:43:04 +0100
+
+binutils (2.20-4) unstable; urgency=low
+
+  * Fix binutils-gold update. Closes: #555734.
+  * Don't configure gold for spu on powerpc.
+
+ -- Matthias Klose <doko@debian.org>  Wed, 11 Nov 2009 23:33:20 +0100
+
+binutils (2.20-3) unstable; urgency=low
+
+  * Apply updates from the 2.20 branch up to 20091108:
+    - Fix PR gold/10876 (closes: #553435), PR gold/10910, PR gold/10860,
+      PR gold/10880 (closes: #553512, #553436), PR gold/10887,
+      PR gold/10893, PR gold/10895 (thanks to Peter Fritzsche for tracking
+      the gold reports).
+  * Fix libiberty build failure on sh4 (Nobuhiro Iwamatsu). Closes: #550810.
+  * PR ld/10858: Fix pie on mips/mipsel. Closes: #526961.
+  * Ignore regressions on sparc; the proper fix is to fix the testcases
+    for v9.
+  * Remove the conflict between binutils-multiarch and binutils-gold.
+    Closes: #521106.
+
+ -- Matthias Klose <doko@debian.org>  Tue, 10 Nov 2009 02:15:41 +0100
+
+binutils (2.20-2) unstable; urgency=high
+
+  * Apply updates from the 2.20 branch up to 20091028:
+    - Fix PR binutils/10802, PR binutils/10793, PR binutils/10792,
+      PR gas/10856.
+    - Remove local patches now in the branch.
+  * Ignore regressions on armel when building with gcc-4.4; the proper fix
+    is to build the testcases using -fno-section-anchors.
+
+ -- Matthias Klose <doko@debian.org>  Thu, 29 Oct 2009 22:17:42 +0100
+
+binutils (2.20-1) unstable; urgency=low
+
+  * binutils 2.20 final release.
+    - Fix PR binutils/10785, memory corruptions.
+    - PR ld/10749, ia64 linker failure.
+    - PR gas/2117, ia64 assembler fix.
+    - gold updates.
+  * Configure with --enable-plugins. Closes: #550088.
+  * debian/test-suite-compare.py: Don't count untested test cases as
+    regressions.
+  * binutils-gold: Install /usr/lib/compat-ld/ld to point to the
+    old linker. To use the old linker when gold is installed, use
+    gcc -B/usr/lib/compat-ld/ (including the trailing slash).
+
+ -- Matthias Klose <doko@debian.org>  Sat, 17 Oct 2009 12:22:30 +0200
+
+binutils (2.19.91.20091006-1) unstable; urgency=low
+
+  * Snapshot, taken from the 2.20 release branch 20091006.
+    - cfi_sections changes applied.
+  * debian/*.shlibs: Update to the version from the branch.
+  * binutils-gold: Build the testsuite as part of the check target
+    instead of the build target to avoid build failures when the
+    installed binutils soname is the same as the one which is built
+    (gas is segfaulting). Just a workaround, not a solution.
+  * Add 150_gold_copyrelocs.dpatch, add -z copyrelocs option for gold.
+  * binutils-source: Depend on texinfo, zlib1g-dev.
+
+ -- Matthias Klose <doko@debian.org>  Tue, 06 Oct 2009 22:13:24 +0200
+
+binutils (2.19.91.20091003-1) unstable; urgency=medium
+
+  * Snapshot, taken from the 2.20 release branch 20091003.
+    - Fix PR ld/9863, regression in testsuite on armel.
+    - Fix regressions seen in the GCC/libjava testsuite.
+  * debian/*.shlibs: Update to the version from the branch.
+  * No need to build libiberty_pic.a twice.
+
+ -- Matthias Klose <doko@debian.org>  Sat, 03 Oct 2009 14:59:14 +0200
+
+binutils (2.19.91.20090927-1) unstable; urgency=low
+
+  * Snapshot, taken from the 2.20 release branch 20090927.
+  * debian/*.shlibs: Update to the version from the branch.
+  * On mips/mipsel disabled -pie/--pie-executable. Still broken,
+    see #526961. Add an option --force-pie on mips/mipsel only
+    for testing purposes.
+    Change requested by debian-release (Andreas Barth).
+
+ -- Matthias Klose <doko@debian.org>  Sun, 27 Sep 2009 11:56:06 +0200
+
+binutils (2.19.91.20090923-1) unstable; urgency=medium
+
+  * Snapshot, taken from the 2.20 release branch 20090923 (last upload
+    was taken from the trunk)..
+  * debian/*.shlibs: Update to the version from the branch.
+
+ -- Matthias Klose <doko@debian.org>  Wed, 23 Sep 2009 09:50:04 +0200
+
+binutils (2.19.91.20090922-1) unstable; urgency=low
+
+  * Snapshot, taken from the 2.20 release branch 20090922.
+  * debian/*.shlibs: Update to the version from the branch.
+
+ -- Matthias Klose <doko@ubuntu.com>  Tue, 22 Sep 2009 19:36:50 +0200
+
+binutils (2.19.91.20090910-1) unstable; urgency=low
+
+  * Snapshot, taken from the 2.20 release branch 20090910, corresponding
+    to the 2.19.90 upstream snapshot.
+  * Fix Thumb-2 shared libraries (Daniel Jacobowitz), patch taken
+    from the trunk.
+
+ -- Matthias Klose <doko@debian.org>  Thu, 10 Sep 2009 17:05:30 +0200
+
+binutils (2.19.90.20090909-1) unstable; urgency=low
+
+  * Snapshot, taken from the 2.20 release branch 20090909.
+  * debian/*.shlibs: Update to the version from the branch.
+  * Disable build failure for regressions on mips/mipsel.
+
+ -- Matthias Klose <doko@debian.org>  Wed, 09 Sep 2009 09:50:36 +0200
+
+binutils (2.19.51.20090827-1) unstable; urgency=low
+
+  * Snapshot, taken from the trunk 20090827.
+    - Fix PR ld/10518: In linker scripts override a "*" match by any other
+      wildcard match. Closes: #540751.
+  * debian/*.shlibs: Update to the version from the trunk. Closes: #540800.
+  * Add sysroot support for cross builds (Hector Oron). Closes: #522480.
+  * Update long description of binutils-doc. Closes: #428764.
+  * Tighten build dependency on autoconf.
+  * Fix some lintian warnings.
+
+ -- Matthias Klose <doko@debian.org>  Thu, 27 Aug 2009 17:09:28 +0200
+
+binutils (2.19.51.20090805-1) unstable; urgency=low
+
+  * Snapshot, taken from the trunk 20090805.
+    - Fix PR binutils/10364, strip not failing on unwritable files.
+      Closes: #276428.
+    - Fix PR binutils/10363, objdump -T crashing on corrupted file.
+      Closes: #487963.
+  * 129_cortex_a8.dpatch: Fix a couple of cortex-a8 erratum bugs.
+
+ -- Matthias Klose <doko@debian.org>  Wed, 05 Aug 2009 10:24:40 +0200
+
+binutils (2.19.51.20090723-1) unstable; urgency=low
+
+  * Snapshot, taken from the trunk 20090723.
+  * debian/*.shlibs: Update to the version from the trunk.
+  * Undo the reversion in the last upload, use the upstream fix instead.
+
+ -- Matthias Klose <doko@debian.org>  Thu, 23 Jul 2009 09:39:50 +0200
+
+binutils (2.19.51.20090722-2) unstable; urgency=low
+
+  * Apply build-id patch to avoid memory corruption (taken from Fedora).
+  * Revert ld/ldlang.c rev 1.312. Closes: #537389.
+
+ -- Matthias Klose <doko@debian.org>  Wed, 22 Jul 2009 19:19:30 +0200
+
+binutils (2.19.51.20090722-1) unstable; urgency=low
+
+  * Snapshot, taken from the trunk 20090722.
+  * debian/*.shlibs: Update to the version from the trunk.
+
+ -- Matthias Klose <doko@debian.org>  Wed, 22 Jul 2009 16:51:11 +0200
+
+binutils (2.19.51.20090714-1) unstable; urgency=low
+
+  * Snapshot, taken from the trunk 20090714.
+  * debian/*.shlibs: Update to the version from the trunk.
+  * Install a libiberty compiled with -fPIC as libiberty_pic.a.
+    Closes: #530888.
+  * Remove obsolete README.Debian. Closes: #324260.
+  * binutils-dev: Include demangle.h. Closes: #134985.
+
+ -- Matthias Klose <doko@debian.org>  Tue, 14 Jul 2009 13:13:37 -0400
+
+binutils (2.19.51.20090704-1) unstable; urgency=low
+
+  * Snapshot, taken from the trunk 20090704.
+    - debian/patches/128_arm_eabi_auto_it.dpatch: Remove, applied upstream.
+  * debian/*.shlibs: Update to the version from the trunk.
+  * Bump standards version.
+
+ -- Matthias Klose <doko@debian.org>  Sat, 04 Jul 2009 10:37:18 +0200
+
+binutils (2.19.51.20090613-1) experimental; urgency=low
+
+  * Snapshot, taken from the trunk 20090613.
+  * debian/*.shlibs: Update to the version from the trunk.
+  * Build binutils-gold on armel.
+  * Apply proposed patch for new option for automatically generating IT blocks.
+
+ -- Matthias Klose <doko@debian.org>  Sat, 13 Jun 2009 14:39:41 +0000
+
+binutils (2.19.51.20090508-1) experimental; urgency=low
+
+  * Snapshot, taken from the trunk 20090508.
+    - Fix PR binutils/9743, relocation issues on arm.
+  * debian/*.shlibs: Update to the version from the trunk.
+
+ -- Matthias Klose <doko@debian.org>  Fri, 08 May 2009 11:08:14 +0200
+
+binutils (2.19.51.20090419-1) experimental; urgency=low
+
+  * Snapshot, taken from the trunk 20090419.
+  * debian/*.shlibs: Update to the version from the trunk.
+  * debian/patches/013_bash_in_ld_testsuite.dpatch: Update.
+
+ -- Matthias Klose <doko@debian.org>  Sun, 19 Apr 2009 22:12:19 +0200
+
+binutils (2.19.51.20090315-1) experimental; urgency=low
+
+  * Snapshot, taken from the trunk 20090315.
+  * debian/*.shlibs: Update to the version from the trunk.
+
+ -- Matthias Klose <doko@debian.org>  Sun, 15 Mar 2009 11:38:58 +0100
+
+binutils (2.19.1-1) unstable; urgency=low
+
+  * Upload to unstable.
+  * binutils-source: Make .dpatch files executable.
+
+ -- Matthias Klose <doko@debian.org>  Sun, 15 Feb 2009 22:46:34 +0100
+
+binutils (2.19.1-1~exp1) experimental; urgency=low
+
+  * Binutils 2.19.1 release.
+  * debian/*.shlibs: Update to the release version.
+
+ -- Matthias Klose <doko@debian.org>  Wed, 04 Feb 2009 09:57:55 +0100
+
+binutils (2.19.0.20090110-1~exp1) experimental; urgency=low
+
+  * Update to the binutils-2_19-branch 20090110.
+    - Fix PR binutils/7011. LP: #254790.
+  * debian/*.shlibs: Update to the version from the branch.
+
+ -- Matthias Klose <doko@debian.org>  Sat, 10 Jan 2009 13:56:09 +0100
+
+binutils (2.19-1~exp2) experimental; urgency=low
+
+  * debian/patches/129_scale-DW_CFA_advance_loc.dpatch: Scale
+    DW_CFA_advance_loc[124] output values.
+  * debian/patches/128_arm_relocs_against_weak.dpatch: Fix R_ARM_THM_CALL
+    relocations against undefined weak symbols in shared libraries.
+
+ -- Matthias Klose <doko@debian.org>  Sun, 30 Nov 2008 13:22:11 +0100
+
+binutils (2.19-1~exp1) experimental; urgency=low
+
+  * Binutils 2.19 release.
+  * debian/*.shlibs: Update to the release version.
+  * Build binutils-gold on powerpc.
+  * debian/control: Update to GPL3, reference the GFDL.
+  * Fail the build if the testsuite shows regressions compared to the
+    last (installed) build.
+  * Make lintian more happy.
+
+ -- Matthias Klose <doko@debian.org>  Sun, 26 Oct 2008 13:06:27 +0200
+
+binutils (2.18.93.20081009-1) experimental; urgency=low
+
+  * Snapshot, taken from the 2.19 branch 20081009 (corresponding to the
+    2.18.93 upstream snapshot.
+  * debian/*.shlibs: Update to the version from the branch.
+  * Add build dependency on zlib1g-dev.
+  * In gprof(1), remove references to monitor(3) and profil(2).
+    Closes: #293948.
+
+ -- Matthias Klose <doko@ubuntu.com>  Sat, 11 Oct 2008 16:45:35 +0000
+
+binutils (2.18.92.20081003-1) experimental; urgency=low
+
+  * Snapshot, taken from the 2.19 branch 20081003.
+  * debian/*.shlibs: Update to the version from the trunk.
+
+ -- Matthias Klose <doko@debian.org>  Fri, 03 Oct 2008 11:29:16 +0000
+
+binutils (2.18.90.20080910-1) experimental; urgency=low
+
+  * Snapshot, taken from the 2.19 branch 20080910.
+  * debian/*.shlibs: Update to the version from the trunk.
+
+ -- Matthias Klose <doko@debian.org>  Fri, 12 Sep 2008 19:23:07 +0200
+
+binutils (2.18.50.20080803-1) experimental; urgency=low
+
+  * Snapshot, taken from the trunk 20080803.
+  * debian/*.shlibs: Update to the version from the trunk.
+
+ -- Matthias Klose <doko@debian.org>  Mon, 04 Aug 2008 00:53:47 +0200
+
+binutils (2.18.50.20080707-1) experimental; urgency=low
+
+  * Snapshot, taken from the trunk 20080707.
+  * debian/*.shlibs: Update to the version from the trunk.
+  * include/safe-ctype.h: Add #include of ctype.h before redefining
+    the ctype.h macros (proposed for the trunk).
+  * Add Daniel Jacobowitz as uploader.
+
+ -- Matthias Klose <doko@debian.org>  Mon, 07 Jul 2008 01:08:13 +0200
+
+binutils (2.18.50.20080610-1) experimental; urgency=low
+
+  * Snapshot, taken from the trunk 20080610.
+  * debian/*.shlibs: Update to the version from the trunk.
+
+ -- Matthias Klose <doko@debian.org>  Tue, 10 Jun 2008 16:21:02 +0200
+
+binutils (2.18.50.20080530-1) experimental; urgency=low
+
+  * Snapshot, taken from the trunk 20080530.
+  * Switch maintainer and uploader.
+  * debian/rules: Explicitely set SHELL to /bin/bash, build-depend on bash.
+  * debian/rules: Fix setting of TARGET for cross builds.
+
+ -- Matthias Klose <doko@debian.org>  Fri, 30 May 2008 23:49:40 +0200
+
+binutils (2.18.50.20080507-1) experimental; urgency=low
+
+  * Snapshot, taken from the trunk 20080507.
+  * Remove patches applied upstream: 304_pr4476.dpatch, 305_arm-dis.dpatch,
+    306_pr4453.dpatch, 307_ld-pic.dpatch, 308_mips-pic.dpatch.
+  * debian/patches/013_bash_in_ld_testsuite.dpatch: Use bash in the ld
+    testsuite (some tests have bashisms).
+  * debian/*.shlibs: Update to the version from the trunk.
+  * On amd64, i386 and sparc, build a binutils-gold package,
+    diverting /usr/bin/ld.
+  * Use expect instead of expect-tcl8.3 on all architectures except hppa.
+  * Remove binutils and gcc build dependencies (versions are in oldstable).
+
+ -- Matthias Klose <doko@debian.org>  Thu, 08 May 2008 00:56:30 +0200
+
+binutils (2.18.1~cvs20080103-4) unstable; urgency=medium
+
+  * debian/rules: Remove libiberty in /usr/lib64; workaround for
+    `gcc -print-multi-os-directory' printing the symlink.
+    Closes: #473665, #473591.
+  * Don't include development files in binutils-spu.
+  * Fix binutils-spu build on ppc64 (Andreas Jochens). Closes: #474116.
+  * Build libiberty with -fPIC on mips/mipsel (Aurelian Jarno).
+
+ -- Matthias Klose <doko@debian.org>  Sat, 05 Apr 2008 11:21:08 +0200
+
+binutils (2.18.1~cvs20080103-3) unstable; urgency=low
+
+  [ Arthur Loiret ]
+  * Build a binutils for spu-elf target on powerpc and ppc64.
+    - debian/control: Add a binutils-spu package.
+    - debian/binutils-spu.{postinst,postrm,shlibs}: Add.
+  * Add sh64-linux-gnu to multiarch targets.
+  * Fix cross-compilation support.
+  * Make lintian happier:
+    - Use ${source:Version}, ${binary:Version} variables.
+    - Remove -1 from Build-Depends revisions.
+    - Bump Standards-Version to 3.7.3.
+
+  [ Matthias Klose ]
+  * Keep the spu elfscripts in bintutils, remove them from binutils-spu.
+  * debian/patches/307_ld-pic.dpatch: Fix failing ld-shared tests when built
+    with gcc-4.3.
+
+ -- Matthias Klose <doko@debian.org>  Sat, 29 Mar 2008 20:32:35 +0100
+
+binutils (2.18.1~cvs20080103-2) unstable; urgency=low
+
+  * debian/patches/306_pr4453.dpatch: Fix PR binutils/4453, taken from
+    the trunk (Aurelian Jarno). Closes: #363423.
+
+ -- Matthias Klose <doko@debian.org>  Fri, 21 Mar 2008 20:49:17 +0100
+
+binutils (2.18.1~cvs20080103-1) unstable; urgency=low
+
+  * Update to 20080103 from the binutils-2_18-branch.
+    - Set version number to 2.18.0 (smaller than the one from the trunk).
+    - Fix PR ld/5398. Closes: #452725.
+  * debian/*.shlibs: Update to version from the branch.
+  * debian/patches/305_arm-dis.dpatch: Fix segfault when disassembling ARM
+    code. Closes: #438956.
+  * Support kfreebsd-amd64-gnu and i486-kfreebsd-gnu (Aurilian Jarno):
+    - debian/patches/127_x86_64_i386_biarch.dpatch: Extend for kfreebsd.
+    - debian/rules: biarch enabled binutils for kfreebsd-{amd64,i486}-gnu,
+      kfreebsd-{amd64,i486}-gnu support for cross-builds,
+      kfreebsd-{amd64,i486}-gnu enabled for binutils-multiarch.
+    - Closes: #380373.
+
+ -- Matthias Klose <doko@debian.org>  Thu, 03 Jan 2008 21:57:51 +0100
+
+binutils (2.18.1~cvs20071027-2) unstable; urgency=low
+
+  * Do not include static libraries in the multiarch package.
+  * Don't include /usr/lib64 in cross packages. Closes: #450429.
+
+ -- Matthias Klose <doko@debian.org>  Sat, 24 Nov 2007 12:13:22 +0100
+
+binutils (2.18.1~cvs20071027-1) unstable; urgency=low
+
+  * Update to 20071027 from the binutils-2_18-branch.
+    - Fix PR ld/4988, assertion failures in ld. Closes: #440015.
+  * debian/*.shlibs: Update to version from the branch.
+
+ -- Matthias Klose <doko@debian.org>  Sat, 27 Oct 2007 17:55:41 +0200
+
+binutils (2.18-1) unstable; urgency=low
+
+  [ Matthias Klose ]
+  * New upstream release.
+    - Remove patches applied upstream: 100_warning_arm, 400_gcc42_fix,
+      401_builddoc.
+  * debian/*.shlibs: Update to release version.
+
+ -- Matthias Klose <doko@debian.org>  Wed, 29 Aug 2007 01:07:31 +0200
+
+binutils (2.18~cvs20070812-1) unstable; urgency=low
+
+  [ Matthias Klose ]
+  * New upstream CVS snapshot, taken from the binutils-2_18-branch.
+  * debian/rules: Support parallel=<n> with comma separated keywords
+    in DEB_BUILD_OPTIONS.
+  * debian/rules (clean): Remove stamp files.
+  * debian/*.shlibs: Update to snapshot version.
+  * debian/patches/401_builddoc.dpatch: Fix doc build failure on the branch.
+
+ -- Matthias Klose <doko@debian.org>  Sun, 12 Aug 2007 10:56:18 +0200
+
+binutils (2.17cvs20070804-1) unstable; urgency=low
+
+  [ Matthias Klose ]
+  * New upstream CVS snapshot.
+    - PR binutils/4888, fixes objcopy --only-keep-debug. Closes: #435444.
+  * debian/rules: Support parallel=<n> in DEB_BUILD_OPTIONS (see #209008).
+  * debian/*.shlibs: Update to snapshot version.
+
+ -- Matthias Klose <doko@debian.org>  Sat, 04 Aug 2007 12:45:07 +0200
+
+binutils (2.17cvs20070801-1) unstable; urgency=medium
+
+  [ Matthias Klose ]
+  * New upstream CVS snapshot.
+    - Fixes objcopy --only-keep-debug on amd64. Closes: #435444.
+  * binutils-multiarch: Enable the armel-linux-gnu target. Closes: #408805.
+
+ -- Matthias Klose <doko@debian.org>  Wed, 01 Aug 2007 18:24:51 +0200
+
+binutils (2.17cvs20070718-1) unstable; urgency=low
+
+  [ Matthias Klose ]
+  * New upstream CVS snapshot.
+    - Fix build failure on m68k.
+  * debian/patches/400_gcc42_fix.dpatch: Fix build failure with gcc-4.2.
+    Closes: #433062.
+  * Fix cross build failure while stripping binaries. Closes: #432907.
+
+ -- Matthias Klose <doko@debian.org>  Wed, 18 Jul 2007 20:25:03 +0200
+
+binutils (2.17cvs20070713-1) unstable; urgency=low
+
+  [ Matthias Klose ]
+  * New upstream CVS snapshot.
+    - Remove patches applied upstream: 301_pr4436.dpatch, 302_pr4448.dpatch,
+      303_pr4454.dpatch, 305_pr4497.dpatch, 306_ld_demangler_segfault.dpatch,
+      307_pr4558.dpatch.
+    - Fix build failure with gcc-4.2. Closes: #429738.
+    - Fix kernel build with grsecurity patch. Closes: #430041.
+  * debian/copyright: Include GPL-3.
+  * debian/rules: Fix version extraction.
+  * debian/rules: Honor `noopt' in DEB_BUILD_OPTIONS.
+
+ -- Matthias Klose <doko@debian.org>  Fri, 13 Jul 2007 14:45:21 +0200
+
+binutils (2.17cvs20070426-8) unstable; urgency=low
+
+  * Fix PR gas/4558.
+  * debian/rules: Add empty NJOBS macro.
+
+ -- Matthias Klose <doko@debian.org>  Mon, 28 May 2007 09:06:35 +0000
+
+binutils (2.17cvs20070426-7) unstable; urgency=low
+
+  * 306_ld_demangler_segfault.dpatch: new CVS patch from Alan Modra to fix
+    segfaults in ld seen when building, e.g. openipmi.
+
+  * debian/copyright: update source location and copyright years.
+  * debian/rules: idem.
+  
+ -- James Troup <james@nocrew.org>  Wed, 23 May 2007 02:19:09 +0100
+
+binutils (2.17cvs20070426-6) unstable; urgency=low
+
+  * Fix PR ld/4497, regression introduced with the fix for PR ld/4454.
+    Closes: #423496.
+  * Fix binutils/4476, readelf support for --hash-style=gnu.  Closes: #421790.
+
+ -- Matthias Klose <doko@debian.org>  Mon, 14 May 2007 10:51:40 +0200
+
+binutils (2.17cvs20070426-5) unstable; urgency=low
+
+  * Fix PR ld/4454.
+
+ -- Matthias Klose <doko@debian.org>  Sun, 06 May 2007 09:50:29 +0200
+
+binutils (2.17cvs20070426-4) unstable; urgency=low
+
+  * Fix PR gas/4448, overstrict check for powerpc lswi. Closes: #421799.
+
+ -- Matthias Klose <doko@debian.org>  Wed,  2 May 2007 18:26:03 +0200
+
+binutils (2.17cvs20070426-3) unstable; urgency=low
+
+  * Update debian/*.shlibs files. Closes: #421454.
+  * Fix PR gas/4436, wrong reject in powerpc opcode table checks.
+    Closes: #421455.
+  * Fix build failure on arm (Aurelian Jarno). Closes: #421365.
+  * Compare testsuite results of the installed binutils with the built one.
+
+ -- Matthias Klose <doko@debian.org>  Mon, 30 Apr 2007 07:47:09 +0200
+
+binutils (2.17cvs20070426-2) unstable; urgency=low
+
+  * Fix typo preparing the binutils-hppa64 package.
+
+ -- Matthias Klose <doko@debian.org>  Fri, 27 Apr 2007 08:06:49 +0200
+
+binutils (2.17cvs20070426-1) unstable; urgency=low
+
+  [ James Troup ]
+  * New upstream CVS snapshot.
+  * debian/test-suite-compare.py: simplistic comparator for binutils test
+    suite runs.
+
+  [ Matthias Klose ]
+  * Merge changes from the experimental uploads:
+   * debian/patches/121_i386_x86_64_biarch.dpatch: Remove, applied upstream.
+   * Build a binutils-source package (containing the patched sources).
+   * Check for a working expect before building the package.
+   * Configure the multiarch build for x86_64-linux-gnu instead of
+     x86_64-linux.
+   * debian/rules: Don't strip binaries if nostrip is in DEB_BUILD_OPTIONS.
+   * debian/rules: Don't try to strip shell scripts.
+   * Configure --with-pkgversion to include the distribution name.
+   * debian/patches/000_print_debian_version.dpatch: Remove.
+   * debian/control: Build-depend on lsb-release.
+   * Enable spu target in powerpc and binutils-multiarch build.
+   * Don't include embedspu in binutils-multiarch on powerpc.
+   * debian/control: Set priority for source package to optional.
+
+ -- James Troup <james@nocrew.org>  Fri, 27 Apr 2007 01:29:57 +0100
+
+binutils (2.17-3) unstable; urgency=low
+
+  * debian/rules (configure-multi-stamp): drop i486-kfreebsd-gnu again as
+    it breaks objdump for i386 on amd64.  Closes: #380539
+
+ -- James Troup <james@nocrew.org>  Tue,  3 Oct 2006 00:53:17 +0100
+
+binutils (2.17-2) unstable; urgency=low
+
+  * The "Laisse le Wookie gagner" release.
+
+  * 127_x86_64_i386_biarch.dpatch: new patch from Aurelien Jarno
+    <aurelien@aurel32.net> to add (/usr)/lib32 to the search paths on
+    amd64.  Closes: #369052
+
+  * debian/rules (configure-multi-stamp): add i486-kfreebsd-gnu at request
+    of Aurelien Jarno.  Closes: #315306
+
+ -- James Troup <james@nocrew.org>  Wed, 26 Jul 2006 20:33:13 +0100
+
+binutils (2.17-1) unstable; urgency=low
+
+  * New upstream release.
+   * 120_mips_xgot_multigot_workaround.dpatch: removed - superseded by a
+     proper fix upstream.  Closes: #274738
+   * debian/binutils.shlibs, debian/binutils-multiarch.shlibs,
+     debian/binutils-hppa64.shlibs: updated SONAME to 2.17.
+
+ -- James Troup <james@nocrew.org>  Mon, 26 Jun 2006 13:17:36 +0100
+
+binutils (2.16.1cvs20060507-1) unstable; urgency=low
+
+  * New upstream CVS snapshot of 'binutils-2_17-branch'.
+
+  * debian/control (Standards-Version): bump to 3.7.2.0.
+
+ -- James Troup <james@nocrew.org>  Sun,  7 May 2006 19:57:08 +0100
+
+binutils (2.16.1cvs20060413-1) unstable; urgency=low
+
+  * New upstream CVS snapshot.
+   * 120_mips_xgot_multigot_workaround.dpatch: updated to work with CVS
+     r1.163 of bfd/elfxx-mips.c, pass 'info' instead of 'output_bfd' to
+     MIPS_ELF_GOT_MAX_SIZE().
+
+  * Patch from NIIBE Yutaka <gniibe@fsij.org> in #280884:
+    * debian/rules (configure-multi-stamp): Support m32r-linux.  Closes:
+      #340264
+    * debian/rules: Run 'make check' only if build == host.
+  
+  * debian/rules: Also don't run 'make check' if nocheck is in
+    DEB_BUILD_OPTIONS.  Based on a patch from Michael Banck
+    <mbanck@debian.org>.  Closes: #315290
+
+  * Integrate most of a patch to build arbitrary binutils-$TARGET
+    cross-packages from #231707.  Thanks to Nikita V. Youshchenko
+    <yoush@cs.msu.su> and Josh Triplett <josh@freedesktop.org>.
+
+  * debian/copyright: update to include GFDL.  Closes: #81950
+  * debian/copyright: update FSF address.
+
+  * debian/rules: move non-architecture specific conflicts (gas,
+    elf-binutils, modutils (<< 2.4.19-1)) out of a substitued variable and
+    into the control file.  Rename variable to extraConflicts.
+  * debian/control: likewise.
+
+ -- James Troup <james@nocrew.org>  Sat, 15 Apr 2006 03:05:41 +0100
+
+binutils (2.16.1cvs20060117-1) unstable; urgency=low
+
+  * New upstream CVS snapshot.
+
+  * 118_arm_pass_all.dpatch, 125_fix_tc_arm_cast.dpatch: merged upstream -
+    removed.
+
+ -- James Troup <james@nocrew.org>  Wed, 18 Jan 2006 02:25:25 +0000
+
+binutils (2.16.1cvs20051214-1) unstable; urgency=low
+
+  * New upstream CVS snapshot.
+   * Fix ld segfaults on ia64.  Closes: #342777
+
+  * 126_fix_PROVIDE_HIDDEN.dpatch: merged upstream - removed.
+
+ -- James Troup <james@nocrew.org>  Wed, 14 Dec 2005 08:06:37 +0000
+
+binutils (2.16.1cvs20051206-1) unstable; urgency=low
+
+  * New upstream CVS snapshot.
+   * Fixes linking of qemu.  Closes: #340328
+
+  * 126_fix_PROVIDE_HIDDEN.dpatch: new patch from Thiemo Seufer to fix
+    handling of hidden symbols which were provided by a linker
+    script. Closes: #342307
+
+  * debian/control (Standards-Version): updated to 3.6.2.1.
+
+ -- James Troup <james@nocrew.org>  Sat, 10 Dec 2005 05:23:34 +0000
+
+binutils (2.16.1cvs20051117-1) unstable; urgency=low
+
+  * New upstream CVS snapshot.
+   * Fixes c++filt's flushing of stdout which broke gcj.  Closes: #339287
+
+  * debian/control (Build-Depends): switch from expect to expect-tcl8.3
+    since tcl8.4's broken threading causes the testsuite to fail entirely
+    on hppa.  Closes: #339509
+
+ -- James Troup <james@nocrew.org>  Thu, 17 Nov 2005 13:15:15 +0000
+
+binutils (2.16.1cvs20051109-1) unstable; urgency=low
+
+  * New upstream CVS snapshot.
+   * Fixes broken PLT handling on m68k.  Closes: #327780
+   * Don't compile flex files with -Werror, fixing mips builds.
+     Closes: #333980
+   * Don't check undefined symbols introduced by "ld -u" for TLS. Closes:
+     #326103
+
+  * 117_mips_symbolic_link.dpatch: merged upstream - removed.
+
+  * debian/rules: pass --disable-werror on ia64 as current gcc generates
+    too many false positives.  Closes: #336939
+
+  * 125_fix_tc_arm_cast.dpatch: new patch from Lennert Buytenhek to fix
+    cast warning and arm builds.  Closes: #336175
+
+  * 121_i386_x86_64_biarch.dpatch: imported from Ubuntu at request of
+    Daniel Jacobwitz to fix biarch linking on i386/amd64.  Closes:
+    #334626, #334673
+
+  * debian/rules: remove any reference to pkgstriptranslations - an
+    Ubuntu-ism that shouldn't have been in the Debian package in the first
+    place but that isn't needed in Ubuntu any more in any event.
+
+  * debian/rules: MAKEOVERRIDES is now clobbered by the top level
+    Makefile, so switch to overriding MAKE itself (sic) to pass the
+    customized VERSION variable/string down to sub-directories for
+    -multiarch and -hppa64 builds.  Thanks to Daniel Silverstone for the
+    suggestion.
+
+ -- James Troup <james@nocrew.org>  Fri, 11 Nov 2005 20:38:22 +0000
+
+binutils (2.16.1cvs20050902-1) unstable; urgency=low
+
+  * New upstream CVS snapshot.
+   * Fixes --as-needed on sparc and hppa.  Closes: #320697
+   * Fixes buffer overflows and other crashes.  Closes: #311975
+
+  * 124_readelf_robustify.dpatch: merged upstream - removed.
+  * 001_ld_makefile_patch: regenerated with help of wiggle.
+
+  * debian/*.shlibs: update to version 2.16.91.
+
+  * debian/copyright: use canonical GNU URL.  Update copyright years.
+  * debian/rules: update version and copyright.
+
+  * debian/rules (pre-build): not relevant with a CVS snapshot which
+    doesn't have pre-generated info files - removed.
+  * debian/rules (clean): don't save info files for the same reason, in
+    fact explicitly remove them.
+  * debian/rules (build_stamps): drop pre-build.
+
+ -- James Troup <james@nocrew.org>  Sat,  3 Sep 2005 00:30:56 +0100
+
+binutils (2.16.1-3) unstable; urgency=low
+
+  * debian/rules: remove powerpc libc header hack.
+  * debian/include/sys/procfs.h: remove.
+
+  * 124_readelf_robustify.dpatch: new patch from Jakub Jelinek to
+    robustify readelf.  Thanks to Thiemo Seufer <ths@networkno.de>.
+    Closes: #318344
+
+ -- James Troup <james@nocrew.org>  Wed, 31 Aug 2005 05:03:11 +0100
+
+binutils (2.16.1-2) unstable; urgency=low
+
+  * debian/include/sys/procfs.h: Include fixed powerpc libc header, to fix
+    FTBFS on powerpc. Temporary fix, to be removed with glibc-2.3.5.
+
+ -- Matthias Klose <doko@debian.org>  Sun, 10 Jul 2005 16:35:17 +0200
+
+binutils (2.16.1-1) unstable; urgency=medium
+
+  * New upstream version.
+  * debian/patches/117_mips_symbolic_link.dpatch: Updated, apply it again.
+    (Thiemo Seufer).
+  * debian/patches/130_bfd_doc_makefile.dpatch: Remove, applied upstream.
+  * debian/control: Build depend on dpkg-dev (>= 1.13.9), needed to determine
+    the GNU architecture type.
+  * The symlinks for the tools change to the the new output of
+    dpkg-architecture -qDEB_HOST_GNU_TYPE (i.e. i386-linux-ld becomes
+    i486-linux-gnu-ld).
+  * Change the values for --enable-targets according to the dpkg-architecture
+    update.
+  * Configure the hppa64 cross compiler for hppa64-linux-gnu. Adjust
+    the hppa64 install target.
+  * debian/*shlibs: Update to version 2.16.1.
+  * Make restoring of saved pregenerated info files more robust.
+
+ -- Matthias Klose <doko@debian.org>  Sat,  9 Jul 2005 14:58:49 +0200
+
+binutils (2.16-1) unstable; urgency=low
+
+  * Update to CVS 2.16 branch 20050612.
+  * debian/patches/130_bfd_doc_makefile.dpatch: New patch to fix
+    build failure in bfd/doc.
+  * debian/watch: New file.
+
+ -- Matthias Klose <doko@debian.org>  Sun, 12 Jun 2005 12:29:12 +0200
+
+binutils (2.16-0) experimental; urgency=low
+
+  * New upstream release.
+    - Fixes build failure using gcc-4.0 (closes: #299671).
+  * debian/patches:
+    - 000_print_debian_version.dpatch: Updated.
+    - 001_ld_makefile_patch.dpatch, 002_gprof_profile_arcs.dpatch,
+      002_gprof_profile_arcs.dpatch: Regenerated.
+    - 012_check_ldrunpath_length.dpatch: Updated.
+    - 112_fix_reloc_sizing.dpatch, 113_elf_backend_hide_symbol.dpatch,
+      114_mips_delay_slots_in_branch.dpatch, 115_fix_sparc_fmov.dpatch,
+      116_ar_nonexistent_files.dpatch: Removed, applied upstream.
+    - 117_mips_symbolic_link.dpatch: Disabled. Needs an update.
+    - 118_arm_pass_all.dpatch: Regenerated.
+    - 119_fix_gas_double_negative.dpatch: Removed, applied upstream.
+    - 120_mips_xgot_multigot_workaround.dpatch: Updated.
+    - 121_ia64_unwind_fixes.dpatch, 122_m68k_undefweak_symbols.dpatch:
+      Removed, applied upstream.
+  * Merge Ubuntu changes:
+    - debian/patches:
+      - 123_dont_add_to_undefs_twice.dpatch: Removed, applied upstream.
+    - debian/rules: Call pkgstriptranslations if present.
+  * debian/rules: 
+    - Fix VERSION extraction.
+    - Save info files before build and restore them in clean target.
+  * debian/control:
+    - Add me as an uploader.
+	
+ -- Matthias Klose <doko@ubuntu.com>  Fri,  6 May 2005 18:43:09 +0200
+
+binutils (2.15-6) unstable; urgency=low
+
+  * 123_bfd_overflow_fix.dpatch: new patch from Alan Modra to fix BFD
+    overflows.  Closes: #308625
+
+ -- James Troup <james@nocrew.org>  Sat, 21 May 2005 20:20:01 +0100
+
+binutils (2.15-5ubuntu2) hoary; urgency=low
+
+  * debian/rules: Call pkgstriptranslations if present (the package does not
+    use debhelper, thus it does not happen automatically).
+
+ -- Martin Pitt <martin.pitt@ubuntu.com>  Fri, 18 Mar 2005 13:07:52 +0000
+
+binutils (2.15-5ubuntu1) hoary; urgency=low
+
+  * 123_dont_add_to_undefs_twice.dpatch: new patch from Alan Modra (PR338) to
+    not add symbols to the undefined list twice, causing an assertion failure
+    in ld when building the kernel on amd64.
+
+ -- Daniel Stone <daniel.stone@canonical.com>  Tue,  7 Dec 2004 09:29:31 +0100
+
+binutils (2.15-5) unstable; urgency=low
+
+  * 121_ia64_unwind_fixes.dpatch: new patch from David Mosberger to fix
+    unwind related bugs.  Closes: #278836
+  * 122_m68k_undefweak_symbols: new patch from Andreas Schwab to fix undef
+    weak symbols with non-default visibilty on m68k.  Closes: #278388
+
+ -- James Troup <james@nocrew.org>  Thu, 25 Nov 2004 00:13:28 +0000
+
+binutils (2.15-4) unstable; urgency=low
+
+  * 120_mips_xgot_multigot_workaround.dpatch: new patch from Thiemo Seufer
+    to make multigot/xgot handling exclusive and fix mozilla builds on
+    mipsen.  Closes: #272149
+
+ -- James Troup <james@nocrew.org>  Thu, 23 Sep 2004 22:44:03 +0100
+
+binutils (2.15-3) unstable; urgency=low
+
+  * 112_fix_reloc_sizing.dpatch: update patch based on revised change from
+    Alan Modra.
+
+  * 116_ar_nonexistent_files.dpatch: new patch from Nick Clifton to fix
+    ar's handling of non-existent files.  Closes: #267139
+
+  * 117_mips_symbolic_link.dpatch: new patch from Thiemo Seufer to fix the
+    "final link failed: Bad value" error on mips.  Closes: #270619
+
+  * 118_arm_pass_all.dpatch: new kludge patch to fix broken libtool pass_all
+    handling on arm and other arches.
+
+  * 119_fix_gas_double_negative.dpatch: new patch from Alan Modra via
+    Daniel Jacobowitz to fix gas' handling of -- and ++.  Closes: #266772
+
+ -- James Troup <james@nocrew.org>  Thu,  9 Sep 2004 22:24:08 +0100
+
+binutils (2.15-2) unstable; urgency=low
+
+  * 112_fix_reloc_sizing.dpatch: new patch from Daniel Jacobowitz to fix
+    objcopy relocation sections.  Closes: #252719
+
+  * 113_elf_backend_hide_symbol.dpatch: new patch from Alan Modra to fix
+    ld internal error on hppa.  Closes: #254549
+
+  * 114_mips_delay_slots_in_branch.dpatch: new patch from Thiemo Seufer to
+    handle delay slots in branch correctly on mips.  Closes: #266660
+
+  * 115_fix_sparc_fmov.dpatch: new patch from Jakub Jelinek via Dave
+    Miller to fix bogus fmov* SPARC opcodes.  Closes: #267824
+
+ -- James Troup <james@nocrew.org>  Tue, 31 Aug 2004 22:45:13 +0100
+
+binutils (2.15-1) unstable; urgency=low
+
+  * New upstream release.  Closes: #248990, #259458
+   * Fixes -Wl,-z,defs to correctly abort builds with unresolved
+     symbols.  Closes: #256481
+   * Better error message for truncation of bignums in as.  
+     Closes: #219933
+   * strip(1) no longer corrupts binaries for architectures it doesn't
+     recognise.  Closes: #211052
+   * nm -C /usr/lib/libcrypto++.a no longer segfaults.  Closes: #247917
+  
+  * 105_alpha_rpcc_opcode_fix.dpatch, 106_arm_pic.dpatch,
+    107_powerpc_ld_segfault.dpatch, 108_m68k_fmoveml_fix.dpatch,
+    109_objcopy_keep_debug.dpatch, 110_hppa64_local_symbols.dpatch,
+    111_objcopy_vs_unstripped.dpatch, 906_hjl_libtool_dso.dpatch: merged
+    upstream - removed.
+  * 012_check_ldrunpath_length.dpatch: resynced with wiggle(1).
+
+  * debian/binutils.shlibs, debian/binutils-hppa64.shlibs,
+    debian/binutils-multiarch.shlibs: update for 2.15.
+
+  * debian/rules (install): remove gas.info hack as no longer needed
+    (fixed properly upstream).
+  * debian/rules (clean): remove gas/doc/as.info which doesn't seem to be
+    in the upstream tar ball.
+
+  * debian/rules (binary-arch): install $pkg/ChangeLog.linux only if they
+    exist (because they don't in GNU releases).
+
+ -- James Troup <james@nocrew.org>  Thu, 29 Jul 2004 22:44:04 +0100
+
+binutils (2.14.90.0.7-8) unstable; urgency=low
+
+  * debian/rules: don't use gcc-2.95 on m68k.  Thanks to Adam Conrad for
+    pointing this out.
+
+ -- James Troup <james@nocrew.org>  Wed, 19 May 2004 10:35:44 +0100
+
+binutils (2.14.90.0.7-7) unstable; urgency=low
+
+  * 111_objcopy_vs_unstripped.dpatch: new patch from Alan Modra via Daniel
+    Jacobowitz to fix objcopy on unstripped libraries on alpha and arm.
+    Closes: #234021
+
+  * debian/control (Build-Depends): remove m68k specific build-depends on
+    gcc-2.95 and libc6-dev (<< 2.3).  Many thanks to Michael Schmitz for
+    testing this.
+
+ -- James Troup <james@nocrew.org>  Tue, 30 Mar 2004 18:00:54 +0100
+
+binutils (2.14.90.0.7-6) unstable; urgency=low
+
+  * 110_hppa64_local_symbols.dpatch: new patch from Randolph Chung to fix
+    dynamic name generation of local symbols on hppa64 - needed to build
+    64-bit hppa kernels. Closes: #238176
+
+ -- James Troup <james@nocrew.org>  Fri, 26 Mar 2004 15:52:27 +0000
+
+binutils (2.14.90.0.7-5) unstable; urgency=low
+
+  * 109_objcopy_keep_debug.dpatch: new patch from Daniel Jacobowitz
+    <dan@debian.org>, objcopy --only-keep-debug and readelf SHT_NOBITS
+    fixes.
+
+ -- James Troup <james@nocrew.org>  Mon, 26 Jan 2004 16:25:25 +0000
+
+binutils (2.14.90.0.7-4) unstable; urgency=low
+
+  * debian/control: add binutils-hppa64 package.
+  * debian/rules: add support for binutils-hppa64 package and don't enable
+    hppa64-linux for binutils or binutils-multiarch.
+  * debian/binutils-hppa64.postinst: new file.
+  * debian/binutils-hppa64.postrm: likewise.
+  * debian/binutils-hppa64.shlibs: likewise.
+  * Above changes largely based on a patch from Matthias Klose
+    <doko@cs.tu-berlin.de>.  Closes: #225892
+
+  * debian/control (Build-Depends): drop bzip2.
+
+  * debian/rules (install-stamp): remove empty /usr/include directory in
+    binutils.
+  * debian/rules (install-stamp): remove /usr/share/info/dir* to
+    workaround install-info brain damage (cf #213524).
+
+ -- James Troup <james@nocrew.org>  Thu, 22 Jan 2004 21:32:44 +0000
+
+binutils (2.14.90.0.7-3) unstable; urgency=low
+
+  * 108_m68k_fmoveml_fix.dpatch: new patch from H.J. Lu
+    <hongjiu.lu@intel.com> to fix fmoveml disassembly and associated
+    testsuite regression on m68k.
+
+ -- James Troup <james@nocrew.org>  Tue, 18 Nov 2003 14:35:23 +0000
+
+binutils (2.14.90.0.7-2) unstable; urgency=low
+
+  * 107_powerpc_ld_segfault.dpatch: new patch from Alan Modra
+    <amodra@bigpond.net.au> to fix ld segfault on powerpc.  Thanks to
+    Josselin Mouette <joss@debian.org> for the report.  Closes: #219187
+
+ -- James Troup <james@nocrew.org>  Wed,  5 Nov 2003 13:32:17 +0000
+
+binutils (2.14.90.0.7-1) unstable; urgency=low
+
+  * New upstream release.
+  * 100_null_owner_ld_fix.dpatch, 101_ppc_as_shf_and_rel_fix.dpatch,
+    102_alpha_null_got_ld_fix.dpatch,
+    103_static_linking_elf_eh_frame.dpatch,
+    104_elf_eh_frame_alpha_fix.dpatch: removed; merged upstream.
+  * debian/rules: update version number.
+  * debian/binutils.shlibs: likewise.
+  * debian/binutils-multiarch.shlibs: likewise.
+
+  * 009_signed_char_fix.dpatch: removed; this was fixed upstream correctly
+    (http://sources.redhat.com/ml/binutils/2003-05/msg00304.html) and this
+    patch is breaking that fix.  Thanks to Daniel Jacobowitz
+    <dan@debian.org>.
+
+  * 003_gmon_manpage_fix.dpatch -> 002_gprof_profile_arcs.dpatch.
+  * 014_gprof_manpage_fix.dpatch -> 003_gprof_see_also_monitor.dpatch.
+
+  * 300_alpha_rpcc_opcode_fix.dpatch -> 105_alpha_rpcc_opcode_fix.dpatch
+    (committed to trunk).
+
+  * debian/rules (configure-multi-stamp): also enable mips64{el,}-linux
+    for binutils-multiarch.  Alphabetize target list.
+
+  * 106_arm_pic: new patch from Phil Blundell <pb@debian.org> and Daniel
+    Jacobowitz <dan@debian.org> which implements GC for GOT and PLT relocs
+    in the elf32-arm backend.
+
+  * debian/rules (install-stamp): work around upstream bug which causes
+    as.info and as.1 to disappear by explicitly calling "make
+    install-info-am install-am" in builddir-single/gas/doc.
+
+ -- James Troup <james@nocrew.org>  Sat,  1 Nov 2003 18:14:04 +0000
+
+binutils (2.14.90.0.6-5) unstable; urgency=low
+
+  * 104_elf_eh_frame_alpha_fix.dpatch: new patch from H.J. Lu
+    <hongjiu.lu@intel.com> to fix regressions on alpha caused by
+    103_static_linking_elf_eh_frame.  Thanks to Thimo Neubauer
+    <thimo@debian.org> for the original report.  Closes: #215636
+
+ -- James Troup <james@nocrew.org>  Fri, 17 Oct 2003 00:02:09 +0100
+
+binutils (2.14.90.0.6-4) unstable; urgency=low
+
+  * 103_static_linking_elf_eh_frame.dpatch: new patch from H.J. Lu
+    <hongjiu.lu@intel.com> to fix static linking of C++ binaries.
+
+  * 200_alpha_null_got_ld_fix.dpatch: renamed...
+  * 102_alpha_null_got_ld_fix.dpatch: to this.
+
+  * debian/rules: patch from Guido Guenther <agx@debian.org> to enable
+    mips64 support.  Closes: #213448
+
+ -- James Troup <james@nocrew.org>  Sun, 12 Oct 2003 14:26:26 +0100
+
+binutils (2.14.90.0.6-3) unstable; urgency=low
+
+  * 100_null_owner_ld_fix.dpatch: new patch from Alan Modra
+    <amodra@bigpond.net.au> to fix an ld crash with null owner sections.
+    Closes: #212029
+
+  * debian/rules: don't compile with gcc-2.95 on arm; the only failures
+    are a) testsuite-only (i.e. don't appear to affect real world
+    applications) and b) fixed by upcoming gcc patches by Phil Blundell
+    <pb@debian.org> in any event.
+  * debian/control (Build-Depends): likewise don't build-depend on
+    gcc-2.95 for arm.
+
+  * 101_ppc_as_shf_and_rel_fix.dpatch: new patch from Alan Modra
+    <amodra@bigpond.net.au> to fix an as regression where it refused to
+    compile utils.S from Linux/PPC 2.6.  Closes: #211668
+
+ -- James Troup <james@nocrew.org>  Tue, 23 Sep 2003 01:32:08 +0100
+
+binutils (2.14.90.0.6-2) unstable; urgency=low
+
+  * debian/rules (CONFLICTS): remove spurious "--", left over from
+    debhelper based-rules.  Fixes build failure on sparc.
+
+  * 200_alpha_null_got_ld_fix.dpatch: new patch from Daniel Jacobowitz
+    <dan@debian.org> to fix an ld crash on alpha with null .got sections.
+    Closes: #204615
+
+  * scripts/dpkg-arch.mk: remove.
+  * debian/rules: define DEB_BUILD_GNU_TYPE, DEB_HOST_ARCH and
+    DEB_HOST_GNU_TYPE here instead.
+
+  * debian/rules (binary-indep): use ':' as a separator to chown, rather
+    than '.' which is a legal character for a username.
+  * debian/rules (binary-arch): likewise.
+
+  * debian/rules: further trivial cleanups.
+
+ -- James Troup <james@nocrew.org>  Thu, 18 Sep 2003 22:13:36 +0100
+
+binutils (2.14.90.0.6-1) unstable; urgency=low
+
+  * New "upstream" release.
+   * Fixes core dump of nm -C on certain object files. Closes: #205616
+
+  * New maintainer.
+  * debian/control (Maintainer): adjust accordingly.
+  * debian/copyright: likewise.  Update copyright years, URL.
+  * debian/control (Standards-Version): bump to 3.6.1.0.
+
+  * 011_disable_combreloc_ARM_ONLY.diff: dropped on request of Phil
+    Blundell <pb@debian.org> - this is obsolete, it was working around a
+    bug in ld since fixed by Daniel Jacobowitz <dan@debian.org> upstream.
+
+  * 890-elf64_alpha_segfault.diff: dropped as bogus
+    (http://sources.redhat.com/ml/binutils/2003-04/msg00399.html); rth's
+    correct fix is already in the upstream source.
+
+  * debian/README.Debian: migrate nearly-obsolete debconf notes to here.
+  * debian/control (Depends): drop debconf.
+  * binutils.config, binutils.templates, binutils.templates.ca,
+    binutils.templates.fr, binutils.templates.ja,
+    binutils.templates.pt_BR, postrm.debhelper: obsolete, removed.
+    Closes: #189641, #198222
+
+  * Migrated from dbs...
+  * debian/README.build: obsolete; removed.
+  * debian/rules: remove $(BUILD_TREE)/, $(STAMP_DIR)/, $(unpacked), $(patched) and other references
+    to DBS.
+  * debian/rules (clean): remove build tree directories.
+  * debian/scripts/dbs-build.mk: unused, remove.
+  * debian/scripts/file2cat: likewise.
+
+  * ... to dpatch.
+  * debian/rules: include /usr/share/dpatch/dpatch.make.
+  * debian/rules (configure-single-stamp): depend on patch-stamp.
+  * debian/rules (configure-multi-stamp): likewise.
+  * debian/rules (clean): depend on unpatch.  Remove debian/patched.
+  * debian/control (Build-Depends): add dpatch.
+
+  * binutils-doc.postinst, binutils-doc.prerm,
+    binutils-multiarch.postinst, binutils-multiarch.postrm,
+    binutils-multiarch.preinst, binutils-multiarch.shlibs,
+    binutils.postinst, binutils.postrm, binutils.shlibs: new files based
+    on .deb and packages.d/.
+  * scripts/dh_split: obsolete, removed.
+  * debian/packages.d/binutils-dev.in, debian/packages.d/binutils-doc.in,
+    debian/packages.d/binutils-multiarch.in,
+    debian/packages.d/binutils.in: likewise.
+
+  * debian/rules: rewritten, de-debhelper-ized.
+  * debian/control (Build-Depends): drop debhelper and add file.
+
+ -- James Troup <james@nocrew.org>  Thu, 11 Sep 2003 22:08:18 +0100
+
+binutils (2.14.90.0.5-0.2) unstable; urgency=low
+
+  * NMU.
+  * Rebuild using fixed gcc on sparc (closes: #202924).
+
+ -- Matthias Klose <doko@debian.org>  Mon, 28 Jul 2003 20:12:00 +0200
+
+binutils (2.14.90.0.5-0.1) unstable; urgency=low
+
+  * NMU.
+  * New upstream version.
+  * Remove patches applied upstream:
+    - debian/patches/500_s390_gas.diff
+    - debian/patches/905-hppa_visibility.diff
+    - debian/patches/906-mips_ld_fix.diff
+  * Updated patch:
+    - debian/patches/906-hjl_libtool_dso.diff
+
+ -- Matthias Klose <doko@debian.org>  Wed, 23 Jul 2003 20:09:51 +0200
+
+binutils (2.14.90.0.4-0.1) unstable; urgency=low
+
+  * NMU
+  * New upstream version.
+    1. Work around the brain dead libtool.
+  * New patches:
+    - debian/patches/500_s390_gas.diff (closes: #194929).
+    - debian/patches/905-hppa_visibility.diff (closes: #195203).
+    - debian/patches/906-mips_ld_fix.diff (closes: #195207).
+    - debian/patches/906-hjl_libtool_dso.diff
+
+ -- Matthias Klose <doko@debian.org>  Sat, 31 May 2003 12:12:10 +0200
+
+binutils (2.14.90.0.3-0.1) unstable; urgency=low
+
+  * NMU
+  * New upstream version.
+    1. Update from binutils 2003 0523.
+    2. Fix 2 ELF visibility bugs.
+    3. Fix ELF/ppc linker bugs.
+  * Remove patches applied upstream:
+    - debian/patches/903-hjl_ld-dso-test.diff
+    - debian/patches/904_hjl_hppa_whitespace.diff
+
+ -- Matthias Klose <doko@debian.org>  Sat, 24 May 2003 09:02:54 +0200
+
+binutils (2.14.90.0.2-0.1) unstable; urgency=low
+
+  * NMU
+  * New upstream version.
+    1. Update from binutils 2003 0515.
+    2. Fix various ELF visibility bugs.
+    3. Fix some ia64 linker bugs.
+    4. Add more IAS compatibilities to ia64 assembler.
+  * New patches:
+    - debian/patches/903-hjl_ld-dso-test.diff (closes: #193505).
+    - debian/patches/904_hjl_hppa_whitespace.diff.
+  * Remove patches applied upstream:
+    - debian/patches/900_binutils-2.14.90.0.1-empty-test.diff
+    - debian/patches/901-hjl_weaksymfix.diff
+
+ -- Matthias Klose <doko@debian.org>  Sun, 18 May 2003 10:50:00 +0200
+
+binutils (2.14.90.0.1-0.1) unstable; urgency=low
+
+  * NMU
+  * New upstream version.
+    - Fix: MIPS branch-to-global bug (closes: #189031).
+    - Fix: Crash on alpha with --gdwarf2 and bad file number (closes: #187211).
+    - Fix: objdump -R BFD ICE on prelinked binaries (closes: #180088).
+  * New patches:
+    - debian/patches/900_binutils-2.14.90.0.1-empty-test.diff
+    - debian/patches/901-hjl_weaksymfix.diff
+  * Remove patches applied upstream:
+    - debian/patches/002_ldlex_inflexible_transition.diff
+    - debian/patches/013_objdump_doc_fix.diff
+    - debian/patches/850_hppa_stub_fix.diff
+    - debian/patches/860_m68k_elf.diff
+    - debian/patches/861_m68k_elf.diff
+    - debian/patches/870-sparc64-update.diff
+    - debian/patches/880-alpha-update.diff
+  * Remove obsolete patch:
+    - debian/patches/patches/800_hjl_mips_fixes.diff
+  * Add x86_64 for the i386 binutils package and the binutils-multiarch
+    package (closes: #189350).
+  * Set CFLAGS to -g -O2 for build (closes: #181268).
+
+ -- Matthias Klose <doko@debian.org>  Tue,  6 May 2003 09:58:14 +0200
+
+binutils (2.13.90.0.18-1.7) unstable; urgency=high
+
+  * NMU
+  * Fixed ld segv (replaced yy_current_buffer by YY_CURRENT_BUFFER)
+    (Closes: #188876, 188900, 188912)
+
+ -- Julien LEMOINE <speedblue@debian.org>  Mon, 14 Apr 2003 04:45:03 +0200
+
+binutils (2.13.90.0.18-1.6) unstable; urgency=high
+
+  * NMU
+  * [002_ldlex_inflexible_transition.diff] New. Make ld buildable again with
+    sid's current flex.
+
+ -- J.H.M. Dassen (Ray) <jdassen@debian.org>  Sun, 13 Apr 2003 16:54:46 +0200
+
+binutils (2.13.90.0.18-1.5) unstable; urgency=medium
+
+  * NMU
+  * [890-elf64_alpha_segfault.diff] Patch from Julien LEMOINE
+    <speedblue@debian.org> to fix the segfault encountered while building
+    gal on alpha. (Closes: #185556)
+  * sid's current flex breaks the building of several packages, including this
+    one; see #188665. The i386 upload is built using a pbuilder sid chroot
+    with flex downgraded to the sarge version.
+
+ -- J.H.M. Dassen (Ray) <jdassen@debian.org>  Sun, 13 Apr 2003 13:44:17 +0200
+
+binutils (2.13.90.0.18-1.4) unstable; urgency=low
+
+  * NMU
+  * ld/emulparams/elf64_sparc.sh: Set LIBPATH_SUFFIX instead of suffix
+    for emulation. Patch from current CVS suggested by Clint Adams,
+    needed for sparc64 glibc build.
+  * bfd/elf64-alpha.c: Patch from current CVS suggested by Falk Hueffner,
+    needed to build xstow, kdegames (#181623), sfs.
+  * Explicitely fail, when trying to build with glibc-2.3 on arm and
+    m68k. See #184048 for m68k ld failures.
+
+ -- Matthias Klose <doko@debian.org>  Tue,  8 Apr 2003 23:27:46 +0200
+
+binutils (2.13.90.0.18-1.3) unstable; urgency=low
+
+  * NMU
+  * Another fix for ELF/m68k (__bb_exit_func initialization).
+
+ -- Matthias Klose <doko@debian.org>  Tue, 18 Mar 2003 00:05:47 +0100
+
+binutils (2.13.90.0.18-1.2) unstable; urgency=high
+
+  * NMU
+  * Apply upstream fix for ELF/m68k.  Closes: #182313.
+  * Use gcc-2.95 on m68k-linux. Built on testing (glibc-2.2).
+
+ -- Matthias Klose <doko@debian.org>  Sun,  9 Mar 2003 01:02:39 +0100
+
+binutils (2.13.90.0.18-1.1) unstable; urgency=low
+
+  * NMU
+  * Apply upstream fix for hppa stubs.  Closes: #181397
+
+ -- LaMont Jones <lamont@debian.org>  Wed, 19 Feb 2003 12:34:58 -0700
+
+binutils (2.13.90.0.18-1) unstable; urgency=low
+
+  * New upstream version (synced with CVS 2002-01-21)
+  * Upstream: Fix an ia64 gas bug
+  * Upstream: Fix some TLS bugs
+  * Upstream: Fix ELF/ppc bugs
+  * Upstream: Fix an ELF/m68k bug
+  * Corrected ARM combreloc disabling patch
+    (closes: Bug#175204)
+  * Upstream fixes take care of TEXTREL bug
+    on powerpc (closes: Bug#176084)
+  * Fixed shellutils dependency problem
+    (closes: Bug#175673)
+  * Removed mention of the monitor manpage
+    from the gprof manpage (closes: Bug#160654)
+
+ -- Christopher C. Chimelis <chris@debian.org>  Sun, 2 Feb 2003 23:17:29 -0500
+
+binutils (2.13.90.0.16-1) unstable; urgency=low
+
+  * New upstream version (synced with CVS 2002-11-26)
+  * Upstream: Include /usr/bin/c++filt
+  * Upstream: Fix "ld -r" with exception handling
+
+ -- Christopher C. Chimelis <chris@debian.org>  Mon, 9 Dec 2002 19:14:02 -0500
+
+binutils (2.13.90.0.14-1) unstable; urgency=low
+
+  * New upstream version (synced with CVS 2002-11-14)
+  * Upstream: Fix ELF/alpha bugs
+  * Upstream: Fix an ELF/i386 assembler bug
+  * Updated package MIPS patch from HJ Lu
+  * Added s390 patches from Gerhard Tonn.
+    Actually, the patches to support s390x were
+    already included upstream, so I just enabled
+    it in the rules script (closes: Bug#168074, Bug#168974)
+  * Since powerpc64-linux support was already
+    added in a prior upload, I'm closing the
+    wishlist bug for it (closes: Bug#156955)
+
+ -- Christopher C. Chimelis <chris@debian.org>  Tue, 20 Nov 2002 05:36:21 -0500
+
+binutils (2.13.90.0.10-2) unstable; urgency=low
+
+  * Added two patches from upstream to fix alpha BFD.
+    (closes: Bug#165633)
+
+ -- Christopher C. Chimelis <chris@debian.org>  Sun, 27 Oct 2002 14:21:51 -0400
+
+binutils (2.13.90.0.10-1) unstable; urgency=low
+
+  * New upstream version (synced with CVS 2002-10-10)
+  * Upstream: More ELF/PPC linker bug fixes.
+  * Upstream: Fix an ELF/alpha linker bug.
+  * Upstream: Fix an ELF/sparc linker bug to support
+    Solaris.
+  * Upstream: More TLS updates.
+  * Updated m68k gcc 3.1 patch since it wasn't applying
+    cleanly. Is this still needed?
+  * Added patches to allow building with new bison
+    (closes: Bug#164436, Bug#164042)
+  * Should be better for prelink support, which is coming
+    soon (closes: Bug#161427)
+  * Removed windres manpage from all packages
+    (closes: Bug#157415)
+  * Fixed download location in copyright file
+    (closes: Bug#158028)
+  * Added i386-gnu to multiarch build targets
+    (closes: Bug#157057)
+  * Add alpha opcode patch from Falk Hueffner
+    (closes: Bug#164201)
+  * Remove .la files from packages
+    (closes: Bug#160455)
+
+ -- Christopher C. Chimelis <chris@debian.org>  Mon, 15 Oct 2002 20:22:29 -0400
+
+binutils (2.13.90.0.4-1) unstable; urgency=low
+
+  * New upstream version (synced with CVS 2002-08-)
+  * Upstream: Update from binutils 2002 0814
+  * Upstream: Fix symbol versioning bugs for gcc 3.2
+  * Upstream: Fix mips gas
+  * Upstream: Fix an x86 TLS bfd bug
+  * Upstream: Fix an x86 PIC gas bug
+
+ -- Christopher C. Chimelis <chris@debian.org>  Thu, 15 Aug 2002 20:13:44 -0400
+
+binutils (2.12.90.0.15-2) unstable; urgency=low
+
+  * Fix combreloc disabling patch for ARM
+    (closes: Bug#156315)
+  * Remove S390 patch since it is no longer
+    needed (thanks to Gerhard Tonn for checking
+    this out)
+  * Fix BFD version string escaping
+    (closes: Bug#154989)
+  * Add SH patch from Yaegashi Takeshi
+    (closes: Bug#156230)
+  * Added conflicts for older modutils
+    (closes: Bug#155324)
+  * Forgot to apply MIPS patch from HJ Lu
+    (apologies to MIPS folks)
+
+ -- Christopher C. Chimelis <chris@debian.org>  Wed, 14 Aug 2002 13:09:12 -0400
+
+binutils (2.12.90.0.15-1) unstable; urgency=low
+
+  * New upstream version (synced with CVS 2002-07-17)
+  * Upstream: Fix an ia64 assembler bug
+  * Upstream: Fix a symbol versioning bug
+  * Upstream: You have to apply the modutils patch
+    enclosed here in order to support System.map
+    generated by the new nm (bug filed)
+  * The symbol visibility patch is included
+    upstream, as is the alpha PLT/GOT patch, so
+    both removed from my packaging.
+  * Included patch from upstream to fix RELA targets
+    (closes: Bug#153729)
+
+ -- Christopher C. Chimelis <chris@debian.org>  Thu, 2 Aug 2002 02:24:29 -0400
+
+binutils (2.12.90.0.14-2) unstable; urgency=low
+
+  * The "Let's Get This Party Started Right" upload
+    (since I'm closing as many old bugs as possible)
+  * Removed sparc patch altogether
+  * Added a small alpha patch from upstream to fix
+    some obscure PLT/GOT issues.
+  * Manpages are now fixed finally -- no more
+    I<symbol> (closes: Bug#108369)
+  * Have not gotten another report of the
+    debconf message being cut off, so I'm closing
+    the debconf-related bug.  I suspect this may
+    have been a problem in the debconf front-end
+    being used, but I have not been able to reproduce
+    it (closes: Bug#149045)
+  * Closing a bug report that I had tagged moreinfo
+    a LONG time ago (over one year), but never got
+    more info on.  I have not heard of this kind
+    of problem since, nor have I been able to
+    reproduce it at any time since (closes: Bug#105986).
+    For interested parties, it revolved around
+    allowing gcc to show a linker error, but the
+    reporter didn't know about the -v option for
+    gcc.  There was a linker problem, but it appeared
+    to be either hardware failure or user error.
+  * Closing a demangler 'bug' that revolved around
+    stripping @PLT from symbol names.  Since the
+    PLT suffix is documented, I'm going to close
+    this bug.  Also, it doesn't help that the symbol
+    in the bug report uses an obsolete mangling style,
+    so I can't test this even if I wanted to
+    (closes: Bug#45889)
+
+ -- Christopher C. Chimelis <chris@debian.org>  Mon, 22 Jul 2002 12:54:01 -0400
+
+binutils (2.12.90.0.14-1) unstable; urgency=low
+
+  * New upstream version (synced with CVS 2002-06-27)
+  * Upstream: Fix a mips assembler bug
+  * Upstream: Fix an ELF/mips SHF_MERGE bug
+  * Upstream:  Fix a linker bug which leads to the
+    incorrect Linux 2.2 kernel.
+  * PE patch removed since it is included
+    in upstream source now
+  * Includes some patches which allow for
+    more true testsuite results from gcc-3.1
+  * Fix sparc ld emulation script patches to get
+    rid of the lib/64 silliness (now uses lib64)
+  * Removed the L word from the package description
+    since Debian is no longer linux-only
+    (closes: Bug#150575)
+  * The strings dereferencing problem with
+    some Windows binaries seems to also be fixed now
+    (closes: Bug#121366)
+  * Added a patch to only generate an RPATH entry
+    if LD_RUN_PATH is not empty, for cases where
+    -rpath isn't specified (closes: Bug#151024)
+  * Fixed arch detection problem in the build
+    scripts.
+  * Fixed bad capitalisation of -g in the objdump
+    manpage (closes: Bug#152697)
+  * Added patch from HJ Lu to fix a symbol
+    visibility issue.
+
+ -- Christopher C. Chimelis <chris@debian.org>  Wed, 17 Jul 2002 14:23:42 -0400
+
+binutils (2.12.90.0.9-1) unstable; urgency=low
+
+  * New upstream version (synced with CVS 2002-05-26).
+  * Upstream: Supports "-z muldefs"
+  * Updated PE bfd from CVS to fix auto-import
+    segfaults (closes: Bug#131407)
+  * Remove the PE-removing patch for i386 targets
+    due to the above
+
+ -- Christopher C. Chimelis <chris@debian.org>  Thu, 6 Jun 2002 15:52:29 -0400
+
+binutils (2.12.90.0.7-1) unstable; urgency=low
+
+  * New upstream version (synced with CVS 2002-04-23).
+  * Upstream: ELF EH frame bug fix
+  * Upstream: MIPS ELF visibility bug fix
+  * Upstream: Bug fixes for ELF/sparc
+  * Upstream: Bug fixes for ELF/cris
+  * Upstream: Fix linking a.out relocatable files
+    with ELF
+  * Upstream: Fix a PPC altivec assembler bug
+  * Numerous upstream changes since I have
+    deliberately not updated in awhile so that
+    I could stabilise the package for woody
+    release
+  * Fixed a glaring typo in the Debian additions
+    to the version string.
+  * Upstream incorporated --oformat
+    documentation patch; removed.
+  * Added a patch from upstream involving
+    relative relocs on Alpha
+  * Removed configure.info-[1-3] from -doc
+    (closes: Bug#146205)
+
+ -- Christopher C. Chimelis <chris@debian.org>  Sun, 5 Apr 2002 04:52:33 -0400
+
+binutils (2.12.90.0.1-5) unstable; urgency=high
+
+  * Added a patch to m68k bits for gas to allow
+    gcc 3.1 to build
+  * Added Brazilian Portuguese translation for
+    debconf (closes: Bug#144677)
+  * Removed unneeded gasp manpage since gasp
+    was eliminated as a distinct binary
+    (closes: Bug#144583)
+
+ -- Christopher C. Chimelis <chris@debian.org>  Mon, 29 Apr 2002 14:40:21 -0400
+
+binutils (2.12.90.0.1-4) unstable; urgency=low
+
+  * Added patch from Gerhardt Tonn
+    to fix s390 merge problem (closes: Bug#143187)
+  * Corrected DOW of my last changelog entry :-P
+
+ -- Christopher C. Chimelis <chris@debian.org>  Thu, 18 Apr 2002 13:03:49 -0400
+
+binutils (2.12.90.0.1-3) unstable; urgency=low
+
+  * Oops...I used dpkg-architecture from dpkg-dev
+    in the postinst and didn't add a dependency
+    for it.  It was a bad choice anyway and I'm
+    going to use uname -s instead
+    (closes: Bug#142744, Bug#142915)
+
+ -- Christopher C. Chimelis <chris@debian.org>  Mon, 15 Apr 2002 12:41:10 -0400
+
+binutils (2.12.90.0.1-2) unstable; urgency=low
+
+  * Added Catalan debconf translation
+    (closes: Bug#139740)
+  * Ensure that info entries are removed from the
+    texinfo dirfile when binutils-doc is removed
+    (closes: Bug#126557)
+  * Ensure that the kernel link debconf warning
+    only shows up on linux systems
+    (closes: Bug#142360)
+
+ -- Christopher C. Chimelis <chris@debian.org>  Thu, 13 Mar 2002 01:30:22 -0400
+
+binutils (2.12.90.0.1-1) unstable; urgency=high
+
+  * New upstream version (synced with CVS 2002-03-07).
+  * Upstream: Add the .preinit_array/.init_array/.fini_array
+    support.
+  * Upstream: Fix eh_frame.
+  * Upstream: Turn on combreloc by default.
+  * Upstream: Enable gprof for Linux/mips.
+  * Turn combreloc off for ARM explicitely until
+    I can confirm that PIC is not still broken
+    by using it.
+  * Remove IA-64 unwind patch and objcopy fix
+    since they are included in the upstream sources
+    now.
+  * Re-enable testsuite run since Randolph did the NMU
+    on dejagnu (thank you!).
+  * Appears to fix sparc64 linking problems.  I'm
+    still looking into exactly what was going on with
+    that (closes: Bug#137850)
+  * Enabled hppa64-linux support in main binutils
+    package (closes: Bug#137955)
+  * Added Japanese debconf template.  Thanks to
+    Tomohiro KUBOTA for supplying that
+    (closes: Bug#138112)
+  * Added patch for ld to fix dosemu problems
+    (closes: Bug#126863)
+
+ -- Christopher C. Chimelis <chris@debian.org>  Mon, 11 Mar 2002 14:02:45 -0500
+
+binutils (2.11.93.0.2-3) unstable; urgency=high
+
+  * Split translated debconf templates out.
+    I apparently misunderstood the instructions
+    on integrating the French translation since
+    this is my first real attempt at using
+    debconf (closes: Bug#136295)
+  * Disable combreloc default on ARM since it
+    breaks PIC, apparently (closes: Bug#134241)
+    Please test other ARM bugs against this
+    version and inform me of the results!
+
+ -- Christopher C. Chimelis <chris@debian.org>  Fri, 8 Mar 2002 19:10:10 -0500
+
+binutils (2.11.93.0.2-2) unstable; urgency=high
+
+  * Include a patch from upstream to fix stripping
+    archives containing multiple files with the
+    same name (like libgcj, unfortunately).
+    (closes: Bug#107812)
+  * Include IA64 unwind fix from CVS to fix kernel
+    linking on IA64. (closes: Bug#135143)
+  * Added French translation of the debconf
+    bits.  Thanks to Denis Barbier for the
+    work on that. (closes: Bug#134626)
+  * Disabled testsuite run until dejagnu is
+    fixed.  I'm leaving the build-dep for dejagnu
+    in, though, since I know I'll forget to
+    reinsert it when I do re-enable the testsuite
+    run.
+
+ -- Christopher C. Chimelis <chris@debian.org>  Fri, 22 Feb 2002 14:05:22 -0500
+
+binutils (2.11.93.0.2-1) unstable; urgency=high
+
+  * New upstream version (synced with CVS 2002-02-07).
+  * Upstream: Fix a weak symbol alpha linker bug for glibc.
+  * Upstream: More support for gcc 3.1.
+  * Keep on disabling efi-app-ia32 type targets
+    since the segfault is still unfixed in CVS and
+    I haven't had the time to go back and really
+    debug and fix this.
+  * Updated standards version.
+  * Corrected some of the lintian problems (all except
+    the ones involving Changelog.linux, the .comment
+    section, and the missing manpages for
+    binutils-multiarch's binaries since that package
+    depends on binutils, which provides those).
+
+ -- Christopher C. Chimelis <chris@debian.org>  Wed, 13 Feb 2002 13:41:47 -0500
+
+binutils (2.11.92.0.12.3-7) unstable; urgency=high
+
+  * The "Remind Me To Think Next Time" upload.
+  * Fix the postinst to only compare versions on
+    upgrade rather than during configure.
+    (closes: Bug#133349, Bug#133514)
+  * Still working on the other bugs...if only
+    I could get a day off of work...
+
+ -- Christopher C. Chimelis <chris@debian.org>  Tue, 12 Feb 2002 06:15:02 -0500
+
+binutils (2.11.92.0.12.3-6) unstable; urgency=high
+
+  * The "Make The Bad Man Stop" upload.
+  * Revert patch to bfd/elf32-sparc.c (already
+    reverted upstream) that broke UA32 relocs on sparc
+    and caused bus errors with C++/Java binaries
+    (closes: Bug#126162)
+  * Remove i486-mingw32 target from the enabled
+    in multiarch and removed efi-app-ia32 from the
+    BFD config for Intel linux targets until I can find
+    and fixthe segfaults that seem to keep coming up when
+    reading Windows files and viruses with objdump or
+    strings.  This is only temporary, so I'm not closing
+    the bugs until the problem gets fixed, but
+    I am going to bump them down to wishlist, merge
+    them, and note the above in them.
+    (debian/patches/010_disable_efi_app_ia32_TEMPORARY.diff
+    disables the efi-app-ia32 BFD in case someone
+    wants to revert this change easily)
+  * Added debconf warning about the kernel linking
+    situation since it keeps coming up and people
+    keep initially disagreeing with me about this
+    being a kernel bug.  Also, merged prior warning
+    about -oformat change into the same debconf warning
+    (it's two, two, two warnings in one).  This makes
+    the DEBIAN_FRONTEND case bug moot (closes: Bug#131801)
+  * Added powerpc64-linux target to multiarch since
+    work is progressing on that target and the machines
+    are due to hit the shelves Very Soon(TM).
+
+ -- Christopher C. Chimelis <chris@debian.org>  Fri, 1 Feb 2002 17:06:29 -0500
+
+binutils (2.11.92.0.12.3-5) unstable; urgency=high
+
+  * Fix signed char assumption in i386 disassembly bits
+    (closes: Bug#126993)
+
+ -- Christopher C. Chimelis <chris@debian.org>  Mon, 8 Jan 2002 17:27:17 -0500
+
+binutils (2.11.92.0.12.3-4) unstable; urgency=high
+
+  * Go back to enabling archs by enumeration for
+    multiarch.  Apparently, a few aren't enabled
+    with --enable-targets=all (sparc64-linux, namely).
+    Besides, multiarch was incredibly large, which
+    was probably unneeded.
+
+ -- Christopher C. Chimelis <chris@debian.org>  Wed, 26 Dec 2001 13:53:49 -0500
+
+binutils (2.11.92.0.12.3-3) unstable; urgency=high
+
+  * Include patch from Alan Modra to fix more
+    refcount problems on hppa.
+
+ -- Christopher C. Chimelis <chris@debian.org>  Fri, 7 Dec 2001 05:42:04 -0500
+
+binutils (2.11.92.0.12.3-2) unstable; urgency=high
+
+  * Include patch from Alan Modra to fix hppa linking
+    woes wrt undefined symbols (closes: Bug#121993)
+
+ -- Christopher C. Chimelis <chris@debian.org>  Wed, 5 Dec 2001 04:14:51 -0500
+
+binutils (2.11.92.0.12.3-1) unstable; urgency=high
+
+  * New upstream version (synced with CVS 2001-11-21)
+  * Upstream: Fix a linker symbol version bug
+    for common symbols.
+  * Upstream: Update handling relocations against
+    the discarded sections. You may need to apply
+    the kernel patch enclosed here to your kernel
+    source.
+  * Upstream: Support "-march=xxx -mipsN" for mips
+    gas if they are compatible.
+  * Upstream: Fix a regression when linking with
+    non-ELF object files.
+  * Includes Alan Modra's patch to reduce stub sizes
+    on HPPA.  Should help C++ on HPPA.
+  * Once again includes a mips patch from HJ Lu.
+  * My documentation changes were cleaned up and
+    accepted upstream, so the gas manpage fixes go
+    away (hurray!).
+  * Stopped iterating targets for binutils-multiarch
+    and started enabling all of them.  This saves
+    maintenance time since new targets will be
+    automatically supported in future uploads
+    and existing targets that I didn't include
+    before will be supported from now on.  This may
+    grow build time and the libbfd in the multiarch
+    package, but it's worth it.
+  * Also, started using the --enable-64-bit-bfd
+    flag for configuring multiarch.  I don't know
+    why I didn't realise this wasn't there before
+    since I test with it all of the time.
+
+ -- Christopher C. Chimelis <chris@debian.org>  Fri, 30 Nov 2001 20:11:42 -0500
+
+binutils (2.11.92.0.10-4) unstable; urgency=high
+
+  * The "Fingers crossed" upload.
+  * Enable combreloc by default for s390 again.
+    Rumour has it that it worked before, but there
+    was a misunderstanding in the s390 developer
+    community, hence the disabling in the past.
+  * Fix the ld texinfo file to not mention the old
+    oformat invocation (closes: Bug#116182)
+  * Next upload should include the mips updates and
+    some powerpc updates.  I just need time to test
+    those out first.
+
+ -- Christopher C. Chimelis <chris@debian.org>  Fri, 23 Nov 2001 23:23:22 -0500
+
+binutils (2.11.92.0.10-3) unstable; urgency=high
+
+  * Replace HPPA reloc patch with patches from Alan
+    Modra upstream.
+  * Add upstream patch to fix quoted -rpath bug
+    (closes: Bug#107214)
+
+ -- Christopher C. Chimelis <chris@debian.org>  Sat, 10 Nov 2001 18:19:05 -0400
+
+binutils (2.11.92.0.10-2) unstable; urgency=high
+
+  * Disable -z combreloc enable patch on S/390
+    since it's not supported there yet
+    (closes: Bug#117087)
+
+ -- Christopher C. Chimelis <chris@debian.org>  Fri, 26 Oct 2001 00:07:01 -0400
+
+binutils (2.11.92.0.10-1) unstable; urgency=high
+
+  * New upstream version (synced with CVS 2001-10-21)
+  * Upstream: Fix the ELF/PPC linker.
+  * Upstream: Fix the ELF/cris linker.
+  * Upstream: Fix ELF strip.
+  * Includes beginnings of Altivec support
+    (closes: Bug#98617)
+  * Fixes use of BookE instruction format on 4xx
+    PowerPC (closes: Bug#116627)
+  * Includes patches from Alan Modra to fix hppa
+    relocations.
+  * Forgot to close the previous PPC bug with last
+    upload (closes: Bug#116454)
+  * Moved to enclosing a bzipped tarball rather than
+    a gzipped one to save download time for everyone
+    involved.  Build-deps adjusted accordingly.
+
+ -- Christopher C. Chimelis <chris@debian.org>  Tue, 23 Oct 2001 03:29:49 -0400
+
+binutils (2.11.92.0.7-2) unstable; urgency=high
+
+  * Include a patch from H.J Lu to fix a powerpc
+    issue not shown in the testsuite results.
+
+ -- Christopher C. Chimelis <chris@debian.org>  Fri, 19 Oct 2001 00:49:04 -0400
+
+binutils (2.11.92.0.7-1) unstable; urgency=high
+
+  * New upstream release (synced with CVS 2001-10-16)
+  * Upstream:  Fix all breakages introduced in 2.11.92.0.5
+  * No mips/ dir patches need to be applied with this one.
+    Woohoo!
+  * Removed patches from debian/patches that are already
+    applied upstream.
+  * Patched version strings to reflect that this is a
+    Debian release at the request of upstream (to prevent
+    confusion, apparently).
+  * Applied patch from H.J. Lu to fix mips section
+    misalignment.
+  * Applied patch from Jakub Jelinek to fix kernel linking
+    on i386 and possibly other archs (closes: Bug#116041)
+  * Fixed postinst and prerm for binutils-doc to test that
+    the files exist before calling install-info.  This should
+    fix the odd circumstance when binutils-doc is packaged on
+    an arch that doesn't support gprof (or any other dir for
+    that matter) and, therefore, the docs that are usually
+    made in that dir aren't made.  This is particularly true
+    with gprof on mips.
+
+ -- Christopher C. Chimelis <chris@debian.org>  Wed, 17 Oct 2001 18:56:51 -0400
+
+binutils (2.11.92.0.5-3) unstable; urgency=high
+
+  * Enable -z combreloc on all targets. This will make
+    prelinking possible with the prelink package.  Please
+    test this on all archs prior to upload.  If it fails, file
+    a bug immediately and I'll disable the patch for that
+    platform.
+  * Added patches from Alan Modra (from CVS) to fix other
+    archs after the refcount patch broke them.  This supercedes
+    the powerpc patch, so I replaced that with this.
+    (closes: Bug#115218)
+  * Added patch from H.J. Lu (from CVS) to fix IA64 linker
+    problems as well.
+  * Added patch from David Kimdon to specify which filename is
+    causing an error if that filename is a dir (closes: Bug#45832).
+  * Removed workaround patch for stabs problem on Alpha since
+    it appears to be causing problems on mips and is no longer
+    needed on Alpha anyway.
+  * Now runs the testsuite and includes the results in the
+    binutils package for reference.
+
+ -- Christopher C. Chimelis <chris@debian.org>  Sat, 13 Oct 2001 15:10:20 -0400
+
+binutils (2.11.92.0.5-2) unstable; urgency=high
+
+  * Applied fix from H.J. Lu to fix PowerPC target
+    (closes: Bug#115285).  Thanks to Jack Howarth
+    for forcing the issue upstream.
+
+ -- Christopher C. Chimelis <chris@debian.org>  Fri, 12 Oct 2001 23:14:51 -0400
+
+binutils (2.11.92.0.5-1) unstable; urgency=high
+
+  * New upstream release (synced with CVS 2001-10-05)
+  * Upstream: Support gcc 3.1 for IA64.
+  * Upstream: Support prelink for ELF/PPC.
+  * Upstream: Fix an ELF/x86 linker bug for Oracle
+    (closes: Bug#113614)
+  * Upstream: Fix a weak symbol bug.
+  * Upstream: Support locale.
+
+ -- Christopher C. Chimelis <chris@debian.org>  Tue, 9 Oct 2001 19:53:49 -0400
+
+binutils (2.11.90.0.31-2) unstable; urgency=high
+
+  * Applied IA64 patch from CVS to fix gcc issues
+    on IA64.
+
+ -- Christopher C. Chimelis <chris@debian.org>  Mon, 24 Sep 2001 12:45:29 -0400
+
+binutils (2.11.90.0.31-1) unstable; urgency=high
+
+  * New upstream source (synced with CVS 2001-08-30)
+  * Upstream: Fix a MIPS linker bug.
+  * Now applying mips diffs from H.J. Lu (upstream)
+    for better MIPS and MIPS64 support.
+  * Applied patch from Christopher Cramer to fix
+    gasp .REG issue (closes: Bug#110560)
+
+ -- Christopher C. Chimelis <chris@debian.org>  Sat, 1 Sep 2001 23:42:22 -0400
+
+binutils (2.11.90.0.29-1) unstable; urgency=high
+
+  * New upstream source (synced with CVS 2001-08-27)
+  * Upstream: Fix an Alpha assembler bug.
+  * Upstream: Fix an IA64 linker bug.
+  * Upstream: Fix a MIPS linker bug.
+  * Upstream: Support '-z combreloc|nocombreloc' in linker.
+
+ -- Christopher C. Chimelis <chris@debian.org>  Thu, 30 Aug 2001 04:48:04 -0400
+
+binutils (2.11.90.0.27-4) unstable; urgency=high
+
+  * Argh.  Really remove the manpages from multiarch
+    this time (closes: Bug#110410)
+
+ -- Christopher C. Chimelis <chris@debian.org>  Tue, 28 Aug 2001 14:32:34 -0400
+
+binutils (2.11.90.0.27-3) unstable; urgency=high
+
+  * Include hppa patch to force error
+    (closes: Bug#109173)
+  * Fix manpages - seems that I accidentally included
+    the multiarch manpages rather than the target
+    manpages (sorry).
+  * Partial update to as manpage to denote arch options
+    and added options for the rest of the targets
+    Still need to elaborate on them, though.  More
+    changes are forthcoming (closes: Bug#110127)
+
+ -- Christopher C. Chimelis <chris@debian.org>  Mon, 27 Aug 2001 10:13:27 -0400
+
+binutils (2.11.90.0.27-2) unstable; urgency=high
+
+  * Remove bash dependency...ash's behaviour has
+    already been modified, so it should be able
+    to build binutils now (closes: Bug#106992)
+  * Includes new S/390 patch (closes: Bug#109300)
+  * Could never reproduce objdump segfault and
+    never got a reply on the bug report
+    (closes: Bug#93884)
+  * Can't reproduce m68k segfault either
+    (closes: Bug#87714)
+
+ -- Christopher C. Chimelis <chris@debian.org>  Mon, 20 Aug 2001 23:07:30 -0400
+
+binutils (2.11.90.0.27-1) unstable; urgency=high
+
+  * New upstream source (synced with 20010810 CVS)
+  * Upstream: Fixed x86 linker bug.
+  * Reverted a patch to gas to dodge a bug in STABS output
+    on Alpha using gcc 2.95.4, so alpha can be in sync
+    with the rest of the archs now.
+  * Fixes strip problems with busybox (closes: Bug#106593)
+  * Kernels should compile ok again on i386
+    (closes: Bug#107190)
+
+ -- Christopher C. Chimelis <chris@debian.org>  Thu, 16 Aug 2001 08:24:49 -0400
+
+binutils (2.11.90.0.25-1) unstable; urgency=high
+
+  * New upstream source (synced with 20010726 CVS)
+  * Upstream: fix i386 assembler bug.
+  * Upstream: "make check" has 2 failures in the
+    ld-selective test in ld on Linux/alpha. They
+    should be marked xfail. Fixed in the next release.
+  * Removed m68k patch (closes: Bug#106431)
+  * Man pages appear to be correctly generated now
+    (closes: Bug#98569, Bug# 98938)
+  * Added bash build dependency (closes: Bug#106992)
+  * Should compile ok on powerpc (the last one did
+    also...don't know why voltaire's build daemon failed).
+    I won't close this bug until I build it myself
+    on voltaire or hear back from the autobuilder folks
+    on PPC.
+  * Looking into the whole LD_LIBRARY_PATH issue that
+    keeps being brought up.  I think the docs are wrong
+    because the templates say that it shouldn't obey that
+    at all.  Can we please stop filing duplicate bugs for
+    this?  I would greatly appreciate it...
+
+ -- Christopher C. Chimelis <chris@debian.org>  Wed, 1 Aug 2001 07:06:52 -0400
+
+binutils (2.11.90.0.24-1) unstable; urgency=high
+
+  * New upstream source (synced with 20010714 CVS)
+  * DO NOT COMPILE FOR ALPHA.  I need to fix gcc 2.95.4
+    prior to this release working on Alpha correctly
+    (long story).
+  * Upstream: Avoid COPY relocs on i386
+  * Upstream: Fix IA64 assembler (please try this and let me know)
+  * Upstream: Fix a static linking the PIC object files on ia32
+  * Upstream: Add the version script support for --export-dynamic
+  * Upstream: Fix sparc/elf for linux/sparc
+  * Upstream: Fix alpha/elf for gcc 3.0
+  * Supposedly required for gcc-3.0 usage on many platforms
+  * Add s390 to multiarch list (closes: Bug#98095)
+  * Supposedly good on mips, but please check.  I emailed Ryan
+    to see if bug 98095 still happens, but never got a reply.
+    If I get around it, I'll check it myself since my mips
+    lives once again.
+  * Retake my package from Matt (next time we agree to an NMU,
+    please don't change the maintainer name...no wonder I didn't
+    get any bug reports!)
+  * Cross-compilation support will be added in the next upload
+    (I'll be uploading alpha debs with the next release as well,
+    the alpha problem outweighs cross-compilation support in
+    priority right now).
+
+ -- Christopher C. Chimelis <chris@debian.org>  Thu, 19 Jul 2001 05:12:05 -0400
+
+binutils (2.11.90.0.7-2) unstable; urgency=high
+
+  * Applied patch from Alan Modra to fix m68k
+    assertion problems (closes: Bug#96352)
+  * Applied srec patch from Richard Henderson for
+    alpha.
+
+ -- Christopher C. Chimelis <chris@debian.org>  Wed, 9 May 2001 03:11:19 -0400
+
+binutils (2.11.90.0.7-1) unstable; urgency=high
+
+  * New upstream source (synced with 20010425 CVS)
+  * Upstream: Fix the -Bsymbolic bug introduced in
+    binutils 2.11.90.0.5 (closes: Bug#95168)
+
+ -- Christopher C. Chimelis <chris@debian.org>  Sun, 29 Apr 2001 20:03:22 -0400
+
+binutils (2.11.90.0.5-1) unstable; urgency=high
+
+  * New upstream source (synced with 20010414 CVS)
+  * Upstream: Fix in IA64 assembler
+  * Upstream: Change Linux/MIPS to use SVR4 MIPS ABI
+    rather than IRIX ABI.
+  * The above change may cause problems for MIPS.
+    If so, please file a bug and I'll revert those
+    changes if need be.  I suspect that glibc, gcc,
+    and the kernel may eventually follow suit, though
+    to fit in with this change (it makes sense...
+    see the symbol ordering problems threads on the
+    binutils list for more info).
+  * Upstream: IA32 gas bug fixed...no further details
+    provided, unfortunately.
+  * Reportedly fixes core dumping when trying to link
+    object files from other platforms (now warns)
+    (closes: Bug#60502)
+  * Includes Philip Blundell's ARM PLT patch finally...
+    sorry for the delay (closes: Bug#94181)
+  * m68k problems should be fixed by now.  Wish I had
+    gotten more feedback, but I didn't so I'm assuming it
+    works at this point (closes: Bug#74396)
+  * Stopped compiling cross-compiler packages until we
+    work out a better system for the entire toolchain.
+    Sorry, but it was taking far too long on even fast
+    machines and I've gotten more complaints about the
+    current arrangement than I have positive feedback.
+    (closes: Bug#91120, Bug#91119, Bug#91118, Bug#91117,
+     Bug#91116, Bug#88311, Bug#78028, Bug#90177)
+  * Fixed readelf manpage so that it no longer says that
+    it is a preprocessor for assembly programs
+    (closes: Bug#90798)
+
+ -- Christopher C. Chimelis <chris@debian.org>  Tue, 17 Apr 2001 20:07:14 -0400
+
+binutils (2.11.90.0.1-1) unstable; urgency=high
+
+  * New upstream source (synced with 20010309
+    CVS).
+  * Fixed misapplied m68k ld patch.
+    I am hoping that this almost totally fixes
+    m68k ELF for now.
+  * Fixed typo in mips patch and applied another
+    mips patch from Daniel Jacobowitz.
+  * Should no longer build same-arch cross
+    packages.  Please let me know if this fix
+    worked so that I can close the bugs (I have
+    no access to such an arch at the moment)
+  * Made urgency high since m68k really needs
+    this if the bugs are truly fixed.  Even if
+    not, this version is infinitely better on
+    at least two platforms than prior ones were.
+
+ -- Christopher C. Chimelis <chris@debian.org>  Thu, 15 Mar 2001 16:29:32 -0500
+
+binutils (2.10.91.0.2-4) unstable; urgency=low
+
+  * Applied m68k ld and bfd patches from
+    Michael Fedrowitz to hopefully make things
+    better on m68k.
+
+ -- Christopher C. Chimelis <chris@debian.org>  Sun, 11 Mar 2001 20:16:44 -0500
+
+binutils (2.10.91.0.2-3) unstable; urgency=low
+
+  * Adjusted the priority of binutils-doc to
+    optional.
+  * Added debhelper build-depends (closes: Bug#87690)
+  * Fixed postinst problem for new binutils
+    installations (closes: Bug#87911)
+
+ -- Christopher C. Chimelis <chris@debian.org>  Thu, 1 Mar 2001 15:06:50 -0500
+
+binutils (2.10.91.0.2-2) unstable; urgency=low
+
+  * Add support for SH and IA64 to binutils-multiarch.
+  * Applied m68k gas patch from Michael Fedrowitz
+    in hopes that this will fix the grave bug that
+    has been such a pain to m68k folks.  I'll leave
+    the bug open until it's verified that it works
+    ok.
+  * Applied IA-64 printf patch (closes: Bug#82702)
+  * Kernels appear to be building fine with this
+    release on all archs available to me
+    (closes: Bug#77610)
+  * Added text during postinst that informs users
+    to modify their i386 kernel Makefiles for the
+    --oformat change (closes: Bug#86995)
+  * Incorporated remaining mips diffs that weren't
+    already applied upstream (closes: Bug#81280)
+  * Sparc/sparc64 patch seems to be doing fine, so
+    closing the bug (closes: Bug#86781)
+  * Added non-linux cross- package support to rules
+    (closes: Bug#79948)
+  * Close misc bugs:
+    Missing info file in binutils-doc (closes: Bug#78754)
+
+ -- Christopher C. Chimelis <chris@debian.org>  Thu, 22 Feb 2001 19:36:12 -0500
+
+binutils (2.10.91.0.2-1) unstable; urgency=low
+
+  * New upstream version.
+  * Added weak symbol relocation patch for sparc/sparc64.
+  * Included m68k ELF fix from Michael Fedrowitz.
+  * BIG NOTE: any i386 kernels compiled with this will need
+    to be patched to change the ld option '-oformat' to
+    '--oformat' (extra hyphen).
+
+ -- Christopher C. Chimelis <chris@debian.org>  Tue, 20 Feb 2001 21:32:44 -0500
+
+binutils (2.10.1.0.2-1) unstable; urgency=low
+
+  * New upstream release (really prerel, but better than
+    using a CVS version).
+  * Should re-add Compaq demangling style to all
+    tools (alpha-only).
+  * Again, hopefully fixes m68k ELF support...still have
+    no idea why or how this was broken before.
+
+ -- Christopher C. Chimelis <chris@debian.org>  Mon, 20 Nov 2000 16:25:44 -0500
+
+binutils (2.10.0.27-0.cvs20001011.2) unstable; urgency=low
+
+  * Applied another PowerPC patch to correct the
+    implementation of .protected and .hidden in the
+    linker.  This should also aid in the glibc
+    transition on PowerPC.
+
+ -- Christopher C. Chimelis <chris@debian.org>  Tue, 17 Oct 2000 13:23:40 -0400
+
+binutils (2.10.0.27-0.cvs20001011.1) unstable; urgency=low
+
+  * Applied PowerPC weak symbol patch from CVS to aid
+    in glibc transition on that platform.
+
+ -- Christopher C. Chimelis <chris@debian.org>  Sun, 15 Oct 2000 19:12:22 -0400
+
+binutils (2.10.0.27-0.cvs20001011) unstable; urgency=low
+
+  * Grabbed a new CVS version since it backs out a
+    change that prevented current gcc snapshots from
+    linking properly to libstdc++v3.  This may also
+    solve some other problems related to global
+    section symbols (feedback appreciated).
+  * Finally changed my email address in the control
+    file (how I overlooked this after all of this
+    time I'll never know).
+
+ -- Christopher C. Chimelis <chris@debian.org>  Wed, 11 Oct 2000 08:59:36 -0400
+
+binutils (2.10.0.27-0.cvs20001008) unstable; urgency=low
+
+  * Removed configure.info.gz from binutils-doc since
+    it didn't really belong there. (closes: Bug#72746)
+  * Update for hppa/hppa64 targets (included testsuite
+    changes committed on 07-Oct-2000). (closes: Bug#71524)
+  * Upstream change to elflink.h to hopefully stop
+    segfaults on some archs when linking binaries to
+    shared libs.
+
+ -- Christopher C. Chimelis <chris@debian.org>  Sun,  8 Oct 2000 16:14:08 -0400
+
+binutils (2.10.0.27-0.cvs20000923.1) unstable; urgency=low
+
+  * Fixed rules file so that builds don't fail when compiling the
+    binary-arch target (added binary-cross to binary-arch).
+  * Fixed harmless attempt at removing builddir-avr twice.
+
+ -- Christopher C. Chimelis <chris@debian.org>  Thu, 28 Sep 2000 10:39:12 -0400
+
+binutils (2.10.0.27-0.cvs20000923) unstable; urgency=low
+
+  * CVS snapshot from 2000-09-23.
+  * Should fix some (most) HPPA issues.
+  * Adds binutils-m68k cross-assembler.
+
+ -- Christopher C. Chimelis <chris@debian.org>  Sun, 24 Sep 2000 10:19:20 -0400
+
+binutils (2.10.0.26-2) unstable; urgency=low
+
+  * Added the avr target for Amtel's AVR MCU's
+  * Applied Frank I. Smith <smith@amirix.com> to generate packages for
+	  multiple cross targets:
+	    + Bump rev number, NOP.
+      + Testing out bumping up the rev number.
+      + Added powerpc, arm, mipsel cross binutils packages.
+	
+ -- Christopher C. Chimelis <chris@debian.org>  Fri, 22 Sep 2000 17:31:44 -0400
+
+binutils (2.10.0.26-1) unstable; urgency=low
+
+  * New upstream source.
+  * Added mips-linux, hppa-linux, and hppa64-linux to multiarch targets
+
+ -- Christopher C. Chimelis <chris@debian.org>  Sun, 17 Sep 2000 01:05:49 -0400
+
+binutils (2.10.0.24-1) unstable; urgency=low
+
+  * New upstream source.
+  * Fixes ia32 assembler buglet.
+  * (Hopefully) fixes PPC visibility problems with
+    glibc 2.2
+
+ -- Christopher C. Chimelis <chris@debian.org>  Thu, 24 Aug 2000 16:52:44 -0400
+
+binutils (2.10.0.18-3) unstable; urgency=low
+
+  * Added build depends stuff.
+
+ -- Christopher C. Chimelis <chris@debian.org>  Sat, 5 Aug 2000 21:09:04 -0400
+
+binutils (2.10.0.18-2) unstable; urgency=low
+
+  * Added proviso to control file saying that -multiarch
+    should not be installed by the average user.
+
+ -- Christopher C. Chimelis <chris@classnet.med.miami.edu>  Sat, 29 Jul 2000 20:07:15 -0400
+
+binutils (2.10.0.18-1) unstable; urgency=low
+
+  * New upstream source.
+  * Should address some needed things for glibc 2.2
+    (added new DT_XXXX dynamic tags and fixes DT_NEEDED
+    link bug)
+  * Reapplied the now-infamous "ObjC patch" until
+    we can figure out why we still have this problem
+    (hint hint hint...we really need to do this).
+
+ -- Christopher C. Chimelis <chris@classnet.med.miami.edu>  Sat, 22 Jul 2000 13:18:27 -0400
+
+binutils (2.10.0.9-4) unstable; urgency=low
+
+  * Applied a patch from Ben Collins to fix sparc64
+    linker scripts
+
+ -- Christopher C. Chimelis <chris@classnet.med.miami.edu>  Sat, 8 Jul 2000 07:24:10 -0400
+
+binutils (2.10.0.9-3) unstable; urgency=low
+
+  * Applied a patch from the libstdc++ mailing list to
+    make sure that the linker doesn't eat the eh_frame
+    section.
+
+ -- Christopher C. Chimelis <chris@classnet.med.miami.edu>  Fri, 7 Jul 2000 10:26:59 -0400
+
+binutils (2.10.0.9-2) unstable; urgency=low
+
+  * Wow, already a bug fix.
+  * binutils-dev now provides libiberty.h
+
+ -- Christopher C. Chimelis <chris@classnet.med.miami.edu>  Fri, 23 Jun 2000 19:54:39 -0400
+
+binutils (2.10.0.9-1) unstable; urgency=low
+
+  * New upstream version (more linux-specific).
+
+ -- Christopher C. Chimelis <chris@classnet.med.miami.edu>  Fri, 23 Jun 2000 14:31:04 -0400
+
+binutils (2.10-1) unstable; urgency=low
+
+  * New upstream version (finally, a real release!)
+
+ -- Christopher C. Chimelis <chris@classnet.med.miami.edu>  Wed, 21 Jun 2000 19:08:14 -0400
+
+binutils (2.9.5.0.46-1) unstable; urgency=low
+
+  * New upstream source.
+  * ELF visibility attribute should work correctly now.
+  * ia32 "jmp" instructions are now assembled differently
+    to use relocation for global jumps (affects PIC asm
+    code).
+
+ -- Christopher C. Chimelis <chris@classnet.med.miami.edu>  Thu, 8 Jun 2000 21:34:42 -0400
+
+binutils (2.9.5.0.42-1) unstable; urgency=low
+
+  * New upstream source.
+  * Includes a testcase for hidden symbol support.
+
+ -- Christopher C. Chimelis <chris@classnet.med.miami.edu>  Fri, 19 May 2000 20:48:52 -0400
+
+binutils (2.9.5.0.41-1) unstable; urgency=high
+
+  * New upstream source.
+  * Now includes patch to enable hidden symbol support
+    needed for gcc 3.0 testing.
+
+ -- Christopher C. Chimelis <chris@classnet.med.miami.edu>  Fri,  5 May 2000 20:38:41 -0400
+
+binutils (2.9.5.0.37-1) frozen unstable; urgency=high
+
+  * Was forced to bring the current frozen version up to
+    upstream 2.9.5.0.37 in order to fix a rather nasty
+    i386 gas bug and also since the existing ARM patch
+    applied in 2.9.5.0.31-3 has been superceded upstream
+    (closes:Bug#62119)
+  * Includes proper demangler support for Compaq compiler
+    usage on Alpha (may be superceded upstream shortly,
+    but is good enough for potato and for Compaq's usage)
+    (closes:Bug#62079)
+  * Added cross-compilation support for individual use.
+    Please note that the binary packages do not support
+    this.  If you require this feature, you need to compile
+    the source package changing debian/rules.  Also, if
+    you do this, YMMV since things on this front are changing
+    rapidly upstream and also because cross-compiling from
+    certain platforms to others may not work (i386->alpha,
+    for example).  (closes:Bug#59246)
+  * Fixed replaces statement in binutils-multiarch
+    (closes:Bug#62496)
+  * Release Manager: I once again beg that this be included
+    in potato.  I've freed up some time to deal with bug
+    reports quickly if needed.
+
+ -- Christopher C. Chimelis <chris@classnet.med.miami.edu>  Sat, 29 Apr 2000 04:03:39 -0400
+
+binutils (2.9.5.0.31-3) frozen unstable; urgency=high
+
+  * Applied patch to fix broken ARM code generation (closes:Bug#61977)
+
+ -- Christopher C. Chimelis <chris@classnet.med.miami.edu>  Fri,  7 Apr 2000 15:50:42 -0400
+
+binutils (2.9.5.0.31-2) frozen unstable; urgency=high
+
+  * Remove ld from binutils-multiarch since it doesn't want to
+    link kernels on several archs properly (fixes severity:important bug)
+    (closes: Bug#61719, Bug#61615, Bug#51625)
+
+ -- Christopher C. Chimelis <chris@classnet.med.miami.edu>  Mon,  3 Apr 2000 22:48:55 -0400
+
+binutils (2.9.5.0.31-1) frozen unstable; urgency=high
+
+  * Yet another patch (this time from H.J. Lu upstream) to fix
+    the unlink race condition bug.  This is VERY important and
+    needs to be in potato.  It also fixes the temp file creation
+    problem with objcopy on PPC (closes: Bug#60934)
+  * New upstream release.  Fixes a serious Alpha bug along
+    with a demangler bug and several others (closes: Bug#61121)
+  * Should fix apt-get upgrade problem...please test
+    (closes: Bug#56175)
+  * Release manager: can we squeeze this in?  I know it's a
+    new version, but the ELF bug on Alpha really needs to
+    be fixed along with the rest of the above and some others
+    not mentioned here.
+
+ -- Christopher C. Chimelis <chris@classnet.med.miami.edu>  Wed, 22 Mar 2000 05:05:12 -0500
+
+binutils (2.9.5.0.22-5) frozen unstable; urgency=high
+
+  * Applied fixed patch from Colin Phipps to seal the unlink
+    race condition in bfd/cache.c (closes: Bug#58865, Bug#57831)
+  * Installed a proper changelog in binutils-doc
+    (closes: Bug#58522)
+  * Closes other older bug (closes: Bug#55801)
+  * Included bbconv.pl in binutils main package in the doc dir
+    under the gprof subdir (closes: Bug#57521)
+
+ -- Christopher C. Chimelis <chris@classnet.med.miami.edu>  Tue, 14 Mar 2000 10:32:52 -0500
+
+binutils (2.9.5.0.22-4) frozen unstable; urgency=high
+
+  * Patched gprof/hertz.h to allow binutils to actually
+    build and work on Hurd (closes: Bug#57564)
+  * Patched bfd/cache.c to avoid a rare, but possible
+    security problem when as is creating/opening temp
+    files (closes: Bug#57831)
+
+ -- Christopher C. Chimelis <chris@classnet.med.miami.edu>  Thu, 17 Feb 2000 10:31:05 -0500
+
+binutils (2.9.5.0.22-3) frozen unstable; urgency=high
+
+  * Removed standards.info...do we really need seven
+    bugs filed for the same problem
+    (closes: Bug#54521, Bug#54546, Bug#54614, Bug#54682, Bug#55402, Bug#55582, Bug#55602)
+  * Changed binutils-multiarch extended description
+    to mention that a cross-assembling gas is not
+    included (closes: Bug#49308)
+  * Closing a bug because it related to lack of disk space
+    (closes: Bug#52714)
+
+ -- Christopher C. Chimelis <chris@classnet.med.miami.edu>  Wed, 19 Jan 2000 19:28:09 -0500
+
+binutils (2.9.5.0.22-2) unstable; urgency=high
+
+  * Added getopt.h include that was omitted in the -taso patch
+    (closes: Bug#52380)
+  * Fixed table misalignment when calling objdump --info
+    (closes: Bug#51517)
+  * Added Debian changelog to binutils-doc (closes: Bug#52574)
+
+ -- Christopher C. Chimelis <chris@classnet.med.miami.edu>  Wed, 15 Dec 1999 19:14:05 -0500
+
+binutils (2.9.5.0.22-1) unstable; urgency=high
+
+  * New upstream version.
+  * More MIPS fixes.
+  * Added support for -taso linker flag for Alpha.
+  * Reapplied all previous patches.
+
+ -- Christopher C. Chimelis <chris@classnet.med.miami.edu>  Wed,  7 Dec 1999 01:08:51 -0600
+
+binutils (2.9.5.0.19-1) unstable; urgency=high
+
+  * New upstream version
+  * Fixes some MIPS problems
+  * Reapplied the ObjC patch (is this ever going to be fixed upstream)
+    since it's badly needed right now
+
+ -- Christopher C. Chimelis <chris@classnet.med.miami.edu>  Thu, 4 Nov 1999 15:00:35 -0400
+
+binutils (2.9.5.0.16-3) unstable; urgency=low
+
+  * Added support for mipsel-linux in binutils-multiarch
+
+ -- Christopher C. Chimelis <chris@classnet.med.miami.edu>  Thu, 4 Nov 1999 15:00:35 -0400
+
+binutils (2.9.5.0.16-2) unstable; urgency=low
+
+  * Added a replaces field in the control file to fix
+    previous file overwrite problems (closes: Bug#47518, Bug#47938)
+  * Verified manpages are up to date (closes: Bug#18483)
+  * Added m68k-rtems to targets in -multiarch in hopes
+    that it will actually work as advertised (closes: Bug#47468)
+
+ -- Christopher C. Chimelis <chris@classnet.med.miami.edu>  Mon, 25 Oct 1999 15:58:55 -0400
+
+binutils (2.9.5.0.16-1) unstable; urgency=low
+
+  * New upstream version.
+  * Massive bugfix upload on the Debian side:
+  * Fixes changelog problems between all of the binutils
+    debs (closes: Bug#47133, Bug#47208, Bug#47211)
+  * Fixes other overwrite problems (closes: Bug#46991, Bug#47024, Bug#46074)
+  * Multiarch should now make good diversions when
+    upgrading (closes: Bug#47359)
+  * Applied patch from Kevin Buhr to fix ld segfaults with
+    empty archives (closes: Bug#47019)
+  * Should have fixed info install problems by now
+    (closes: Bug#35935)
+
+ -- Christopher C. Chimelis <chris@classnet.med.miami.edu>  Fri,  15 Oct 1999 03:18:55 -0400
+
+binutils (2.9.5.0.14-1) unstable; urgency=low
+
+  * New upstream version.
+  * Thanks to Matthias Klose for the following:
+  * Separate documentation to binutils-doc package.
+  * debian/rules:
+    - Remove extra /usr/share/doc/binutils/changelog.gz file.
+    - Move bfd docs to binutils-dev package.
+    - Move upstream changelogs to binutils-doc package.
+    - Remove standard GNU info files left in /usr/share/info.
+    - Call dh_installdocs for all packages.
+  * debian/*{dirs,files}: Remove. Mention explicitely in debian/rules.
+
+ -- Christopher C. Chimelis <chris@classnet.med.miami.edu>  Wed,  6 Oct 1999 03:18:55 -0400
+
+binutils (2.9.5.0.12-2) unstable; urgency=low
+
+  * Applied patch from Matthias Klose to fix many issues including architecture detection.
+  * Rules file is now much prettier and easier to manage.
+  * Binutils is now built for i386 rather than i486 in the rules file (oops).
+  * Added diversion for readelf in binutils-multiarch.
+
+ -- Christopher C. Chimelis <chris@classnet.med.miami.edu>  Tue, 21 Sep 1999 03:39:08 -0400
+
+binutils (2.9.5.0.12-1) unstable; urgency=low
+
+  * Massive bugfix release.
+  * New upstream source (finally) (closes: Bug#44934)
+  * Fixes upstream bugs on many platforms.
+  * Gives powerpc a working binutils again. (closes: Bug#45052)
+  * Now provides .code16 support on i386 (please test)
+  * Manpage for objdump should now be complete (closes: Bug#27039)
+  * Put together manpages for gasp and the new binary readelf (closes: Bug#21918)
+  * Fixes nm core dump problem (closes: Bug#41999)
+  * Applied patches from Ben Collins to add sparc64 support (closes: Bug#44426)
+  * Update Standards version
+  * FHS compliance
+
+ -- Christopher C. Chimelis <chris@classnet.med.miami.edu>  Sat, 18 Sept 1999 01:21:05 -0400
+
+binutils (2.9.5.0.12-0.2) experimental; urgency=low
+
+  * Added Sparc/Sparc64 changes from Ben Collins (I really need a Sparc one of these days).
+  * Again, this should be the last experimental before a new release.
+
+ -- Christopher C. Chimelis <chris@classnet.med.miami.edu>  Fri, 17 Aug 1999 16:32:05 -0400
+
+binutils (2.9.5.0.12-0.1) experimental; urgency=low
+
+  * New upstream version.
+  * Should be the last experimental before a new release.
+
+ -- Christopher C. Chimelis <chris@classnet.med.miami.edu>  Thu, 9 Aug 1999 23:12:52 -0400
+
+binutils (2.9.5.0.10-0.1) experimental; urgency=low
+
+  * New upstream version.
+  * Didn't apply PPC patches...let me know if still needed
+
+ -- Christopher C. Chimelis <chris@classnet.med.miami.edu>  Thu, 9 Aug 1999 23:12:52 -0400
+
+binutils (2.9.5.0.6-0.1) experimental; urgency=low
+
+  * New upstream version.
+  * Didn't apply PPC patches...let me know if still needed
+
+ -- Christopher C. Chimelis <chris@classnet.med.miami.edu>  Thu, 9 Aug 1999 23:12:52 -0400
+
+binutils (2.9.4.0.8-0.1) unstable; urgency=low
+
+  * New upstream version.
+  * Applied as much of the PPC patches as I could.
+
+ -- Christopher C. Chimelis <chris@classnet.med.miami.edu>  Thu, 15 Jul 1999 12:46:45 -0400
+
+binutils (2.9.4.0.3-0.1) unstable; urgency=low
+
+  * New upstream version.
+  * Apply patch from Richard Henderson to fix PPC's libpath.
+  * Apply patch from Franz Sirl to fix Richard Henderson.
+
+ -- Daniel Jacobowitz <dan@debian.org>  Sun, 6 Jun 1999 01:27:10 -0400
+
+binutils (2.9.4.0.2-0.1) unstable; urgency=low
+
+  * New upstream version.  2.9.4.0.1 was hurriedly recalled.
+
+ -- Daniel Jacobowitz <dan@debian.org>  Sun, 6 Jun 1999 01:27:10 -0400
+
+binutils (2.9.4.0.1-0.1) unstable; urgency=low
+
+  * New upstream version.
+
+ -- Daniel Jacobowitz <dan@debian.org>  Sun, 6 Jun 1999 01:27:10 -0400
+
+binutils (2.9.1.0.25-2) unstable; urgency=low
+
+  * Added ObjC patch AGAIN...sorry about that
+
+ -- Christopher C. Chimelis <chris@classnet.med.miami.edu>  Sun, 23 May 1999 15:14:35 -0400
+
+binutils (2.9.1.0.25-1) unstable; urgency=low
+
+  * New upstream version - Fixes a PIII asm optimisation bug
+
+ -- Christopher C. Chimelis <chris@classnet.med.miami.edu>  Sun, 23 May 1999 00:36:55 -0400
+
+binutils (2.9.1.0.24-2) unstable; urgency=low
+
+  * Reapplied ObjC patch...apparently it's still needed.
+
+ -- Christopher C. Chimelis <chris@classnet.med.miami.edu>  Mon, 10 May 1999 19:53:15 -0400
+
+binutils (2.9.1.0.24-1) unstable; urgency=low
+
+  * New upstream release - fixes too many little things to mention.
+
+ -- Christopher C. Chimelis <chris@classnet.med.miami.edu>  Tue,  3 May 1999 16:35:08 -0400
+
+binutils (2.9.1.0.23-1) unstable; urgency=low
+
+  * New upstream release - incorporates sparc64 and arm patches.
+  * Added RPATH patch from Joel Klecker since my last upload failed.
+  * Removed ObjC patch.  Let me know if it is still needed (doubtful, but
+    still might be).
+
+ -- Christopher C. Chimelis <chris@classnet.med.miami.edu>  Mon,  5 Apr 1999 13:26:55 -0500
+
+binutils (2.9.1.0.22b-2) unstable; urgency=low
+
+  * Added patch from Joel Klecker to finally (properly) fix the rpath issue
+    (Thanks, Joel!).
+
+ -- Christopher C. Chimelis <chris@classnet.med.miami.edu>  Fri,  2 Apr 1999 18:14:05 -0600
+
+binutils (2.9.1.0.22b-1) unstable; urgency=low
+
+  * Converted package to CVS (so bear with any delays in handling
+    bug fixes; I'm new to CVS ironically)
+  * New upstream version (sparc64 and ARM patches again added).
+  * Added support for mingw32 target in binutils-multiarch
+
+ -- Christopher C. Chimelis <chris@classnet.med.miami.edu>  Fri, 12 Mar 1999 03:51:44 -0600
+
+binutils (2.9.1.0.19a-4) frozen unstable; urgency=high
+  * Added sparc64 patches from Steve Dunham to fix sparc64 targets
+  * Modified rules to add support for gcc/egcs by arch.
+
+ -- Christopher C. Chimelis <chris@classnet.med.miami.edu>  Mon,  1 Feb 1999 15:51:19 -0600
+
+binutils (2.9.1.0.19a-3) frozen unstable; urgency=high
+
+  * Reverted a patch to elflink.h that caused problems for
+    Obj-C code (symbols weren't exported with a size or
+    type).
+
+ -- Christopher C. Chimelis <chris@classnet.med.miami.edu>  Thu, 21 Jan 1999 19:25:17 -0600
+
+binutils (2.9.1.0.19a-2) frozen unstable; urgency=low
+
+  * Added arm-linux as multiarch target (sorry Jim).
+  * Uploaded to frozen to fix strange intermittant kernel
+    compilation problems (Fixes #31434).
+  * Fixed multiarch's postinst script to check for
+    c++filt.single before trying to remove it to prevent
+    warning messages if using g++ from egcs.
+  * Fixed typo in multiarch's postrm (addr2line) (Fixes: #31533)
+  * Added links to .so's for clean removal in the future (Fixes: #31536)
+
+ -- Christopher C. Chimelis <chris@classnet.med.miami.edu>  Fri,  8 Jan 1999 15:28:32 -0600
+
+binutils (2.9.1.0.19a-1) unstable; urgency=low
+
+  * New upstream version; fixes some Alpha problems and other archs
+    should benefit also.
+  * Added ARM target patch from Corel again (still not in upstream).
+
+ -- Christopher C. Chimelis <chris@classnet.med.miami.edu>  Mon,  4 Jan 1999 20:24:36 -0600
+
+binutils (2.9.1.0.16-1) unstable; urgency=low
+
+  * New upstream version; merges some ARM patches for Netwinders
+  * Added patch for ARM target from Corel (thanks Jim Pick)
+
+ -- Christopher C. Chimelis <chris@classnet.med.miami.edu>  Mon, 30 Nov 1998 16:59:25 -0600
+
+binutils (2.9.1.0.15-5) frozen unstable; urgency=low
+
+  * Reuploaded to frozen (why it wasn't there earlier....)
+
+ -- Christopher C. Chimelis <chris@classnet.med.miami.edu>  Mon, 30 Nov 1998 16:37:08 -0600
+
+binutils (2.9.1.0.15-4) unstable frozen; urgency=low
+
+  * Removed c++filt diversion in -multiarch to prevent conflicting
+    diversions when using egcs' g++ (which also wants to divert c++filt)
+
+ -- Christopher C. Chimelis <chris@classnet.med.miami.edu>  Wed, 25 Nov 1998 18:06:17 -0600
+
+binutils (2.9.1.0.15-3) unstable frozen; urgency=low
+
+  * Made Roman's changes "official" (thanks Roman).
+
+ -- Christopher C. Chimelis <chris@classnet.med.miami.edu>  Mon, 2 Nov 1998 05:46:56 -0600
+
+binutils (2.9.1.0.15-2.1) unstable; urgency=low
+
+  * Non-maintainer upload with agreement from Chris.
+  * Use a different soname for multi-arch libbfd and libopcodes; this
+    fixes the problem that the single-arch binaries (as and the diverted
+    ones) will all dump core because they're runtime-linked against the
+    multi-arch libs. (Fixes: #28656)
+  * Due to the above, binutils-multiarch also needs ldconfig in postinst
+    now.
+  * Fixup diversions once again: Do not even package the ldscripts for the
+    native architecture, so diversions for files in /usr/lib/ldscripts
+    aren't necessary.
+  * Also remove diversions on abort-install.
+  * Remove now obsolete diversions in preinst.
+  * Also symlink /usr/doc/binutils-multiarch to binutils, and do not
+    put /usr/doc/binutils in the package again.
+  * Put the symlinks libbfd.so and libopcode.so into binutils-dev, so one
+    can link to them.
+
+ -- Roman Hodek <Roman.Hodek@informatik.uni-erlangen.de>  Sat, 31 Oct 1998 11:31:14 +0100
+
+binutils (2.9.1.0.15-2) unstable; urgency=low
+
+  * Fixed binutils-multiarch diversions
+  * Reverted elf.c to .13 version to fix bug in strip
+
+ -- Christopher C. Chimelis <chris@classnet.med.miami.edu>  Tue, 27 Oct 1998 05:26:28 -0600
+
+binutils (2.9.1.0.15-1) unstable; urgency=low
+
+  * New upstream version.
+  * Moved over to debhelper and updated standards version to 2.4.1.4.
+  * Adds 3DNow instruction support for AMD processors.
+  * Fixes MANY Alpha bugs and a few for Sparc, PPC, and m68k reportedly.
+  * Added binutils-multiarch package to allow for multiple-arch support
+    (fixes bug #19471).
+
+ -- Christopher C. Chimelis <chris@classnet.med.miami.edu>  Thu, 14 Oct 1998 19:30:10 -0500
+
+binutils (2.9.1.0.13-1) unstable; urgency=low
+
+  * New upstream version, fixes bug #25354.
+  * Hopefully, all requested docs are included, fixes bug #21325.
+  * Fixes MANY Alpha problems.
+  * Reportedly may fix MIPS and Sparc problems also...see changelogs.
+  * Has been tested on x86's with great success.
+
+ -- Christopher C. Chimelis <chris@classnet.med.miami.edu>  Mon,  5 Oct 1998 23:02:08 -0500
+
+binutils (2.9.1-0.2) frozen unstable; urgency=low
+
+  * Fixed binutils-dev dependencies.
+
+ -- Joel Klecker <jk@espy.org>  Tue, 05 May 1998 09:24:04 -0700
+
+binutils (2.9.1-0.1) frozen unstable; urgency=medium
+
+  * Non-maintainer release.
+  * New upstream release.
+  * Moved docs into subdirs where appropriate.
+  * Integrated the following changes from J.H.M. Dassen:
+    * Updated FSF address in copyright file. (lintian).
+    * Reported lack of "gasp" manpage (# ....), and link it to
+      undocumented(7). (lintian).
+    * Added a TODO list.
+
+ -- Joel Klecker <jk@espy.org>  Thu, 30 Apr 1998 10:43:42 -0700
+
+binutils (2.9-0.3) frozen unstable; urgency=medium
+
+  * Added upstream patch which fixes a problem with strip
+    and netscape (#17971).
+
+ -- Joel Klecker <jk@espy.org>  Tue, 28 Apr 1998 08:58:27 -0700
+
+binutils (2.9-0.2) frozen unstable; urgency=low
+
+  * Added more of the upstream docs (#21325).
+  * Put a changelog.gz symlink in /usr/doc/binutils
+    to satisfy policy.
+
+ -- Joel Klecker <jk@espy.org>  Tue, 21 Apr 1998 09:02:22 -0700
+
+binutils (2.9-0.1) frozen unstable; urgency=low
+
+  * Non-maintainer release.
+  * New upstream release (bugfixes only).
+
+ -- Joel Klecker <jk@espy.org>  Sun, 12 Apr 1998 04:11:07 -0700
+
+binutils (2.8.1.0.23-1) unstable; urgency=low
+
+  * New upstream version
+  * -dev replaces libc5-dev (#17840)
+  * No longer possible to link against shared libbbfd/opcodes (#18121)
+
+ -- Galen Hazelwood <galenh@micron.net>  Sat, 14 Mar 1998 18:19:10 -0700
+
+binutils (2.8.1.0.19-1) unstable; urgency=low
+
+  * New upstream version (#17296)
+  * Fixed typo in description (#16481)
+  * Fully replaces libbfd-dev (#16619)
+
+ -- Galen Hazelwood <galenh@micron.net>  Sun, 25 Jan 1998 15:37:03 -0700
+
+binutils (2.8.1.0.17-1) unstable; urgency=low
+
+  * New upstream version
+  * Rejoined libbfd and binutils packages (#15486)
+  * Added "SHELL=bash" to rules file (#14528)
+  * bfd info docs seem to be broken, don't install for now
+
+ -- Galen Hazelwood <galenh@micron.net>  Sat,  6 Dec 1997 14:55:26 -0700
+
+binutils (2.8.1.0.15-1) unstable; urgency=low
+
+  * New upstream version (#14250)
+  * Updated to Standard 2.3.0.0
+  * Restored ansidecl.h to libbfd-dev (#14116)
+
+ -- Galen Hazelwood <galenh@micron.net>  Thu, 30 Oct 1997 20:04:24 -0700
+
+binutils (2.8.1-2) unstable; urgency=low
+
+  * Added 2.8.1.0.4 patch
+
+ -- Galen Hazelwood <galenh@micron.net>  Thu, 12 Jun 1997 20:49:57 -0600
+
+binutils (2.8.1-1) unstable; urgency=low
+
+  * New upstream version
+  * Added 2.8.1.0.1 patch
+
+ -- Galen Hazelwood <galenh@micron.net>  Fri,  30 May 1997 14:48:42 -0600
+
+binutils (2.8-1) unstable; urgency=low
+
+  * New upstream version
+  * Smarter debian build environment (automatic version handling)
+  * Added 2.8.0.3 patch
+  * Built with libc6
+
+ -- Galen Hazelwood <galenh@micron.net>  Sun, 4 May 1997 11:16:12 -0600
+
+binutils (2.7.0.9-3) frozen unstable; urgency=low
+
+  * Patched for alpha support
+  * Distribute libiberty.a with -dev package (#8376)
+  * libbfd[x]-dev now has standard Provides/Conflicts behavior (#8377)
+
+ -- Galen Hazelwood <galenh@micron.net>  Fri, 28 Mar 1997 11:45:58 -0700
+
+binutils (2.7.0.9-2) unstable; urgency=low
+
+  * Moved 2.7.0.9 out of experimental (no longer unreleased beta)
+
+ -- Galen Hazelwood <galenh@micron.net>  Sun, 9 Mar 1997 23:43:19 -0700
+
+binutils (2.7.0.9-1) experimental; urgency=low
+
+  * New upstream beta version (fixes bug #7336)
+  * Split shared libraries (bfd) out of binutils (fixes bug #7244)
+  * No longer builds aout-binutils
+
+ -- Galen Hazelwood <galenh@micron.net>  Thu, 13 Feb 1997 00:27:18 -0700
+
+binutils (2.7-6) unstable; urgency=low
+
+  * Uses dpkg --print-gnu-build-architecture for build
+  * Demoted aout-binutils to priority "extra"
+
+ -- Galen Hazelwood <galenh@micron.net>  Mon, 27 Jan 1997 13:34:08 -0700
+
+binutils (2.7-5) unstable; urgency=low (HIGH for m68k)
+
+  * Added patch for m68k, will now compile X68 and kernel 2.1.15
+
+ -- Galen Hazelwood <galenh@micron.net>  Tue, 31 Dec 1996 22:15:03 -0700
+
+binutils (2.7-4) unstable; urgency=low
+
+  * New maintainer
+  * Updated to new source format
+  * Fixed typo in script.1 (Fixes bug #4558)
+  * Fixed typo in as.1 (Fixes bug #5567)
+  * Postinst now calls ldconfig without explicit pathname (Fixes bug #6151)
+
+ -- Galen Hazelwood <galenh@micron.net>  Mon, 30 Dec 1996 12:10:25 -0700
+
+binutils (2.7-3):
+
+Remove lib*.so links so the libs are not used for develpment.
+gzip manpages
+
+Changes made by Michael Meskes <meskes@debian.org> in consent with David Engel.
+
+binutils (2.7-2):
+
+Include shared libraries
+Strip shared libraries
+Also update AOUT version
+Minor changes to debian.rules
+
+binutils (2.7-1):
+
+Updated to new upstream version.
+
+Added a simple extended description (Bug#3574).
+
+Don't call ldconfig from postrm script (Bug#4246).
+    
+   LocalWords:  Aurelien Jarno
+  
--- binutils-2.22.orig/debian/binutils-hppa64.postinst
+++ binutils-2.22/debian/binutils-hppa64.postinst
@@ -0,0 +1,7 @@
+#! /bin/sh
+
+set -e
+
+if [ "$1" = "configure" ]; then
+	ldconfig
+fi
--- binutils-2.22.orig/debian/binutils-gold.preinst
+++ binutils-2.22/debian/binutils-gold.preinst
@@ -0,0 +1,25 @@
+#! /bin/sh
+
+set -e
+
+if [ install = "$1" -o upgrade = "$1" ]; then
+    if [ -n "$2" ] && dpkg --compare-versions $2 lt 2.20-3; then
+	case "$(dpkg-divert --list /usr/bin/ld)" in
+	    *ld.single*)
+		rm -f /usr/bin/ld
+		dpkg-divert \
+		  --package binutils-gold \
+		  --remove --rename \
+		  --divert /usr/bin/ld.single /usr/bin/ld
+	esac
+    fi
+
+    dpkg-divert \
+	--package binutils-gold \
+	--add --rename \
+	--divert /usr/bin/ld.bfd-link /usr/bin/ld
+    dpkg-divert \
+	--package binutils-gold \
+	--add --rename \
+	--divert /usr/share/man/man1/ld.bfd-link.1.gz /usr/share/man/man1/ld.1.gz
+fi
--- binutils-2.22.orig/debian/binutils-multiarch.overrides
+++ binutils-2.22/debian/binutils-multiarch.overrides
@@ -0,0 +1,10 @@
+# don't warn about missing man pages for diverted binaries
+binutils-multiarch binary: binary-without-manpage
+
+# the API of the shared libs is not public, don't care about the name
+binutils-multiarch binary: package-name-doesnt-match-sonames
+
+# not in binutils-multiarch, just move these away
+binutils-multiarch: diversion-for-unknown-file usr/lib/libopcodes.a preinst:19
+binutils-multiarch: diversion-for-unknown-file usr/lib/libbfd.a preinst:16
+
--- binutils-2.22.orig/debian/binutils-hppa64.shlibs.in
+++ binutils-2.22/debian/binutils-hppa64.shlibs.in
@@ -0,0 +1,2 @@
+libbfd @VER@-hppa64@DATE_EXT@ binutils-hppa64
+libopcodes @VER@-hppa64@DATE_EXT@ binutils-hppa64
--- binutils-2.22.orig/debian/binutils.postinst
+++ binutils-2.22/debian/binutils.postinst
@@ -0,0 +1,7 @@
+#! /bin/sh
+
+set -e
+
+if [ "$1" = "configure" ]; then
+	ldconfig
+fi
--- binutils-2.22.orig/debian/control.in
+++ binutils-2.22/debian/control.in
@@ -0,0 +1,105 @@
+Source: binutils
+Section: devel
+Priority: optional
+Maintainer: Matthias Klose <doko@debian.org>
+Uploaders: James Troup <james@nocrew.org>, Daniel Jacobowitz <dan@debian.org>
+Standards-Version: 3.9.3
+Build-Depends: dpkg-dev (>= 1.13.9), autoconf (>= 2.64), bison, flex, gettext, texinfo, dejagnu (>= 1.4.2-1.1), quilt, file, xz-utils, lsb-release, zlib1g-dev
+Vcs-Browser: https://code.launchpad.net/~doko/binutils/pkg-2.22-debian
+Vcs-Bzr: http://bazaar.launchpad.net/~doko/binutils/pkg-2.22-debian
+
+Package: binutils
+Architecture: any
+Depends: ${shlibs:Depends}
+Conflicts: gas, elf-binutils, modutils (<< 2.4.19-1), ${extraConflicts}, binutils-gold	(<< 2.20.51.20100415)
+Replaces: binutils-gold (<< 2.20.51.20100415)
+Provides: elf-binutils
+Suggests: binutils-doc (>= ${source:Version})
+Description: GNU assembler, linker and binary utilities
+ The programs in this package are used to assemble, link and manipulate
+ binary and object files.  They may be used in conjunction with a compiler
+ and various libraries to build programs.
+
+Package: binutils-dev
+Architecture: any
+Priority: extra
+Depends: binutils (= ${binary:Version})
+Conflicts: libbfd-dev
+Provides: libbfd-dev
+Replaces: libbfd-dev, libc5-dev
+Description: GNU binary utilities (BFD development files)
+ This package includes header files and static libraries necessary to build
+ programs which use the GNU BFD library, which is part of binutils.  Note
+ that building Debian packages which depend on the shared libbfd is Not
+ Allowed.
+
+Package: binutils-multiarch
+Architecture: any
+Priority: extra
+Depends: ${shlibs:Depends}, binutils (= ${binary:Version})
+Provides: multiarch-binutils
+Description: Binary utilities that support multi-arch targets
+ The programs in this package are used to manipulate binary and object
+ files that may have been created on other architectures.  This package
+ is primarily for multi-architecture developers and cross-compilers and
+ is not needed by normal users or developers.  Note that a cross-assembling
+ version of gas is not included in this package, just the binary utilities.
+ NORMAL USERS SHOULD NOT INSTALL THIS PACKAGE.  It's meant only for those
+ requiring support for reading info from binaries from other architectures.
+
+Package: binutils-gold
+Architecture: amd64 armel armhf i386 powerpc powerpcspe ppc64 sparc sparc64
+Priority: extra
+Depends: ${shlibs:Depends}, binutils (= ${binary:Version})
+Description: GNU gold linker utility
+ Gold is a new linker, which is faster than the current linker included
+ in binutils.
+ .
+ This package diverts the GNU linker (ld) with the gold linker.
+
+Package: binutils-hppa64
+Architecture: any
+Depends: ${shlibs:Depends}, binutils (= ${binary:Version})
+Recommends: libc6-dev
+Suggests: binutils-doc (>= ${source:Version})
+Description: GNU assembler, linker and binary utilities targeted for hppa64-linux
+ The programs in this package are used to assemble, link and manipulate
+ binary and object files.  They may be used in conjunction with a compiler
+ and various libraries to build programs.
+ .
+ This package is needed to build an 64-bit kernel for 64-bit hppa machines.
+
+Package: binutils-spu
+Architecture: powerpc ppc64
+Depends: ${shlibs:Depends}, binutils (= ${binary:Version})
+Recommends: libc6-dev
+Conflicts: spu-binutils
+Replaces: spu-binutils
+Provides: spu-binutils
+Suggests: binutils-doc (>= ${source:Version})
+Description: GNU assembler, linker and binary utilities targeted for spu-elf
+ The programs in this package are used to assemble, link and manipulate
+ binary and object files.  They may be used in conjunction with a compiler
+ and various libraries to build programs.
+ .
+ This package is needed to build programs for Cell Broadband Engine SPU
+ processors.
+
+Package: binutils-doc
+Section: doc
+Architecture: all
+Priority: optional
+Depends: dpkg (>= 1.15.4) | install-info
+Conflicts: binutils (<< 2.9.1.0.25-3)
+Suggests: binutils (= ${binary:Version})
+Description: Documentation for the GNU assembler, linker and binary utilities
+ This package consists of the documentation for the GNU assembler,
+ linker and binary utilities in info format.
+
+Package: binutils-source
+Architecture: all
+Priority: optional
+Depends: texinfo, zlib1g-dev, make, python
+Description: GNU assembler, linker and binary utilities (source)
+ This package contains the sources and patches which are needed to
+ build binutils.
--- binutils-2.22.orig/debian/binutils-multiarch.shlibs.in
+++ binutils-2.22/debian/binutils-multiarch.shlibs.in
@@ -0,0 +1,2 @@
+libbfd @VER@-multiarch@DATE_EXT@ binutils-multiarch
+libopcodes @VER@-multiarch@DATE_EXT@ binutils-multiarch
--- binutils-2.22.orig/debian/binutils-multiarch.prerm.in
+++ binutils-2.22/debian/binutils-multiarch.prerm.in
@@ -0,0 +1,66 @@
+#! /bin/sh
+# Remove obsolete diversions.
+#
+# They are already removed in postinst, but if configuration fails,
+# they will still be around.  Removing the package without
+# configuring would then allow the diversions to leak.
+#
+# So we catch them here.  This cannot wait for postrm because that
+# would break error recovery during upgrades: after the old, working
+# version re-adds the diversion in preinst, the diversion would be removed
+# again in postrm.  More generally, removing a diversion requires
+# a guarantee that the conflicting file is not present any more,
+# and we cannot guarantee that if some other version of
+# binutils-multiarch is installed.
+set -e
+this_ver=@DEB_VER@; # this version
+context=$1; # action: upgrade, remove, deconfigure, or failed-upgrade.
+if
+	test "$context" = failed-upgrade &&
+	dpkg --compare-versions "$this_ver" lt "$2"
+then
+	# prerm of the future failed.
+	# Who knows what it was supposed to do?  Abort.
+	exit 1
+fi
+
+old_diversion() {
+	local divertto file
+	file=$1
+	divertto=${2-$file.single}
+	if
+		dpkg-divert --package binutils-multiarch --list |
+		grep -q -F "$divertto"
+	then
+		dpkg-divert --package binutils-multiarch \
+				--remove --rename \
+				--divert "$divertto" "$file"
+	fi
+}
+
+# remove obsolete diversions
+old_diversion /usr/bin/ld.bfd
+old_diversion /usr/bin/c++filt
+old_diversion /usr/lib/libbfd.a /usr/lib/libbfd-single.a
+old_diversion /usr/lib/libopcodes.a /usr/lib/libopcodes-single.a
+old_diversion /usr/bin/ld
+old_diversion /usr/bin/elfedit
+for f in elf32_sparc elf32ppc elf64alpha elf_i386 m68kelf \
+         alpha i386linux m68klinux sparclinux sun4
+do
+	for ext in x xbn xn xr xs xu
+	do
+		old_diversion /usr/lib/ldscripts/$f.$ext
+	done
+done
+old_diversion /usr/lib/libbfd-2.9.1.0.15.so.0.0.0 \
+              /usr/lib/libbfd-single-2.9.1.0.15.so.0.0.0
+old_diversion /usr/lib/libopcodes-2.9.1.0.15.so.0.0.0 \
+              /usr/lib/libopcodes-single-2.9.1.0.15.so.0.0.0
+old_diversion /usr/lib/libbfd.la /usr/lib/libbfd-single.la
+old_diversion /usr/lib/libopcodes.la /usr/lib/libopcodes-single.la
+old_diversion /usr/include/bfd.h /usr/include/bfd.single.h
+old_diversion /usr/lib/ldscripts
+
+rm -f /usr/lib/libbfd-*-multiarch.so.0
+rm -f /usr/lib/libopcodes-*-multiarch.so.0
--- binutils-2.22.orig/debian/rules
+++ binutils-2.22/debian/rules
@@ -0,0 +1,1260 @@
+#!/usr/bin/make -f
+# debian/rules file - for binutils (2.20)
+# Based on sample debian/rules file - for GNU Hello (1.3).
+# Copyright 1994,1995 by Ian Jackson.
+# Copyright 1998-2007 James Troup.
+# Portions Copyright 2008-2009 Canonical Ltd.
+# Portions Copyright 2008-2009 Matthias Klose.
+# I hereby give you perpetual unlimited permission to copy,
+# modify and relicense this file, provided that you do not remove
+# my name from the file itself.  (I assert my moral right of
+# paternity under the Copyright, Designs and Patents Act 1988.)
+# This file may have to be extensively modified
+
+################################################################################
+
+p_bin = binutils
+p_dev = $(p_bin)-dev
+p_mul = $(p_bin)-multiarch
+p_gold = $(p_bin)-gold
+p_doc = $(p_bin)-doc
+p_hppa64 = $(p_bin)-hppa64
+p_spu = $(p_bin)-spu
+p_src = $(p_bin)-source
+
+# BACKPORT is used for cross builds for a -source package not conflicting
+# with the source package of the native package.
+ifeq ($(BACKPORT),true)
+  p_src = $(p_bin)-$(VERSION)-source
+else
+  p_src = $(p_bin)-source
+endif
+
+pwd   := $(shell pwd)
+d     = debian/tmp
+d_bin = $(d)
+d_dev = debian/$(p_dev)
+d_mul = debian/$(p_mul)
+d_gold = debian/$(p_gold)
+d_doc = debian/$(p_doc)
+d_hppa64 = debian/$(p_hppa64)
+d_spu = debian/$(p_spu)
+d_src = debian/$(p_src)
+
+install_dir    = install -d -m 755
+install_file   = install -m 644
+install_script = install -m 755
+install_binary = install -m 755 -s
+
+vafilt = $(subst $(2)=,,$(filter $(2)=%,$(1)))
+DPKG_VARS := $(shell dpkg-architecture)
+DEB_BUILD_GNU_TYPE	?= $(call vafilt,$(DPKG_VARS),DEB_BUILD_GNU_TYPE)
+DEB_HOST_ARCH		?= $(call vafilt,$(DPKG_VARS),DEB_HOST_ARCH)
+DEB_HOST_GNU_TYPE	?= $(call vafilt,$(DPKG_VARS),DEB_HOST_GNU_TYPE)
+DEB_HOST_MULTIARCH	?= $(call vafilt,$(DPKG_VARS),DEB_HOST_MULTIARCH)
+
+ifeq (,$(DEB_HOST_MULTIARCH))
+  ifeq ($(DEB_HOST_ARCH),i386)
+    DEB_HOST_MULTIARCH = i386-linux-gnu
+  else
+    DEB_HOST_MULTIARCH = $(DEB_HOST_GNU_TYPE)
+  endif
+endif
+
+SHELL  = /bin/bash
+
+ifneq (,$(filter $(DEB_HOST_ARCH), amd64 armel armhf i386 powerpc powerpcspe ppc64 sparc sparc64))
+  with_gold = yes
+endif
+
+with_multiarch := yes
+
+CC     = gcc
+CXX    = g++
+CFLAGS = -g -O2
+STRIP  = strip --remove-section=.comment --remove-section=.note
+CROSS :=
+ifneq ($(DEB_BUILD_GNU_TYPE),$(DEB_HOST_GNU_TYPE))
+  CROSS := $(DEB_HOST_GNU_TYPE)-
+  CC   = $(CROSS)gcc
+  CXX  = $(CROSS)g++
+  STRIP= $(CROSS)strip --remove-section=.comment --remove-section=.note
+  install_binary = install -m 755 -s --strip-program="$(STRIP)"
+endif
+
+ifneq (,$(findstring noopt,$(DEB_BUILD_OPTIONS)))
+  CFLAGS = -g -O0
+endif
+
+# this outputs 0 or 1 depending on whether a macro appears in the *default* cpp
+# -dM -P output; this is used to test the toolchain *default* configuration
+check_cpp = $(shell $(CROSS)cpp -dM -P /dev/null | grep -q '^\#define $(1)' && echo 1 || echo 0)
+
+# testsuite doesn't expect to be built with -mthumb
+# TODO if the testsuite is only broken with Thumb-2 (and not with "Thumb-1"),
+# we should test for __thumb2__ instead
+ifneq (,$(filter $(DEB_HOST_ARCH), armel armhf))
+  ifeq ($(call check_cpp,__thumb__),1)
+    CFLAGS += -marm
+  endif
+endif
+
+# see LP: #446478, would only fix the testcases
+#ifneq (,$(filter $(DEB_HOST_ARCH), armel armhf))
+#  CFLAGS += -fno-section-anchors
+#endif
+
+SPACE = $(EMPTY) $(EMPTY)
+COMMA = ,
+CHANGELOG_VARS := $(shell dpkg-parsechangelog | \
+        sed -n 's/ /_/g;/^[^_]/s/^\([^:]*\):_\(.*\)/\1=\2/p')
+
+DEB_VERSION	:= $(call vafilt,$(CHANGELOG_VARS),Version)
+DEB_SVERSION	:= $(shell echo $(DEB_VERSION) | sed 's/+b[0-9][0-9]*$$//')
+DEB_UPSTREAM	:= $(firstword $(subst -,$(SPACE),$(DEB_VERSION)))
+
+VERSION		:= $(shell sed -n 's/^ *VERSION=\(.*\)/\1/p' bfd/configure | head -1)
+#DATE		:= $(shell sed -n 's/.* \([0-9]*\)$$/\1/p' bfd/version.h)
+ifneq (,$(DATE))
+  DATE_EXT	:= .$(DATE)
+endif
+
+ifneq ($(DEB_UPSTREAM),$(VERSION)$(DATE_EXT))
+  $(error upstream ($(DEB_UPSTREAM)) and debian ($(VERSION)$(DATE_EXT)) version mismatch)
+endif
+
+SINGLE_VERSION= $(VERSION)-system
+MULTI_VERSION = $(VERSION)-multiarch
+HPPA64_VERSION= $(VERSION)-hppa64
+SPU_VERSION   = $(VERSION)-spu
+
+DISTRIBUTION := $(shell lsb_release -is)
+NJOBS =
+# Support parallel=<n> in DEB_BUILD_OPTIONS (see #209008)
+ifneq (,$(filter parallel=%,$(subst $(COMMA), ,$(DEB_BUILD_OPTIONS))))
+  NJOBS := -j $(subst parallel=,,$(filter parallel=%,$(subst $(COMMA), ,$(DEB_BUILD_OPTIONS))))
+endif
+ifneq (,$(findstring nogold,$(DEB_BUILD_OPTIONS)))
+  with_gold = disabled in DEB_BUILD_OPTIONS
+endif
+ifneq (,$(findstring nomult,$(DEB_BUILD_OPTIONS)))
+  with_multiarch = disabled in DEB_BUILD_OPTIONS
+endif
+
+# If $(TARGET) is not set, try reading debian/target
+ifeq (,$(TARGET))
+  ifneq (,$(wildcard debian/target))
+    TARGET := $(shell cat debian/target 2>/dev/null)
+  endif
+endif
+
+# PF is the installation prefix for the package without the leading slash.
+# It's "usr" for gcc releases, so use this if not explicitly set
+ifeq ($(PF),)
+  PF = usr
+endif
+
+########################################
+
+CONFARGS = \
+	--enable-shared \
+	--enable-plugins \
+	--prefix=/$(PF) \
+	--build=$(DEB_BUILD_GNU_TYPE) \
+	--host=$(DEB_HOST_GNU_TYPE) \
+	--with-pkgversion="GNU Binutils for $(DISTRIBUTION)"
+
+ifeq ($(DEB_HOST_MULTIARCH),x86_64-linux-gnu)
+  DEB_HOST_MULTIARCH32 = i386-linux-gnu
+else ifeq ($(DEB_HOST_MULTIARCH),powerpc64-linux-gnu)
+  DEB_HOST_MULTIARCH32 = powerpc-linux-gnu
+else ifeq ($(DEB_HOST_MULTIARCH),s390x-linux-gnu)
+  DEB_HOST_MULTIARCH32 = s390-linux-gnu
+else ifeq ($(DEB_HOST_MULTIARCH),sparc64-linux-gnu)
+  DEB_HOST_MULTIARCH32 = sparc-linux-gnu
+else ifeq ($(DEB_HOST_MULTIARCH),x86_64-kfreebsd-gnu)
+  DEB_HOST_MULTIARCH32 = i386-kfreebsd-gnu
+else ifeq ($(DEB_HOST_MULTIARCH),i386-linux-gnu)
+  DEB_HOST_MULTIARCH64 = x86_64-linux-gnu
+else ifeq ($(DEB_HOST_MULTIARCH),powerpc-linux-gnu)
+  DEB_HOST_MULTIARCH64 = powerpc64-linux-gnu
+else ifeq ($(DEB_HOST_MULTIARCH),sparc-linux-gnu)
+  DEB_HOST_MULTIARCH64 = sparc64-linux-gnu
+else ifeq ($(DEB_HOST_MULTIARCH),s390-linux-gnu)
+  DEB_HOST_MULTIARCH64 = s390x-linux-gnu
+else ifeq ($(DEB_HOST_MULTIARCH),i386-kfreebsd-gnu)
+  DEB_HOST_MULTIARCH64 = x86_64-linux-gnu
+else ifeq ($(DEB_HOST_MULTIARCH),mips-linux-gnu)
+  DEB_HOST_MULTIARCH64 = mips64-linux-gnu
+else ifeq ($(DEB_HOST_MULTIARCH),mipsel-linux-gnu)
+  DEB_HOST_MULTIARCH64 = mips64el-linux-gnu
+endif
+export DEB_HOST_MULTIARCH DEB_HOST_MULTIARCH32 DEB_HOST_MULTIARCH64
+
+ifeq ($(DEB_HOST_ARCH),sparc)
+	CONFARGS += --enable-targets=sparc64-linux-gnu
+	CONFLICTS = -VextraConflicts="libc6-dev-sparc64 (<< 2.2.5-7)"
+endif
+ifeq ($(DEB_HOST_ARCH),sparc64)
+	CONFARGS += --enable-targets=sparc-linux-gnu
+	CONFLICTS = -VextraConflicts="libc6-dev-sparc64 (<< 2.2.5-7)"
+endif
+ifeq ($(DEB_HOST_ARCH),powerpc)
+	CONFARGS += --enable-targets=powerpc64-linux-gnu,spu
+endif
+ifeq ($(DEB_HOST_ARCH),ppc64)
+	CONFARGS += --enable-targets=powerpc-linux-gnu,spu
+endif
+ifeq ($(DEB_HOST_ARCH),s390)
+	CONFARGS += --enable-targets=s390x-linux-gnu
+endif
+ifeq ($(DEB_HOST_ARCH),s390x)
+	CONFARGS += --enable-targets=s390-linux-gnu
+endif
+ifeq ($(DEB_HOST_ARCH),i386)
+	CONFARGS += --enable-targets=x86_64-linux-gnu
+endif
+ifeq ($(DEB_HOST_ARCH),kfreebsd-i386)
+	CONFARGS += --enable-targets=x86_64-kfreebsd-gnu
+endif
+ifeq ($(DEB_HOST_ARCH),mips)
+       CONFARGS += --enable-targets=mips64-linux-gnu
+endif
+ifeq ($(DEB_HOST_ARCH),mipsel)
+       CONFARGS += --enable-targets=mips64el-linux-gnu
+endif
+ifneq (,$(filter $(DEB_HOST_ARCH),armhf i386 ia64 sparc sparc64))
+	CONFARGS += --disable-werror
+endif
+
+with_check := yes
+ifneq (,$(findstring nocheck,$(DEB_BUILD_OPTIONS)))
+	with_check := disabled through DEB_BUILD_OPTIONS
+endif
+ifneq (,$(filter $(DEB_HOST_ARCH), armel armhf mips mipsel sparc))
+	ignore_regressions := regressions ignored on architecture $(DEB_HOST_ARCH)
+endif
+ignore_regressions := regressions ignored on architecture $(DEB_HOST_ARCH)
+#ifneq (,$(filter $(DEB_HOST_ARCH),mips mipsel))
+#	with_check := disabled for architecture $(DEB_HOST_ARCH)
+#endif
+
+with_strip := yes
+ifneq (,$(findstring nostrip,$(DEB_BUILD_OPTIONS)))
+	with_strip := disabled through DEB_BUILD_OPTIONS
+endif
+
+source_files = $(addprefix $(shell basename $(pwd))/, \
+		 $(filter-out %-stamp .pc CVS debian builddir-% test-summary, $(wildcard *)))
+
+################################################################################
+
+#################
+# patch targets #
+#################
+
+patch: patch-stamp
+patch-stamp:
+ifneq ($(PATCHED_SOURCES),yes)
+	QUILT_PATCHES=$(CURDIR)/debian/patches \
+	  quilt --quiltrc /dev/null push -a || test $$? = 2
+endif
+	touch $@
+
+unpatch:
+	QUILT_PATCHES=$(CURDIR)/debian/patches \
+	  quilt --quiltrc /dev/null pop -a -R || test $$? = 2
+	rm -rf .pc
+
+update-patches:
+	export QUILT_PATCHES=$(CURDIR)/debian/patches; \
+	export QUILT_REFRESH_ARGS="--no-timestamps --no-index -pab"; \
+	export QUILT_DIFF_ARGS="--no-timestamps --no-index -pab"; \
+	while quilt push; do quilt refresh; done
+
+################################################################################
+
+################
+# clean target #
+################
+
+clean: unpatch
+	$(checkdir)
+	-rm -fr builddir-multi builddir-single builddir-hppa64 builddir-spu builddir-gold
+	-find . -name \*.gmo -o -name \*~ -o -name \*.info ! -name sysroff.info | xargs rm -f
+	-rm -f $(pwd)/test-summary*
+	-rm -fr $(d_bin) $(d_dev) $(d_mul) $(d_doc) $(d_hppa64) $(d_src) $(d_spu) $(d_gold)
+	-rm -rf debian/patched debian/tmp debian/files* debian/substvars
+	-rm -f debian/*.orig debian/*.rej
+	-rm -rf $(d_cross) debian/files debian/substvars 
+	-rm -rf builddir-$(TARGET) {configure,build,install}-cross-stamp
+	for i in debian/*.in; do \
+	    case "$$i" in debian/control*.in) continue; esac; \
+	    rm -f $${i%*.in}; \
+	done
+
+	-rm -f *-stamp
+
+################################################################################
+
+#######################
+# single-arch targets #
+#######################
+
+SINGLE_CONFARGS = $(CONFARGS)
+ifeq ($(with_gold),yes)
+	SINGLE_CONFARGS += --enable-ld=default --enable-gold
+endif
+
+configure-single-stamp: patch-stamp
+	$(checkdir)
+
+ifeq ($(with_check),yes)
+	@if echo "spawn true" | /usr/bin/expect -f - >/dev/null; then \
+	  : ; \
+	else \
+	  echo "expect is failing on your system with the above error, which means the"; \
+	  echo "testsuite will fail.  Please resolve the above issues and retry the build."; \
+	  echo "-----------------------------------------------------------------------------"; \
+	  exit 1; \
+	fi
+endif
+
+	rm -rf configure-single-stamp \
+		builddir-single
+	mkdir builddir-single
+	cd builddir-single && env CC="$(CC)" CXX="$(CXX)" CFLAGS="$(CFLAGS)" \
+		../configure --with-sysroot=/ $(SINGLE_CONFARGS)
+	$(MAKE) -C builddir-single configure-host
+	touch configure-single-stamp
+
+build-single-stamp: configure-single-stamp
+	$(checkdir)
+	env MAKE="$(MAKE) VERSION=$(SINGLE_VERSION)" \
+	    $(MAKE) -C builddir-single/bfd headers
+	env MAKE="$(MAKE) VERSION=$(SINGLE_VERSION)" \
+	    $(MAKE) $(NJOBS) -C builddir-single
+ifeq ($(DEB_BUILD_GNU_TYPE),$(DEB_HOST_GNU_TYPE))
+ifeq ($(with_check),yes)
+	-env MAKE="$(MAKE) VERSION=$(SINGLE_VERSION)" \
+	    $(MAKE) -C builddir-single -k check
+	cat builddir-single/binutils/binutils.sum \
+	    builddir-single/gas/testsuite/gas.sum \
+	    builddir-single/ld/ld.sum >> $(pwd)/test-summary
+	set -e; \
+	if [ ! -f /usr/share/doc/binutils/test-summary.gz ]; then \
+	  echo "No test results available for the installed binutils version"; \
+	elif [ -x /usr/bin/python ]; then \
+	  echo "Test results, compared with installed binutils:"; \
+	  zcat /usr/share/doc/binutils/test-summary.gz > test-summary-installed; \
+	  if python debian/test-suite-compare.py test-summary-installed test-summary; then \
+	    : ; \
+	  elif [ -n "$(ignore_regressions)" ]; then \
+	    echo "$(ignore_regressions)"; \
+	  else \
+	    false; \
+	  fi; \
+	else \
+	  echo "python not installed, not comparing test results."; \
+	fi
+endif
+endif
+	touch build-single-stamp
+
+
+################################################################################
+
+#####################
+# multiarch targets #
+#####################
+
+multiarch_targets = \
+	alpha-linux-gnu \
+	arm-linux-gnueabi \
+	hppa-linux-gnu \
+	i486-linux-gnu \
+	ia64-linux-gnu \
+	m68k-linux-gnu \
+	m68k-rtems \
+	mips-linux-gnu \
+	mipsel-linux-gnu \
+	mips64-linux-gnu \
+	mips64el-linux-gnu \
+	powerpc-linux-gnu \
+	powerpc64-linux-gnu \
+	s390-linux-gnu \
+	s390x-linux-gnu \
+	sh-linux-gnu \
+	sh64-linux-gnu \
+	sparc-linux-gnu \
+	sparc64-linux-gnu \
+	x86_64-linux-gnu \
+	m32r-linux-gnu \
+	spu \
+	x86_64-pep
+
+configure-multi-stamp: patch-stamp
+	$(checkdir)
+	rm -rf configure-multi-stamp \
+		builddir-multi
+	mkdir builddir-multi
+	cd builddir-multi \
+	    && env CC="$(CC)" CXX="$(CXX)" CFLAGS="$(CFLAGS)" ../configure $(CONFARGS) \
+		--with-sysroot=/ \
+		--disable-werror \
+		--enable-targets=$(subst $(SPACE),$(COMMA),$(multiarch_targets))
+	$(MAKE) -C builddir-multi configure-host
+	touch configure-multi-stamp
+
+build-multi-stamp: configure-multi-stamp
+	$(checkdir)
+	$(MAKE) -C builddir-multi/bfd headers
+	env MAKE="$(MAKE) VERSION=$(MULTI_VERSION)" \
+	  $(MAKE) $(NJOBS) -C builddir-multi
+	touch build-multi-stamp
+
+################################################################################
+
+#################
+# static target #
+#################
+
+configure-static-stamp: patch-stamp
+	$(checkdir)
+	rm -rf configure-static-stamp \
+		builddir-static
+	mkdir builddir-static
+	cd builddir-static \
+	    && env CC="$(CC)" CXX="$(CXX)" CFLAGS="-g0 -Os" ../configure \
+		--prefix=/$(PF) \
+		--build=$(DEB_BUILD_GNU_TYPE) \
+		--host=$(DEB_HOST_GNU_TYPE) \
+		--with-pkgversion="GNU Binutils for $(DISTRIBUTION)"
+	$(MAKE) -C builddir-static configure-bfd
+	$(MAKE) -C builddir-static configure-ld
+	touch configure-static-stamp
+
+build-static-stamp: configure-static-stamp
+	$(checkdir)
+	$(MAKE) $(NJOBS) -C builddir-static/libiberty CCLD='$(CC) -all-static'
+	$(MAKE) $(NJOBS) -C builddir-static/bfd CCLD='$(CC) -all-static'
+	$(MAKE) $(NJOBS) -C builddir-static/ld CCLD='$(CC) -all-static'
+	touch build-static-stamp
+
+################################################################################
+
+#################
+# hppa64 target #
+#################
+
+configure-hppa64-stamp: patch-stamp
+	$(checkdir)
+	rm -rf configure-hppa64-stamp \
+		builddir-hppa64
+	mkdir builddir-hppa64
+	cd builddir-hppa64 \
+	    && env CC="$(CC)" CXX="$(CXX)" CFLAGS="$(CFLAGS)" ../configure \
+		--enable-shared \
+		--prefix=/$(PF) \
+		--build=$(DEB_BUILD_GNU_TYPE) \
+		--host=$(DEB_HOST_GNU_TYPE) \
+		--target=hppa64-linux-gnu
+	$(MAKE) -C builddir-hppa64 configure-host
+	touch configure-hppa64-stamp
+
+build-hppa64-stamp: configure-hppa64-stamp
+	$(checkdir)
+	$(MAKE) -C builddir-hppa64/bfd headers
+	env MAKE="$(MAKE) VERSION=$(HPPA64_VERSION)" \
+	  $(MAKE) $(NJOBS) -C builddir-hppa64
+	touch build-hppa64-stamp
+
+################################################################################
+
+##############
+# spu target #
+##############
+
+configure-spu-stamp: patch-stamp
+	$(checkdir)
+	rm -rf configure-spu-stamp \
+		builddir-spu
+	mkdir builddir-spu
+	cd builddir-spu \
+	    && env CC="$(CC)" CFLAGS="$(CFLAGS)" ../configure \
+		--enable-shared \
+		--prefix=/$(PF) \
+		--program-prefix=spu- \
+		--build=$(DEB_BUILD_GNU_TYPE) \
+		--host=$(DEB_BUILD_GNU_TYPE) \
+		--target=spu-elf
+	$(MAKE) -C builddir-spu configure-host
+	touch configure-spu-stamp
+
+build-spu-stamp: configure-spu-stamp
+	$(checkdir)
+	$(MAKE) -C builddir-spu/bfd headers
+	env MAKE="$(MAKE) VERSION=$(SPU_VERSION)" \
+	  $(MAKE) $(NJOBS) -C builddir-spu
+	touch build-spu-stamp
+
+################################################################################
+
+pre-build:
+#ifneq (,$(filter $(DEB_HOST_ARCH), armel powerpc))
+#	@echo Build it ...
+#else
+#	@echo Explicitely fail the build for architecture $(DEB_HOST_ARCH)
+#	false
+#endif
+
+build_stamps = build-single-stamp
+ifeq ($(with_multiarch),yes)
+       build_stamps += build-multi-stamp
+endif
+ifeq ($(DEB_HOST_ARCH),hppa)
+       build_stamps += build-hppa64-stamp
+endif
+ifneq (,$(filter $(DEB_HOST_ARCH),powerpc ppc64))
+       build_stamps += build-spu-stamp
+endif
+ifneq (,$(TARGET))
+  ifneq (,$(findstring static-cross,$(DEB_BUILD_OPTIONS)))
+       build_stamps = build-static-cross-stamp
+  else
+       build_stamps = build-cross-stamp
+  endif
+endif
+
+ifeq ($(BACKPORT),true)
+    build_stamps :=
+    with_check := no
+endif
+
+build: pre-build build-stamp
+build-arch: pre-build build-stamp
+build-indep: pre-build build-stamp
+build-stamp: $(build_stamps)
+	touch build-stamp
+
+################################################################################
+
+##################
+# install target #
+##################
+
+install_stamps = install-stamp
+ifeq ($(DEB_HOST_ARCH),hppa)
+       install_stamps += install-hppa64-stamp
+endif
+ifneq (,$(filter $(DEB_HOST_ARCH),powerpc ppc64))
+       install_stamps += install-spu-stamp
+endif
+ifneq (,$(TARGET))
+  ifneq (,$(findstring static-cross,$(DEB_BUILD_OPTIONS)))
+        install_stamps = install-static-cross-stamp
+  else
+        install_stamps = install-cross-stamp
+  endif
+endif
+ifeq ($(BACKPORT),true)
+    install_stamps :=
+endif
+install: $(install_stamps)
+install-stamp: checkroot build-stamp
+	$(checkdir)
+
+	rm -fr $(d_bin) $(d_dev) $(d_mul) $(d_doc) $(d_src)
+	$(install_dir) $(d_bin) $(d_dev) $(d_mul) $(d_doc) $(d_src)
+
+	: # install binutils and -dev stuff
+	env MAKE="$(MAKE) VERSION=$(SINGLE_VERSION)" \
+	  $(MAKE) -C builddir-single \
+		CFLAGS="$(CFLAGS)" prefix=$(pwd)/$(d_bin)/$(PF) \
+		mandir=$(pwd)/$(d_bin)/$(PF)/share/man \
+		infodir=$(pwd)/$(d_doc)/$(PF)/share/info install
+
+ifeq ($(with_multiarch),yes)
+	: # now install binutils-multiarch stuff
+	env MAKE="$(MAKE) VERSION=$(MULTI_VERSION)" \
+          $(MAKE) -C builddir-multi \
+		CFLAGS="$(CFLAGS)" \
+		prefix=$(pwd)/$(d_mul)/$(PF) \
+		mandir=$(pwd)/$(d_mul)/$(PF)/share/man \
+		infodir=$(pwd)/$(d_doc)/$(PF)/share/info install
+endif
+
+	: # copy libiberty.h ... not too keen on this, but it was requested
+	cp -f include/libiberty.h $(d_bin)/$(PF)/include
+
+	: # copy demangle.h ... not too keen on this, but it was requested
+	cp -f include/demangle.h $(d_bin)/$(PF)/include
+
+	: # copy plugin-api.h ...
+	cp -f include/plugin-api.h $(d_bin)/$(PF)/include
+
+	: # We don't need to distribute everything in binutils and -dev
+	rm -rf $(d_bin)/$(PF)/include/obstack.h
+	rm -f $(d_bin)/$(PF)/man/man1/configure.1
+	rm -f $(d_doc)/$(PF)/share/info/configure.* $(d_doc)/$(PF)/share/info/standards.*
+	: # *sigh*, bugs.debian.org/213524
+	rm -f $(d_doc)/$(PF)/share/info/dir*
+
+ifeq ($(with_multiarch),yes)
+	: # Now get rid of just about everything in binutils-multiarch
+	rm -rf $(d_mul)/$(PF)/man $(d_mul)/$(PF)/info $(d_mul)/$(PF)/include
+	rm -rf $(d_mul)/$(PF)/share/man $(d_mul)/$(PF)/share/info $(d_mul)/$(PF)/share/locale
+
+	: # elfedit (even with its --input-mach option)
+	: # is the same for all targets.
+	rm -f $(d_mul)/$(PF)/bin/elfedit
+
+	: # c++filt does not link to libbfd for anything more than
+	: # the help message, and its behavior does not vary
+	: # between arches aside from the --version message.
+	rm -f $(d_mul)/$(PF)/bin/c++filt
+
+	: # As gas/README points out (search for --enable-targets),
+	: # multi-arch gas is not ready yet.
+	rm -f $(d_mul)/$(PF)/bin/as
+	rm -f $(d_mul)/$(PF)/bin/ld
+	rm -f $(d_mul)/$(PF)/bin/ld.bfd
+	rm -f $(d_mul)/$(PF)/bin/ld.gold
+	rm -fr $(d_mul)/$(PF)/lib/ldscripts
+
+  ifneq (,$(filter $(DEB_HOST_ARCH),powerpc ppc64))
+	rm -f $(d_mul)/$(PF)/bin/embedspu
+  endif
+endif
+
+	$(install_dir) $(d_dev)/$(PF)/include/ $(d_dev)/$(PF)/lib/
+	mv $(d_bin)/$(PF)/include/* $(d_dev)/$(PF)/include/
+	mv $(d_bin)/$(PF)/lib/*.a $(d_bin)/$(PF)/lib/libbfd.so $(d_bin)/$(PF)/lib/libopcodes.so \
+	   $(d_dev)/$(PF)/lib/
+
+ifeq ($(with_multiarch),yes)
+	rm -f $(d_mul)/$(PF)/lib/libbfd.so $(d_mul)/$(PF)/lib/libopcodes.so
+	rm -f $(d_mul)/$(PF)/lib/*.la $(d_mul)/$(PF)/lib/*.a
+	rm -f $(d_mul)/$(PF)/lib*/libiberty*
+endif
+
+	: # Get rid of .la files since libtool obviously has no idea about transient paths
+	rm -f $(d_bin)/$(PF)/lib/*.la
+
+ifeq ($(with_strip),yes)
+	: # Strip shared libraries
+	$(STRIP) --strip-unneeded $(d_bin)/$(PF)/lib/libbfd-*so
+	$(STRIP) --strip-unneeded $(d_bin)/$(PF)/lib/libopcodes-*so
+
+	chmod ugo-x $(d_bin)/$(PF)/lib/*.so
+
+	$(STRIP) $$(file $(d_bin)/$(PF)/bin/* |awk -F: '$$0 !~ /script/ {print $$1}')
+
+  ifeq ($(with_multiarch),yes)
+	$(STRIP) --strip-unneeded $(d_mul)/$(PF)/lib/libbfd-*so
+	$(STRIP) --strip-unneeded $(d_mul)/$(PF)/lib/libopcodes-*so
+
+	chmod ugo-x $(d_mul)/$(PF)/lib/*.so
+
+	$(STRIP) $$(file $(d_mul)/$(PF)/bin/* |awk -F: '$$0 !~ /script/ {print $$1}')
+  endif
+endif
+
+	: # Don't want /usr/<arch>-linux to exist in any package
+	rm -rf $(d_bin)/$(PF)/$(DEB_HOST_GNU_TYPE)
+
+	: # Remove windres manpages
+	rm -f $(d_bin)/$(PF)/share/man/man1/windres.1
+
+ifeq ($(with_multiarch),yes)
+	rm -rf $(d_mul)/$(PF)/$(DEB_HOST_GNU_TYPE)
+	rm -f $(d_mul)/$(PF)/share/man/man1/windres.1
+endif
+
+	rm -f $(d_bin)/$(PF)/bin/ld
+	ln -s ld.bfd $(d_bin)/$(PF)/bin/ld
+ifeq ($(with_gold),yes)
+	ln -s ld.gold $(d_bin)/$(PF)/bin/gold
+	mv $(d_bin)/$(PF)/share/man/man1/ld.1 \
+		$(d_bin)/$(PF)/share/man/man1/ld.bfd.1
+	ln -s ld.bfd.1.gz $(d_bin)/$(PF)/share/man/man1/ld.1.gz
+  ifeq ($(DEB_BUILD_GNU_TYPE),$(DEB_HOST_GNU_TYPE))
+	if which help2man >/dev/null 2>&1; then \
+	  help2man -n 'The GNU ELF linker' $(d_bin)/$(PF)/bin/ld.gold \
+	    | sed 's,$(d_bin)/$(PF)/bin/,,g' > debian/ld.gold.1; \
+	fi
+  endif
+	cp debian/ld.gold.1 $(d_bin)/$(PF)/share/man/man1/
+	ln -s ld.gold.1.gz $(d_bin)/$(PF)/share/man/man1/gold.1.gz
+
+	: # install a symlink for the gold linker
+	$(install_dir) $(d_bin)/$(PF)/lib/gold-ld
+	ln -s ../../bin/ld.gold $(d_bin)/$(PF)/lib/gold-ld/ld
+
+	: # only keep the gold linker diversion to it's own package.
+	rm -fr $(d_gold)
+	$(install_dir) $(d_gold)
+	$(install_dir) $(d_gold)/$(PF)/bin
+	$(install_dir) $(d_gold)/$(PF)/share/man/man1
+	ln -s ld.gold $(d_gold)/$(PF)/bin/ld
+	ln -s ld.gold.1.gz $(d_gold)/$(PF)/share/man/man1/ld.1.gz
+endif
+	: # install a symlink for the old linker
+	$(install_dir) $(d_bin)/$(PF)/lib/compat-ld
+	ln -s ../../bin/ld.bfd $(d_bin)/$(PF)/lib/compat-ld/ld
+
+	: # Remove empty directory
+	rmdir $(d_bin)/$(PF)/include/
+
+	: # install libiberty PIC library
+	$(install_file) builddir-single/libiberty/pic/libiberty.a \
+		$(d_dev)/$(PF)/lib/libiberty_pic.a
+
+	touch install-stamp
+
+install-hppa64-stamp: checkroot build-hppa64-stamp
+	$(checkdir)
+
+	rm -fr $(d_hppa64)
+	$(install_dir) $(d_hppa64)
+	$(install_dir) $(d_hppa64)/$(PF)/lib
+
+	: # install binutils-hppa64 stuff
+	env MAKE="$(MAKE) VERSION=$(HPPA64_VERSION)" \
+          $(MAKE) -C builddir-hppa64 \
+		CFLAGS="$(CFLAGS)" \
+		prefix=$(pwd)/$(d_hppa64)/$(PF)/ \
+		mandir=$(pwd)/$(d_hppa64)/$(PF)/share/man \
+		infodir=$(pwd)/$(d_hppa64)/$(PF)/share/info install
+
+	: # move shared libs to the standard path
+	mv $(d_hppa64)/$(PF)/$(DEB_HOST_GNU_TYPE)/hppa64-linux-gnu/lib/lib*-*.so \
+		$(d_hppa64)/$(PF)/lib/.
+
+	: # Now get rid of just about everything in binutils-hppa64
+	rm -rf $(d_hppa64)/$(PF)/man
+	rm -rf $(d_hppa64)/$(PF)/info
+	rm -rf $(d_hppa64)/$(PF)/include
+	rm -rf $(d_hppa64)/$(PF)/share
+	rm -rf $(d_hppa64)/$(PF)/hppa-linux-gnu
+	rm -rf $(d_hppa64)/$(PF)/lib/libiberty.a
+
+ifeq ($(with_strip),yes)
+	: # Strip shared libraries
+	$(STRIP) --strip-unneeded $(d_hppa64)/$(PF)/lib/libbfd-*so
+	$(STRIP) --strip-unneeded $(d_hppa64)/$(PF)/lib/libopcodes-*so
+	$(STRIP) $$(file $(d_hppa64)/$(PF)/bin/* | awk -F: '$$0 !~ /script/ {print $$1}')
+endif
+
+	chmod ugo-x $(d_hppa64)/$(PF)/lib/*.so
+
+	: # Don't want /usr/<arch>-linux to exist in any package
+	rm -rf $(d_hppa64)/$(PF)/hppa64-linux-gnu
+
+	touch install-hppa64-stamp
+
+install-static-stamp: checkroot build-static-stamp
+	$(checkdir)
+
+	rm -fr $(d_static) $(d_udeb)
+	$(install_dir) $(d_static) $(d_udeb)
+
+	: # Copy static ld-new into /bin for both -static and -static-udeb
+	$(install_dir) $(d_static)/bin
+	$(install_binary) builddir-static/ld/ld-new $(d_static)/bin/ld_static
+	$(install_dir) $(d_udeb)/bin
+	$(install_binary) builddir-static/ld/ld-new $(d_udeb)/bin/ld_static
+ifeq ($(with_strip),yes)
+	pkg_create_dbgsym $(p_static) $(d_static) || true
+	$(STRIP) --strip-unneeded $(d_static)/bin/ld_static $(d_udeb)/bin/ld_static
+endif
+
+	touch install-static-stamp
+
+install-spu-stamp: checkroot build-spu-stamp
+	$(checkdir)
+
+	rm -fr $(d_spu)
+	$(install_dir) $(d_spu)
+	$(install_dir) $(d_spu)/$(PF)/lib
+
+	: # install binutils-spu stuff
+	env MAKE="$(MAKE) VERSION=$(SPU_VERSION)" \
+          $(MAKE) -C builddir-spu \
+		CFLAGS="$(CFLAGS)" \
+		prefix=$(pwd)/$(d_spu)/$(PF)/ \
+		mandir=$(pwd)/$(d_spu)/$(PF)/share/man \
+		infodir=$(pwd)/$(d_spu)/$(PF)/share/info install
+
+	: # move shared libs to the standard path
+	mv $(d_spu)/$(PF)/$(DEB_HOST_GNU_TYPE)/spu-elf/lib/lib*-*.so \
+		$(d_spu)/$(PF)/lib/.
+
+	: # Now get rid of just about everything in binutils-spu
+	rm -rf $(d_spu)/$(PF)/man
+	rm -rf $(d_spu)/$(PF)/info
+	rm -rf $(d_spu)/$(PF)/include
+	rm -rf $(d_spu)/$(PF)/share
+	rm -rf $(d_spu)/$(PF)/$(DEB_HOST_GNU_TYPE)
+	rm -rf $(d_spu)/$(PF)/lib/libiberty.a
+	rm -rf $(d_spu)/$(PF)/lib/ldscripts
+
+ifeq ($(with_strip),yes)
+	: # Strip shared libraries
+	$(STRIP) --strip-unneeded $(d_spu)/$(PF)/lib/libbfd-*so
+	$(STRIP) --strip-unneeded $(d_spu)/$(PF)/lib/libopcodes-*so
+	$(STRIP) $$(file $(d_spu)/$(PF)/bin/* | awk -F: '$$0 !~ /script/ {print $$1}')
+endif
+
+	chmod ugo-x $(d_spu)/$(PF)/lib/*.so
+
+	: # Don't want /usr/<arch>-linux to exist in any package
+	rm -rf $(d_spu)/$(PF)/spu-elf
+
+	touch install-spu-stamp
+
+################################################################################
+
+#######################
+# binary-indep target #
+#######################
+
+binary-indep: checkroot build install
+	$(checkdir)
+
+	rm -f debian/files debian/substvars
+
+# Cross builds do not have documentation packages
+ifeq (,$(TARGET))
+
+	$(install_dir) $(d_doc)/DEBIAN
+
+ifneq ($(BACKPORT),true)
+	$(install_dir) $(d_doc)/$(PF)/share/doc/$(p_doc)/
+	$(install_file)	debian/changelog $(d_doc)/$(PF)/share/doc/$(p_doc)/changelog.Debian
+	$(install_file)	debian/copyright $(d_doc)/$(PF)/share/doc/$(p_doc)/
+	for i in bfd gas gprof ld; do \
+	  ln -sf ../$(p_bin)/$$i $(d_doc)/$(PF)/share/doc/$(p_doc)/$$i; \
+	done
+	find $(d_doc)/$(PF)/share/doc/$(p_doc) -maxdepth 1 -type f ! -name copyright | xargs gzip -9
+	gzip -9 $(d_doc)/$(PF)/share/info/*
+
+	dpkg-gencontrol -isp -P$(d_doc) -p$(p_doc)
+	chown -R root:root $(d_doc)
+	chmod -R go=rX  $(d_doc)
+	dpkg --build $(d_doc) ..
+
+	$(install_dir) $(d_src)/$(PF)/share/doc/$(p_src)/
+	$(install_file)	debian/changelog $(d_src)/$(PF)/share/doc/$(p_src)/changelog.Debian
+	$(install_file)	debian/copyright $(d_src)/$(PF)/share/doc/$(p_src)/
+	find $(d_src)/$(PF)/share/doc/$(p_src) -maxdepth 1 -type f ! -name copyright | xargs gzip -9
+endif # ifndef BACKPORT
+
+	$(install_dir) $(d_src)/DEBIAN
+	$(install_dir) $(d_src)/$(PF)/src/binutils/patches
+	$(install_file) debian/patches/* $(d_src)/$(PF)/src/binutils/patches/
+	tar -c --xz -C .. --exclude=CVS \
+		-f $(pwd)/$(d_src)/$(PF)/src/binutils/binutils-$(VERSION).tar.xz \
+		$(source_files)
+
+	tar cf - $$(find './debian' -mindepth 1 \( \
+		-path './debian/binutils*' -type d -prune -o \
+		-path './debian/patches' -prune -o \
+		-path './debian/tmp*' -prune -o \
+		-path './debian/.bzr*' -prune -o \
+		-path './debian/files' -prune -o \
+		-print \) ) \
+	  | tar -x -C $(d_src)/$(PF)/src/binutils -f -
+	-chmod 755 $(d_src)/$(PF)/src/binutils/debian/*.{pre,post}{inst,rm}
+	chmod 755 $(d_src)/$(PF)/src/binutils/debian/test-suite-compare.py
+
+	dpkg-gencontrol -isp -P$(d_src) -p$(p_src)
+	chown -R root:root $(d_src)
+	chmod -R go=rX  $(d_src)
+	dpkg --build $(d_src) ..
+
+endif
+
+################################################################################
+
+#######################
+# binary-arch target  #
+#######################
+
+binary-arch: checkroot build install
+	$(checkdir)
+
+ifneq ($(BACKPORT),true)
+# Process the following only if $(TARGET) is set
+ifneq (,$(TARGET))
+	test "" != "$(TARGET)"
+
+	rm -rf $(d_cross)/$(PF)/share/info $(d_cross)/$(PF)/share/man
+
+	sed "/^$$/ q" < debian/control.in > debian/control
+	sed -e "s/__TARGET__/$$(echo -n $(TARGET) | sed s/_/-/g)/" \
+                 < debian/control.cross.in >> debian/control
+
+	$(install_dir) $(d_cross)/DEBIAN
+
+	$(install_dir) $(d_cross)/$(PF)/share/doc/$(p_cross)/
+	$(install_file)	debian/changelog $(d_cross)/$(PF)/share/doc/$(p_cross)/changelog.Debian
+	$(install_file)	debian/copyright debian/README.cross $(d_cross)/$(PF)/share/doc/$(p_cross)/
+	gzip -9f $(d_cross)/$(PF)/share/doc/$(p_cross)/changelog.Debian
+
+	for pkg in bfd gas gprof ld; do \
+	  ln -sf ../binutils/$$pkg $(d_cross)/$(PF)/share/doc/$(p_cross)/$$pkg; \
+	done
+
+	rm -f debian/substvars
+	dpkg-shlibdeps $(d_cross)/$(PF)/bin/*
+	dpkg-gencontrol -isp -P$(d_cross) -p$(p_cross)
+	dpkg --build $(d_cross) ..
+
+else
+	cp debian/control.in debian/control
+	: # generate some control & helper files
+	nver=$$(echo $(DEB_UPSTREAM) | awk -F. '{ OFS="."; $$NF=$$NF+1; print }'); \
+	for i in debian/*.in; do \
+	    case "$$i" in debian/control.cross.in) continue; esac; \
+	    sed -e 's/@VER@/$(VERSION)/g' \
+		-e 's/@DEB_VER@/$(DEB_VERSION)/g' \
+		-e 's/@DEB_SVER@/$(DEB_SVERSION)/g' \
+		-e 's/@DEB_UVER@/$(DEB_UPSTREAM)/g' \
+		-e "s/@DEB_NVER@/$$nver/g" \
+		-e 's/@DATE_EXT@/$(DATE_EXT)/g' \
+		$$i > $${i%*.in}; \
+	done
+
+	: # install bug reporting information
+	$(install_file) -D debian/$(p_bin).presubj \
+		$(d_bin)/$(PF)/share/bug/$(p_bin)/presubj
+ifeq ($(with_multiarch),yes)
+	$(install_dir) $(d_mul)/$(PF)/share/bug
+	ln -sf $(p_bin) $(d_mul)/$(PF)/share/bug/$(p_mul)
+endif
+ifeq ($(with_gold),yes)
+	$(install_dir) $(d_gold)/$(PF)/share/bug
+	ln -sf $(p_bin) $(d_gold)/$(PF)/share/bug/$(p_gold)
+endif
+ifneq (,$(filter $(DEB_HOST_ARCH),powerpc ppc64))
+	$(install_dir) $(d_spu)/$(PF)/share/bug
+	ln -sf $(p_bin) $(d_spu)/$(PF)/share/bug/$(p_spu)
+endif
+ifeq ($(DEB_HOST_ARCH),hppa)
+	$(install_dir) $(d_hppa64)/$(PF)/share/bug
+	ln -sf $(p_bin) $(d_hppa64)/$(PF)/share/bug/$(p_hppa64)
+endif
+
+	: # make lintian happy
+	$(install_file) -D debian/$(p_bin).overrides \
+		$(d_bin)/$(PF)/share/lintian/overrides/$(p_bin)
+ifeq ($(with_multiarch),yes)
+	$(install_file) -D debian/$(p_mul).overrides \
+		$(d_mul)/$(PF)/share/lintian/overrides/$(p_mul)
+endif
+ifeq ($(with_gold),yes)
+	$(install_file) -D debian/$(p_gold).overrides \
+		$(d_gold)/$(PF)/share/lintian/overrides/$(p_gold)
+endif
+ifneq (,$(filter $(DEB_HOST_ARCH),powerpc ppc64))
+	$(install_file) -D debian/$(p_spu).overrides \
+		$(d_spu)/$(PF)/share/lintian/overrides/$(p_spu)
+endif
+ifeq ($(DEB_HOST_ARCH),hppa)
+	$(install_file) -D debian/$(p_hppa64).overrides \
+		$(d_hppa64)/$(PF)/share/lintian/overrides/$(p_hppa64)
+endif
+
+	: # install maintainer scrtips
+	$(install_dir) $(d_bin)/DEBIAN
+	$(install_script) debian/binutils.postinst $(d_bin)/DEBIAN/postinst
+	$(install_script) debian/binutils.postrm $(d_bin)/DEBIAN/postrm
+	$(install_file) debian/binutils.shlibs $(d_bin)/DEBIAN/shlibs
+
+	$(install_dir) $(d_dev)/DEBIAN
+
+ifeq ($(with_multiarch),yes)
+	$(install_dir) $(d_mul)/DEBIAN
+	$(install_script) debian/binutils-multiarch.preinst $(d_mul)/DEBIAN/preinst
+	$(install_script) debian/binutils-multiarch.postinst $(d_mul)/DEBIAN/postinst
+	$(install_script) debian/binutils-multiarch.prerm $(d_mul)/DEBIAN/prerm
+	$(install_script) debian/binutils-multiarch.postrm $(d_mul)/DEBIAN/postrm
+	$(install_file) debian/binutils-multiarch.shlibs $(d_mul)/DEBIAN/shlibs
+endif
+
+ifeq ($(with_gold),yes)
+	$(install_dir) $(d_gold)/DEBIAN
+	$(install_script) debian/binutils-gold.postrm $(d_gold)/DEBIAN/postrm
+	$(install_script) debian/binutils-gold.preinst $(d_gold)/DEBIAN/preinst
+endif
+
+ifneq (,$(filter $(DEB_HOST_ARCH),powerpc ppc64))
+	$(install_dir) $(d_spu)/DEBIAN
+	$(install_script) debian/binutils-spu.postinst $(d_spu)/DEBIAN/postinst
+	$(install_script) debian/binutils-spu.postrm $(d_spu)/DEBIAN/postrm
+	$(install_file) debian/binutils-spu.shlibs $(d_spu)/DEBIAN/shlibs
+endif
+
+ifeq ($(DEB_HOST_ARCH),hppa)
+	$(install_dir) $(d_hppa64)/DEBIAN
+	$(install_script) debian/binutils-hppa64.postinst $(d_hppa64)/DEBIAN/postinst
+	$(install_script) debian/binutils-hppa64.postrm $(d_hppa64)/DEBIAN/postrm
+	$(install_file) debian/binutils-hppa64.shlibs $(d_hppa64)/DEBIAN/shlibs
+endif
+
+	: # install docs
+	$(install_dir) $(d_bin)/$(PF)/share/doc/$(p_bin)/
+	$(install_file)	debian/changelog $(d_bin)/$(PF)/share/doc/$(p_bin)/changelog.Debian
+	$(install_file)	debian/copyright $(d_bin)/$(PF)/share/doc/$(p_bin)/
+
+	$(install_dir) $(d_dev)/$(PF)/share/doc/
+	ln -sf $(p_bin) $(d_dev)/$(PF)/share/doc/$(p_dev)
+ifeq ($(with_multiarch),yes)
+	$(install_dir) $(d_mul)/$(PF)/share/doc/
+	ln -sf $(p_bin) $(d_mul)/$(PF)/share/doc/$(p_mul)
+endif
+ifeq ($(with_gold),yes)
+	$(install_dir) $(d_gold)/$(PF)/share/doc/
+	ln -sf $(p_bin) $(d_gold)/$(PF)/share/doc/$(p_gold)
+endif
+ifneq (,$(filter $(DEB_HOST_ARCH),powerpc ppc64))
+	$(install_dir) $(d_spu)/$(PF)/share/doc/
+	ln -sf $(p_bin) $(d_spu)/$(PF)/share/doc/$(p_spu)
+endif
+ifeq ($(DEB_HOST_ARCH),hppa)
+	$(install_dir) $(d_hppa64)/$(PF)/share/doc/
+	ln -sf $(p_bin) $(d_hppa64)/$(PF)/share/doc/$(p_hppa64)
+endif
+
+ifeq ($(DEB_BUILD_GNU_TYPE),$(DEB_HOST_GNU_TYPE))
+ifeq ($(with_check),yes)
+	$(install_file) $(pwd)/test-summary $(d_bin)/$(PF)/share/doc/$(p_bin)/
+endif
+endif
+	$(install_file) binutils/NEWS debian/README.cross \
+                        $(d_bin)/$(PF)/share/doc/$(p_bin)/
+
+	$(install_file) binutils/ChangeLog $(d_bin)/$(PF)/share/doc/$(p_bin)/changelog
+
+	for pkg in bfd gas gprof ld; do \
+	  $(install_dir) $(d_bin)/$(PF)/share/doc/$(p_bin)/$$pkg; \
+	done
+	$(install_file) bfd/ChangeLog bfd/PORTING bfd/TODO \
+			$(d_bin)/$(PF)/share/doc/$(p_bin)/bfd/
+	$(install_file) gas/ChangeLog gas/NEWS $(d_bin)/$(PF)/share/doc/$(p_bin)/gas/
+	$(install_file) gprof/ChangeLog gprof/TODO gprof/TEST \
+			$(d_bin)/$(PF)/share/doc/$(p_bin)/gprof/
+	$(install_file) ld/ChangeLog ld/TODO ld/NEWS \
+			$(d_bin)/$(PF)/share/doc/$(p_bin)/ld/
+
+	: # These only exist in H. J. Lu releases not GNU ones.
+	for dir in binutils bfd gas gprof ld; do \
+	  if [ -f $$dir/ChangeLog.linux ]; then \
+	    $(install_file) $$dir/ChangeLog.linux $(d_bin)/$(PF)/share/doc/$(p_bin)/$$dir/; \
+	  fi; \
+	done
+
+	: # Copy bbconv.pl to the doc dir for use by interested people
+	$(install_file) gprof/bbconv.pl $(d_bin)/$(PF)/share/doc/$(p_bin)/gprof/.
+
+	: # Compress stuff that needs it
+	gzip -9 $(d_bin)/$(PF)/share/man/man1/*.1
+	find $(d_bin)/$(PF)/share/doc/$(p_bin)/ -type f ! -name copyright -a ! -name bbconv.pl | xargs gzip -9
+
+	: # Finish it all up
+	find $(d_bin) -type f | xargs file | grep ELF | cut -d: -f 1 | xargs dpkg-shlibdeps
+	dpkg-gencontrol -isp -P$(d_bin) -p$(p_bin) $(CONFLICTS)
+
+	rm -f debian/substvars
+	dpkg-gencontrol -isp -P$(d_dev) -p$(p_dev)
+
+ifeq ($(with_multiarch),yes)
+	rm -f debian/substvars
+	find $(d_mul) -type f | xargs file | grep ELF | cut -d: -f 1 | xargs dpkg-shlibdeps
+	dpkg-gencontrol -isp -P$(d_mul) -p$(p_mul)
+endif
+
+ifeq ($(with_gold),yes)
+	rm -f debian/substvars
+# no binary
+#	find $(d_gold) -type f | xargs file | grep ELF | cut -d: -f 1 | xargs dpkg-shlibdeps
+	dpkg-gencontrol -isp -P$(d_gold) -p$(p_gold)
+endif
+ifneq (,$(filter $(DEB_HOST_ARCH),powerpc ppc64))
+	rm -f debian/substvars
+	find $(d_spu) -type f | xargs file | grep ELF | cut -d: -f 1 | xargs dpkg-shlibdeps
+	dpkg-gencontrol -isp -P$(d_spu) -p$(p_spu)
+endif
+ifeq ($(DEB_HOST_ARCH),hppa)
+	rm -f debian/substvars
+	find $(d_hppa64) -type f | xargs file | grep ELF | cut -d: -f 1 | xargs dpkg-shlibdeps
+	dpkg-gencontrol -isp -P$(d_hppa64) -p$(p_hppa64)
+endif
+
+	chown -R root:root $(d_bin) $(d_dev)
+	chmod -R go=rX  $(d_bin) $(d_dev)
+	dpkg --build $(d_bin) ..
+	dpkg --build $(d_dev) ..
+ifeq ($(with_multiarch),yes)
+	chown -R root:root $(d_mul)
+	chmod -R go=rX  $(d_mul)
+	dpkg --build $(d_mul) ..
+endif
+ifeq ($(with_gold),yes)
+	chown -R root:root $(d_gold)
+	chmod -R go=rX  $(d_gold)
+	dpkg --build $(d_gold) ..
+endif
+ifneq (,$(filter $(DEB_HOST_ARCH),powerpc ppc64))
+	chown -R root:root $(d_spu)
+	chmod -R go=rX  $(d_spu)
+	dpkg --build $(d_spu) ..
+endif
+ifeq ($(DEB_HOST_ARCH),hppa)
+	chown -R root:root $(d_hppa64)
+	chmod -R go=rX  $(d_hppa64)
+	dpkg --build $(d_hppa64) ..
+endif
+
+endif # Process the following only if $(TARGET) is set
+endif # ifndef BACKPORT
+################################################################################
+
+#################
+# cross targets #
+#################
+
+
+# Support TARGET both as Debian architecture specification (e.g. arm),
+# and as the target name (e.g. arm-linux-gnu).
+try_convert := $(shell dpkg-architecture -f -a$(TARGET) -qDEB_HOST_GNU_TYPE 2>/dev/null)
+ifneq ($(try_convert),)
+override TARGET := $(try_convert)
+endif
+
+# Process the following only if $(TARGET) is set
+ifneq (,$(TARGET))
+
+p_cross = $(subst _,-,binutils-$(TARGET))
+d_cross = debian/$(p_cross)
+
+ifneq ($(filter sparc-linux-gnu powerpc-linux-gnu mips-linux-gnu, $(TARGET)),)
+ADDITIONAL_TARGETS = --enable-targets=$(TARGET:%-linux-gnu=%64-linux-gnu)
+endif
+ifneq ($(filter i386-linux-gnu i486-linux-gnu i586-linux-gnu i686-linux-gnu x86-linux-gnu, $(TARGET)),)
+ADDITIONAL_TARGETS = --enable-targets=x86_64-linux-gnu
+endif
+ifneq ($(filter i386-kfreebsd-gnu i486-kfreebsd-gnu i586-kfreebsd-gnu x86-kfreebsd-gnu, $(TARGET)),)
+ADDITIONAL_TARGETS = --enable-targets=x86_64-linux-gnu
+endif
+ifeq ($(TARGET), x86_64-linux-gnu)
+ADDITIONAL_TARGETS = --enable-targets=i486-linux-gnu
+endif
+ifeq ($(TARGET), x86_64-kfreebsd-gnu)
+ADDITIONAL_TARGETS = --enable-targets=i486-kfreebsd-gnu
+endif
+ifeq ($(TARGET), mipsel-linux-gnu)
+ADDITIONAL_TARGETS = --enable-targets=mips64el-linux-gnu
+endif
+ifeq ($(TARGET), sparc64-linux-gnu)
+ADDITIONAL_TARGETS = --enable-targets=sparc-linux-gnu
+endif
+ifeq ($(TARGET), s390-linux-gnu)
+ADDITIONAL_TARGETS = --enable-targets=s390x-linux-gnu
+endif
+ifeq ($(TARGET), s390x-linux-gnu)
+ADDITIONAL_TARGETS = --enable-targets=s390-linux-gnu
+endif
+
+#-----------------------------------------------------------------
+# sysroot options
+ifdef WITH_SYSROOT
+  with_sysroot = $(WITH_SYSROOT)
+endif
+ifdef WITH_BUILD_SYSROOT
+  with_build_sysroot = $(WITH_BUILD_SYSROOT)
+endif
+
+CROSS_CONFARGS := $(ADDITIONAL_TARGETS) $(CONFARGS) 
+ifneq ($(with_sysroot),)
+  CROSS_CONFARGS += --with-sysroot=$(with_sysroot)
+endif
+ifneq ($(with_build_sysroot),)
+  CROSS_CONFARGS += --with-build-sysroot=$(with_build_sysroot)
+endif
+ifeq ($(with_gold),yes)
+  CROSS_CONFARGS += --enable-ld=default --enable-gold
+endif
+
+configure-cross-stamp: patch-stamp
+	$(checkdir)
+	test "" != "$(TARGET)"
+	rm -rf configure-cross-stamp builddir-$(TARGET)
+	mkdir builddir-$(TARGET)
+	cd builddir-$(TARGET) \
+	    && env CC="$(CC)" CXX="$(CXX)" ../configure --host=$(DEB_HOST_GNU_TYPE) \
+	        --build=$(DEB_BUILD_GNU_TYPE) --target=$(TARGET) --prefix=/$(PF) \
+		$(CROSS_CONFARGS)
+	touch $@
+
+build-cross-stamp: configure-cross-stamp
+	$(checkdir)
+	test "" != "$(TARGET)"
+	$(MAKE) -C builddir-$(TARGET) $(NJOBS) CFLAGS="$(CFLAGS)"
+	touch $@
+
+install-cross-stamp: build-cross-stamp
+	$(checkdir)
+	test "" != "$(TARGET)"
+	rm -rf $(d_cross)
+	$(MAKE) -C builddir-$(TARGET) prefix=$(pwd)/$(d_cross)/$(PF) \
+		mandir=$(pwd)/$(d_cross)/$(PF)/share/man install
+	rm -rf $(d_cross)/$(PF)/lib* $(d_cross)/$(PF)/info $(d_cross)/$(PF)/share/locale
+ifeq ($(with_strip),yes)
+	$(STRIP) $$(file $(d_cross)/$(PF)/bin/* | awk -F: '$$0 !~ /script/ {print $$1}')
+
+	chmod ugo-x $(d_cross)/$(PF)/$(DEB_HOST_GNU_TYPE)/$(TARGET)/lib/*.so
+endif
+
+	# Get rid of .la files since libtool obviously has no idea about transient paths
+	rm -f $(d_cross)/$(PF)/$(DEB_HOST_GNU_TYPE)/$(TARGET)/lib/*.la
+
+	gzip -9 $(d_cross)/$(PF)/share/man/man1/*
+	touch $@
+
+configure-host-cross-stamp: configure-cross-stamp
+	$(checkdir)
+	test "" != "$(TARGET)"
+	$(MAKE) configure-host -C builddir-$(TARGET) $(NJOBS) CFLAGS="$(CFLAGS)"
+	touch $@
+
+build-static-cross-stamp: configure-host-cross-stamp
+	$(checkdir)
+	test "" != "$(TARGET)"
+	$(MAKE) -C builddir-$(TARGET) $(NJOBS) CFLAGS="$(CFLAGS)" LDFLAGS="-all-static"
+	touch $@
+
+install-static-cross-stamp: build-static-cross-stamp install-cross-stamp
+
+binary-cross: 
+	@echo "Please use dpkg-buildpackage instead of calling binary-cross directly; see README.cross"
+	@false
+
+endif
+
+################################################################################
+
+define checkdir
+        test -f bfd/elf32.c -a -f debian/rules
+endef
+
+# Below here is fairly generic really
+
+binary:         binary-indep binary-arch
+
+checkroot:
+	$(checkdir)
+	test root = "`whoami`"
+
+.PHONY: binary binary-arch binary-indep clean checkroot
--- binutils-2.22.orig/debian/binutils-spu.shlibs.in
+++ binutils-2.22/debian/binutils-spu.shlibs.in
@@ -0,0 +1,2 @@
+libbfd @VER@-spu@DATE_EXT@ binutils-spu
+libopcodes @VER@-spu@DATE_EXT@ binutils-spu
--- binutils-2.22.orig/debian/README.source
+++ binutils-2.22/debian/README.source
@@ -0,0 +1,2 @@
+The package uses dpatch to apply patches on top of the upstream source.
+See /usr/share/doc/dpatch/README.source.gz.
--- binutils-2.22.orig/debian/binutils-multiarch.postinst
+++ binutils-2.22/debian/binutils-multiarch.postinst
@@ -0,0 +1,52 @@
+#! /bin/sh
+# Update .so symlinks and remove obsolete diversions.
+#
+# Removing a diversion requires a guarantee that the conflicting
+# file is not present any more, and we cannot guarantee that if
+# some other version of binutils-multiarch is installed.
+# So we remove the diversions in postinst, not preinst.
+set -e
+old_diversion() {
+	local divertto file
+	file=$1
+	divertto=${2-$file.single}
+	if
+		dpkg-divert --package binutils-multiarch --list |
+		grep -q -F "$divertto"
+	then
+		dpkg-divert --package binutils-multiarch \
+				--remove --rename \
+				--divert "$divertto" "$file"
+	fi
+}
+
+# remove obsolete diversions
+old_diversion /usr/bin/ld.bfd
+old_diversion /usr/bin/c++filt
+old_diversion /usr/lib/libbfd.a /usr/lib/libbfd-single.a
+old_diversion /usr/lib/libopcodes.a /usr/lib/libopcodes-single.a
+old_diversion /usr/bin/ld
+old_diversion /usr/bin/elfedit
+for f in elf32_sparc elf32ppc elf64alpha elf_i386 m68kelf \
+         alpha i386linux m68klinux sparclinux sun4
+do
+	for ext in x xbn xn xr xs xu
+	do
+		old_diversion /usr/lib/ldscripts/$f.$ext
+	done
+done
+old_diversion /usr/lib/libbfd-2.9.1.0.15.so.0.0.0 \
+              /usr/lib/libbfd-single-2.9.1.0.15.so.0.0.0
+old_diversion /usr/lib/libopcodes-2.9.1.0.15.so.0.0.0 \
+              /usr/lib/libopcodes-single-2.9.1.0.15.so.0.0.0
+old_diversion /usr/lib/libbfd.la /usr/lib/libbfd-single.la
+old_diversion /usr/lib/libopcodes.la /usr/lib/libopcodes-single.la
+old_diversion /usr/include/bfd.h /usr/include/bfd.single.h
+old_diversion /usr/lib/ldscripts
+
+rm -f /usr/lib/libbfd-*-multiarch.so.0
+rm -f /usr/lib/libopcodes-*-multiarch.so.0
+
+if [ "$1" = "configure" ]; then
+	ldconfig
+fi
--- binutils-2.22.orig/debian/binutils.shlibs.in
+++ binutils-2.22/debian/binutils.shlibs.in
@@ -0,0 +1,2 @@
+libbfd @VER@-system@DATE_EXT@ binutils (>= @DEB_UVER@), binutils (<< @DEB_NVER@)
+libopcodes @VER@-system@DATE_EXT@ binutils (>= @DEB_UVER@), binutils (<< @DEB_NVER@)
--- binutils-2.22.orig/debian/control
+++ binutils-2.22/debian/control
@@ -0,0 +1,105 @@
+Source: binutils
+Section: devel
+Priority: optional
+Maintainer: Matthias Klose <doko@debian.org>
+Uploaders: James Troup <james@nocrew.org>, Daniel Jacobowitz <dan@debian.org>
+Standards-Version: 3.9.3
+Build-Depends: dpkg-dev (>= 1.13.9), autoconf (>= 2.64), bison, flex, gettext, texinfo, dejagnu (>= 1.4.2-1.1), quilt, file, xz-utils, lsb-release, zlib1g-dev
+Vcs-Browser: https://code.launchpad.net/~doko/binutils/pkg-2.22-debian
+Vcs-Bzr: http://bazaar.launchpad.net/~doko/binutils/pkg-2.22-debian
+
+Package: binutils
+Architecture: any
+Depends: ${shlibs:Depends}
+Conflicts: gas, elf-binutils, modutils (<< 2.4.19-1), ${extraConflicts}, binutils-gold	(<< 2.20.51.20100415)
+Replaces: binutils-gold (<< 2.20.51.20100415)
+Provides: elf-binutils
+Suggests: binutils-doc (>= ${source:Version})
+Description: GNU assembler, linker and binary utilities
+ The programs in this package are used to assemble, link and manipulate
+ binary and object files.  They may be used in conjunction with a compiler
+ and various libraries to build programs.
+
+Package: binutils-dev
+Architecture: any
+Priority: extra
+Depends: binutils (= ${binary:Version})
+Conflicts: libbfd-dev
+Provides: libbfd-dev
+Replaces: libbfd-dev, libc5-dev
+Description: GNU binary utilities (BFD development files)
+ This package includes header files and static libraries necessary to build
+ programs which use the GNU BFD library, which is part of binutils.  Note
+ that building Debian packages which depend on the shared libbfd is Not
+ Allowed.
+
+Package: binutils-multiarch
+Architecture: any
+Priority: extra
+Depends: ${shlibs:Depends}, binutils (= ${binary:Version})
+Provides: multiarch-binutils
+Description: Binary utilities that support multi-arch targets
+ The programs in this package are used to manipulate binary and object
+ files that may have been created on other architectures.  This package
+ is primarily for multi-architecture developers and cross-compilers and
+ is not needed by normal users or developers.  Note that a cross-assembling
+ version of gas is not included in this package, just the binary utilities.
+ NORMAL USERS SHOULD NOT INSTALL THIS PACKAGE.  It's meant only for those
+ requiring support for reading info from binaries from other architectures.
+
+Package: binutils-gold
+Architecture: amd64 armel armhf i386 powerpc powerpcspe ppc64 sparc sparc64
+Priority: extra
+Depends: ${shlibs:Depends}, binutils (= ${binary:Version})
+Description: GNU gold linker utility
+ Gold is a new linker, which is faster than the current linker included
+ in binutils.
+ .
+ This package diverts the GNU linker (ld) with the gold linker.
+
+Package: binutils-hppa64
+Architecture: any
+Depends: ${shlibs:Depends}, binutils (= ${binary:Version})
+Recommends: libc6-dev
+Suggests: binutils-doc (>= ${source:Version})
+Description: GNU assembler, linker and binary utilities targeted for hppa64-linux
+ The programs in this package are used to assemble, link and manipulate
+ binary and object files.  They may be used in conjunction with a compiler
+ and various libraries to build programs.
+ .
+ This package is needed to build an 64-bit kernel for 64-bit hppa machines.
+
+Package: binutils-spu
+Architecture: powerpc ppc64
+Depends: ${shlibs:Depends}, binutils (= ${binary:Version})
+Recommends: libc6-dev
+Conflicts: spu-binutils
+Replaces: spu-binutils
+Provides: spu-binutils
+Suggests: binutils-doc (>= ${source:Version})
+Description: GNU assembler, linker and binary utilities targeted for spu-elf
+ The programs in this package are used to assemble, link and manipulate
+ binary and object files.  They may be used in conjunction with a compiler
+ and various libraries to build programs.
+ .
+ This package is needed to build programs for Cell Broadband Engine SPU
+ processors.
+
+Package: binutils-doc
+Section: doc
+Architecture: all
+Priority: optional
+Depends: dpkg (>= 1.15.4) | install-info
+Conflicts: binutils (<< 2.9.1.0.25-3)
+Suggests: binutils (= ${binary:Version})
+Description: Documentation for the GNU assembler, linker and binary utilities
+ This package consists of the documentation for the GNU assembler,
+ linker and binary utilities in info format.
+
+Package: binutils-source
+Architecture: all
+Priority: optional
+Depends: texinfo, zlib1g-dev, make, python
+Description: GNU assembler, linker and binary utilities (source)
+ This package contains the sources and patches which are needed to
+ build binutils.
--- binutils-2.22.orig/debian/binutils-spu.overrides
+++ binutils-2.22/debian/binutils-spu.overrides
@@ -0,0 +1,8 @@
+# don't warn about missing man pages for diverted binaries
+binutils-spu binary: binary-without-manpage
+
+# the API of the shared libs is not public, don't care about the name
+binutils-spu binary: package-name-doesnt-match-sonames
+
+# it's a cross toolchain
+binutils-spu binary: binary-or-shlib-defines-rpath
--- binutils-2.22.orig/debian/binutils-spu.postinst
+++ binutils-2.22/debian/binutils-spu.postinst
@@ -0,0 +1,7 @@
+#! /bin/sh
+
+set -e
+
+if [ "$1" = "configure" ]; then
+	ldconfig
+fi
--- binutils-2.22.orig/debian/watch
+++ binutils-2.22/debian/watch
@@ -0,0 +1,2 @@
+version=2
+http://ftp.gnu.org/gnu/binutils/binutils-([\d\.]*).tar.gz
--- binutils-2.22.orig/debian/source/format
+++ binutils-2.22/debian/source/format
@@ -0,0 +1 @@
+1.0
--- binutils-2.22.orig/debian/patches/162_fpic_s390x.diff
+++ binutils-2.22/debian/patches/162_fpic_s390x.diff
@@ -0,0 +1,31 @@
+# DP: Fix s390x build.
+
+2011-08-24  Aurelien Jarno  <aurelien@aurel32.net>
+
+	* config/picflag.m4: use -FPIC on s390x.
+	* libiberty/configure: regenerate.
+
+--- binutils-2.21.53.20110823.orig/config/picflag.m4
++++ binutils-2.21.53.20110823/config/picflag.m4
+@@ -51,6 +51,9 @@
+     m68k-*-*)
+ 	$1=-fpic
+ 	;;
++    s390x*-*-*)
++	$1=-fPIC
++	;;
+     s390*-*-*)
+ 	$1=-fpic
+ 	;;
+--- binutils-2.21.53.20110823.orig/libiberty/configure
++++ binutils-2.21.53.20110823/libiberty/configure
+@@ -4891,6 +4891,9 @@
+     m68k-*-*)
+ 	PICFLAG=-fpic
+ 	;;
++    s390x*-*-*)
++	PICFLAG=-fPIC
++	;;
+     s390*-*-*)
+ 	PICFLAG=-fpic
+ 	;;
--- binutils-2.22.orig/debian/patches/pr14069.diff
+++ binutils-2.22/debian/patches/pr14069.diff
@@ -0,0 +1,43 @@
+===================================================================
+RCS file: /cvs/src/src/ld/emultempl/elf32.em,v
+retrieving revision 1.226
+retrieving revision 1.227
+diff -u -r1.226 -r1.227
+--- src/ld/emultempl/elf32.em	2012/05/14 19:45:28	1.226
++++ src/ld/emultempl/elf32.em	2012/05/16 10:43:41	1.227
+@@ -72,7 +72,7 @@
+ 
+ if [ "x${USE_LIBPATH}" = xyes ] ; then
+   case ${target} in
+-    *-*-linux-* | *-*-k*bsd*-*)
++    *-*-linux-* | *-*-k*bsd*-* | *-*-gnu*)
+   fragment <<EOF
+ #ifdef HAVE_GLOB
+ #include <glob.h>
+@@ -374,7 +374,7 @@
+ 
+ EOF
+ case ${target} in
+-  *-*-linux-* | *-*-k*bsd*-*)
++  *-*-linux-* | *-*-k*bsd*-* | *-*-gnu*)
+     fragment <<EOF
+ 	  {
+ 	    struct bfd_link_needed_list *l;
+@@ -620,7 +620,7 @@
+     # FreeBSD
+     ;;
+ 
+-    *-*-linux-* | *-*-k*bsd*-*)
++    *-*-linux-* | *-*-k*bsd*-* | *-*-gnu*)
+       fragment <<EOF
+ /* For a native linker, check the file /etc/ld.so.conf for directories
+    in which we may find shared libraries.  /etc/ld.so.conf is really
+@@ -1310,7 +1310,7 @@
+     # FreeBSD
+     ;;
+ 
+-    *-*-linux-* | *-*-k*bsd*-*)
++    *-*-linux-* | *-*-k*bsd*-* | *-*-gnu*)
+     # Linux
+       fragment <<EOF
+ 	  if (gld${EMULATION_NAME}_check_ld_so_conf (l->name, force))
--- binutils-2.22.orig/debian/patches/012_check_ldrunpath_length.patch
+++ binutils-2.22/debian/patches/012_check_ldrunpath_length.patch
@@ -0,0 +1,23 @@
+Author: Chris Chimelis <chris@debian.org>
+Description: Only generate an RPATH entry if LD_RUN_PATH is not empty, for
+cases where -rpath isn't specified. (#151024)
+--- a/ld/emultempl/elf32.em
++++ b/ld/emultempl/elf32.em
+@@ -1266,6 +1266,8 @@
+ 	      && command_line.rpath == NULL)
+ 	    {
+ 	      lib_path = (const char *) getenv ("LD_RUN_PATH");
++	      if ((lib_path) && (strlen (lib_path) == 0))
++		lib_path = NULL;
+ 	      if (gld${EMULATION_NAME}_search_needed (lib_path, &n,
+ 						      force))
+ 		break;
+@@ -1493,6 +1495,8 @@
+   rpath = command_line.rpath;
+   if (rpath == NULL)
+     rpath = (const char *) getenv ("LD_RUN_PATH");
++  if ((rpath) && (strlen (rpath) == 0))
++      rpath = NULL;
+ 
+   for (abfd = link_info.input_bfds; abfd; abfd = abfd->link_next)
+     if (bfd_get_flavour (abfd) == bfd_target_elf_flavour)
--- binutils-2.22.orig/debian/patches/167_pr13302.diff
+++ binutils-2.22/debian/patches/167_pr13302.diff
@@ -0,0 +1,532 @@
+# DP: Fix PR ld/13302, taken from the trunk
+
+bfd/
+
+2012-03-06  Jakub Jelinek  <jakub@redhat.com>
+
+        * elf64-x86-64.c (elf_x86_64_relocate_section): For R_X86_64_RELATIVE
+        set relocate to TRUE.
+
+2011-10-21  H.J. Lu  <hongjiu.lu@intel.com>
+
+	PR ld/13302
+	* elf32-i386.c (elf_i386_relocate_section): Replace
+	R_386_IRELATIVE with R_386_RELATIVE.
+
+	* elf64-x86-64.c (elf_x86_64_relocate_section): Replace
+	R_X86_64_IRELATIVE with R_X86_64_RELATIVE.
+
+2011-10-21  H.J. Lu  <hongjiu.lu@intel.com>.
+
+	* elf32-i386.c (elf_i386_relocate_section): Fix a typo in
+	comments.
+	* elf64-x86-64.c (elf_x86_64_relocate_section): Likewise.
+
+2011-10-21  H.J. Lu  <hongjiu.lu@intel.com>
+
+	PR ld/13302
+	* elf32-i386.c (elf_i386_link_hash_table): Add next_jump_slot_index
+	and next_irelative_index.
+	(elf_i386_link_hash_table_create): Initialize next_jump_slot_index
+	and next_irelative_index.
+	(elf_i386_allocate_dynrelocs): Increment reloc_count instead of
+	next_tls_desc_index.
+	(elf_i386_size_dynamic_sections): Set next_tls_desc_index and
+	next_irelative_index from reloc_count.
+	(elf_i386_finish_dynamic_symbol): Put R_386_IRELATIVE after
+	R_386_JUMP_SLOT.
+
+	* elf64-x86-64.c (elf_x86_64_link_hash_table): Add
+	next_jump_slot_index and next_irelative_index.
+	(elf_x86_64_link_hash_table_create): Initialize
+	next_jump_slot_index and next_irelative_index.
+	(elf_x86_64_size_dynamic_sections): Set next_irelative_index
+	from reloc_count.
+	(elf_x86_64_finish_dynamic_symbol): Put R_X86_64_IRELATIVE after
+	R_X86_64_JUMP_SLOT.
+
+ld/testsuite
+
+2011-10-21  H.J. Lu  <hongjiu.lu@intel.com>
+
+	PR ld/13302
+	* ld-i386/i386.exp: Run pr13302.
+
+	* ld-i386/pr13302.d: New.
+	* ld-i386/pr13302.s: Likewise.
+
+	* ld-x86-64/pr13082-5b.d: Updated.
+	* ld-x86-64/pr13082-6a.d: Likewise.
+	* ld-x86-64/pr13082-6b.d: Likewise.
+
+2011-10-21  H.J. Lu  <hongjiu.lu@intel.com>
+
+	PR ld/13302
+	* ld-ifunc/ifunc-16-i386.d: New.
+	* ld-ifunc/ifunc-16-x86-64.d: Likewise.
+	* ld-ifunc/ifunc-16-x86.s: Likewise.
+
+diff --git a/bfd/elf32-i386.c b/bfd/elf32-i386.c
+index 7ef1fc1..d187305 100644
+--- a/bfd/elf32-i386.c
++++ b/bfd/elf32-i386.c
+@@ -806,6 +806,12 @@ struct elf_i386_link_hash_table
+ 
+   /* The index of the next unused R_386_TLS_DESC slot in .rel.plt.  */
+   bfd_vma next_tls_desc_index;
++
++  /* The index of the next unused R_386_JUMP_SLOT slot in .rel.plt.  */
++  bfd_vma next_jump_slot_index;
++
++  /* The index of the next unused R_386_IRELATIVE slot in .rel.plt.  */
++  bfd_vma next_irelative_index;
+ };
+ 
+ /* Get the i386 ELF linker hash table from a link_info structure.  */
+@@ -946,6 +952,8 @@ elf_i386_link_hash_table_create (bfd *abfd)
+   ret->sym_cache.abfd = NULL;
+   ret->srelplt2 = NULL;
+   ret->tls_module_base = NULL;
++  ret->next_jump_slot_index = 0;
++  ret->next_irelative_index = 0;
+ 
+   ret->loc_hash_table = htab_try_create (1024,
+ 					 elf_i386_local_htab_hash,
+@@ -2275,7 +2283,7 @@ elf_i386_allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
+ 
+ 	  /* We also need to make an entry in the .rel.plt section.  */
+ 	  htab->elf.srelplt->size += sizeof (Elf32_External_Rel);
+-	  htab->next_tls_desc_index++;
++	  htab->elf.srelplt->reloc_count++;
+ 
+ 	  if (get_elf_i386_backend_data (info->output_bfd)->is_vxworks
+               && !info->shared)
+@@ -2700,9 +2708,19 @@ elf_i386_size_dynamic_sections (bfd *output_bfd, struct bfd_link_info *info)
+      incremented.  However, when we reserve space for TLS descriptors,
+      it's not incremented, so in order to compute the space reserved
+      for them, it suffices to multiply the reloc count by the jump
+-     slot size.  */
++     slot size.
++     
++     PR ld/13302: We start next_irelative_index at the end of .rela.plt
++     so that R_386_IRELATIVE entries come last.  */
+   if (htab->elf.srelplt)
+-    htab->sgotplt_jump_table_size = htab->next_tls_desc_index * 4;
++    {
++      htab->next_tls_desc_index = htab->elf.srelplt->reloc_count;
++      htab->sgotplt_jump_table_size = htab->next_tls_desc_index * 4;
++      htab->next_irelative_index = htab->elf.srelplt->reloc_count - 1;
++    }
++  else if (htab->elf.irelplt)
++    htab->next_irelative_index = htab->elf.irelplt->reloc_count - 1;
++
+ 
+   if (htab->elf.sgotplt)
+     {
+@@ -3232,13 +3250,14 @@ elf_i386_relocate_section (bfd *output_bfd,
+ 
+ 	    case R_386_32:
+ 	      /* Generate dynamic relcoation only when there is a
+-		 non-GOF reference in a shared object.  */
++		 non-GOT reference in a shared object.  */
+ 	      if (info->shared && h->non_got_ref)
+ 		{
+ 		  Elf_Internal_Rela outrel;
+ 		  bfd_byte *loc;
+ 		  asection *sreloc;
+ 		  bfd_vma offset;
++		  bfd_boolean relocate;
+ 
+ 		  /* Need a dynamic relocation to get the real function
+ 		     adddress.  */
+@@ -3259,15 +3278,14 @@ elf_i386_relocate_section (bfd *output_bfd,
+ 		      || info->executable)
+ 		    {
+ 		      /* This symbol is resolved locally.  */
+-		      outrel.r_info = ELF32_R_INFO (0, R_386_IRELATIVE);
+-		      bfd_put_32 (output_bfd,
+-				  (h->root.u.def.value
+-				   + h->root.u.def.section->output_section->vma
+-				   + h->root.u.def.section->output_offset),
+-				  contents + offset);
++		      outrel.r_info = ELF32_R_INFO (0, R_386_RELATIVE);
++		      relocate = TRUE;
+ 		    }
+ 		  else
+-		    outrel.r_info = ELF32_R_INFO (h->dynindx, r_type);
++		    {
++		      outrel.r_info = ELF32_R_INFO (h->dynindx, r_type);
++		      relocate = FALSE;
++		    }
+ 
+ 		  sreloc = htab->elf.irelifunc;
+ 		  loc = sreloc->contents;
+@@ -3280,7 +3298,8 @@ elf_i386_relocate_section (bfd *output_bfd,
+ 		     we need to include the symbol value so that it
+ 		     becomes an addend for the dynamic reloc.  For an
+ 		     internal symbol, we have updated addend.  */
+-		  continue;
++		  if (! relocate)
++		    continue;
+ 		}
+ 	      /* FALLTHROUGH */
+ 	    case R_386_PC32:
+@@ -4364,13 +4383,13 @@ elf_i386_finish_dynamic_symbol (bfd *output_bfd,
+ 
+       if (plt == htab->elf.splt)
+ 	{
+-	  plt_index = h->plt.offset / plt_entry_size - 1;
+-	  got_offset = (plt_index + 3) * 4;
++	  got_offset = h->plt.offset / plt_entry_size - 1;
++	  got_offset = (got_offset + 3) * 4;
+ 	}
+       else
+ 	{
+-	  plt_index = h->plt.offset / plt_entry_size;
+-	  got_offset = plt_index * 4;
++	  got_offset = h->plt.offset / plt_entry_size;
++	  got_offset = got_offset * 4;
+ 	}
+ 
+       /* Fill in the entry in the procedure linkage table.  */
+@@ -4431,18 +4450,6 @@ elf_i386_finish_dynamic_symbol (bfd *output_bfd,
+                       + abed->plt->plt_got_offset);
+ 	}
+ 
+-      /* Don't fill PLT entry for static executables.  */
+-      if (plt == htab->elf.splt)
+-	{
+-	  bfd_put_32 (output_bfd, plt_index * sizeof (Elf32_External_Rel),
+-		      plt->contents + h->plt.offset
+-                      + abed->plt->plt_reloc_offset);
+-	  bfd_put_32 (output_bfd, - (h->plt.offset
+-                                     + abed->plt->plt_plt_offset + 4),
+-		      plt->contents + h->plt.offset
+-                      + abed->plt->plt_plt_offset);
+-	}
+-
+       /* Fill in the entry in the global offset table.  */
+       bfd_put_32 (output_bfd,
+ 		  (plt->output_section->vma
+@@ -4470,12 +4477,29 @@ elf_i386_finish_dynamic_symbol (bfd *output_bfd,
+ 		       + h->root.u.def.section->output_offset),
+ 		      gotplt->contents + got_offset);
+ 	  rel.r_info = ELF32_R_INFO (0, R_386_IRELATIVE);
++	  /* R_386_IRELATIVE comes last.  */
++	  plt_index = htab->next_irelative_index--;
+ 	}
+       else
+-	rel.r_info = ELF32_R_INFO (h->dynindx, R_386_JUMP_SLOT);
++	{
++	  rel.r_info = ELF32_R_INFO (h->dynindx, R_386_JUMP_SLOT);
++	  plt_index = htab->next_jump_slot_index++;
++	}
+       loc = relplt->contents + plt_index * sizeof (Elf32_External_Rel);
+       bfd_elf32_swap_reloc_out (output_bfd, &rel, loc);
+ 
++      /* Don't fill PLT entry for static executables.  */
++      if (plt == htab->elf.splt)
++	{
++	  bfd_put_32 (output_bfd, plt_index * sizeof (Elf32_External_Rel),
++		      plt->contents + h->plt.offset
++                      + abed->plt->plt_reloc_offset);
++	  bfd_put_32 (output_bfd, - (h->plt.offset
++                                     + abed->plt->plt_plt_offset + 4),
++		      plt->contents + h->plt.offset
++                      + abed->plt->plt_plt_offset);
++	}
++
+       if (!h->def_regular)
+ 	{
+ 	  /* Mark the symbol as undefined, rather than as defined in
+diff --git a/bfd/elf64-x86-64.c b/bfd/elf64-x86-64.c
+index e4c3946..2206dd4 100644
+--- a/bfd/elf64-x86-64.c
++++ b/bfd/elf64-x86-64.c
+@@ -698,6 +698,11 @@ struct elf_x86_64_link_hash_table
+   /* The offset into sgot of the GOT entry used by the PLT entry
+      above.  */
+   bfd_vma tlsdesc_got;
++
++  /* The index of the next R_X86_64_JUMP_SLOT entry in .rela.plt.  */
++  bfd_vma next_jump_slot_index;
++  /* The index of the next R_X86_64_IRELATIVE entry in .rela.plt.  */
++  bfd_vma next_irelative_index;
+ };
+ 
+ /* Get the x86-64 ELF linker hash table from a link_info structure.  */
+@@ -839,6 +844,8 @@ elf_x86_64_link_hash_table_create (bfd *abfd)
+   ret->tls_ld_got.refcount = 0;
+   ret->sgotplt_jump_table_size = 0;
+   ret->tls_module_base = NULL;
++  ret->next_jump_slot_index = 0; 
++  ret->next_irelative_index = 0;
+ 
+   if (ABI_64_P (abfd))
+     {
+@@ -2667,10 +2674,18 @@ elf_x86_64_size_dynamic_sections (bfd *output_bfd,
+      incremented.  However, when we reserve space for TLS descriptors,
+      it's not incremented, so in order to compute the space reserved
+      for them, it suffices to multiply the reloc count by the jump
+-     slot size.  */
++     slot size.
++
++     PR ld/13302: We start next_irelative_index at the end of .rela.plt
++     so that R_X86_64_IRELATIVE entries come last.  */
+   if (htab->elf.srelplt)
+-    htab->sgotplt_jump_table_size
+-      = elf_x86_64_compute_jump_table_size (htab);
++    {
++      htab->sgotplt_jump_table_size
++	= elf_x86_64_compute_jump_table_size (htab);
++      htab->next_irelative_index = htab->elf.srelplt->reloc_count - 1;
++    }
++  else if (htab->elf.irelplt)
++    htab->next_irelative_index = htab->elf.irelplt->reloc_count - 1;
+ 
+   if (htab->tlsdesc_plt)
+     {
+@@ -3141,11 +3156,12 @@ elf_x86_64_relocate_section (bfd *output_bfd,
+ 		}
+ 
+ 	      /* Generate dynamic relcoation only when there is a
+-		 non-GOF reference in a shared object.  */
++		 non-GOT reference in a shared object.  */
+ 	      if (info->shared && h->non_got_ref)
+ 		{
+ 		  Elf_Internal_Rela outrel;
+ 		  asection *sreloc;
++		  bfd_boolean relocate;
+ 
+ 		  /* Need a dynamic relocation to get the real function
+ 		     address.  */
+@@ -3165,15 +3181,15 @@ elf_x86_64_relocate_section (bfd *output_bfd,
+ 		      || info->executable)
+ 		    {
+ 		      /* This symbol is resolved locally.  */
+-		      outrel.r_info = htab->r_info (0, R_X86_64_IRELATIVE);
+-		      outrel.r_addend = (h->root.u.def.value
+-					 + h->root.u.def.section->output_section->vma
+-					 + h->root.u.def.section->output_offset);
++		      outrel.r_info = htab->r_info (0, R_X86_64_RELATIVE);
++		      outrel.r_addend = relocation;
++		      relocate = TRUE;
+ 		    }
+ 		  else
+ 		    {
+ 		      outrel.r_info = htab->r_info (h->dynindx, r_type);
+ 		      outrel.r_addend = 0;
++		      relocate = FALSE;
+ 		    }
+ 
+ 		  sreloc = htab->elf.irelifunc;
+@@ -3184,7 +3200,8 @@ elf_x86_64_relocate_section (bfd *output_bfd,
+ 		     we need to include the symbol value so that it
+ 		     becomes an addend for the dynamic reloc.  For an
+ 		     internal symbol, we have updated addend.  */
+-		  continue;
++		  if (! relocate)
++		    continue;
+ 		}
+ 	      /* FALLTHROUGH */
+ 	    case R_X86_64_PC32:
+@@ -4205,13 +4222,13 @@ elf_x86_64_finish_dynamic_symbol (bfd *output_bfd,
+ 
+       if (plt == htab->elf.splt)
+ 	{
+-	  plt_index = h->plt.offset / PLT_ENTRY_SIZE - 1;
+-	  got_offset = (plt_index + 3) * GOT_ENTRY_SIZE;
++	  got_offset = h->plt.offset / PLT_ENTRY_SIZE - 1;
++	  got_offset = (got_offset + 3) * GOT_ENTRY_SIZE;
+ 	}
+       else
+ 	{
+-	  plt_index = h->plt.offset / PLT_ENTRY_SIZE;
+-	  got_offset = plt_index * GOT_ENTRY_SIZE;
++	  got_offset = h->plt.offset / PLT_ENTRY_SIZE;
++	  got_offset = got_offset * GOT_ENTRY_SIZE;
+ 	}
+ 
+       /* Fill in the entry in the procedure linkage table.  */
+@@ -4233,17 +4250,6 @@ elf_x86_64_finish_dynamic_symbol (bfd *output_bfd,
+ 		       - 6),
+ 		  plt->contents + h->plt.offset + 2);
+ 
+-      /* Don't fill PLT entry for static executables.  */
+-      if (plt == htab->elf.splt)
+-	{
+-	  /* Put relocation index.  */
+-	  bfd_put_32 (output_bfd, plt_index,
+-		      plt->contents + h->plt.offset + 7);
+-	  /* Put offset for jmp .PLT0.  */
+-	  bfd_put_32 (output_bfd, - (h->plt.offset + PLT_ENTRY_SIZE),
+-		      plt->contents + h->plt.offset + 12);
+-	}
+-
+       /* Fill in the entry in the global offset table, initially this
+ 	 points to the pushq instruction in the PLT which is at offset 6.  */
+       bfd_put_64 (output_bfd, (plt->output_section->vma
+@@ -4267,11 +4273,25 @@ elf_x86_64_finish_dynamic_symbol (bfd *output_bfd,
+ 	  rela.r_addend = (h->root.u.def.value
+ 			   + h->root.u.def.section->output_section->vma
+ 			   + h->root.u.def.section->output_offset);
++	  /* R_X86_64_IRELATIVE comes last.  */
++	  plt_index = htab->next_irelative_index--;
+ 	}
+       else
+ 	{
+ 	  rela.r_info = htab->r_info (h->dynindx, R_X86_64_JUMP_SLOT);
+ 	  rela.r_addend = 0;
++	  plt_index = htab->next_jump_slot_index++;
++	}
++
++      /* Don't fill PLT entry for static executables.  */
++      if (plt == htab->elf.splt)
++	{
++	  /* Put relocation index.  */
++	  bfd_put_32 (output_bfd, plt_index,
++		      plt->contents + h->plt.offset + 7);
++	  /* Put offset for jmp .PLT0.  */
++	  bfd_put_32 (output_bfd, - (h->plt.offset + PLT_ENTRY_SIZE),
++		      plt->contents + h->plt.offset + 12);
+ 	}
+ 
+       bed = get_elf_backend_data (output_bfd);
+diff --git a/ld/testsuite/ld-i386/i386.exp b/ld/testsuite/ld-i386/i386.exp
+index 68b71fb..1727922 100644
+--- a/ld/testsuite/ld-i386/i386.exp
++++ b/ld/testsuite/ld-i386/i386.exp
+@@ -210,3 +210,4 @@ if { !([istarget "i?86-*-linux*"]
+ 
+ run_dump_test "compressed1"
+ run_dump_test "pr12627"
++run_dump_test "pr13302"
+diff --git a/ld/testsuite/ld-i386/pr13302.d b/ld/testsuite/ld-i386/pr13302.d
+new file mode 100644
+index 0000000..3d85d08
+--- /dev/null
++++ b/ld/testsuite/ld-i386/pr13302.d
+@@ -0,0 +1,12 @@
++#name: PR ld/13302
++#as: --32
++#ld: -pie -melf_i386
++#readelf: -r --wide
++
++Relocation section '.rel.dyn' at offset 0x[0-9a-f]+ contains 1 entries:
++ Offset     Info    Type                Sym. Value  Symbol's Name
++[0-9a-f]+ +[0-9a-f]+ +R_386_RELATIVE +
++
++Relocation section '.rel.plt' at offset 0x[0-9a-f]+ contains 1 entries:
++ Offset     Info    Type                Sym. Value  Symbol's Name
++[0-9a-f]+ +[0-9a-f]+ +R_386_IRELATIVE +
+diff --git a/ld/testsuite/ld-i386/pr13302.s b/ld/testsuite/ld-i386/pr13302.s
+new file mode 100644
+index 0000000..cfd2717
+--- /dev/null
++++ b/ld/testsuite/ld-i386/pr13302.s
+@@ -0,0 +1,11 @@
++	.text
++	.globl _start
++	.type ifunc, @gnu_indirect_function
++_start:
++	lea	.Ljmp@GOTOFF(%ebx), %eax
++ifunc:
++	jmp	*(%eax)
++	.section	.data.rel.ro.local,"aw",@progbits
++	.align	4
++.Ljmp:
++	.long ifunc
+diff --git a/ld/testsuite/ld-ifunc/ifunc-16-i386.d b/ld/testsuite/ld-ifunc/ifunc-16-i386.d
+new file mode 100644
+index 0000000..8ae3d0a
+--- /dev/null
++++ b/ld/testsuite/ld-ifunc/ifunc-16-i386.d
+@@ -0,0 +1,10 @@
++#source: ifunc-16-x86.s
++#ld: -shared -m elf_i386
++#as: --32
++#readelf: -r --wide
++#target: x86_64-*-* i?86-*-*
++
++Relocation section '.rel.plt' at .*
++[ ]+Offset[ ]+Info[ ]+Type[ ]+.*
++[0-9a-f]+[ ]+[0-9a-f]+[ ]+R_386_JUMP_SLOT[ ]+0+[ ]+ifunc
++[0-9a-f]+[ ]+[0-9a-f]+[ ]+R_386_IRELATIVE[ ]*
+diff --git a/ld/testsuite/ld-ifunc/ifunc-16-x86-64.d b/ld/testsuite/ld-ifunc/ifunc-16-x86-64.d
+new file mode 100644
+index 0000000..d69626d
+--- /dev/null
++++ b/ld/testsuite/ld-ifunc/ifunc-16-x86-64.d
+@@ -0,0 +1,10 @@
++#source: ifunc-16-x86.s
++#as: --64
++#ld: -shared -melf_x86_64
++#readelf: -r --wide
++#target: x86_64-*-*
++
++Relocation section '.rela.plt' at .*
++[ ]+Offset[ ]+Info[ ]+Type[ ]+.*
++[0-9a-f]+[ ]+[0-9a-f]+[ ]+R_X86_64_JUMP_SLOT[ ]+0+[ ]+ifunc \+ 0
++[0-9a-f]+[ ]+[0-9a-f]+[ ]+R_X86_64_IRELATIVE[ ]+[0-9a-f]*
+diff --git a/ld/testsuite/ld-ifunc/ifunc-16-x86.s b/ld/testsuite/ld-ifunc/ifunc-16-x86.s
+new file mode 100644
+index 0000000..fb38253
+--- /dev/null
++++ b/ld/testsuite/ld-ifunc/ifunc-16-x86.s
+@@ -0,0 +1,17 @@
++	.text
++	.globl	fct
++	.type	fct, @gnu_indirect_function
++	.set	fct,resolve
++	.hidden int_fct
++	.globl	int_fct
++	.set	int_fct,fct
++	.p2align 4,,15
++	.type	resolve, @function
++resolve:
++	call	ifunc@PLT
++	.size	resolve, .-resolve
++	.globl	g
++	.type	g, @function
++g:
++	jmp	int_fct@PLT
++	.size	g, .-g
+diff --git a/ld/testsuite/ld-x86-64/pr13082-5b.d b/ld/testsuite/ld-x86-64/pr13082-5b.d
+index 1c5a5e7..48e37c3 100644
+--- a/ld/testsuite/ld-x86-64/pr13082-5b.d
++++ b/ld/testsuite/ld-x86-64/pr13082-5b.d
+@@ -6,7 +6,7 @@
+ 
+ Relocation section '.rela.dyn' at offset 0x[0-9a-f]+ contains 1 entries:
+  Offset     Info    Type                Sym. Value  Symbol's Name \+ Addend
+-[0-9a-f]+ +[0-9a-f]+ +R_X86_64_IRELATIVE +[0-9a-f]+
++[0-9a-f]+ +[0-9a-f]+ +R_X86_64_RELATIVE +[0-9a-f]+
+ 
+ Relocation section '.rela.plt' at offset 0x[0-9a-f]+ contains 1 entries:
+  Offset     Info    Type                Sym. Value  Symbol's Name \+ Addend
+diff --git a/ld/testsuite/ld-x86-64/pr13082-6a.d b/ld/testsuite/ld-x86-64/pr13082-6a.d
+index 9a1a655..de90bb8 100644
+--- a/ld/testsuite/ld-x86-64/pr13082-6a.d
++++ b/ld/testsuite/ld-x86-64/pr13082-6a.d
+@@ -6,7 +6,7 @@
+ 
+ Relocation section '.rela.dyn' at offset 0x[0-9a-f]+ contains 1 entries:
+  Offset     Info    Type                Sym. Value  Symbol's Name \+ Addend
+-[0-9a-f]+ +[0-9a-f]+ +R_X86_64_IRELATIVE +[0-9a-f]+
++[0-9a-f]+ +[0-9a-f]+ +R_X86_64_RELATIVE +[0-9a-f]+
+ 
+ Relocation section '.rela.plt' at offset 0x[0-9a-f]+ contains 1 entries:
+  Offset     Info    Type                Sym. Value  Symbol's Name \+ Addend
+diff --git a/ld/testsuite/ld-x86-64/pr13082-6b.d b/ld/testsuite/ld-x86-64/pr13082-6b.d
+index 792c348..66ff59b 100644
+--- a/ld/testsuite/ld-x86-64/pr13082-6b.d
++++ b/ld/testsuite/ld-x86-64/pr13082-6b.d
+@@ -6,7 +6,7 @@
+ 
+ Relocation section '.rela.dyn' at offset 0x[0-9a-f]+ contains 1 entries:
+  Offset     Info    Type                Sym. Value  Symbol's Name \+ Addend
+-[0-9a-f]+ +[0-9a-f]+ +R_X86_64_IRELATIVE +[0-9a-f]+
++[0-9a-f]+ +[0-9a-f]+ +R_X86_64_RELATIVE +[0-9a-f]+
+ 
+ Relocation section '.rela.plt' at offset 0x[0-9a-f]+ contains 1 entries:
+  Offset     Info    Type                Sym. Value  Symbol's Name \+ Addend
--- binutils-2.22.orig/debian/patches/pr14319.diff
+++ binutils-2.22/debian/patches/pr14319.diff
@@ -0,0 +1,60 @@
+# base code: http://sourceware.org/git/?p=binutils.git;a=commitdiff_plain;h=9fd0b9a622aaa64017f232611120ff7fa828b67a
+# backport to 2.22.
+
+diff --git a/bfd/elf.c b/bfd/elf.c
+index 9e23bee..a9cbe21 100644
+--- a/bfd/elf.c
++++ b/bfd/elf.c
+@@ -1025,7 +1025,7 @@ _bfd_elf_make_section_from_shdr (bfd *abfd,
+       else
+ 	{
+ 	  /* Normal section.  Check if we should compress.  */
+-	  if ((abfd->flags & BFD_COMPRESS))
++	  if ((abfd->flags & BFD_COMPRESS) && newsect->size != 0)
+ 	    action = compress;
+ 	}
+ 
+diff --git a/binutils/testsuite/binutils-all/compress.exp b/binutils/testsuite/binutils-all/compress.exp
+index 91ed7e4..8c40595 100644
+--- a/binutils/testsuite/binutils-all/compress.exp
++++ b/binutils/testsuite/binutils-all/compress.exp
+@@ -133,3 +133,32 @@ if ![string match "" $got] then {
+ 	pass "$testname"
+     }
+ }
++
++set testfile tmpdir/dw2-emty.o
++
++if { ![binutils_assemble_flags $srcdir/$subdir/dw2-empty.S $testfile --nocompress-debug-sections] } then {
++    unsupported "compressed debug sections"
++    return
++}
++
++set testname "objcopy compress empty debug sections"
++set got [binutils_run $OBJCOPY "--compress-debug-sections $testfile ${copyfile}.o"]
++if ![string match "" $got] then {
++    fail "objcopy ($testname)"
++} else {
++    send_log "cmp $testfile ${copyfile}.o\n"
++    verbose "cmp $testfile ${copyfile}.o"
++    set src1 ${testfile}
++    set src2 ${copyfile}.o
++    set status [remote_exec build cmp "${src1} ${src2}"]
++    set exec_output [lindex $status 1]
++    set exec_output [prune_warnings $exec_output]
++
++    if [string match "" $exec_output] then {
++    pass "objcopy ($testname)"
++    } else {
++    send_log "$exec_output\n"
++    verbose "$exec_output" 1
++    fail "objcopy ($testname)"
++    }
++}
+diff --git a/binutils/testsuite/binutils-all/dw2-empty.S b/binutils/testsuite/binutils-all/dw2-empty.S
+new file mode 100644
+index 0000000..1ff5f88
+--- /dev/null
++++ b/binutils/testsuite/binutils-all/dw2-empty.S
+@@ -0,0 +1 @@
++  .section .debug_line
--- binutils-2.22.orig/debian/patches/135_bfd_version.patch
+++ binutils-2.22/debian/patches/135_bfd_version.patch
@@ -0,0 +1,47 @@
+Author: 
+Description: Description: Fix bfd version handling for extra builds
+
+Index: binutils-2.21.0.20110216/bfd/Makefile.am
+===================================================================
+--- binutils-2.21.0.20110216.orig/bfd/Makefile.am	2011-02-01 12:25:32.000000000 +0000
++++ binutils-2.21.0.20110216/bfd/Makefile.am	2011-02-16 18:28:14.568229030 +0000
+@@ -948,14 +948,14 @@
+ 
+ bfdver.h: $(srcdir)/version.h $(srcdir)/Makefile.in
+ 	@echo "creating $@"
+-	@bfd_version=`echo "$(VERSION)" | sed -e 's/\([^\.]*\)\.*\([^\.]*\)\.*\([^\.]*\)\.*\([^\.]*\)\.*\([^\.]*\).*/\1.00\2.00\3.00\4.00\5/' -e 's/\([^\.]*\)\..*\(..\)\..*\(..\)\..*\(..\)\..*\(..\)$$/\1\2\3\4\5/'` ;\
+-	bfd_version_string="\"$(VERSION)\"" ;\
++	@bfd_version=`echo "$(VERSION)" | sed -e 's/-.*$$//' | sed -e 's/\([^\.]*\)\.*\([^\.]*\)\.*\([^\.]*\)\.*\([^\.]*\)\.*\([^\.]*\).*/\1.00\2.00\3.00\4.00\5/' -e 's/\([^\.]*\)\..*\(..\)\..*\(..\)\..*\(..\)\..*\(..\)$$/\1\2\3\4\5/'` ;\
++	bfd_version_string="\"`echo $(VERSION) | sed -e 's/-.*$$//'`\"" ;\
+ 	bfd_soversion="$(VERSION)" ;\
+ 	bfd_version_package="\"$(PKGVERSION)\"" ;\
+ 	report_bugs_to="\"$(REPORT_BUGS_TO)\"" ;\
+ 	if test "x$(RELEASE)" = x ; then \
+ 	  bfd_version_date=`sed -n -e 's/.*DATE //p' < $(srcdir)/version.h` ;\
+-	  bfd_version_string="\"$(VERSION).$${bfd_version_date}\"" ;\
++	  bfd_version_string="\"`echo $(VERSION) | sed -e 's/-.*$$//'`.$${bfd_version_date}\"" ;\
+ 	  bfd_soversion="$(VERSION).$${bfd_version_date}" ;\
+ 	fi ;\
+ 	sed -e "s,@bfd_version@,$$bfd_version," \
+Index: binutils-2.21.0.20110216/bfd/Makefile.in
+===================================================================
+--- binutils-2.21.0.20110216.orig/bfd/Makefile.in	2011-02-01 12:25:32.000000000 +0000
++++ binutils-2.21.0.20110216/bfd/Makefile.in	2011-02-16 18:28:34.248228995 +0000
+@@ -1980,14 +1980,14 @@
+ 
+ bfdver.h: $(srcdir)/version.h $(srcdir)/Makefile.in
+ 	@echo "creating $@"
+-	@bfd_version=`echo "$(VERSION)" | sed -e 's/\([^\.]*\)\.*\([^\.]*\)\.*\([^\.]*\)\.*\([^\.]*\)\.*\([^\.]*\).*/\1.00\2.00\3.00\4.00\5/' -e 's/\([^\.]*\)\..*\(..\)\..*\(..\)\..*\(..\)\..*\(..\)$$/\1\2\3\4\5/'` ;\
+-	bfd_version_string="\"$(VERSION)\"" ;\
++	@bfd_version=`echo "$(VERSION)" | sed -e 's/-.*$$//' | sed -e 's/\([^\.]*\)\.*\([^\.]*\)\.*\([^\.]*\)\.*\([^\.]*\)\.*\([^\.]*\).*/\1.00\2.00\3.00\4.00\5/' -e 's/\([^\.]*\)\..*\(..\)\..*\(..\)\..*\(..\)\..*\(..\)$$/\1\2\3\4\5/'` ;\
++	bfd_version_string="\"`echo $(VERSION) | sed -e 's/-.*$$//'`\"" ;\
+ 	bfd_soversion="$(VERSION)" ;\
+ 	bfd_version_package="\"$(PKGVERSION)\"" ;\
+ 	report_bugs_to="\"$(REPORT_BUGS_TO)\"" ;\
+ 	if test "x$(RELEASE)" = x ; then \
+ 	  bfd_version_date=`sed -n -e 's/.*DATE //p' < $(srcdir)/version.h` ;\
+-	  bfd_version_string="\"$(VERSION).$${bfd_version_date}\"" ;\
++	  bfd_version_string="\"`echo $(VERSION) | sed -e 's/-.*$$//'`.$${bfd_version_date}\"" ;\
+ 	  bfd_soversion="$(VERSION).$${bfd_version_date}" ;\
+ 	fi ;\
+ 	sed -e "s,@bfd_version@,$$bfd_version," \
--- binutils-2.22.orig/debian/patches/156_pr10144.patch
+++ binutils-2.22/debian/patches/156_pr10144.patch
@@ -0,0 +1,315 @@
+## DP: Description: http://sourceware.org/ml/binutils/2010-09/msg00216.html 
+
+2010-09-15  Maciej W. Rozycki  <macro@codesourcery.com>
+
+	PR ld/10144
+
+	bfd/
+	* elfxx-mips.c (_bfd_mips_elf_check_relocs)
+	[R_MIPS_32, R_MIPS_REL32, R_MIPS_64]: Ignore relocs from
+	SEC_DEBUGGING sections.
+
+	ld/testsuite/
+	* lib/ld-lib.exp (run_ld_link_tests): Handle sources from other
+	directories.
+	(run_ld_link_exec_tests): Likewise.
+	(run_cc_link_tests): Likewise.
+	* ld-elf/comm-data1.sd: New test.
+	* ld-elf/comm-data1.s: Source for the new test.
+	* ld-elf/comm-data2.sd: New test.
+	* ld-elf/comm-data2.rd: Likewise.
+	* ld-elf/comm-data2.xd: Likewise.
+	* ld-elf/comm-data2.s: Source for the new tests.
+	* ld-elf/comm-data.exp: Run the new tests.
+	* ld-mips-elf/comm-data.exp: Likewise.
+
+--- /dev/null
++++ b/ld/testsuite/ld-elf/comm-data1.s
+@@ -0,0 +1,6 @@
++	.section .rodata,"a",%progbits
++	.balign	8
++	.globl	foo
++	.type	foo,%object
++foo:
++	.skip	4, 0
+--- /dev/null
++++ b/ld/testsuite/ld-elf/comm-data2.xd
+@@ -0,0 +1,2 @@
++Hex dump of section '\.debug_foo':
++ +0x0+ +00000000 00000000 00000000 00000000 +\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.
+--- /dev/null
++++ b/ld/testsuite/ld-elf/comm-data2.s
+@@ -0,0 +1,14 @@
++	.text
++	.globl	_start
++	.globl	__start
++_start:
++__start:
++	.comm	foo, 4, 4
++	.section .debug_foo,"",%progbits
++	.balign	16
++	.ifdef	ELF64
++	.8byte	foo
++	.else
++	.4byte	foo
++	.endif
++	.balign	16
+--- /dev/null
++++ b/ld/testsuite/ld-elf/comm-data.exp
+@@ -0,0 +1,76 @@
++# Expect script for common symbol override.
++#
++#   Copyright 2010  Free Software Foundation, Inc.
++#
++# This file is part of the GNU Binutils.
++#
++# This program is free software; you can redistribute it and/or modify
++# it under the terms of the GNU General Public License as published by
++# the Free Software Foundation; either version 3 of the License, or
++# (at your option) any later version.
++#
++# This program is distributed in the hope that it will be useful,
++# but WITHOUT ANY WARRANTY; without even the implied warranty of
++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++# GNU General Public License for more details.
++#
++# You should have received a copy of the GNU General Public License
++# along with this program; if not, write to the Free Software
++# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
++# MA 02110-1301, USA.
++#
++
++#
++# Written by Maciej W. Rozycki <macro@codesourcery.com>
++#
++
++# Exclude non-ELF targets.
++if ![is_elf_format] {
++    return
++}
++
++# Exclude non-Linux targets; feel free to include your favourite one
++# if you like.
++if ![istarget *-*-linux*] {
++    return
++}
++
++set testname "Common symbol override test"
++
++# Define a global symbol.
++run_ld_link_tests [list \
++    [list \
++	"$testname (auxiliary shared object build)" \
++	"-shared" \
++	"" \
++	{ comm-data1.s } \
++	{ \
++	    { readelf -s comm-data1.sd } \
++	} \
++	"libcomm-data.so" \
++    ] \
++]
++
++# Set the pointer size according to the ELF flavour.
++set AFLAGS ""
++if [is_elf64 "tmpdir/libcomm-data.so"] {
++    append AFLAGS " --defsym ELF64=1"
++}
++
++# Verify that a common symbol has been converted to an undefined
++# reference to the global symbol of the same name defined above
++# and that the debug reference has been dropped.
++run_ld_link_tests [list \
++    [list \
++	"$testname" \
++	"-Ltmpdir -lcomm-data" \
++	"$AFLAGS" \
++	{ comm-data2.s } \
++	{ \
++	    { readelf -s comm-data2.sd } \
++	    { readelf -r comm-data2.rd } \
++	    { readelf "-x .debug_foo" comm-data2.xd } \
++	} \
++	"comm-data" \
++    ] \
++]
+--- /dev/null
++++ b/ld/testsuite/ld-elf/comm-data1.sd
+@@ -0,0 +1,10 @@
++Symbol table '\.dynsym' contains [0-9]+ entries:
++ +Num: +Value +Size +Type +Bind +Vis +Ndx +Name
++#...
++ +[0-9]+: +[0-9a-f]+ +0 +OBJECT +GLOBAL +DEFAULT +[0-9]+ +foo
++#...
++Symbol table '\.symtab' contains [0-9]+ entries:
++ +Num: +Value +Size +Type +Bind +Vis +Ndx +Name
++#...
++ +[0-9]+: +[0-9a-f]+ +0 +OBJECT +GLOBAL +DEFAULT +[0-9]+ +foo
++#pass
+--- /dev/null
++++ b/ld/testsuite/ld-elf/comm-data2.rd
+@@ -0,0 +1 @@
++There are no relocations in this file\.
+--- /dev/null
++++ b/ld/testsuite/ld-elf/comm-data2.sd
+@@ -0,0 +1,10 @@
++Symbol table '\.dynsym' contains [0-9]+ entries:
++ +Num: +Value +Size +Type +Bind +Vis +Ndx +Name
++#...
++ +[0-9]+: +0+ +0 +OBJECT +GLOBAL +DEFAULT +UND +foo
++#...
++Symbol table '\.symtab' contains [0-9]+ entries:
++ +Num: +Value +Size +Type +Bind +Vis +Ndx +Name
++#...
++ +[0-9]+: +0+ +0 +OBJECT +GLOBAL +DEFAULT +UND +foo
++#pass
+--- a/ld/testsuite/lib/ld-lib.exp
++++ b/ld/testsuite/lib/ld-lib.exp
+@@ -1252,11 +1252,12 @@
+ 
+ 	# Assemble each file in the test.
+ 	foreach src_file $src_files {
+-	    set objfile "tmpdir/[file rootname $src_file].o"
++	    set fileroot "[file rootname [file tail $src_file]]"
++	    set objfile "tmpdir/$fileroot.o"
+ 	    lappend objfiles $objfile
+ 
+ 	    if { [file extension $src_file] == ".c" } {
+-		set as_file "tmpdir/[file rootname $src_file].s"
++		set as_file "tmpdir/$fileroot.s"
+ 		if ![ld_compile "$CC -S $CFLAGS $cflags" $srcdir/$subdir/$src_file $as_file] {
+ 		    set is_unresolved 1
+ 		    break
+@@ -1446,7 +1447,8 @@
+ 
+ 	# Assemble each file in the test.
+ 	foreach src_file $src_files {
+-	    set objfile "tmpdir/[file rootname $src_file].o"
++	    set fileroot "[file rootname [file tail $src_file]]"
++	    set objfile "tmpdir/$fileroot.o"
+ 	    lappend objfiles $objfile
+ 
+ 	    # We ignore warnings since some compilers may generate
+@@ -1565,7 +1567,8 @@
+ 
+ 	# Compile each file in the test.
+ 	foreach src_file $src_files {
+-	    set objfile "tmpdir/[file rootname $src_file].o"
++	    set fileroot "[file rootname [file tail $src_file]]"
++	    set objfile "tmpdir/$fileroot.o"
+ 	    lappend objfiles $objfile
+ 
+ 	    # We ignore warnings since some compilers may generate
+--- /dev/null
++++ b/ld/testsuite/ld-mips-elf/comm-data.exp
+@@ -0,0 +1,88 @@
++# Expect script for common symbol override, MIPS variation.
++#
++#   Copyright 2010  Free Software Foundation, Inc.
++#
++# This file is part of the GNU Binutils.
++#
++# This program is free software; you can redistribute it and/or modify
++# it under the terms of the GNU General Public License as published by
++# the Free Software Foundation; either version 3 of the License, or
++# (at your option) any later version.
++#
++# This program is distributed in the hope that it will be useful,
++# but WITHOUT ANY WARRANTY; without even the implied warranty of
++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++# GNU General Public License for more details.
++#
++# You should have received a copy of the GNU General Public License
++# along with this program; if not, write to the Free Software
++# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
++# MA 02110-1301, USA.
++#
++
++#
++# Written by Maciej W. Rozycki <macro@codesourcery.com>
++#
++
++# Exclude non-ELF targets.
++if ![is_elf_format] {
++    return
++}
++
++# Exclude non-Linux targets; feel free to include your favourite one
++# if you like.
++if ![istarget mips*-*-linux*] {
++    return
++}
++
++proc mips_comm_data_test { abi flag emul reloc } {
++
++    set testname "MIPS $abi/$reloc common symbol override test"
++    set AFLAGS "$flag -EB"
++    set LDFLAGS "-m$emul"
++
++    # Define a global symbol.
++    run_ld_link_tests [list \
++	[list \
++	    "$testname (auxiliary shared object build)" \
++	    "$LDFLAGS -shared" \
++	    "$AFLAGS -call_shared" \
++	    { ../ld-elf/comm-data1.s } \
++	    { \
++		{ readelf -s ../ld-elf/comm-data1.sd } \
++	    } \
++	  "libmips-$abi-$reloc-comm-data.so" \
++	] \
++    ]
++
++    # Set the pointer size according to the ABI.
++    if { $abi == "n64" } {
++	append AFLAGS " --defsym ELF64=1"
++    }
++
++    # Verify that a common symbol has been converted to an undefined
++    # reference to the global symbol of the same name defined above
++    # and that the debug reference has been dropped.
++    run_ld_link_tests [list \
++	[list \
++	    "$testname" \
++	    "$LDFLAGS -z $reloc -Ltmpdir -lmips-$abi-$reloc-comm-data" \
++	    "$AFLAGS -call_nonpic" \
++	    { ../ld-elf/comm-data2.s } \
++	    { \
++		{ readelf -s ../ld-elf/comm-data2.sd } \
++		{ readelf -r ../ld-elf/comm-data2.rd } \
++		{ readelf "-x .debug_foo" ../ld-elf/comm-data2.xd } \
++	    } \
++	    "mips-$abi-$reloc-comm-data" \
++	] \
++    ]
++}
++
++set abis { o32 -32 elf32btsmip n32 -n32 elf32btsmipn32 n64 -64 elf64btsmip }
++set relocs { copyreloc nocopyreloc }
++foreach { abi flag emul } $abis {
++    foreach reloc $relocs {
++	mips_comm_data_test $abi $flag $emul $reloc
++    }
++}
+--- a/bfd/elfxx-mips.c
++++ b/bfd/elfxx-mips.c
+@@ -7583,6 +7583,19 @@
+ 		elf_hash_table (info)->dynobj = dynobj = abfd;
+ 	      break;
+ 	    }
++	  /* Ignore relocs from SEC_DEBUGGING sections because such
++	     sections are not SEC_ALLOC and thus ld.so will not process
++	     them.  Don't set has_static_relocs for the corresponding
++	     symbol.
++
++	     This is needed in cases such as a global symbol definition
++	     in a shared library causing a common symbol from an object
++	     file to be converted to an undefined reference.  If that
++	     happens, then all the relocations against this symbol from
++	     SEC_DEBUGGING sections in the object file will resolve to
++	     nil.  */
++	  if ((sec->flags & SEC_DEBUGGING) != 0)
++	    break;
+ 	  /* Fall through.  */
+ 
+ 	default:
--- binutils-2.22.orig/debian/patches/013_bash_in_ld_testsuite.patch
+++ binutils-2.22/debian/patches/013_bash_in_ld_testsuite.patch
@@ -0,0 +1,26 @@
+Author: Matthias Klose <doko@ubuntu.com>
+Description: Explicitely use bash for the ld testsuite.
+--- a/ld/testsuite/config/default.exp
++++ b/ld/testsuite/config/default.exp
+@@ -119,10 +119,10 @@
+ 	#makefile rules, with embedded shell variable expansions.
+ 	#make wants $$shell_var, we want $shell_var ...
+ 	set cmd "host='$target_triplet' && . $srcdir/../configure.host && sed -e 's,\\\$\\\$,\$,g' <<EOF\n\$$varname\nEOF"
+-	set status [catch "exec sh -c [list $cmd]" result]
++	set status [catch "exec bash -c [list $cmd]" result]
+ 	if $status { error "Error getting native link files: $result" }
+ 	set cmd "CC='$CC' && eval echo \"$result\""
+-	set status [catch "exec sh -c [list $cmd]" result]
++	set status [catch "exec bash -c [list $cmd]" result]
+ 	if $status { error "Error getting native link files: $result" }
+ 	set $varname $result
+ 	send_log "$varname = $result\n"
+@@ -132,7 +132,7 @@
+ proc get_target_emul {} {
+     global target_triplet
+     global srcdir
+-    set status [catch "exec sh -c \"targ='$target_triplet' && . $srcdir/../configure.tgt && echo \\\$targ_emul\"" result]
++    set status [catch "exec bash -c \"targ='$target_triplet' && . $srcdir/../configure.tgt && echo \\\$targ_emul\"" result]
+     if $status { error "Error getting emulation name: $result" }
+     return $result
+ }
--- binutils-2.22.orig/debian/patches/pr13534-01.diff
+++ binutils-2.22/debian/patches/pr13534-01.diff
@@ -0,0 +1,118 @@
+commit 75bf1d978bc03a07ad59a3f983c806bb5899c28c
+Author: Francois Gouget <fgouget@codeweavers.com>
+Date:   Tue Dec 20 18:37:16 2011 +0100
+
+    bfd: Fix writing the size of 2+GB elements in the archive.
+
+diff --git a/bfd/archive.c b/bfd/archive.c
+index 3e333c7..5c5b3d4 100644
+--- a/bfd/archive.c
++++ b/bfd/archive.c
+@@ -179,6 +179,22 @@ _bfd_ar_spacepad (char *p, size_t n, const char *fmt, long val)
+     memcpy (p, buf, n);
+ }
+ 
++void
++_bfd_ar_sizepad (char *p, size_t n, bfd_size_type size)
++{
++  static char buf[21];
++  size_t len;
++  snprintf (buf, sizeof (buf), "%-10" BFD_VMA_FMT "u", size);
++  len = strlen (buf);
++  if (len < n)
++    {
++      memcpy (p, buf, len);
++      memset (p + len, ' ', n - len);
++    }
++  else
++    memcpy (p, buf, n);
++}
++
+ bfd_boolean
+ _bfd_generic_mkarchive (bfd *abfd)
+ {
+@@ -1770,7 +1786,7 @@ _bfd_bsd44_write_ar_hdr (bfd *archive, bfd *abfd)
+ 
+       BFD_ASSERT (padded_len == arch_eltdata (abfd)->extra_size);
+ 
+-      _bfd_ar_spacepad (hdr->ar_size, sizeof (hdr->ar_size), "%-10ld",
++      _bfd_ar_sizepad (hdr->ar_size, sizeof (hdr->ar_size),
+                         arch_eltdata (abfd)->parsed_size + padded_len);
+ 
+       if (bfd_bwrite (hdr, sizeof (*hdr), archive) != sizeof (*hdr))
+@@ -1891,7 +1907,7 @@ bfd_ar_hdr_from_filesystem (bfd *abfd, const char *filename, bfd *member)
+                       status.st_gid);
+   _bfd_ar_spacepad (hdr->ar_mode, sizeof (hdr->ar_mode), "%-8lo",
+                     status.st_mode);
+-  _bfd_ar_spacepad (hdr->ar_size, sizeof (hdr->ar_size), "%-10ld",
++  _bfd_ar_sizepad (hdr->ar_size, sizeof (hdr->ar_size),
+                     status.st_size);
+   memcpy (hdr->ar_fmag, ARFMAG, 2);
+   ared->parsed_size = status.st_size;
+@@ -2132,7 +2148,7 @@ _bfd_write_archive_contents (bfd *arch)
+       memset (&hdr, ' ', sizeof (struct ar_hdr));
+       memcpy (hdr.ar_name, ename, strlen (ename));
+       /* Round size up to even number in archive header.  */
+-      _bfd_ar_spacepad (hdr.ar_size, sizeof (hdr.ar_size), "%-10ld",
++      _bfd_ar_sizepad (hdr.ar_size, sizeof (hdr.ar_size),
+                         (elength + 1) & ~(bfd_size_type) 1);
+       memcpy (hdr.ar_fmag, ARFMAG, 2);
+       if ((bfd_bwrite (&hdr, sizeof (struct ar_hdr), arch)
+@@ -2409,7 +2425,7 @@ bsd_write_armap (bfd *arch,
+                     bfd_ardata (arch)->armap_timestamp);
+   _bfd_ar_spacepad (hdr.ar_uid, sizeof (hdr.ar_uid), "%ld", uid);
+   _bfd_ar_spacepad (hdr.ar_gid, sizeof (hdr.ar_gid), "%ld", gid);
+-  _bfd_ar_spacepad (hdr.ar_size, sizeof (hdr.ar_size), "%-10ld", mapsize);
++  _bfd_ar_sizepad (hdr.ar_size, sizeof (hdr.ar_size), mapsize);
+   memcpy (hdr.ar_fmag, ARFMAG, 2);
+   if (bfd_bwrite (&hdr, sizeof (struct ar_hdr), arch)
+       != sizeof (struct ar_hdr))
+@@ -2564,8 +2580,7 @@ coff_write_armap (bfd *arch,
+ 
+   memset (&hdr, ' ', sizeof (struct ar_hdr));
+   hdr.ar_name[0] = '/';
+-  _bfd_ar_spacepad (hdr.ar_size, sizeof (hdr.ar_size), "%-10ld",
+-                    mapsize);
++  _bfd_ar_sizepad (hdr.ar_size, sizeof (hdr.ar_size), mapsize);
+   _bfd_ar_spacepad (hdr.ar_date, sizeof (hdr.ar_date), "%ld",
+                     ((arch->flags & BFD_DETERMINISTIC_OUTPUT) == 0
+                      ? time (NULL) : 0));
+diff --git a/bfd/archive64.c b/bfd/archive64.c
+index bbc4c3f..a906508 100644
+--- a/bfd/archive64.c
++++ b/bfd/archive64.c
+@@ -169,7 +169,7 @@ bfd_elf64_archive_write_armap (bfd *arch,
+ 
+   memset (&hdr, ' ', sizeof (struct ar_hdr));
+   memcpy (hdr.ar_name, "/SYM64/", strlen ("/SYM64/"));
+-  _bfd_ar_spacepad (hdr.ar_size, sizeof (hdr.ar_size), "%-10ld",
++  _bfd_ar_sizepad (hdr.ar_size, sizeof (hdr.ar_size),
+                     mapsize);
+   _bfd_ar_spacepad (hdr.ar_date, sizeof (hdr.ar_date), "%ld",
+                     time (NULL));
+diff --git a/bfd/libbfd-in.h b/bfd/libbfd-in.h
+index 7db09e4..57197ac 100644
+--- a/bfd/libbfd-in.h
++++ b/bfd/libbfd-in.h
+@@ -203,6 +203,8 @@ extern void *_bfd_generic_read_ar_hdr
+   (bfd *);
+ extern void _bfd_ar_spacepad
+   (char *, size_t, const char *, long);
++extern void _bfd_ar_sizepad
++  (char *, size_t, bfd_size_type);
+ 
+ extern void *_bfd_generic_read_ar_hdr_mag
+   (bfd *, const char *);
+diff --git a/bfd/libbfd.h b/bfd/libbfd.h
+index 0beddb6..121e865 100644
+--- a/bfd/libbfd.h
++++ b/bfd/libbfd.h
+@@ -208,6 +208,8 @@ extern void *_bfd_generic_read_ar_hdr
+   (bfd *);
+ extern void _bfd_ar_spacepad
+   (char *, size_t, const char *, long);
++extern void _bfd_ar_sizepad
++  (char *, size_t, bfd_size_type);
+ 
+ extern void *_bfd_generic_read_ar_hdr_mag
+   (bfd *, const char *);
--- binutils-2.22.orig/debian/patches/006_better_file_error.patch
+++ binutils-2.22/debian/patches/006_better_file_error.patch
@@ -0,0 +1,19 @@
+Author: David Kimdon <dwhedon@gordian.com>
+Description: Specify which filename is causing an error if the filename is a
+directory. (#45832)
+--- a/bfd/opncls.c
++++ b/bfd/opncls.c
+@@ -183,6 +183,13 @@
+ {
+   bfd *nbfd;
+   const bfd_target *target_vec;
++  struct stat s;
++
++  if (stat (filename, &s) == 0)
++    if (S_ISDIR(s.st_mode)) {
++      bfd_set_error (bfd_error_file_not_recognized);
++      return NULL;
++    }
+ 
+   nbfd = _bfd_new_bfd ();
+   if (nbfd == NULL)
--- binutils-2.22.orig/debian/patches/003_gprof_see_also_monitor.patch
+++ binutils-2.22/debian/patches/003_gprof_see_also_monitor.patch
@@ -0,0 +1,13 @@
+Author: Chris Chimelis <chris@debian.org>
+Description: Don't mention monitor(3) which doesn't exist in Debian. (#160654)
+--- a/gprof/gprof.texi
++++ b/gprof/gprof.texi
+@@ -197,7 +197,7 @@
+ @c man end
+ 
+ @c man begin SEEALSO
+-monitor(3), profil(2), cc(1), prof(1), and the Info entry for @file{gprof}.
++cc(1), prof(1), and the Info entry for @file{gprof}.
+ 
+ ``An Execution Profiler for Modular Programs'',
+ by S. Graham, P. Kessler, M. McKusick;
--- binutils-2.22.orig/debian/patches/131_ld_bootstrap_testsuite.patch
+++ binutils-2.22/debian/patches/131_ld_bootstrap_testsuite.patch
@@ -0,0 +1,45 @@
+Author: 
+Description: Description: Fix ld-bootstrap testsuite when configured with --enable-plugins
+Author: Rafael Espindola
+Upstream status: proposed patch
+--- a/ld/testsuite/ld-bootstrap/bootstrap.exp
++++ b/ld/testsuite/ld-bootstrap/bootstrap.exp
+@@ -40,6 +40,15 @@
+     set plugins "no"
+ }
+ 
++remote_exec host "$nm --help" "" "/dev/null" "plugin-support"
++set tmp [file_contents "plugin-support"]
++regexp ".*\(--plugin\).*\n" $tmp foo plugins
++if [info exists plugins] then {
++    set plugins "yes"
++} else {
++    set plugins "no"
++}
++
+ # Bootstrap ld.  First link the object files together using -r, in
+ # order to test -r.  Then link the result into an executable, ld1, to
+ # really test -r.  Use ld1 to link a fresh ld, ld2.  Use ld2 to link a
+@@ -78,6 +87,11 @@
+ 	continue
+     }
+ 
++    if { $flags == "--static" && $plugins == "yes" } then {
++	untested $testname
++	continue
++    }
++
+     # If we only have a shared libbfd, we probably can't run the
+     # --static test.will fail.
+     if { $flags == "--static" && ! [string match "*libbfd.a*" $BFDLIB] } then {
+@@ -112,6 +126,10 @@
+     if { $plugins == "yes" } {
+ 	set extralibs "$extralibs -ldl"
+     }
++
++    if { $plugins == "yes" } {
++	set extralibs "$extralibs -ldl"
++    }
+ 
+     # On Irix 5, linking with --static only works if all the files are
+     # compiled using -non_shared.
--- binutils-2.22.orig/debian/patches/pr13534-04.diff
+++ binutils-2.22/debian/patches/pr13534-04.diff
@@ -0,0 +1,82 @@
+commit 70ed6152e1e163b9ca240fe8b91aa3feb942ac84
+Author: Francois Gouget <fgouget@codeweavers.com>
+Date:   Tue Dec 20 18:45:18 2011 +0100
+
+    bfd: Always use bfd_size_type to manipulate the size of an archive element.
+    
+    Other types may not be able to deal with archive elements larger than 2GB.
+
+diff --git a/bfd/archive.c b/bfd/archive.c
+index 01acf98..c1438ef 100644
+--- a/bfd/archive.c
++++ b/bfd/archive.c
+@@ -748,7 +748,7 @@ bfd_generic_openr_next_archived_file (bfd *archive, bfd *last_file)
+     filestart = bfd_ardata (archive)->first_file_filepos;
+   else
+     {
+-      unsigned int size = arelt_size (last_file);
++      bfd_size_type size = arelt_size (last_file);
+ 
+       filestart = last_file->proxy_origin;
+       if (! bfd_is_thin_archive (archive))
+@@ -946,7 +946,7 @@ do_slurp_coff_armap (bfd *abfd)
+   struct artdata *ardata = bfd_ardata (abfd);
+   char *stringbase;
+   bfd_size_type stringsize;
+-  unsigned int parsed_size;
++  bfd_size_type parsed_size;
+   carsym *carsyms;
+   bfd_size_type nsymz;		/* Number of symbols in armap.  */
+   bfd_vma (*swap) (const void *);
+@@ -2174,7 +2174,7 @@ _bfd_write_archive_contents (bfd *arch)
+        current = current->archive_next)
+     {
+       char buffer[DEFAULT_BUFFERSIZE];
+-      unsigned int remaining = arelt_size (current);
++      bfd_size_type remaining = arelt_size (current);
+ 
+       /* Write ar header.  */
+       if (!_bfd_write_ar_hdr (arch, current))
+diff --git a/bfd/bfdio.c b/bfd/bfdio.c
+index 841c781..5bc8061 100644
+--- a/bfd/bfdio.c
++++ b/bfd/bfdio.c
+@@ -185,7 +185,7 @@ bfd_bread (void *ptr, bfd_size_type size, bfd *abfd)
+      this element.  */
+   if (abfd->arelt_data != NULL)
+     {
+-      size_t maxbytes = ((struct areltdata *) abfd->arelt_data)->parsed_size;
++      bfd_size_type maxbytes = arelt_size (abfd);
+       if (abfd->where + size > maxbytes)
+         {
+           if (abfd->where >= maxbytes)
+diff --git a/bfd/libbfd-in.h b/bfd/libbfd-in.h
+index a4ba4b6..683c1cc 100644
+--- a/bfd/libbfd-in.h
++++ b/bfd/libbfd-in.h
+@@ -90,8 +90,8 @@ struct artdata {
+ /* Goes in bfd's arelt_data slot */
+ struct areltdata {
+   char * arch_header;		/* it's actually a string */
+-  unsigned int parsed_size;	/* octets of filesize not including ar_hdr */
+-  unsigned int extra_size;	/* BSD4.4: extra bytes after the header.  */
++  bfd_size_type parsed_size;	/* octets of filesize not including ar_hdr */
++  bfd_size_type extra_size;	/* BSD4.4: extra bytes after the header.  */
+   char *filename;		/* null-terminated */
+   file_ptr origin;		/* for element of a thin archive */
+ };
+diff --git a/bfd/libbfd.h b/bfd/libbfd.h
+index 7f142d0..6d27901 100644
+--- a/bfd/libbfd.h
++++ b/bfd/libbfd.h
+@@ -95,8 +95,8 @@ struct artdata {
+ /* Goes in bfd's arelt_data slot */
+ struct areltdata {
+   char * arch_header;		/* it's actually a string */
+-  unsigned int parsed_size;	/* octets of filesize not including ar_hdr */
+-  unsigned int extra_size;	/* BSD4.4: extra bytes after the header.  */
++  bfd_size_type parsed_size;	/* octets of filesize not including ar_hdr */
++  bfd_size_type extra_size;	/* BSD4.4: extra bytes after the header.  */
+   char *filename;		/* null-terminated */
+   file_ptr origin;		/* for element of a thin archive */
+ };
--- binutils-2.22.orig/debian/patches/127_x86_64_i386_biarch.patch
+++ binutils-2.22/debian/patches/127_x86_64_i386_biarch.patch
@@ -0,0 +1,20 @@
+Author: 
+Description: Description: Add (/usr)/lib32 to the search paths on x86_64.
+Author: Aurelien Jarno <aurel32.debian.org>
+Upstream status: Debian specific
+--- a/ld/emulparams/elf_i386.sh
++++ b/ld/emulparams/elf_i386.sh
+@@ -13,3 +13,13 @@
+ NO_SMALL_DATA=yes
+ SEPARATE_GOTPLT=12
+ IREL_IN_PLT=
++
++# Linux modify the default library search path to first include
++# a 32-bit specific directory.
++case "$target" in
++  x86_64*-linux* | i[3-7]86*-linux* | x86_64*-kfreebsd*-gnu | i[3-7]86*-kfreebsd*-gnu)
++    case "$EMULATION_NAME" in
++      *i386*) LIBPATH_SUFFIX=32 ;;
++    esac
++    ;;
++esac
--- binutils-2.22.orig/debian/patches/002_gprof_profile_arcs.patch
+++ binutils-2.22/debian/patches/002_gprof_profile_arcs.patch
@@ -0,0 +1,27 @@
+Author: Chris Chimelis <chris@debian.org>
+Description: Add more documentation about profiling and -fprofile-arcs.
+--- a/gprof/gprof.texi
++++ b/gprof/gprof.texi
+@@ -149,6 +149,10 @@
+ If more than one profile file is specified, the @code{gprof}
+ output shows the sum of the profile information in the given profile files.
+ 
++If you use gcc 2.95.x or 3.0 to compile your binaries, you may need
++to add the @samp{-fprofile-arcs} to the compile command line in order
++for the call graphs to be properly stored in gmon.out.
++
+ @code{Gprof} calculates the amount of time spent in each routine.
+ Next, these times are propagated along the edges of the call graph.
+ Cycles are discovered, and calls into a cycle are made to share the time
+@@ -280,6 +284,11 @@
+ options.  The same option, @samp{-pg}, alters either compilation or linking
+ to do what is necessary for profiling.  Here are examples:
+ 
++If you use gcc 2.95.x or 3.0.x, you may need to add the
++@samp{-fprofile-arcs} option to the compile line along with @samp{-pg}
++in order to allow the call-graphs to be properly included in the gmon.out
++file.
++
+ @example
+ cc -g -c myprog.c utils.c -pg
+ cc -o myprog myprog.o utils.o -pg
--- binutils-2.22.orig/debian/patches/134_gold_no_spu.patch
+++ binutils-2.22/debian/patches/134_gold_no_spu.patch
@@ -0,0 +1,13 @@
+Author: 
+Description: Description: Don't configure gold for spu target.
+--- a/Makefile.in
++++ b/Makefile.in
+@@ -21929,7 +21929,7 @@
+ 	srcdiroption="--srcdir=$${topdir}/gold"; \
+ 	libsrcdir="$$s/gold"; \
+ 	$(SHELL) $${libsrcdir}/configure \
+-	  $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \
++	  $$(echo $(HOST_CONFIGARGS) |sed 's/,spu//') --build=${build_alias} --host=${host_alias} \
+ 	  --target=${target_alias} $${srcdiroption}  \
+ 	  || exit 1
+ @endif gold
--- binutils-2.22.orig/debian/patches/168_readelf_go.patch
+++ binutils-2.22/debian/patches/168_readelf_go.patch
@@ -0,0 +1,13 @@
+# DP: Recognize DW_LANG_Go in readelf (backport from trunk)
+
+--- a/binutils/dwarf.c
++++ b/binutils/dwarf.c
+@@ -1599,6 +1599,8 @@ read_and_display_attr_value (unsigned lo
+ 	case DW_LANG_D:			printf ("(D)"); break;
+ 	  /* DWARF 4 values.  */
+ 	case DW_LANG_Python:		printf ("(Python)"); break;
++	  /* DWARF 5 values.  */
++	case DW_LANG_Go:		printf ("(Go)"); break;
+ 	  /* MIPS extension.  */
+ 	case DW_LANG_Mips_Assembler:	printf ("(MIPS assembler)"); break;
+ 	  /* UPC extension.  */
--- binutils-2.22.orig/debian/patches/158_ld_system_root.patch
+++ binutils-2.22/debian/patches/158_ld_system_root.patch
@@ -0,0 +1,36 @@
+--- a/ld/configure.in
++++ b/ld/configure.in
+@@ -38,7 +38,9 @@
+  *) TARGET_SYSTEM_ROOT=$with_sysroot ;;
+  esac
+ 
++ if test "x$TARGET_SYSTEM_ROOT" != x/; then
+  TARGET_SYSTEM_ROOT_DEFINE='-DTARGET_SYSTEM_ROOT=\"$(TARGET_SYSTEM_ROOT)\"'
++ fi
+  use_sysroot=yes
+ 
+  if test "x$prefix" = xNONE; then
+--- a/ld/configure
++++ b/ld/configure
+@@ -4139,7 +4139,9 @@
+  *) TARGET_SYSTEM_ROOT=$with_sysroot ;;
+  esac
+ 
++ if test "x$TARGET_SYSTEM_ROOT" != x/; then
+  TARGET_SYSTEM_ROOT_DEFINE='-DTARGET_SYSTEM_ROOT=\"$(TARGET_SYSTEM_ROOT)\"'
++ fi
+  use_sysroot=yes
+ 
+  if test "x$prefix" = xNONE; then
+--- a/ld/ldmain.c
++++ b/ld/ldmain.c
+@@ -214,8 +214,8 @@
+     {
+       if (*TARGET_SYSTEM_ROOT == 0)
+ 	{
+-	  einfo ("%P%F: this linker was not configured to use sysroots\n");
+ 	  ld_sysroot = "";
++	  ld_canon_sysroot = "";
+ 	}
+       else
+ 	ld_canon_sysroot = lrealpath (ld_sysroot);
--- binutils-2.22.orig/debian/patches/014_hash_style-both.patch
+++ binutils-2.22/debian/patches/014_hash_style-both.patch
@@ -0,0 +1,30 @@
+# DP: Default to --hash-style=both in ld.bfd and ld.gold.
+
+--- a/ld/ldmain.c
++++ b/ld/ldmain.c
+@@ -287,6 +288,14 @@
+   emulation = get_emulation (argc, argv);
+   ldemul_choose_mode (emulation);
+   default_target = ldemul_choose_target (argc, argv);
++
++  /* Default to --hash-style=gnu */
++  if (strcmp (default_target, "elf32-tradbigmips") != 0
++      && strcmp (default_target, "elf32-tradlittlemips") != 0)
++    {
++      link_info.emit_gnu_hash = TRUE;
++    }
++
+   config.maxpagesize = bfd_emul_get_maxpagesize (default_target);
+   config.commonpagesize = bfd_emul_get_commonpagesize (default_target);
+   lang_init ();
+--- a/gold/options.h
++++ b/gold/options.h
+@@ -794,7 +794,7 @@
+ 		N_("Min fraction of empty buckets in dynamic hash"),
+ 		N_("FRACTION"));
+ 
+-  DEFINE_enum(hash_style, options::TWO_DASHES, '\0', "sysv",
++  DEFINE_enum(hash_style, options::TWO_DASHES, '\0', "both",
+ 	      N_("Dynamic hash style"), N_("[sysv,gnu,both]"),
+ 	      {"sysv", "gnu", "both"});
+ 
--- binutils-2.22.orig/debian/patches/014_hash_style-gnu.patch
+++ binutils-2.22/debian/patches/014_hash_style-gnu.patch
@@ -0,0 +1,31 @@
+# DP: Default to --hash-gnu=both in ld.bfd and ld.gold.
+
+--- a/ld/ldmain.c
++++ b/ld/ldmain.c
+@@ -287,6 +288,15 @@
+   emulation = get_emulation (argc, argv);
+   ldemul_choose_mode (emulation);
+   default_target = ldemul_choose_target (argc, argv);
++
++  /* Default to --hash-style=gnu */
++  if (strcmp (default_target, "elf32-tradbigmips") != 0
++      && strcmp (default_target, "elf32-tradlittlemips") != 0)
++    {
++      link_info.emit_gnu_hash = TRUE;
++      link_info.emit_hash = FALSE;
++    }
++
+   config.maxpagesize = bfd_emul_get_maxpagesize (default_target);
+   config.commonpagesize = bfd_emul_get_commonpagesize (default_target);
+   lang_init ();
+--- a/gold/options.h
++++ b/gold/options.h
+@@ -794,7 +794,7 @@
+ 		N_("Min fraction of empty buckets in dynamic hash"),
+ 		N_("FRACTION"));
+ 
+-  DEFINE_enum(hash_style, options::TWO_DASHES, '\0', "sysv",
++  DEFINE_enum(hash_style, options::TWO_DASHES, '\0', "gnu",
+ 	      N_("Dynamic hash style"), N_("[sysv,gnu,both]"),
+ 	      {"sysv", "gnu", "both"});
+ 
--- binutils-2.22.orig/debian/patches/libiberty-md5.diff
+++ binutils-2.22/debian/patches/libiberty-md5.diff
@@ -0,0 +1,32 @@
+# DP: Fix alias warning building libiberty/md5.c
+
+--- a/include/md5.h
++++ a/include/md5.h
+@@ -86,7 +86,11 @@
+ 
+   md5_uint32 total[2];
+   md5_uint32 buflen;
+-  char buffer[128] ATTRIBUTE_ALIGNED_ALIGNOF(md5_uint32);
++  union
++  {
++    char buffer[128];
++    md5_uint32 buffer32[32];
++  };
+ };
+ 
+ /*
+--- a/libiberty/md5.c
++++ b/libiberty/md5.c
+@@ -114,9 +114,9 @@
+   memcpy (&ctx->buffer[bytes], fillbuf, pad);
+ 
+   /* Put the 64-bit file length in *bits* at the end of the buffer.  */
+-  *(md5_uint32 *) &ctx->buffer[bytes + pad] = SWAP (ctx->total[0] << 3);
+-  *(md5_uint32 *) &ctx->buffer[bytes + pad + 4] = SWAP ((ctx->total[1] << 3) |
+-							(ctx->total[0] >> 29));
++  ctx->buffer32[(bytes + pad) / 4] = SWAP (ctx->total[0] << 3);
++  ctx->buffer32[(bytes + pad + 4) / 4] = SWAP ((ctx->total[1] << 3) |
++					       (ctx->total[0] >> 29));
+ 
+   /* Process last bytes.  */
+   md5_process_block (ctx->buffer, bytes + pad + 8, ctx);
--- binutils-2.22.orig/debian/patches/pr13534-02.diff
+++ binutils-2.22/debian/patches/pr13534-02.diff
@@ -0,0 +1,136 @@
+commit 433cc73f9df08a1435b4d07a7bd3eed20f0c3dcd
+Author: Francois Gouget <fgouget@codeweavers.com>
+Date:   Tue Dec 20 19:39:41 2011 +0100
+
+    bfd: Refuse to create an invalid archive when an archive element is too big.
+    
+    The archive format stores element sizes as a 10 character string and thus cannot handle anything 10GB or more.
+
+diff --git a/bfd/archive.c b/bfd/archive.c
+index 5c5b3d4..05aba6c 100644
+--- a/bfd/archive.c
++++ b/bfd/archive.c
+@@ -179,13 +179,18 @@ _bfd_ar_spacepad (char *p, size_t n, const char *fmt, long val)
+     memcpy (p, buf, n);
+ }
+ 
+-void
++int
+ _bfd_ar_sizepad (char *p, size_t n, bfd_size_type size)
+ {
+   static char buf[21];
+   size_t len;
+   snprintf (buf, sizeof (buf), "%-10" BFD_VMA_FMT "u", size);
+   len = strlen (buf);
++  if (len > n)
++    {
++      bfd_set_error(bfd_error_file_too_big);
++      return 0;
++    }
+   if (len < n)
+     {
+       memcpy (p, buf, len);
+@@ -193,6 +198,7 @@ _bfd_ar_sizepad (char *p, size_t n, bfd_size_type size)
+     }
+   else
+     memcpy (p, buf, n);
++  return 1;
+ }
+ 
+ bfd_boolean
+@@ -1786,8 +1792,9 @@ _bfd_bsd44_write_ar_hdr (bfd *archive, bfd *abfd)
+ 
+       BFD_ASSERT (padded_len == arch_eltdata (abfd)->extra_size);
+ 
+-      _bfd_ar_sizepad (hdr->ar_size, sizeof (hdr->ar_size),
+-                        arch_eltdata (abfd)->parsed_size + padded_len);
++      if (!_bfd_ar_sizepad (hdr->ar_size, sizeof (hdr->ar_size),
++                            arch_eltdata (abfd)->parsed_size + padded_len))
++        return FALSE;
+ 
+       if (bfd_bwrite (hdr, sizeof (*hdr), archive) != sizeof (*hdr))
+         return FALSE;
+@@ -1907,8 +1914,8 @@ bfd_ar_hdr_from_filesystem (bfd *abfd, const char *filename, bfd *member)
+                       status.st_gid);
+   _bfd_ar_spacepad (hdr->ar_mode, sizeof (hdr->ar_mode), "%-8lo",
+                     status.st_mode);
+-  _bfd_ar_sizepad (hdr->ar_size, sizeof (hdr->ar_size),
+-                    status.st_size);
++  if (!_bfd_ar_sizepad (hdr->ar_size, sizeof (hdr->ar_size), status.st_size))
++    return NULL;
+   memcpy (hdr->ar_fmag, ARFMAG, 2);
+   ared->parsed_size = status.st_size;
+   ared->arch_header = (char *) hdr;
+@@ -2148,8 +2155,9 @@ _bfd_write_archive_contents (bfd *arch)
+       memset (&hdr, ' ', sizeof (struct ar_hdr));
+       memcpy (hdr.ar_name, ename, strlen (ename));
+       /* Round size up to even number in archive header.  */
+-      _bfd_ar_sizepad (hdr.ar_size, sizeof (hdr.ar_size),
+-                        (elength + 1) & ~(bfd_size_type) 1);
++      if (!_bfd_ar_sizepad (hdr.ar_size, sizeof (hdr.ar_size),
++                            (elength + 1) & ~(bfd_size_type) 1))
++        return FALSE;
+       memcpy (hdr.ar_fmag, ARFMAG, 2);
+       if ((bfd_bwrite (&hdr, sizeof (struct ar_hdr), arch)
+ 	   != sizeof (struct ar_hdr))
+@@ -2425,7 +2433,8 @@ bsd_write_armap (bfd *arch,
+                     bfd_ardata (arch)->armap_timestamp);
+   _bfd_ar_spacepad (hdr.ar_uid, sizeof (hdr.ar_uid), "%ld", uid);
+   _bfd_ar_spacepad (hdr.ar_gid, sizeof (hdr.ar_gid), "%ld", gid);
+-  _bfd_ar_sizepad (hdr.ar_size, sizeof (hdr.ar_size), mapsize);
++  if (!_bfd_ar_sizepad (hdr.ar_size, sizeof (hdr.ar_size), mapsize))
++    return FALSE;
+   memcpy (hdr.ar_fmag, ARFMAG, 2);
+   if (bfd_bwrite (&hdr, sizeof (struct ar_hdr), arch)
+       != sizeof (struct ar_hdr))
+@@ -2580,7 +2589,8 @@ coff_write_armap (bfd *arch,
+ 
+   memset (&hdr, ' ', sizeof (struct ar_hdr));
+   hdr.ar_name[0] = '/';
+-  _bfd_ar_sizepad (hdr.ar_size, sizeof (hdr.ar_size), mapsize);
++  if (!_bfd_ar_sizepad (hdr.ar_size, sizeof (hdr.ar_size), mapsize))
++    return FALSE;
+   _bfd_ar_spacepad (hdr.ar_date, sizeof (hdr.ar_date), "%ld",
+                     ((arch->flags & BFD_DETERMINISTIC_OUTPUT) == 0
+                      ? time (NULL) : 0));
+diff --git a/bfd/archive64.c b/bfd/archive64.c
+index a906508..bdbda0a 100644
+--- a/bfd/archive64.c
++++ b/bfd/archive64.c
+@@ -169,8 +169,8 @@ bfd_elf64_archive_write_armap (bfd *arch,
+ 
+   memset (&hdr, ' ', sizeof (struct ar_hdr));
+   memcpy (hdr.ar_name, "/SYM64/", strlen ("/SYM64/"));
+-  _bfd_ar_sizepad (hdr.ar_size, sizeof (hdr.ar_size),
+-                    mapsize);
++  if (!_bfd_ar_sizepad (hdr.ar_size, sizeof (hdr.ar_size), mapsize))
++    return FALSE;
+   _bfd_ar_spacepad (hdr.ar_date, sizeof (hdr.ar_date), "%ld",
+                     time (NULL));
+   /* This, at least, is what Intel coff sets the values to.: */
+diff --git a/bfd/libbfd-in.h b/bfd/libbfd-in.h
+index 57197ac..a4ba4b6 100644
+--- a/bfd/libbfd-in.h
++++ b/bfd/libbfd-in.h
+@@ -203,7 +203,7 @@ extern void *_bfd_generic_read_ar_hdr
+   (bfd *);
+ extern void _bfd_ar_spacepad
+   (char *, size_t, const char *, long);
+-extern void _bfd_ar_sizepad
++extern int _bfd_ar_sizepad
+   (char *, size_t, bfd_size_type);
+ 
+ extern void *_bfd_generic_read_ar_hdr_mag
+diff --git a/bfd/libbfd.h b/bfd/libbfd.h
+index 121e865..7f142d0 100644
+--- a/bfd/libbfd.h
++++ b/bfd/libbfd.h
+@@ -208,7 +208,7 @@ extern void *_bfd_generic_read_ar_hdr
+   (bfd *);
+ extern void _bfd_ar_spacepad
+   (char *, size_t, const char *, long);
+-extern void _bfd_ar_sizepad
++extern int _bfd_ar_sizepad
+   (char *, size_t, bfd_size_type);
+ 
+ extern void *_bfd_generic_read_ar_hdr_mag
--- binutils-2.22.orig/debian/patches/128_build_id.patch
+++ binutils-2.22/debian/patches/128_build_id.patch
@@ -0,0 +1,42 @@
+Author: 
+Description: Description: Fix ld corrupt build ID generation
+Author: Nick Clifton
+Upstream status: Taken from Fedora (BZ 501582)
+--- a/bfd/compress.c
++++ b/bfd/compress.c
+@@ -174,7 +174,7 @@
+     case COMPRESS_SECTION_NONE:
+       if (p == NULL)
+ 	{
+-	  p = (bfd_byte *) bfd_malloc (sz);
++	  p = (bfd_byte *) bfd_zmalloc (sz);
+ 	  if (p == NULL)
+ 	    return FALSE;
+ 	  need_free = TRUE;
+--- a/bfd/elfcode.h
++++ b/bfd/elfcode.h
+@@ -1158,6 +1158,24 @@
+ 
+       if (i_shdr.contents)
+ 	(*process) (i_shdr.contents, i_shdr.sh_size, arg);
++      else
++	{
++	  asection *sec;
++
++	  sec = bfd_section_from_elf_index (abfd, count);
++	  if (sec != NULL)
++	    {
++	      if (sec->contents == NULL)
++		{
++		  /* Force rereading from file.  */
++		  sec->flags &= ~SEC_IN_MEMORY;
++		  if (! bfd_malloc_and_get_section (abfd, sec, & sec->contents))
++		    continue;
++		}
++	      if (sec->contents != NULL)
++		(*process) (sec->contents, i_shdr.sh_size, arg);
++	    }
++	}
+     }
+ 
+   return TRUE;
--- binutils-2.22.orig/debian/patches/pr13534-05.diff
+++ binutils-2.22/debian/patches/pr13534-05.diff
@@ -0,0 +1,61 @@
+commit 1c9170065b107672a47e467abb6807bba8adf28e
+Author: Francois Gouget <fgouget@codeweavers.com>
+Date:   Tue Dec 20 18:48:52 2011 +0100
+
+    ar: Fix handling of archive elements larger than 2GB.
+
+diff --git a/binutils/ar.c b/binutils/ar.c
+index 0310b6f..e47779f 100644
+--- a/binutils/ar.c
++++ b/binutils/ar.c
+@@ -927,10 +927,10 @@ open_inarch (const char *archive_filename, const char *file)
+ static void
+ print_contents (bfd *abfd)
+ {
+-  size_t ncopied = 0;
++  bfd_size_type ncopied = 0;
+   char *cbuf = (char *) xmalloc (BUFSIZE);
+   struct stat buf;
+-  size_t size;
++  bfd_size_type size;
+   if (bfd_stat_arch_elt (abfd, &buf) != 0)
+     /* xgettext:c-format */
+     fatal (_("internal stat error on %s"), bfd_get_filename (abfd));
+@@ -944,12 +944,12 @@ print_contents (bfd *abfd)
+   while (ncopied < size)
+     {
+ 
+-      size_t nread;
+-      size_t tocopy = size - ncopied;
++      bfd_size_type nread;
++      bfd_size_type tocopy = size - ncopied;
+       if (tocopy > BUFSIZE)
+ 	tocopy = BUFSIZE;
+ 
+-      nread = bfd_bread (cbuf, (bfd_size_type) tocopy, abfd);
++      nread = bfd_bread (cbuf, tocopy, abfd);
+       if (nread != tocopy)
+ 	/* xgettext:c-format */
+ 	fatal (_("%s is not a valid archive"),
+@@ -980,9 +980,9 @@ extract_file (bfd *abfd)
+ {
+   FILE *ostream;
+   char *cbuf = (char *) xmalloc (BUFSIZE);
+-  size_t nread, tocopy;
+-  size_t ncopied = 0;
+-  size_t size;
++  bfd_size_type nread, tocopy;
++  bfd_size_type ncopied = 0;
++  bfd_size_type size;
+   struct stat buf;
+ 
+   if (bfd_stat_arch_elt (abfd, &buf) != 0)
+@@ -1017,7 +1017,7 @@ extract_file (bfd *abfd)
+ 	if (tocopy > BUFSIZE)
+ 	  tocopy = BUFSIZE;
+ 
+-	nread = bfd_bread (cbuf, (bfd_size_type) tocopy, abfd);
++	nread = bfd_bread (cbuf, tocopy, abfd);
+ 	if (nread != tocopy)
+ 	  /* xgettext:c-format */
+ 	  fatal (_("%s is not a valid archive"),
--- binutils-2.22.orig/debian/patches/branch-version.diff
+++ binutils-2.22/debian/patches/branch-version.diff
@@ -0,0 +1,52 @@
+diff --git a/bfd/Makefile.am b/bfd/Makefile.am
+index ea4fd28..8610d5e 100644
+--- a/bfd/Makefile.am
++++ b/bfd/Makefile.am
+@@ -4,7 +4,7 @@ AUTOMAKE_OPTIONS = 1.11 no-dist foreign
+ ACLOCAL_AMFLAGS = -I . -I .. -I ../config
+ 
+ # Uncomment the following line when doing a release.
+-RELEASE=y
++# RELEASE=y
+ 
+ INCDIR = $(srcdir)/../include
+ CSEARCH = -I. -I$(srcdir) -I$(INCDIR)
+diff --git a/bfd/Makefile.in b/bfd/Makefile.in
+index 741809c..34196aa 100644
+--- a/bfd/Makefile.in
++++ b/bfd/Makefile.in
+@@ -320,7 +320,7 @@ AUTOMAKE_OPTIONS = 1.11 no-dist foreign
+ ACLOCAL_AMFLAGS = -I . -I .. -I ../config
+ 
+ # Uncomment the following line when doing a release.
+-RELEASE = y
++# RELEASE=y
+ INCDIR = $(srcdir)/../include
+ CSEARCH = -I. -I$(srcdir) -I$(INCDIR)
+ SUBDIRS = doc po
+diff --git a/bfd/configure b/bfd/configure
+index bc242b9..d31f0d9 100755
+--- a/bfd/configure
++++ b/bfd/configure
+@@ -3988,7 +3988,7 @@ fi
+ 
+ # Define the identity of the package.
+  PACKAGE=bfd
+- VERSION=2.22
++ VERSION=2.22.0
+ 
+ 
+ cat >>confdefs.h <<_ACEOF
+diff --git a/bfd/configure.in b/bfd/configure.in
+index 435aaaa..9ba3000 100644
+--- a/bfd/configure.in
++++ b/bfd/configure.in
+@@ -8,7 +8,7 @@ AC_CONFIG_SRCDIR([libbfd.c])
+ AC_CANONICAL_TARGET
+ AC_ISC_POSIX
+ 
+-AM_INIT_AUTOMAKE(bfd, 2.22)
++AM_INIT_AUTOMAKE(bfd, 2.22.0)
+ 
+ dnl These must be called before LT_INIT, because it may want
+ dnl to call AC_CHECK_PROG.
--- binutils-2.22.orig/debian/patches/series
+++ binutils-2.22/debian/patches/series
@@ -0,0 +1,37 @@
+branch-updates.diff
+#branch-version.diff
+001_ld_makefile_patch.patch
+002_gprof_profile_arcs.patch
+003_gprof_see_also_monitor.patch
+006_better_file_error.patch
+012_check_ldrunpath_length.patch
+013_bash_in_ld_testsuite.patch
+#014_hash_style-both.patch
+127_x86_64_i386_biarch.patch
+128_ppc64_powerpc_biarch.patch
+128_build_id.patch
+129_ld_mulitarch_dirs.patch
+130_gold_disable_testsuite_build.patch
+131_ld_bootstrap_testsuite.patch
+134_gold_no_spu.patch
+135_bfd_version.patch
+140_pr10340.patch
+156_pr10144.patch
+157_ar_scripts_with_tilde.patch
+158_ld_system_root.patch
+160_gas_pr12698.diff
+162_fpic_s390x.diff
+161_gold_dummy_zoption.diff
+163_multiarch_search_path.patch
+167_pr13302.diff
+pr13534-01.diff
+pr13534-02.diff
+pr13534-03.diff
+pr13534-04.diff
+pr13534-05.diff
+168_readelf_go.patch
+pr13449.diff
+pr14069.diff
+libiberty-md5.diff
+pr14319.diff
+pr54411.diff
--- binutils-2.22.orig/debian/patches/pr54411.diff
+++ binutils-2.22/debian/patches/pr54411.diff
@@ -0,0 +1,72 @@
+# DP: Fix PR other/54411: integer overflow in objalloc_alloc.
+
+include/
+
+2012-09-18  Florian Weimer  <fweimer@redhat.com>
+
+	PR other/54411
+	* objalloc.h (objalloc_alloc): Do not use fast path on wraparound.
+
+libiberty/
+
+2012-09-18  Florian Weimer  <fweimer@redhat.com>
+
+	PR other/54411
+	* objalloc.c (_objalloc_alloc): Add overflow check covering
+	alignment and CHUNK_HEADER_SIZE addition.
+
+Index: include/objalloc.h
+===================================================================
+--- a/include/objalloc.h	(revision 191412)
++++ b/include/objalloc.h	(revision 191413)
+@@ -1,5 +1,5 @@
+ /* objalloc.h -- routines to allocate memory for objects
+-   Copyright 1997, 2001 Free Software Foundation, Inc.
++   Copyright 1997-2012 Free Software Foundation, Inc.
+    Written by Ian Lance Taylor, Cygnus Solutions.
+ 
+ This program is free software; you can redistribute it and/or modify it
+@@ -91,7 +91,7 @@
+      if (__len == 0)							\
+        __len = 1;							\
+      __len = (__len + OBJALLOC_ALIGN - 1) &~ (OBJALLOC_ALIGN - 1);	\
+-     (__len <= __o->current_space					\
++     (__len != 0 && __len <= __o->current_space				\
+       ? (__o->current_ptr += __len,					\
+ 	 __o->current_space -= __len,					\
+ 	 (void *) (__o->current_ptr - __len))				\
+Index: libiberty/objalloc.c
+===================================================================
+--- b/libiberty/objalloc.c	(revision 191412)
++++ a/libiberty/objalloc.c	(revision 191413)
+@@ -1,5 +1,5 @@
+ /* objalloc.c -- routines to allocate memory for objects
+-   Copyright 1997 Free Software Foundation, Inc.
++   Copyright 1997-2012 Free Software Foundation, Inc.
+    Written by Ian Lance Taylor, Cygnus Solutions.
+ 
+ This program is free software; you can redistribute it and/or modify it
+@@ -112,8 +112,10 @@
+ /* Allocate space from an objalloc structure.  */
+ 
+ PTR
+-_objalloc_alloc (struct objalloc *o, unsigned long len)
++_objalloc_alloc (struct objalloc *o, unsigned long original_len)
+ {
++  unsigned long len = original_len;
++
+   /* We avoid confusion from zero sized objects by always allocating
+      at least 1 byte.  */
+   if (len == 0)
+@@ -121,6 +123,11 @@
+ 
+   len = (len + OBJALLOC_ALIGN - 1) &~ (OBJALLOC_ALIGN - 1);
+ 
++  /* Check for overflow in the alignment operation above and the
++     malloc argument below. */
++  if (len + CHUNK_HEADER_SIZE < original_len)
++    return NULL;
++
+   if (len <= o->current_space)
+     {
+       o->current_ptr += len;
--- binutils-2.22.orig/debian/patches/128_ppc64_powerpc_biarch.patch
+++ binutils-2.22/debian/patches/128_ppc64_powerpc_biarch.patch
@@ -0,0 +1,15 @@
+--- a/ld/emulparams/elf32ppccommon.sh	2011-03-01 21:36:22.239025005 +0000
++++ b/ld/emulparams/elf32ppccommon.sh	2011-03-01 21:38:13.187024999 +0000
+@@ -48,3 +48,12 @@
+ case "$EMULATION_NAME" in
+   *64*) LIBPATH_SUFFIX=64 ;;
+ esac
++
++# On 64bit, look for 32 bit target libraries in /lib32, /usr/lib32 etc., first.
++case "$target" in
++  powerpc64-*-linux* | ppc64-*-linux*)
++    case "$EMULATION_NAME" in
++      *32*) LIBPATH_SUFFIX=32 ;;
++    esac
++    ;;
++esac
--- binutils-2.22.orig/debian/patches/157_ar_scripts_with_tilde.patch
+++ binutils-2.22/debian/patches/157_ar_scripts_with_tilde.patch
@@ -0,0 +1,11 @@
+--- a/binutils/arlex.l
++++ b/binutils/arlex.l
+@@ -77,7 +77,7 @@
+ "("             { return '('; }
+ ")"             { return ')'; }
+ ","             { return ','; }
+-[A-Za-z0-9/\\$:.\-\_]+  { 	
++[A-Za-z0-9/\\$:.\-\_~]+  { 	
+ 		yylval.name =  xstrdup (yytext);
+ 		return FILENAME;
+ 		}
--- binutils-2.22.orig/debian/patches/130_gold_disable_testsuite_build.patch
+++ binutils-2.22/debian/patches/130_gold_disable_testsuite_build.patch
@@ -0,0 +1,26 @@
+Author: 
+Description: Description: Disable build of gold/testsuite
+Author: Matthias Klose
+Upstream status: local
+--- a/gold/Makefile.am
++++ b/gold/Makefile.am
+@@ -2,7 +2,7 @@
+ 
+ AUTOMAKE_OPTIONS = foreign
+ 
+-SUBDIRS = po testsuite
++SUBDIRS = po
+ 
+ tooldir = $(exec_prefix)/$(target_alias)
+ 
+--- a/gold/Makefile.in
++++ b/gold/Makefile.in
+@@ -355,7 +355,7 @@
+ top_builddir = @top_builddir@
+ top_srcdir = @top_srcdir@
+ AUTOMAKE_OPTIONS = foreign
+-SUBDIRS = po testsuite
++SUBDIRS = po
+ tooldir = $(exec_prefix)/$(target_alias)
+ ACLOCAL_AMFLAGS = -I ../bfd -I ../config
+ AM_CFLAGS = $(WARN_CFLAGS) $(LFS_CFLAGS) $(RANDOM_SEED_CFLAGS)
--- binutils-2.22.orig/debian/patches/140_pr10340.patch
+++ binutils-2.22/debian/patches/140_pr10340.patch
@@ -0,0 +1,35 @@
+# DP: Proposed patch for PR ld/10340, ld doesn't honor sysroot prefix for ldscripts
+
+Signed-off-by: Sven Rebhan <odinshorse@googlemail.com>
+
+Always try to prepend the sysroot prefix to absolute filenames first.
+
+--- a/ld/ldfile.c
++++ b/ld/ldfile.c
+@@ -308,18 +308,24 @@
+      directory first.  */
+   if (! entry->is_archive)
+     {
+-      if (entry->sysrooted && IS_ABSOLUTE_PATH (entry->filename))
++      /* For absolute pathnames, try to always open the file in the
++	 sysroot first. If this fails, try to open the file at the
++	 given location. */
++      entry->sysrooted = is_sysrooted_pathname(entry->filename, FALSE);
++      if (IS_ABSOLUTE_PATH (entry->filename) && ld_sysroot && ! entry->sysrooted)
+ 	{
+ 	  char *name = concat (ld_sysroot, entry->filename,
+ 			       (const char *) NULL);
+ 	  if (ldfile_try_open_bfd (name, entry))
+ 	    {
+ 	      entry->filename = name;
++	      entry->sysrooted = TRUE;
+ 	      return TRUE;
+ 	    }
+ 	  free (name);
+ 	}
+-      else if (ldfile_try_open_bfd (entry->filename, entry))
++
++      if (ldfile_try_open_bfd (entry->filename, entry))
+ 	{
+ 	  entry->sysrooted = IS_ABSOLUTE_PATH (entry->filename)
+ 	    && is_sysrooted_pathname (entry->filename, TRUE);
--- binutils-2.22.orig/debian/patches/129_ld_mulitarch_dirs.patch
+++ binutils-2.22/debian/patches/129_ld_mulitarch_dirs.patch
@@ -0,0 +1,72 @@
+# DP: Add multiarch directories to linker search path.
+
+Index: binutils-2.21.0.20110322/ld/genscripts.sh
+===================================================================
+--- binutils-2.21.0.20110322.orig/ld/genscripts.sh	2011-03-27 18:45:12.283057003 +0000
++++ binutils-2.21.0.20110322/ld/genscripts.sh	2011-03-27 18:51:20.623057182 +0000
+@@ -240,6 +240,65 @@
+ fi
+ 
+ LIB_SEARCH_DIRS=`echo ${LIB_PATH} | sed -e 's/:/ /g' -e 's/\([^ ][^ ]*\)/SEARCH_DIR(\\"\1\\");/g'`
++if [ -n "$DEB_HOST_MULTIARCH" ]; then
++    temp_dirs=' '
++    for dir in `echo ${LIB_PATH} | sed -e 's/:/ /g'`; do
++	case "$dir" in
++	    ${tool_lib}*|*/${target_alias}/*)
++	        ;;
++	    */lib)
++		if [ -n "$DEB_HOST_MULTIARCH32" ]; then
++		    case $EMULATION_NAME in
++			elf_i386|elf32*)
++			    temp_dirs="${temp_dirs}${dir}/$DEB_HOST_MULTIARCH32 ";;
++			*)
++			    temp_dirs="${temp_dirs}${dir}/$DEB_HOST_MULTIARCH "
++		    esac
++		elif [ -n "$DEB_HOST_MULTIARCH64" ]; then
++		    case $EMULATION_NAME in
++			elf*_64|elf64*)
++			    temp_dirs="${temp_dirs}${dir}/$DEB_HOST_MULTIARCH64 ";;
++			*)
++			    temp_dirs="${temp_dirs}${dir}/$DEB_HOST_MULTIARCH "
++		    esac
++		else
++		    temp_dirs="${temp_dirs}${dir}/$DEB_HOST_MULTIARCH "
++		fi
++		;;
++	    */lib32)
++	        if [ -n "$DEB_HOST_MULTIARCH32" ]; then
++		    dir2=$(echo $dir | sed "s,32$,,")
++		    temp_dirs="${temp_dirs}${dir2}/$DEB_HOST_MULTIARCH32 "
++		fi
++		;;
++	    */lib64)
++	        case "${target}" in
++		    powerpc64-*-*|s390x-*-*|sparc64-*-*|x86_64-*-linux*)
++			#dir=$(echo $dir | sed "s,64$,,")
++			dir2=$(echo $dir | sed "s,64$,,")
++			temp_dirs="${temp_dirs}${dir2}/$DEB_HOST_MULTIARCH "
++			;;
++		    *)
++			if [ -n "$DEB_HOST_MULTIARCH64" ]; then
++			    dir2=$(echo $dir | sed "s,64$,,")
++			    temp_dirs="${temp_dirs}${dir2}/$DEB_HOST_MULTIARCH64 "
++			fi
++			;;
++		esac
++	        ;;
++	    *)
++		;;
++	esac
++	temp_dirs="${temp_dirs}${dir} "
++    done
++    LIB_SEARCH_DIRS=
++    for dir in $temp_dirs; do
++	if echo "$LIB_SEARCH_DIRS" | fgrep -q "\"$dir\""; then
++	    continue
++	fi
++	LIB_SEARCH_DIRS="${LIB_SEARCH_DIRS}SEARCH_DIR(\"$dir\"); "
++    done
++fi
+ 
+ # We need it for testsuite.
+ set $EMULATION_LIBPATH
--- binutils-2.22.orig/debian/patches/001_ld_makefile_patch.patch
+++ binutils-2.22/debian/patches/001_ld_makefile_patch.patch
@@ -0,0 +1,27 @@
+Author: 
+Description: Description: correct where ld scripts are installed
+Author: Chris Chimelis <chris@debian.org>
+Upstream status: N/A
+Date: ??
+--- a/ld/Makefile.am
++++ b/ld/Makefile.am
+@@ -24,7 +24,7 @@
+ # We put the scripts in the directory $(scriptdir)/ldscripts.
+ # We can't put the scripts in $(datadir) because the SEARCH_DIR
+ # directives need to be different for native and cross linkers.
+-scriptdir = $(tooldir)/lib
++scriptdir = $(libdir)
+ 
+ EMUL = @EMUL@
+ EMULATION_OFILES = @EMULATION_OFILES@
+--- a/ld/Makefile.in
++++ b/ld/Makefile.in
+@@ -337,7 +337,7 @@
+ # We put the scripts in the directory $(scriptdir)/ldscripts.
+ # We can't put the scripts in $(datadir) because the SEARCH_DIR
+ # directives need to be different for native and cross linkers.
+-scriptdir = $(tooldir)/lib
++scriptdir = $(libdir)
+ BASEDIR = $(srcdir)/..
+ BFDDIR = $(BASEDIR)/bfd
+ INCDIR = $(BASEDIR)/include
--- binutils-2.22.orig/debian/patches/161_gold_dummy_zoption.diff
+++ binutils-2.22/debian/patches/161_gold_dummy_zoption.diff
@@ -0,0 +1,25 @@
+# DP: let gold accept a dummy -z buildd-<random-string> option.
+
+--- a/gold/options.h
++++ b/gold/options.h
+@@ -1162,6 +1162,9 @@
+   DEFINE_bool_alias(textoff, text, options::DASH_Z, '\0',
+ 		    N_("Permit relocations in read-only segments (default)"),
+ 		    NULL, true);
++  DEFINE_bool(buildd, options::DASH_Z, '\0', false,
++	      N_("Dummy z option"),
++	      NULL);
+ 
+  public:
+   typedef options::Dir_list Dir_list;
+--- a/gold/options.cc
++++ b/gold/options.cc
+@@ -859,6 +859,8 @@
+     {
+       int dummy_i = 0;
+       const char* dash_z_arg = *arg;
++      if (strncmp(dash_z_arg, "buildd", strlen("buildd")) == 0)
++	  *arg = "buildd";
+       retval = parse_long_option(1, arg, true, arg, &dummy_i);
+       if (retval == NULL)
+         usage(_("unknown -z option"), dash_z_arg);
--- binutils-2.22.orig/debian/patches/163_multiarch_search_path.patch
+++ binutils-2.22/debian/patches/163_multiarch_search_path.patch
@@ -0,0 +1,79 @@
+# DP: multiarch search paths
+
+--- binutils-2.21.53.20110810.orig/gold/Makefile.am
++++ binutils-2.21.53.20110810/gold/Makefile.am
+@@ -15,7 +15,7 @@
+ 	-I$(srcdir) -I$(srcdir)/../include -I$(srcdir)/../elfcpp \
+ 	-DLOCALEDIR="\"$(datadir)/locale\"" \
+ 	-DBINDIR="\"$(bindir)\"" -DTOOLBINDIR="\"$(tooldir)/bin\"" \
+-	@INCINTL@
++	@INCINTL@ @MULTIARCH_DIRNAME@
+ 
+ LIBIBERTY = ../libiberty/libiberty.a
+ 
+--- binutils-2.21.53.20110810.orig/gold/configure
++++ binutils-2.21.53.20110810/gold/configure
+@@ -594,6 +594,7 @@
+ MAINT
+ MAINTAINER_MODE_FALSE
+ MAINTAINER_MODE_TRUE
++MULTIARCH_DIRNAME
+ CXXCPP
+ HAVE_ZLIB_FALSE
+ HAVE_ZLIB_TRUE
+@@ -7133,6 +7134,14 @@
+ ac_compiler_gnu=$ac_cv_c_compiler_gnu
+ 
+ 
++if test x$target = x$host; then
++  multiarch=`$CC -print-multiarch 2>/dev/null`
++  if test -n "$multiarch"; then
++    MULTIARCH_DIRNAME='-DMULTIARCH_DIRNAME=\"'$multiarch'\"'
++  fi
++fi
++
++
+ 
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable maintainer-specific portions of Makefiles" >&5
+ $as_echo_n "checking whether to enable maintainer-specific portions of Makefiles... " >&6; }
+--- binutils-2.21.53.20110810.orig/gold/configure.ac
++++ binutils-2.21.53.20110810/gold/configure.ac
+@@ -475,6 +475,14 @@
+ 
+ AC_LANG_POP(C++)
+ 
++if test x$target = x$host; then
++  multiarch=`$CC -print-multiarch 2>/dev/null`
++  if test -n "$multiarch"; then
++    MULTIARCH_DIRNAME='-DMULTIARCH_DIRNAME=\"'$multiarch'\"'
++  fi
++fi
++AC_SUBST(MULTIARCH_DIRNAME)
++
+ AM_MAINTAINER_MODE
+ 
+ AC_OUTPUT(Makefile testsuite/Makefile po/Makefile.in:po/Make-in)
+--- binutils-2.21.53.20110810.orig/gold/options.cc
++++ binutils-2.21.53.20110810/gold/options.cc
+@@ -1145,6 +1147,10 @@
+     {
+       // Even if they don't specify it, we add -L /lib and -L /usr/lib.
+       // FIXME: We should only do this when configured in native mode.
++#ifdef MULTIARCH_DIRNAME
++      this->add_to_library_path_with_sysroot("/lib/" MULTIARCH_DIRNAME);
++      this->add_to_library_path_with_sysroot("/usr/lib/" MULTIARCH_DIRNAME);
++#endif
+       this->add_to_library_path_with_sysroot("/lib");
+       this->add_to_library_path_with_sysroot("/usr/lib");
+     }
+--- binutils-2.21.53.20110810.orig/gold/Makefile.in
++++ binutils-2.21.53.20110810/gold/Makefile.in
+@@ -364,7 +364,7 @@
+ 	-I$(srcdir) -I$(srcdir)/../include -I$(srcdir)/../elfcpp \
+ 	-DLOCALEDIR="\"$(datadir)/locale\"" \
+ 	-DBINDIR="\"$(bindir)\"" -DTOOLBINDIR="\"$(tooldir)/bin\"" \
+-	@INCINTL@
++	@INCINTL@ @MULTIARCH_DIRNAME@
+ 
+ LIBIBERTY = ../libiberty/libiberty.a
+ @PLUGINS_TRUE@LIBDL = -ldl
--- binutils-2.22.orig/debian/patches/pr13534-03.diff
+++ binutils-2.22/debian/patches/pr13534-03.diff
@@ -0,0 +1,29 @@
+commit 23a979dc1779ac63cd799bfa2f6c2aed1f1bff66
+Author: Francois Gouget <fgouget@codeweavers.com>
+Date:   Tue Dec 20 18:41:35 2011 +0100
+
+    bfd: Fix parsing the size of archive elements larger than 2GB.
+
+diff --git a/bfd/archive.c b/bfd/archive.c
+index 05aba6c..01acf98 100644
+--- a/bfd/archive.c
++++ b/bfd/archive.c
+@@ -446,7 +446,7 @@ _bfd_generic_read_ar_hdr_mag (bfd *abfd, const char *mag)
+ {
+   struct ar_hdr hdr;
+   char *hdrp = (char *) &hdr;
+-  size_t parsed_size;
++  bfd_size_type parsed_size;
+   struct areltdata *ared;
+   char *filename = NULL;
+   bfd_size_type namelen = 0;
+@@ -470,8 +470,7 @@ _bfd_generic_read_ar_hdr_mag (bfd *abfd, const char *mag)
+     }
+ 
+   errno = 0;
+-  parsed_size = strtol (hdr.ar_size, NULL, 10);
+-  if (errno != 0)
++  if (sscanf(hdr.ar_size, "%" BFD_VMA_FMT "u", &parsed_size) != 1)
+     {
+       bfd_set_error (bfd_error_malformed_archive);
+       return NULL;
--- binutils-2.22.orig/debian/patches/branch-updates.diff
+++ binutils-2.22/debian/patches/branch-updates.diff
@@ -0,0 +1,6396 @@
+# DP: updates from the binutils-2.22 branch
+
+# git diff 10968a312d8c536be9993ed06bc88fbe0860d95d 20328dadc04ae46c8ca4b334c8d1d4c9aec9c5b7
+# exclude bfd/{configure{,.ac},Makefile.{am,in}}
+
+diff --git a/bfd/ChangeLog b/bfd/ChangeLog
+index 65db027..a568f1b 100644
+--- a/bfd/ChangeLog
++++ b/bfd/ChangeLog
+@@ -1,3 +1,206 @@
++2012-05-11  Ralf Corsépius  <ralf.corsepius@rtems.org>
++
++	Backport from mainline:
++
++	2012-04-24  Alan Modra  <amodra@gmail.com>
++	PR ld/13991
++	* bfd/elf-bfd.h (_bfd_elf_link_just_syms): Define as
++	_bfd_generic_link_just_syms.
++	* bfd/elflink.c (_bfd_elf_link_just_syms): Delete.
++	* bfd/linker.c (_bfd_generic_link_just_syms): Set sec_info_type.
++
++	* bfd/bfd-in.h (discarded_section): Renamed from elf_discarded_section.
++	* bfd/section.c (SEC_INFO_TYPE_NONE, SEC_INFO_TYPE_STABS,
++	SEC_INFO_TYPE_MERGE, SEC_INFO_TYPE_EH_FRAME,
++	SEC_INFO_TYPE_JUST_SYMS): Renamed from corresponding ELF_INFO_TYPE.
++	* bfd/elf-eh-frame.c, * bfd/elf-m10200.c, * bfd/elf-m10300.c,
++	* bfd/elf.c, * bfd/elf32-arm.c, * bfd/elf32-avr.c, * bfd/elf32-bfin.c,
++	* bfd/elf32-cr16.c, * bfd/elf32-cr16c.c, * bfd/elf32-cris.c,
++	* bfd/elf32-crx.c, * bfd/elf32-d10v.c, * bfd/elf32-epiphany.c,
++	* bfd/elf32-fr30.c, * bfd/elf32-frv.c, * bfd/elf32-h8300.c,
++	* bfd/elf32-hppa.c, * bfd/elf32-i370.c, * bfd/elf32-i386.c,
++	* bfd/elf32-i860.c, * bfd/elf32-ip2k.c, * bfd/elf32-iq2000.c,
++	* bfd/elf32-lm32.c, * bfd/elf32-m32c.c, * bfd/elf32-m32r.c,
++	* bfd/elf32-m68hc1x.c, * bfd/elf32-m68k.c, * bfd/elf32-mcore.c,
++	* bfd/elf32-mep.c, * bfd/elf32-moxie.c, * bfd/elf32-msp430.c,
++	* bfd/elf32-mt.c, * bfd/elf32-openrisc.c, * bfd/elf32-ppc.c,
++	* bfd/elf32-rl78.c, * bfd/elf32-rx.c, * bfd/elf32-s390.c,
++	* bfd/elf32-score.c, * bfd/elf32-score7.c, * bfd/elf32-sh.c,
++	* bfd/elf32-spu.c, * bfd/elf32-tic6x.c, * bfd/elf32-tilepro.c,
++	* bfd/elf32-v850.c, * bfd/elf32-vax.c, * bfd/elf32-xc16x.c,
++	* bfd/elf32-xstormy16.c, * bfd/elf32-xtensa.c, * bfd/elf64-alpha.c,
++	* bfd/elf64-hppa.c, * bfd/elf64-ia64-vms.c, * bfd/elf64-mmix.c,
++	* bfd/elf64-ppc.c, * bfd/elf64-s390.c, * bfd/elf64-sh64.c,
++	* bfd/elf64-x86-64.c, * bfd/elflink.c, * bfd/elfnn-ia64.c,
++	* bfd/elfxx-mips.c, * bfd/elfxx-sparc.c, * bfd/elfxx-tilegx.c,
++	* bfd/reloc.c: Update all references.
++	* bfd/bfd-in2.h: Regenerate.
++
++2012-04-20  Nick Clifton  <nickc@redhat.com>
++
++	Import this patch from the mainline:
++	2012-03-21  Eliot Dresselhaus  <eliot@sonic.net>
++
++	* elf32-tic6x.c (elf32_tic6x_merge_private_bfd_data): Return TRUE
++	for non-C6X objects.
++
++2012-02-01  Nick Clifton  <nickc@redhat.com>
++
++	Import this patch from the mainline:
++	2012-01-05  Nick Clifton  <nickc@redhat.com>
++
++	PR ld/12161
++	* elf32-avr.c (elf32_avr_relax_delete_bytes): Read in relocs if
++	necessary.
++
++2012-01-27  John David Anglin  <dave.anglin@nrc-cnrc.gc.ca>
++
++	Backport from mainline:
++	2011-12-11  John Davis Anglin  <dave.anglin@nrc-cnrc.gc.ca>
++
++	PR binutils/13476
++	* elf32-hppa.c (final_link_relocate): Convert R_PARISC_TLS_GD21L,
++	R_PARISC_TLS_LDM21L and R_PARISC_TLS_IE21L relocations to
++	R_PARISC_DPREL21L when not doing a shared link.  Likewise convert
++	R_PARISC_TLS_GD14R, R_PARISC_TLS_LDM14R and R_PARISC_TLS_IE14R to
++	R_PARISC_DPREL14R.  Handle R_PARISC_TLS_GD21L, R_PARISC_TLS_LDM21L
++	and R_PARISC_TLS_IE21L with R_PARISC_DLTIND21L.
++
++	Backport from mainline:
++	2011-11-06  John David Anglin  <dave.anglin@nrc-cnrc.gc.ca>
++
++	PR ld/13387
++	* elf32-hppa.c (elf32_hppa_hide_symbol): Make STT_GNU_IFUNC symbol
++	go through PLT.  Reset plt field with init_plt_offset.
++	(elf32_hppa_adjust_dynamic_symbol): Ensure that a PLT slot is
++	allocated for symbols referenced by a plabel.
++
++2012-01-10  H.J. Lu  <hongjiu.lu@intel.com>
++
++	Backport from mainline:
++	PR ld/13581
++	* elf64-x86-64.c (elf_x86_64_relocate_section): Remove ABI_64_P
++	check on R_X86_64_PCXX.
++
++2011-12-19  Chung-Lin Tang  <cltang@codesourcery.com>
++
++	Backport from mainline:
++
++	2011-12-19  Chung-Lin Tang  <cltang@codesourcery.com>
++
++	* reloc.c (BFD_RELOC_MIPS16_TLS_GD,BFD_RELOC_MIPS16_TLS_LDM,
++	BFD_RELOC_MIPS16_TLS_DTPREL_HI16,BFD_RELOC_MIPS16_TLS_DTPREL_LO16,
++	BFD_RELOC_MIPS16_TLS_GOTTPREL,BFD_RELOC_MIPS16_TLS_TPREL_HI16,
++	BFD_RELOC_MIPS16_TLS_TPREL_LO16): New relocations for MIPS16 TLS.
++	* bfd-in2.h (bfd_reloc_code_real): Regenerate.
++	* libbfd.h (bfd_reloc_code_real_names): Regenerate.
++	* elf32-mips.c (elf_mips16_howto_table_rel): Add R_MIPS16_TLS_*
++	entries.
++	(mips16_reloc_map): Add BFD_RELOC_MIPS16_TLS_* to R_MIPS16_TLS_*
++	mappings.
++	* elfn32-mips.c (elf_mips16_howto_table_rel,
++	elf_mips16_howto_table_rela): Add R_MIPS16_TLS_* entries.
++	(mips16_reloc_map): Add BFD_RELOC_MIPS16_TLS_* to R_MIPS16_TLS_*
++	mappings.
++	* elf64-mips.c (mips16_elf64_howto_table_rel,
++	mips16_elf64_howto_table_rela): Add R_MIPS16_TLS_* entries.
++	(mips16_reloc_map): Add BFD_RELOC_MIPS16_TLS_* to R_MIPS16_TLS_*
++	mappings.
++	* elfxx-mips.c (TLS_RELOC_P,mips16_reloc_p,
++	_bfd_mips_elf_check_relocs): Add cases for R_MIPS16_TLS_* relocations.
++	(tls_gd_reloc_p): Add R_MIPS16_TLS_GD case.
++	(tls_ldm_reloc_p): Add R_MIPS16_TLS_LDM case.
++	(tls_gottprel_reloc_p): Add R_MIPS16_TLS_GOTTPREL case.
++	(mips_elf_calculate_relocation): Add cases for R_MIPS16_TLS_*,
++	R_MIPS_TLS_DTPREL32/64, and R_MIPS_TLS_TPREL32/64 relocations.
++
++2011-12-19  Chung-Lin Tang  <cltang@codesourcery.com>
++
++	Backport from mainline:
++
++	2011-12-19  Chung-Lin Tang  <cltang@codesourcery.com>
++		    Catherine Moore  <clm@codesourcery.com>
++		    Sandra Loosemore  <sandra@codesourcery.com>
++		    Richard Sandiford  <rdsandiford@googlemail.com>
++
++	* elfxx-mips.c (mips_elf_local_pic_function_p): Return true when
++	H is a MIPS16 function with a kept 32-bit stub. Update comments.
++	(mips_elf_get_la25_target): New function.
++	(mips_elf_add_la25_intro): Change to use mips_elf_get_la25_target().
++	(mips_elf_add_la25_stub): Move compute of use_trampoline_p down,
++	change to use mips_elf_get_la25_target().
++	(mips_elf_relocation_needs_la25_stub): Add target_is_16_bit_code_p
++	parameter, add switch case for R_MIPS16_26.
++	(mips_elf_calculate_relocation): Redirect relocation to point to the
++	LA25 stub if it exists, instead of the MIPS16 stub. Update arguments
++	of call to mips_elf_relocation_needs_la25_stub(), don't use la25 stub
++	for mips16->mips16 calls.
++	(_bfd_mips_elf_check_relocs): Update arguments of call to
++	mips_elf_relocation_needs_la25_stub().
++	(mips_elf_create_la25_stub): Change to use mips_elf_get_la25_target().
++
++2011-12-19  Chung-Lin Tang  <cltang@codesourcery.com>
++
++	Backport from mainline:
++
++	2011-12-13  Chung-Lin Tang  <cltang@codesourcery.com>
++
++	* elfxx-mips.c (mips_elf_calculate_relocation): Correct
++	R_MIPS16_HI16/R_MIPS16_LO16 handling of two cleared lower bits,
++	update comments.
++
++2011-12-10  David Daney  <david.daney@cavium.com>
++
++	Backport from mainline:
++
++	2011-12-10  David Daney  <david.daney@cavium.com>
++
++	* elfxx-mips.c (mips_elf_link_hash_table.rld_value): Remove.
++	(mips_elf_link_hash_table.rld_symbol): New field;
++	(MIPS_ELF_RLD_MAP_SIZE): New macro.
++	(_bfd_mips_elf_add_symbol_hook): Remember __rld_obj_head symbol
++	in rld_symbol.
++	(_bfd_mips_elf_create_dynamic_sections): Remember __rld_map symbol
++	in rld_symbol.
++	(_bfd_mips_elf_size_dynamic_sections): Set correct size for .rld_map.
++	(_bfd_mips_elf_finish_dynamic_symbol): Remove .rld_map handling.
++	(_bfd_mips_elf_finish_dynamic_sections): Use rld_symbol to
++	calculate DT_MIPS_RLD_MAP value.
++	(_bfd_mips_elf_link_hash_table_create): Initialize rld_symbol,
++	quit initializing rld_value.
++
++2011-12-03  Alan Modra  <amodra@gmail.com>
++
++	PR ld/13468
++	* elflink.c (bfd_elf_final_link): Don't segfault when checking
++	for DT_TEXTREL and .dynamic does not exist.
++
++2011-12-03  Alan Modra  <amodra@gmail.com>
++
++	PR ld/13470
++	* elf32-ppc.c (ppc_elf_copy_indirect_symbol): Revert substantive
++	change in 2011-07-01 commit.  Comment.
++	* elf64-ppc.c (ppc64_elf_copy_indirect_symbol): Likewise.
++
++2011-12-01  Mikael Pettersson  <mikpe@it.uu.se>
++
++	Apply mainline patches
++	* elf32-m68k.c (elf_m68k_check_relocs) <R_68K_8, R68K_16, R_68K_32>: For
++	non-SEC_ALLOC sections break before GOT and PLT accounting.
++
++2011-12-01  Hans-Peter Nilsson  <hp@axis.com>
++
++	Apply mainline patches
++	* elf32-cris.c (cris_elf_check_relocs) <plt accounting for
++	R_CRIS_8, R_CRIS_16, and R_CRIS_32>: Move early break for
++	non-SEC_ALLOC sections before GOT and PLT accounting.
++
++2011-11-21  Tristan Gingold  <gingold@adacore.com>
++
++	* configure.in: Bump version to 2.22.0
++	* Makefile.am (RELEASE): Unset.
++	* configure, Makefile.in: Regenerate.
++
+ 2011-11-21  Tristan Gingold  <gingold@adacore.com>
+ 
+ 	* configure.in: Bump version to 2.22
+diff --git a/bfd/bfd-in.h b/bfd/bfd-in.h
+index a477b49..7c5298a 100644
+--- a/bfd/bfd-in.h
++++ b/bfd/bfd-in.h
+@@ -295,11 +295,11 @@ typedef struct bfd_section *sec_ptr;
+     ? (sec)->rawsize : (sec)->size) / bfd_octets_per_byte (bfd))
+ 
+ /* Return TRUE if input section SEC has been discarded.  */
+-#define elf_discarded_section(sec)				\
++#define discarded_section(sec)					\
+   (!bfd_is_abs_section (sec)					\
+    && bfd_is_abs_section ((sec)->output_section)		\
+-   && (sec)->sec_info_type != ELF_INFO_TYPE_MERGE		\
+-   && (sec)->sec_info_type != ELF_INFO_TYPE_JUST_SYMS)
++   && (sec)->sec_info_type != SEC_INFO_TYPE_MERGE		\
++   && (sec)->sec_info_type != SEC_INFO_TYPE_JUST_SYMS)
+ 
+ /* Forward define.  */
+ struct stat;
+diff --git a/bfd/bfd-in2.h b/bfd/bfd-in2.h
+index 22fcdf6..34f9628 100644
+--- a/bfd/bfd-in2.h
++++ b/bfd/bfd-in2.h
+@@ -302,11 +302,11 @@ typedef struct bfd_section *sec_ptr;
+     ? (sec)->rawsize : (sec)->size) / bfd_octets_per_byte (bfd))
+ 
+ /* Return TRUE if input section SEC has been discarded.  */
+-#define elf_discarded_section(sec)				\
++#define discarded_section(sec)					\
+   (!bfd_is_abs_section (sec)					\
+    && bfd_is_abs_section ((sec)->output_section)		\
+-   && (sec)->sec_info_type != ELF_INFO_TYPE_MERGE		\
+-   && (sec)->sec_info_type != ELF_INFO_TYPE_JUST_SYMS)
++   && (sec)->sec_info_type != SEC_INFO_TYPE_MERGE		\
++   && (sec)->sec_info_type != SEC_INFO_TYPE_JUST_SYMS)
+ 
+ /* Forward define.  */
+ struct stat;
+@@ -1384,11 +1384,11 @@ typedef struct bfd_section
+ 
+   /* Type of sec_info information.  */
+   unsigned int sec_info_type:3;
+-#define ELF_INFO_TYPE_NONE      0
+-#define ELF_INFO_TYPE_STABS     1
+-#define ELF_INFO_TYPE_MERGE     2
+-#define ELF_INFO_TYPE_EH_FRAME  3
+-#define ELF_INFO_TYPE_JUST_SYMS 4
++#define SEC_INFO_TYPE_NONE      0
++#define SEC_INFO_TYPE_STABS     1
++#define SEC_INFO_TYPE_MERGE     2
++#define SEC_INFO_TYPE_EH_FRAME  3
++#define SEC_INFO_TYPE_JUST_SYMS 4
+ 
+   /* Nonzero if this section uses RELA relocations, rather than REL.  */
+   unsigned int use_rela_p:1;
+@@ -2780,6 +2780,15 @@ to compensate for the borrow when the low bits are added.  */
+ /* MIPS16 low 16 bits.  */
+   BFD_RELOC_MIPS16_LO16,
+ 
++/* MIPS16 TLS relocations  */
++  BFD_RELOC_MIPS16_TLS_GD,
++  BFD_RELOC_MIPS16_TLS_LDM,
++  BFD_RELOC_MIPS16_TLS_DTPREL_HI16,
++  BFD_RELOC_MIPS16_TLS_DTPREL_LO16,
++  BFD_RELOC_MIPS16_TLS_GOTTPREL,
++  BFD_RELOC_MIPS16_TLS_TPREL_HI16,
++  BFD_RELOC_MIPS16_TLS_TPREL_LO16,
++
+ /* Relocation against a MIPS literal section.  */
+   BFD_RELOC_MIPS_LITERAL,
+   BFD_RELOC_MICROMIPS_LITERAL,
+diff --git a/bfd/elf-bfd.h b/bfd/elf-bfd.h
+index d6e2ab2..2cfe2ba 100644
+--- a/bfd/elf-bfd.h
++++ b/bfd/elf-bfd.h
+@@ -1807,8 +1807,7 @@ extern void bfd_elf_set_group_contents
+   (bfd *, asection *, void *);
+ extern asection *_bfd_elf_check_kept_section
+   (asection *, struct bfd_link_info *);
+-extern void _bfd_elf_link_just_syms
+-  (asection *, struct bfd_link_info *);
++#define _bfd_elf_link_just_syms _bfd_generic_link_just_syms
+ extern void _bfd_elf_copy_link_hash_symbol_type
+   (bfd *, struct bfd_link_hash_entry *, struct bfd_link_hash_entry *);
+ extern bfd_boolean _bfd_elf_size_group_sections
+diff --git a/bfd/elf-eh-frame.c b/bfd/elf-eh-frame.c
+index 54142b2..7b5cf7a 100644
+--- a/bfd/elf-eh-frame.c
++++ b/bfd/elf-eh-frame.c
+@@ -491,7 +491,7 @@ _bfd_elf_parse_eh_frame (bfd *abfd, struct bfd_link_info *info,
+     return;
+ 
+   if (sec->size == 0
+-      || sec->sec_info_type != ELF_INFO_TYPE_NONE)
++      || sec->sec_info_type != SEC_INFO_TYPE_NONE)
+     {
+       /* This file does not contain .eh_frame information.  */
+       return;
+@@ -904,7 +904,7 @@ _bfd_elf_parse_eh_frame (bfd *abfd, struct bfd_link_info *info,
+   BFD_ASSERT (cie_count == num_cies);
+ 
+   elf_section_data (sec)->sec_info = sec_info;
+-  sec->sec_info_type = ELF_INFO_TYPE_EH_FRAME;
++  sec->sec_info_type = SEC_INFO_TYPE_EH_FRAME;
+   if (hdr_info->merge_cies)
+     {
+       sec_info->cies = local_cies;
+@@ -1137,7 +1137,7 @@ _bfd_elf_discard_section_eh_frame
+   struct eh_frame_hdr_info *hdr_info;
+   unsigned int ptr_size, offset;
+ 
+-  if (sec->sec_info_type != ELF_INFO_TYPE_EH_FRAME)
++  if (sec->sec_info_type != SEC_INFO_TYPE_EH_FRAME)
+     return FALSE;
+ 
+   sec_info = (struct eh_frame_sec_info *) elf_section_data (sec)->sec_info;
+@@ -1307,7 +1307,7 @@ _bfd_elf_eh_frame_section_offset (bfd *output_bfd ATTRIBUTE_UNUSED,
+   struct eh_frame_sec_info *sec_info;
+   unsigned int lo, hi, mid;
+ 
+-  if (sec->sec_info_type != ELF_INFO_TYPE_EH_FRAME)
++  if (sec->sec_info_type != SEC_INFO_TYPE_EH_FRAME)
+     return offset;
+   sec_info = (struct eh_frame_sec_info *) elf_section_data (sec)->sec_info;
+ 
+@@ -1395,7 +1395,7 @@ _bfd_elf_write_section_eh_frame (bfd *abfd,
+   unsigned int ptr_size;
+   struct eh_cie_fde *ent;
+ 
+-  if (sec->sec_info_type != ELF_INFO_TYPE_EH_FRAME)
++  if (sec->sec_info_type != SEC_INFO_TYPE_EH_FRAME)
+     /* FIXME: octets_per_byte.  */
+     return bfd_set_section_contents (abfd, sec->output_section, contents,
+ 				     sec->output_offset, sec->size);
+diff --git a/bfd/elf-m10200.c b/bfd/elf-m10200.c
+index a38f4db..d58c75c 100644
+--- a/bfd/elf-m10200.c
++++ b/bfd/elf-m10200.c
+@@ -401,7 +401,7 @@ mn10200_elf_relocate_section (output_bfd, info, input_bfd, input_section,
+ 				   unresolved_reloc, warned);
+ 	}
+ 
+-      if (sec != NULL && elf_discarded_section (sec))
++      if (sec != NULL && discarded_section (sec))
+ 	RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section,
+ 					 rel, relend, howto, contents);
+ 
+diff --git a/bfd/elf-m10300.c b/bfd/elf-m10300.c
+index 8276a2f..876ff4a 100644
+--- a/bfd/elf-m10300.c
++++ b/bfd/elf-m10300.c
+@@ -1509,7 +1509,7 @@ mn10300_elf_relocate_section (bfd *output_bfd,
+ 	       h->root.root.root.string);
+ 	}
+ 
+-      if (sec != NULL && elf_discarded_section (sec))
++      if (sec != NULL && discarded_section (sec))
+ 	RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section,
+ 					 rel, relend, howto, contents);
+ 
+@@ -2763,7 +2763,7 @@ mn10300_elf_relax_section (bfd *abfd,
+ 						      isym->st_name);
+ 
+ 	  if ((sym_sec->flags & SEC_MERGE)
+-	      && sym_sec->sec_info_type == ELF_INFO_TYPE_MERGE)
++	      && sym_sec->sec_info_type == SEC_INFO_TYPE_MERGE)
+ 	    {
+ 	      symval = isym->st_value;
+ 
+diff --git a/bfd/elf.c b/bfd/elf.c
+index aa40c33..9e23bee 100644
+--- a/bfd/elf.c
++++ b/bfd/elf.c
+@@ -3071,7 +3071,7 @@ assign_section_numbers (bfd *abfd, struct bfd_link_info *link_info)
+ 	      if (link_info != NULL)
+ 		{
+ 		  /* Check discarded linkonce section.  */
+-		  if (elf_discarded_section (s))
++		  if (discarded_section (s))
+ 		    {
+ 		      asection *kept;
+ 		      (*_bfd_error_handler)
+@@ -9390,7 +9390,7 @@ _bfd_elf_rela_local_sym (bfd *abfd,
+ 		+ sym->st_value);
+   if ((sec->flags & SEC_MERGE)
+       && ELF_ST_TYPE (sym->st_info) == STT_SECTION
+-      && sec->sec_info_type == ELF_INFO_TYPE_MERGE)
++      && sec->sec_info_type == SEC_INFO_TYPE_MERGE)
+     {
+       rel->r_addend =
+ 	_bfd_merged_section_offset (abfd, psec,
+@@ -9421,7 +9421,7 @@ _bfd_elf_rel_local_sym (bfd *abfd,
+ {
+   asection *sec = *psec;
+ 
+-  if (sec->sec_info_type != ELF_INFO_TYPE_MERGE)
++  if (sec->sec_info_type != SEC_INFO_TYPE_MERGE)
+     return sym->st_value + addend;
+ 
+   return _bfd_merged_section_offset (abfd, psec,
+@@ -9437,10 +9437,10 @@ _bfd_elf_section_offset (bfd *abfd,
+ {
+   switch (sec->sec_info_type)
+     {
+-    case ELF_INFO_TYPE_STABS:
++    case SEC_INFO_TYPE_STABS:
+       return _bfd_stab_section_offset (sec, elf_section_data (sec)->sec_info,
+ 				       offset);
+-    case ELF_INFO_TYPE_EH_FRAME:
++    case SEC_INFO_TYPE_EH_FRAME:
+       return _bfd_elf_eh_frame_section_offset (abfd, info, sec, offset);
+     default:
+       if ((sec->flags & SEC_ELF_REVERSE_COPY) != 0)
+diff --git a/bfd/elf32-arm.c b/bfd/elf32-arm.c
+index 1f6c1a0..9355f66 100644
+--- a/bfd/elf32-arm.c
++++ b/bfd/elf32-arm.c
+@@ -4485,7 +4485,7 @@ cortex_a8_erratum_scan (bfd *input_bfd,
+       if (elf_section_type (section) != SHT_PROGBITS
+           || (elf_section_flags (section) & SHF_EXECINSTR) == 0
+           || (section->flags & SEC_EXCLUDE) != 0
+-          || (section->sec_info_type == ELF_INFO_TYPE_JUST_SYMS)
++          || (section->sec_info_type == SEC_INFO_TYPE_JUST_SYMS)
+           || (section->output_section == bfd_abs_section_ptr))
+         continue;
+ 
+@@ -6556,7 +6556,7 @@ bfd_elf32_arm_vfp11_erratum_scan (bfd *abfd, struct bfd_link_info *link_info)
+       if (elf_section_type (sec) != SHT_PROGBITS
+           || (elf_section_flags (sec) & SHF_EXECINSTR) == 0
+           || (sec->flags & SEC_EXCLUDE) != 0
+-	  || sec->sec_info_type == ELF_INFO_TYPE_JUST_SYMS
++	  || sec->sec_info_type == SEC_INFO_TYPE_JUST_SYMS
+ 	  || sec->output_section == bfd_abs_section_ptr
+           || strcmp (sec->name, VFP11_ERRATUM_VENEER_SECTION_NAME) == 0)
+         continue;
+@@ -10305,7 +10305,7 @@ elf32_arm_relocate_section (bfd *                  output_bfd,
+ 	  sym_type = h->type;
+ 	}
+ 
+-      if (sec != NULL && elf_discarded_section (sec))
++      if (sec != NULL && discarded_section (sec))
+ 	RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section,
+ 					 rel, relend, howto, contents);
+ 
+diff --git a/bfd/elf32-avr.c b/bfd/elf32-avr.c
+index 6d20aef..97dc268 100644
+--- a/bfd/elf32-avr.c
++++ b/bfd/elf32-avr.c
+@@ -1189,7 +1189,7 @@ elf32_avr_relocate_section (bfd *output_bfd ATTRIBUTE_UNUSED,
+ 	  name = h->root.root.string;
+ 	}
+ 
+-      if (sec != NULL && elf_discarded_section (sec))
++      if (sec != NULL && discarded_section (sec))
+ 	RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section,
+ 					 rel, relend, howto, contents);
+ 
+@@ -1503,11 +1503,18 @@ elf32_avr_relax_delete_bytes (bfd *abfd,
+        bfd_vma symval;
+        bfd_vma shrinked_insn_address;
+ 
++       if (isec->reloc_count == 0)
++	 continue;
++
+        shrinked_insn_address = (sec->output_section->vma
+                                 + sec->output_offset + addr - count);
+ 
+-       irelend = elf_section_data (isec)->relocs + isec->reloc_count;
+-       for (irel = elf_section_data (isec)->relocs;
++       irel = elf_section_data (isec)->relocs;
++       /* PR 12161: Read in the relocs for this section if necessary.  */
++       if (irel == NULL)
++	 irel = _bfd_elf_link_read_relocs (abfd, isec, NULL, NULL, FALSE);
++
++       for (irelend = irel + isec->reloc_count;
+             irel < irelend;
+             irel++)
+          {
+@@ -1564,6 +1571,9 @@ elf32_avr_relax_delete_bytes (bfd *abfd,
+ 	   /* else...Reference symbol is extern.  No need for adjusting
+ 	      the addend.  */
+ 	 }
++
++       if (elf_section_data (isec)->relocs == NULL)
++	 free (irelend - isec->reloc_count);
+      }
+   }
+ 
+diff --git a/bfd/elf32-bfin.c b/bfd/elf32-bfin.c
+index b112dfc..4941f40 100644
+--- a/bfd/elf32-bfin.c
++++ b/bfd/elf32-bfin.c
+@@ -1444,7 +1444,7 @@ bfin_relocate_section (bfd * output_bfd,
+ 				   unresolved_reloc, warned);
+ 	}
+ 
+-      if (sec != NULL && elf_discarded_section (sec))
++      if (sec != NULL && discarded_section (sec))
+ 	RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section,
+ 					 rel, relend, howto, contents);
+ 
+@@ -2663,7 +2663,7 @@ bfinfdpic_relocate_section (bfd * output_bfd,
+ 	  osec = sec;
+ 	}
+ 
+-      if (sec != NULL && elf_discarded_section (sec))
++      if (sec != NULL && discarded_section (sec))
+ 	RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section,
+ 					 rel, relend, howto, contents);
+ 
+@@ -4429,7 +4429,7 @@ bfinfdpic_elf_discard_info (bfd *ibfd,
+ 
+   /* Account for relaxation of .eh_frame section.  */
+   for (s = ibfd->sections; s; s = s->next)
+-    if (s->sec_info_type == ELF_INFO_TYPE_EH_FRAME)
++    if (s->sec_info_type == SEC_INFO_TYPE_EH_FRAME)
+       {
+ 	if (!_bfinfdpic_check_discarded_relocs (ibfd, s, info, &changed))
+ 	  return FALSE;
+diff --git a/bfd/elf32-cr16.c b/bfd/elf32-cr16.c
+index 0118131..38af05f 100644
+--- a/bfd/elf32-cr16.c
++++ b/bfd/elf32-cr16.c
+@@ -1431,7 +1431,7 @@ elf32_cr16_relocate_section (bfd *output_bfd, struct bfd_link_info *info,
+                                    unresolved_reloc, warned);
+         }
+ 
+-      if (sec != NULL && elf_discarded_section (sec))
++      if (sec != NULL && discarded_section (sec))
+ 	RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section,
+ 					 rel, relend, howto, contents);
+ 
+diff --git a/bfd/elf32-cr16c.c b/bfd/elf32-cr16c.c
+index ca2d7cb..109936b 100644
+--- a/bfd/elf32-cr16c.c
++++ b/bfd/elf32-cr16c.c
+@@ -723,7 +723,7 @@ elf32_cr16c_relocate_section (bfd *output_bfd,
+ 				   unresolved_reloc, warned);
+ 	}
+ 
+-      if (sec != NULL && elf_discarded_section (sec))
++      if (sec != NULL && discarded_section (sec))
+ 	RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section,
+ 					 rel, relend, howto, contents);
+ 
+diff --git a/bfd/elf32-cris.c b/bfd/elf32-cris.c
+index 243a8ec..ec23f03 100644
+--- a/bfd/elf32-cris.c
++++ b/bfd/elf32-cris.c
+@@ -1180,7 +1180,7 @@ cris_elf_relocate_section (bfd *output_bfd ATTRIBUTE_UNUSED,
+ 	    }
+ 	}
+ 
+-      if (sec != NULL && elf_discarded_section (sec))
++      if (sec != NULL && discarded_section (sec))
+ 	RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section,
+ 					 rel, relend, howto, contents);
+ 
+@@ -3579,6 +3579,12 @@ cris_elf_check_relocs (bfd *abfd,
+ 		 sec,
+ 		 cris_elf_howto_table[r_type].name);
+ 	    }
++
++	  /* We don't need to handle relocs into sections not going into
++	     the "real" output.  */
++	  if ((sec->flags & SEC_ALLOC) == 0)
++	    break;
++
+ 	  if (h != NULL)
+ 	    {
+ 	      h->non_got_ref = 1;
+@@ -3608,11 +3614,6 @@ cris_elf_check_relocs (bfd *abfd,
+ 	  if (! info->shared)
+ 	    break;
+ 
+-	  /* We don't need to handle relocs into sections not going into
+-	     the "real" output.  */
+-	  if ((sec->flags & SEC_ALLOC) == 0)
+-	    break;
+-
+ 	  /* We may need to create a reloc section in the dynobj and made room
+ 	     for this reloc.  */
+ 	  if (sreloc == NULL)
+diff --git a/bfd/elf32-crx.c b/bfd/elf32-crx.c
+index d48932d..fd13447 100644
+--- a/bfd/elf32-crx.c
++++ b/bfd/elf32-crx.c
+@@ -873,7 +873,7 @@ elf32_crx_relocate_section (bfd *output_bfd, struct bfd_link_info *info,
+ 				   unresolved_reloc, warned);
+ 	}
+ 
+-      if (sec != NULL && elf_discarded_section (sec))
++      if (sec != NULL && discarded_section (sec))
+ 	RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section,
+ 					 rel, relend, howto, contents);
+ 
+diff --git a/bfd/elf32-d10v.c b/bfd/elf32-d10v.c
+index 7d65395..e39a9b5 100644
+--- a/bfd/elf32-d10v.c
++++ b/bfd/elf32-d10v.c
+@@ -463,7 +463,7 @@ elf32_d10v_relocate_section (bfd *output_bfd,
+ 				   unresolved_reloc, warned);
+ 	}
+ 
+-      if (sec != NULL && elf_discarded_section (sec))
++      if (sec != NULL && discarded_section (sec))
+ 	RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section,
+ 					 rel, relend, howto, contents);
+ 
+diff --git a/bfd/elf32-fr30.c b/bfd/elf32-fr30.c
+index 97b0d29..57be6ae 100644
+--- a/bfd/elf32-fr30.c
++++ b/bfd/elf32-fr30.c
+@@ -577,7 +577,7 @@ fr30_elf_relocate_section (output_bfd, info, input_bfd, input_section,
+ 	  name = h->root.root.string;
+ 	}
+ 
+-      if (sec != NULL && elf_discarded_section (sec))
++      if (sec != NULL && discarded_section (sec))
+ 	RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section,
+ 					 rel, relend, howto, contents);
+ 
+diff --git a/bfd/elf32-frv.c b/bfd/elf32-frv.c
+index 7f3c4dd..513f811 100644
+--- a/bfd/elf32-frv.c
++++ b/bfd/elf32-frv.c
+@@ -2812,7 +2812,7 @@ elf32_frv_relocate_section (output_bfd, info, input_bfd, input_section,
+ 	  name = h->root.root.string;
+ 	}
+ 
+-      if (sec != NULL && elf_discarded_section (sec))
++      if (sec != NULL && discarded_section (sec))
+ 	RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section,
+ 					 rel, relend, howto, contents);
+ 
+@@ -5678,7 +5678,7 @@ frvfdpic_elf_discard_info (bfd *ibfd,
+ 
+   /* Account for relaxation of .eh_frame section.  */
+   for (s = ibfd->sections; s; s = s->next)
+-    if (s->sec_info_type == ELF_INFO_TYPE_EH_FRAME)
++    if (s->sec_info_type == SEC_INFO_TYPE_EH_FRAME)
+       {
+ 	if (!_frvfdpic_check_discarded_relocs (ibfd, s, info, &changed))
+ 	  return FALSE;
+diff --git a/bfd/elf32-h8300.c b/bfd/elf32-h8300.c
+index 95d3983..ff1ee70 100644
+--- a/bfd/elf32-h8300.c
++++ b/bfd/elf32-h8300.c
+@@ -460,7 +460,7 @@ elf32_h8_relocate_section (bfd *output_bfd, struct bfd_link_info *info,
+ 				   unresolved_reloc, warned);
+ 	}
+ 
+-      if (sec != NULL && elf_discarded_section (sec))
++      if (sec != NULL && discarded_section (sec))
+ 	RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section,
+ 					 rel, relend, howto, contents);
+ 
+diff --git a/bfd/elf32-hppa.c b/bfd/elf32-hppa.c
+index 7f0f2cb..044b6fa 100644
+--- a/bfd/elf32-hppa.c
++++ b/bfd/elf32-hppa.c
+@@ -1789,10 +1789,12 @@ elf32_hppa_hide_symbol (struct bfd_link_info *info,
+ 	}
+     }
+ 
+-  if (! hppa_elf_hash_entry (eh)->plabel)
++  /* STT_GNU_IFUNC symbol must go through PLT.  */
++  if (! hppa_elf_hash_entry (eh)->plabel
++      && eh->type != STT_GNU_IFUNC)
+     {
+       eh->needs_plt = 0;
+-      eh->plt = elf_hash_table (info)->init_plt_refcount;
++      eh->plt = elf_hash_table (info)->init_plt_offset;
+     }
+ }
+ 
+@@ -1814,6 +1816,13 @@ elf32_hppa_adjust_dynamic_symbol (struct bfd_link_info *info,
+   if (eh->type == STT_FUNC
+       || eh->needs_plt)
+     {
++      /* If the symbol is used by a plabel, we must allocate a PLT slot.
++	 The refcounts are not reliable when it has been hidden since
++	 hide_symbol can be called before the plabel flag is set.  */
++      if (hppa_elf_hash_entry (eh)->plabel
++	  && eh->plt.refcount <= 0)
++	eh->plt.refcount = 1;
++
+       if (eh->plt.refcount <= 0
+ 	  || (eh->def_regular
+ 	      && eh->root.type != bfd_link_hash_defweak
+@@ -3340,10 +3349,16 @@ final_link_relocate (asection *input_section,
+       switch (r_type)
+ 	{
+ 	  case R_PARISC_DLTIND21L:
++	  case R_PARISC_TLS_GD21L:
++	  case R_PARISC_TLS_LDM21L:
++	  case R_PARISC_TLS_IE21L:
+ 	    r_type = R_PARISC_DPREL21L;
+ 	    break;
+ 
+ 	  case R_PARISC_DLTIND14R:
++	  case R_PARISC_TLS_GD14R:
++	  case R_PARISC_TLS_LDM14R:
++	  case R_PARISC_TLS_IE14R:
+ 	    r_type = R_PARISC_DPREL14R;
+ 	    break;
+ 
+@@ -3409,53 +3424,48 @@ final_link_relocate (asection *input_section,
+     case R_PARISC_DPREL21L:
+     case R_PARISC_DPREL14R:
+     case R_PARISC_DPREL14F:
+-    case R_PARISC_TLS_GD21L:
+-    case R_PARISC_TLS_LDM21L:
+-    case R_PARISC_TLS_IE21L:
+       /* Convert instructions that use the linkage table pointer (r19) to
+ 	 instructions that use the global data pointer (dp).  This is the
+ 	 most efficient way of using PIC code in an incomplete executable,
+ 	 but the user must follow the standard runtime conventions for
+ 	 accessing data for this to work.  */
+-      if (orig_r_type == R_PARISC_DLTIND21L
+-	  || (!info->shared
+-	      && (r_type == R_PARISC_TLS_GD21L
+-		  || r_type == R_PARISC_TLS_LDM21L
+-		  || r_type == R_PARISC_TLS_IE21L)))
++      if (orig_r_type != r_type)
+ 	{
+-	  /* Convert addil instructions if the original reloc was a
+-	     DLTIND21L.  GCC sometimes uses a register other than r19 for
+-	     the operation, so we must convert any addil instruction
+-	     that uses this relocation.  */
+-	  if ((insn & 0xfc000000) == ((int) OP_ADDIL << 26))
+-	    insn = ADDIL_DP;
+-	  else
+-	    /* We must have a ldil instruction.  It's too hard to find
+-	       and convert the associated add instruction, so issue an
+-	       error.  */
+-	    (*_bfd_error_handler)
+-	      (_("%B(%A+0x%lx): %s fixup for insn 0x%x is not supported in a non-shared link"),
+-	       input_bfd,
+-	       input_section,
+-	       (long) offset,
+-	       howto->name,
+-	       insn);
+-	}
+-      else if (orig_r_type == R_PARISC_DLTIND14F)
+-	{
+-	  /* This must be a format 1 load/store.  Change the base
+-	     register to dp.  */
+-	  insn = (insn & 0xfc1ffff) | (27 << 21);
++	  if (r_type == R_PARISC_DPREL21L)
++	    {
++	      /* GCC sometimes uses a register other than r19 for the
++		 operation, so we must convert any addil instruction
++		 that uses this relocation.  */
++	      if ((insn & 0xfc000000) == ((int) OP_ADDIL << 26))
++		insn = ADDIL_DP;
++	      else
++		/* We must have a ldil instruction.  It's too hard to find
++		   and convert the associated add instruction, so issue an
++		   error.  */
++		(*_bfd_error_handler)
++		  (_("%B(%A+0x%lx): %s fixup for insn 0x%x is not supported in a non-shared link"),
++		   input_bfd,
++		   input_section,
++		   (long) offset,
++		   howto->name,
++		   insn);
++	    }
++	  else if (r_type == R_PARISC_DPREL14F)
++	    {
++	      /* This must be a format 1 load/store.  Change the base
++		 register to dp.  */
++	      insn = (insn & 0xfc1ffff) | (27 << 21);
++	    }
+ 	}
+ 
+-    /* For all the DP relative relocations, we need to examine the symbol's
+-       section.  If it has no section or if it's a code section, then
+-       "data pointer relative" makes no sense.  In that case we don't
+-       adjust the "value", and for 21 bit addil instructions, we change the
+-       source addend register from %dp to %r0.  This situation commonly
+-       arises for undefined weak symbols and when a variable's "constness"
+-       is declared differently from the way the variable is defined.  For
+-       instance: "extern int foo" with foo defined as "const int foo".  */
++      /* For all the DP relative relocations, we need to examine the symbol's
++	 section.  If it has no section or if it's a code section, then
++	 "data pointer relative" makes no sense.  In that case we don't
++	 adjust the "value", and for 21 bit addil instructions, we change the
++	 source addend register from %dp to %r0.  This situation commonly
++	 arises for undefined weak symbols and when a variable's "constness"
++	 is declared differently from the way the variable is defined.  For
++	 instance: "extern int foo" with foo defined as "const int foo".  */
+       if (sym_sec == NULL || (sym_sec->flags & SEC_CODE) != 0)
+ 	{
+ 	  if ((insn & ((0x3f << 26) | (0x1f << 21)))
+@@ -3472,6 +3482,9 @@ final_link_relocate (asection *input_section,
+     case R_PARISC_DLTIND21L:
+     case R_PARISC_DLTIND14R:
+     case R_PARISC_DLTIND14F:
++    case R_PARISC_TLS_GD21L:
++    case R_PARISC_TLS_LDM21L:
++    case R_PARISC_TLS_IE21L:
+     case R_PARISC_TLS_GD14R:
+     case R_PARISC_TLS_LDM14R:
+     case R_PARISC_TLS_IE14R:
+@@ -3728,7 +3741,7 @@ elf32_hppa_relocate_section (bfd *output_bfd,
+ 	  hh = hppa_elf_hash_entry (eh);
+ 	}
+ 
+-      if (sym_sec != NULL && elf_discarded_section (sym_sec))
++      if (sym_sec != NULL && discarded_section (sym_sec))
+ 	RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section,
+ 					 rela, relend,
+ 					 elf_hppa_howto_table + r_type,
+diff --git a/bfd/elf32-i370.c b/bfd/elf32-i370.c
+index 8082927..516511f 100644
+--- a/bfd/elf32-i370.c
++++ b/bfd/elf32-i370.c
+@@ -1138,7 +1138,7 @@ i370_elf_relocate_section (bfd *output_bfd,
+ 	    }
+ 	}
+ 
+-      if (sec != NULL && elf_discarded_section (sec))
++      if (sec != NULL && discarded_section (sec))
+ 	RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section,
+ 					 rel, relend, howto, contents);
+ 
+diff --git a/bfd/elf32-i386.c b/bfd/elf32-i386.c
+index d518d01..b925ca6 100644
+--- a/bfd/elf32-i386.c
++++ b/bfd/elf32-i386.c
+@@ -3178,7 +3178,7 @@ elf_i386_relocate_section (bfd *output_bfd,
+ 				   unresolved_reloc, warned);
+ 	}
+ 
+-      if (sec != NULL && elf_discarded_section (sec))
++      if (sec != NULL && discarded_section (sec))
+ 	RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section,
+ 					 rel, relend, howto, contents);
+ 
+@@ -4846,7 +4846,7 @@ elf_i386_finish_dynamic_sections (bfd *output_bfd,
+ 			     + PLT_FDE_START_OFFSET);
+ 	}
+       if (htab->plt_eh_frame->sec_info_type
+-	  == ELF_INFO_TYPE_EH_FRAME)
++	  == SEC_INFO_TYPE_EH_FRAME)
+ 	{
+ 	  if (! _bfd_elf_write_section_eh_frame (output_bfd, info,
+ 						 htab->plt_eh_frame,
+diff --git a/bfd/elf32-i860.c b/bfd/elf32-i860.c
+index 00c8ca7..88f4265 100644
+--- a/bfd/elf32-i860.c
++++ b/bfd/elf32-i860.c
+@@ -1128,7 +1128,7 @@ elf32_i860_relocate_section (bfd *output_bfd ATTRIBUTE_UNUSED,
+ 				   unresolved_reloc, warned);
+ 	}
+ 
+-      if (sec != NULL && elf_discarded_section (sec))
++      if (sec != NULL && discarded_section (sec))
+ 	RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section,
+ 					 rel, relend, howto, contents);
+ 
+diff --git a/bfd/elf32-ip2k.c b/bfd/elf32-ip2k.c
+index 0a251b8..43c7b1c 100644
+--- a/bfd/elf32-ip2k.c
++++ b/bfd/elf32-ip2k.c
+@@ -1436,7 +1436,7 @@ ip2k_elf_relocate_section (bfd *output_bfd ATTRIBUTE_UNUSED,
+ 	  name = h->root.root.string;
+ 	}
+ 
+-      if (sec != NULL && elf_discarded_section (sec))
++      if (sec != NULL && discarded_section (sec))
+ 	RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section,
+ 					 rel, relend, howto, contents);
+ 
+diff --git a/bfd/elf32-iq2000.c b/bfd/elf32-iq2000.c
+index 63ef3dc..3954616 100644
+--- a/bfd/elf32-iq2000.c
++++ b/bfd/elf32-iq2000.c
+@@ -633,7 +633,7 @@ iq2000_elf_relocate_section (bfd *		     output_bfd ATTRIBUTE_UNUSED,
+ 	  name = h->root.root.string;
+ 	}
+ 
+-      if (sec != NULL && elf_discarded_section (sec))
++      if (sec != NULL && discarded_section (sec))
+ 	RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section,
+ 					 rel, relend, howto, contents);
+ 
+diff --git a/bfd/elf32-lm32.c b/bfd/elf32-lm32.c
+index 07add20..a2b1003 100644
+--- a/bfd/elf32-lm32.c
++++ b/bfd/elf32-lm32.c
+@@ -893,7 +893,7 @@ lm32_elf_relocate_section (bfd *output_bfd,
+ 	  name = h->root.root.string;
+         }
+ 
+-      if (sec != NULL && elf_discarded_section (sec))
++      if (sec != NULL && discarded_section (sec))
+ 	RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section,
+ 					 rel, relend, howto, contents);
+ 
+@@ -2372,7 +2372,7 @@ lm32_elf_size_dynamic_sections (bfd *output_bfd,
+                           /* Don't generate entries for weak symbols.  */
+                           if (!h || (h && h->root.type != bfd_link_hash_undefweak))
+                             {
+-                              if (!elf_discarded_section (s) && !((bfd_get_section_flags (ibfd, s) & SEC_ALLOC) == 0))
++                              if (!discarded_section (s) && !((bfd_get_section_flags (ibfd, s) & SEC_ALLOC) == 0))
+                                 {
+                                   switch (ELF32_R_TYPE (internal_relocs->r_info))
+                                     {
+@@ -2394,7 +2394,7 @@ lm32_elf_size_dynamic_sections (bfd *output_bfd,
+                                   if (!strcmp (current->name, h->root.root.string))
+                                     break;
+                                 }
+-                              if (!current && !elf_discarded_section (s) && (bfd_get_section_flags (ibfd, s) & SEC_ALLOC))
++                              if (!current && !discarded_section (s) && (bfd_get_section_flags (ibfd, s) & SEC_ALLOC))
+                                 {
+                                   /* Will this have an entry in the GOT.  */
+                                   if (ELF32_R_TYPE (internal_relocs->r_info) == R_LM32_16_GOT)
+diff --git a/bfd/elf32-m32c.c b/bfd/elf32-m32c.c
+index cf7ad99..bcdb55d 100644
+--- a/bfd/elf32-m32c.c
++++ b/bfd/elf32-m32c.c
+@@ -434,7 +434,7 @@ m32c_elf_relocate_section
+ 	    }
+ 	}
+ 
+-      if (sec != NULL && elf_discarded_section (sec))
++      if (sec != NULL && discarded_section (sec))
+ 	RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section,
+ 					 rel, relend, howto, contents);
+ 
+diff --git a/bfd/elf32-m32r.c b/bfd/elf32-m32r.c
+index 51ef61e..b151a8a 100644
+--- a/bfd/elf32-m32r.c
++++ b/bfd/elf32-m32r.c
+@@ -2616,7 +2616,7 @@ m32r_elf_relocate_section (bfd *output_bfd ATTRIBUTE_UNUSED,
+ 	    }
+ 	}
+ 
+-      if (sec != NULL && elf_discarded_section (sec))
++      if (sec != NULL && discarded_section (sec))
+ 	RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section,
+ 					 rel, relend, howto, contents);
+ 
+diff --git a/bfd/elf32-m68hc1x.c b/bfd/elf32-m68hc1x.c
+index 961dce4..4b9a1c0 100644
+--- a/bfd/elf32-m68hc1x.c
++++ b/bfd/elf32-m68hc1x.c
+@@ -970,7 +970,7 @@ elf32_m68hc11_relocate_section (bfd *output_bfd ATTRIBUTE_UNUSED,
+ 	  is_far = (h && (h->other & STO_M68HC12_FAR));
+ 	}
+ 
+-      if (sec != NULL && elf_discarded_section (sec))
++      if (sec != NULL && discarded_section (sec))
+ 	RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section,
+ 					 rel, relend, howto, contents);
+ 
+diff --git a/bfd/elf32-m68k.c b/bfd/elf32-m68k.c
+index 612525c..518a41a 100644
+--- a/bfd/elf32-m68k.c
++++ b/bfd/elf32-m68k.c
+@@ -2816,6 +2816,11 @@ elf_m68k_check_relocs (abfd, info, sec, relocs)
+ 	case R_68K_8:
+ 	case R_68K_16:
+ 	case R_68K_32:
++	  /* We don't need to handle relocs into sections not going into
++	     the "real" output.  */
++	  if ((sec->flags & SEC_ALLOC) == 0)
++	      break;
++
+ 	  if (h != NULL)
+ 	    {
+ 	      /* Make sure a plt entry is created for this symbol if it
+@@ -2829,8 +2834,7 @@ elf_m68k_check_relocs (abfd, info, sec, relocs)
+ 
+ 	  /* If we are creating a shared library, we need to copy the
+ 	     reloc into the shared library.  */
+-	  if (info->shared
+-	      && (sec->flags & SEC_ALLOC) != 0)
++	  if (info->shared)
+ 	    {
+ 	      /* When creating a shared object, we must copy these
+ 		 reloc types into the output file.  We create a reloc
+@@ -3713,7 +3717,7 @@ elf_m68k_relocate_section (output_bfd, info, input_bfd, input_section,
+ 				   unresolved_reloc, warned);
+ 	}
+ 
+-      if (sec != NULL && elf_discarded_section (sec))
++      if (sec != NULL && discarded_section (sec))
+ 	RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section,
+ 					 rel, relend, howto, contents);
+ 
+diff --git a/bfd/elf32-mcore.c b/bfd/elf32-mcore.c
+index 31cc095..02aef53 100644
+--- a/bfd/elf32-mcore.c
++++ b/bfd/elf32-mcore.c
+@@ -466,7 +466,7 @@ mcore_elf_relocate_section (bfd * output_bfd,
+ 				   unresolved_reloc, warned);
+ 	}
+ 
+-      if (sec != NULL && elf_discarded_section (sec))
++      if (sec != NULL && discarded_section (sec))
+ 	RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section,
+ 					 rel, relend, howto, contents);
+ 
+diff --git a/bfd/elf32-mep.c b/bfd/elf32-mep.c
+index 6fecb25..e5104b3 100644
+--- a/bfd/elf32-mep.c
++++ b/bfd/elf32-mep.c
+@@ -500,7 +500,7 @@ mep_elf_relocate_section
+ 	  name = h->root.root.string;
+ 	}
+ 
+-      if (sec != NULL && elf_discarded_section (sec))
++      if (sec != NULL && discarded_section (sec))
+ 	RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section,
+ 					 rel, relend, howto, contents);
+ 
+diff --git a/bfd/elf32-mips.c b/bfd/elf32-mips.c
+index fd3d4ba..61e8b45 100644
+--- a/bfd/elf32-mips.c
++++ b/bfd/elf32-mips.c
+@@ -830,6 +830,111 @@ static reloc_howto_type elf_mips16_howto_table_rel[] =
+ 	 0x0000ffff,		/* src_mask */
+ 	 0x0000ffff,	        /* dst_mask */
+ 	 FALSE),		/* pcrel_offset */
++
++  /* MIPS16 TLS general dynamic variable reference.  */
++  HOWTO (R_MIPS16_TLS_GD,	/* type */
++	 0,			/* rightshift */
++	 2,			/* size (0 = byte, 1 = short, 2 = long) */
++	 16,			/* bitsize */
++	 FALSE,			/* pc_relative */
++	 0,			/* bitpos */
++	 complain_overflow_signed, /* complain_on_overflow */
++	 _bfd_mips_elf_generic_reloc, /* special_function */
++	 "R_MIPS16_TLS_GD",	/* name */
++	 TRUE,			/* partial_inplace */
++	 0x0000ffff,		/* src_mask */
++	 0x0000ffff,		/* dst_mask */
++	 FALSE),		/* pcrel_offset */
++
++  /* MIPS16 TLS local dynamic variable reference.  */
++  HOWTO (R_MIPS16_TLS_LDM,	/* type */
++	 0,			/* rightshift */
++	 2,			/* size (0 = byte, 1 = short, 2 = long) */
++	 16,			/* bitsize */
++	 FALSE,			/* pc_relative */
++	 0,			/* bitpos */
++	 complain_overflow_signed, /* complain_on_overflow */
++	 _bfd_mips_elf_generic_reloc, /* special_function */
++	 "R_MIPS16_TLS_LDM",	/* name */
++	 TRUE,			/* partial_inplace */
++	 0x0000ffff,		/* src_mask */
++	 0x0000ffff,		/* dst_mask */
++	 FALSE),		/* pcrel_offset */
++
++  /* MIPS16 TLS local dynamic offset.  */
++  HOWTO (R_MIPS16_TLS_DTPREL_HI16,	/* type */
++	 0,			/* rightshift */
++	 2,			/* size (0 = byte, 1 = short, 2 = long) */
++	 16,			/* bitsize */
++	 FALSE,			/* pc_relative */
++	 0,			/* bitpos */
++	 complain_overflow_signed, /* complain_on_overflow */
++	 _bfd_mips_elf_generic_reloc, /* special_function */
++	 "R_MIPS16_TLS_DTPREL_HI16",	/* name */
++	 TRUE,			/* partial_inplace */
++	 0x0000ffff,		/* src_mask */
++	 0x0000ffff,		/* dst_mask */
++	 FALSE),		/* pcrel_offset */
++
++  /* MIPS16 TLS local dynamic offset.  */
++  HOWTO (R_MIPS16_TLS_DTPREL_LO16,	/* type */
++	 0,			/* rightshift */
++	 2,			/* size (0 = byte, 1 = short, 2 = long) */
++	 16,			/* bitsize */
++	 FALSE,			/* pc_relative */
++	 0,			/* bitpos */
++	 complain_overflow_signed, /* complain_on_overflow */
++	 _bfd_mips_elf_generic_reloc, /* special_function */
++	 "R_MIPS16_TLS_DTPREL_LO16",	/* name */
++	 TRUE,			/* partial_inplace */
++	 0x0000ffff,		/* src_mask */
++	 0x0000ffff,		/* dst_mask */
++	 FALSE),		/* pcrel_offset */
++
++  /* MIPS16 TLS thread pointer offset.  */
++  HOWTO (R_MIPS16_TLS_GOTTPREL,	/* type */
++	 0,			/* rightshift */
++	 2,			/* size (0 = byte, 1 = short, 2 = long) */
++	 16,			/* bitsize */
++	 FALSE,			/* pc_relative */
++	 0,			/* bitpos */
++	 complain_overflow_signed, /* complain_on_overflow */
++	 _bfd_mips_elf_generic_reloc, /* special_function */
++	 "R_MIPS16_TLS_GOTTPREL",	/* name */
++	 TRUE,			/* partial_inplace */
++	 0x0000ffff,		/* src_mask */
++	 0x0000ffff,		/* dst_mask */
++	 FALSE),		/* pcrel_offset */
++
++  /* MIPS16 TLS thread pointer offset.  */
++  HOWTO (R_MIPS16_TLS_TPREL_HI16,	/* type */
++	 0,			/* rightshift */
++	 2,			/* size (0 = byte, 1 = short, 2 = long) */
++	 16,			/* bitsize */
++	 FALSE,			/* pc_relative */
++	 0,			/* bitpos */
++	 complain_overflow_signed, /* complain_on_overflow */
++	 _bfd_mips_elf_generic_reloc, /* special_function */
++	 "R_MIPS16_TLS_TPREL_HI16", /* name */
++	 TRUE,			/* partial_inplace */
++	 0x0000ffff,		/* src_mask */
++	 0x0000ffff,		/* dst_mask */
++	 FALSE),		/* pcrel_offset */
++
++  /* MIPS16 TLS thread pointer offset.  */
++  HOWTO (R_MIPS16_TLS_TPREL_LO16,	/* type */
++	 0,			/* rightshift */
++	 2,			/* size (0 = byte, 1 = short, 2 = long) */
++	 16,			/* bitsize */
++	 FALSE,			/* pc_relative */
++	 0,			/* bitpos */
++	 complain_overflow_signed, /* complain_on_overflow */
++	 _bfd_mips_elf_generic_reloc, /* special_function */
++	 "R_MIPS16_TLS_TPREL_LO16", /* name */
++	 TRUE,			/* partial_inplace */
++	 0x0000ffff,		/* src_mask */
++	 0x0000ffff,		/* dst_mask */
++	 FALSE),		/* pcrel_offset */
+ };
+ 
+ static reloc_howto_type elf_micromips_howto_table_rel[] =
+@@ -1796,6 +1901,15 @@ static const struct elf_reloc_map mips16_reloc_map[] =
+   { BFD_RELOC_MIPS16_CALL16, R_MIPS16_CALL16 - R_MIPS16_min },
+   { BFD_RELOC_MIPS16_HI16_S, R_MIPS16_HI16 - R_MIPS16_min },
+   { BFD_RELOC_MIPS16_LO16, R_MIPS16_LO16 - R_MIPS16_min },
++  { BFD_RELOC_MIPS16_TLS_GD, R_MIPS16_TLS_GD - R_MIPS16_min },
++  { BFD_RELOC_MIPS16_TLS_LDM, R_MIPS16_TLS_LDM - R_MIPS16_min },
++  { BFD_RELOC_MIPS16_TLS_DTPREL_HI16,
++    R_MIPS16_TLS_DTPREL_HI16 - R_MIPS16_min },
++  { BFD_RELOC_MIPS16_TLS_DTPREL_LO16,
++    R_MIPS16_TLS_DTPREL_LO16 - R_MIPS16_min },
++  { BFD_RELOC_MIPS16_TLS_GOTTPREL, R_MIPS16_TLS_GOTTPREL - R_MIPS16_min },
++  { BFD_RELOC_MIPS16_TLS_TPREL_HI16, R_MIPS16_TLS_TPREL_HI16 - R_MIPS16_min },
++  { BFD_RELOC_MIPS16_TLS_TPREL_LO16, R_MIPS16_TLS_TPREL_LO16 - R_MIPS16_min }
+ };
+ 
+ static const struct elf_reloc_map micromips_reloc_map[] =
+diff --git a/bfd/elf32-moxie.c b/bfd/elf32-moxie.c
+index 8463599..c340826 100644
+--- a/bfd/elf32-moxie.c
++++ b/bfd/elf32-moxie.c
+@@ -250,7 +250,7 @@ moxie_elf_relocate_section (bfd *output_bfd,
+ 	  name = h->root.root.string;
+ 	}
+ 
+-      if (sec != NULL && elf_discarded_section (sec))
++      if (sec != NULL && discarded_section (sec))
+ 	RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section,
+ 					 rel, relend, howto, contents);
+ 
+diff --git a/bfd/elf32-msp430.c b/bfd/elf32-msp430.c
+index 9a5fb2a..2fa70d9 100644
+--- a/bfd/elf32-msp430.c
++++ b/bfd/elf32-msp430.c
+@@ -454,7 +454,7 @@ elf32_msp430_relocate_section (bfd * output_bfd ATTRIBUTE_UNUSED,
+ 				   unresolved_reloc, warned);
+ 	}
+ 
+-      if (sec != NULL && elf_discarded_section (sec))
++      if (sec != NULL && discarded_section (sec))
+ 	RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section,
+ 					 rel, relend, howto, contents);
+ 
+diff --git a/bfd/elf32-mt.c b/bfd/elf32-mt.c
+index 1be5d00..b87995e 100644
+--- a/bfd/elf32-mt.c
++++ b/bfd/elf32-mt.c
+@@ -354,7 +354,7 @@ mt_elf_relocate_section
+ 	  name = h->root.root.string;
+ 	}
+ 
+-      if (sec != NULL && elf_discarded_section (sec))
++      if (sec != NULL && discarded_section (sec))
+ 	RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section,
+ 					 rel, relend, howto, contents);
+ 
+diff --git a/bfd/elf32-openrisc.c b/bfd/elf32-openrisc.c
+index ada738e..e441f4d 100644
+--- a/bfd/elf32-openrisc.c
++++ b/bfd/elf32-openrisc.c
+@@ -373,7 +373,7 @@ openrisc_elf_relocate_section (bfd *output_bfd,
+ 				   unresolved_reloc, warned);
+ 	}
+ 
+-      if (sec != NULL && elf_discarded_section (sec))
++      if (sec != NULL && discarded_section (sec))
+ 	RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section,
+ 					 rel, relend, howto, contents);
+ 
+diff --git a/bfd/elf32-ppc.c b/bfd/elf32-ppc.c
+index 0c25c3e..d3925af 100644
+--- a/bfd/elf32-ppc.c
++++ b/bfd/elf32-ppc.c
+@@ -2987,10 +2987,6 @@ ppc_elf_copy_indirect_symbol (struct bfd_link_info *info,
+   edir->elf.needs_plt |= eind->elf.needs_plt;
+   edir->elf.pointer_equality_needed |= eind->elf.pointer_equality_needed;
+ 
+-  /* If we were called to copy over info for a weak sym, that's all.  */
+-  if (eind->elf.root.type != bfd_link_hash_indirect)
+-    return;
+-
+   if (eind->dyn_relocs != NULL)
+     {
+       if (edir->dyn_relocs != NULL)
+@@ -3022,6 +3018,16 @@ ppc_elf_copy_indirect_symbol (struct bfd_link_info *info,
+       eind->dyn_relocs = NULL;
+     }
+ 
++  /* If we were called to copy over info for a weak sym, that's all.
++     You might think dyn_relocs need not be copied over;  After all,
++     both syms will be dynamic or both non-dynamic so we're just
++     moving reloc accounting around.  However, ELIMINATE_COPY_RELOCS 
++     code in ppc_elf_adjust_dynamic_symbol needs to check for
++     dyn_relocs in read-only sections, and it does so on what is the
++     DIR sym here.  */
++  if (eind->elf.root.type != bfd_link_hash_indirect)
++    return;
++
+   /* Copy over the GOT refcount entries that we may have already seen to
+      the symbol which just became indirect.  */
+   edir->elf.got.refcount += eind->elf.got.refcount;
+@@ -6225,7 +6231,7 @@ ppc_elf_relax_section (bfd *abfd,
+ 	 attribute for a code section, and we are only looking at
+ 	 branches.  However, implement it correctly here as a
+ 	 reference for other target relax_section functions.  */
+-      if (0 && tsec->sec_info_type == ELF_INFO_TYPE_MERGE)
++      if (0 && tsec->sec_info_type == SEC_INFO_TYPE_MERGE)
+ 	{
+ 	  /* At this stage in linking, no SEC_MERGE symbol has been
+ 	     adjusted, so all references to such symbols need to be
+@@ -6880,7 +6886,7 @@ ppc_elf_relocate_section (bfd *output_bfd,
+ 	  sym_name = h->root.root.string;
+ 	}
+ 
+-      if (sec != NULL && elf_discarded_section (sec))
++      if (sec != NULL && discarded_section (sec))
+ 	{
+ 	  /* For relocs against symbols from removed linkonce sections,
+ 	     or sections discarded by a linker script, we just want the
+@@ -9048,7 +9054,7 @@ ppc_elf_finish_dynamic_sections (bfd *output_bfd,
+       BFD_ASSERT ((bfd_vma) ((p + 3 - htab->glink_eh_frame->contents) & -4)
+ 		  == htab->glink_eh_frame->size);
+ 
+-      if (htab->glink_eh_frame->sec_info_type == ELF_INFO_TYPE_EH_FRAME
++      if (htab->glink_eh_frame->sec_info_type == SEC_INFO_TYPE_EH_FRAME
+ 	  && !_bfd_elf_write_section_eh_frame (output_bfd, info,
+ 					       htab->glink_eh_frame,
+ 					       htab->glink_eh_frame->contents))
+diff --git a/bfd/elf32-rx.c b/bfd/elf32-rx.c
+index f049f6e..32820b4 100644
+--- a/bfd/elf32-rx.c
++++ b/bfd/elf32-rx.c
+@@ -510,7 +510,7 @@ rx_elf_relocate_section
+ 	  name = h->root.root.string;
+ 	}
+ 
+-      if (sec != NULL && elf_discarded_section (sec))
++      if (sec != NULL && discarded_section (sec))
+ 	RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section,
+ 					 rel, relend, howto, contents);
+ 
+@@ -1588,7 +1588,7 @@ rx_offset_for_reloc (bfd *                    abfd,
+ 	  if (ssec)
+ 	    {
+ 	      if ((ssec->flags & SEC_MERGE)
+-		  && ssec->sec_info_type == ELF_INFO_TYPE_MERGE)
++		  && ssec->sec_info_type == SEC_INFO_TYPE_MERGE)
+ 		symval = _bfd_merged_section_offset (abfd, & ssec,
+ 						     elf_section_data (ssec)->sec_info,
+ 						     symval);
+diff --git a/bfd/elf32-s390.c b/bfd/elf32-s390.c
+index 98437d0..11fb072 100644
+--- a/bfd/elf32-s390.c
++++ b/bfd/elf32-s390.c
+@@ -2282,7 +2282,7 @@ elf_s390_relocate_section (output_bfd, info, input_bfd, input_section,
+ 				   unresolved_reloc, warned);
+ 	}
+ 
+-      if (sec != NULL && elf_discarded_section (sec))
++      if (sec != NULL && discarded_section (sec))
+ 	RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section,
+ 					 rel, relend, howto, contents);
+ 
+diff --git a/bfd/elf32-score.c b/bfd/elf32-score.c
+index b437624..ef849aa 100644
+--- a/bfd/elf32-score.c
++++ b/bfd/elf32-score.c
+@@ -2672,7 +2672,7 @@ s3_bfd_score_elf_relocate_section (bfd *output_bfd,
+             }
+         }
+ 
+-      if (sec != NULL && elf_discarded_section (sec))
++      if (sec != NULL && discarded_section (sec))
+ 	RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section,
+ 					 rel, relend, howto, contents);
+ 
+diff --git a/bfd/elf32-score7.c b/bfd/elf32-score7.c
+index 3e98bfc..3d228f3 100644
+--- a/bfd/elf32-score7.c
++++ b/bfd/elf32-score7.c
+@@ -2443,7 +2443,7 @@ s7_bfd_score_elf_relocate_section (bfd *output_bfd,
+             }
+         }
+ 
+-      if (sec != NULL && elf_discarded_section (sec))
++      if (sec != NULL && discarded_section (sec))
+ 	RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section,
+ 					 rel, relend, howto, contents);
+ 
+diff --git a/bfd/elf32-sh.c b/bfd/elf32-sh.c
+index ca2c4af..e56c3b5 100644
+--- a/bfd/elf32-sh.c
++++ b/bfd/elf32-sh.c
+@@ -4048,7 +4048,7 @@ sh_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info,
+ 	      _("Unexpected STO_SH5_ISA32 on local symbol is not handled"),
+ 	      input_bfd, input_section, rel->r_offset));
+ 
+-	  if (sec != NULL && elf_discarded_section (sec))
++	  if (sec != NULL && discarded_section (sec))
+ 	    /* Handled below.  */
+ 	    ;
+ 	  else if (info->relocatable)
+@@ -4236,7 +4236,7 @@ sh_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info,
+ 	    }
+ 	}
+ 
+-      if (sec != NULL && elf_discarded_section (sec))
++      if (sec != NULL && discarded_section (sec))
+ 	RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section,
+ 					 rel, relend, howto, contents);
+ 
+diff --git a/bfd/elf32-spu.c b/bfd/elf32-spu.c
+index ae3ed10..40a9da2 100644
+--- a/bfd/elf32-spu.c
++++ b/bfd/elf32-spu.c
+@@ -4895,7 +4895,7 @@ spu_elf_relocate_section (bfd *output_bfd,
+ 	  sym_name = h->root.root.string;
+ 	}
+ 
+-      if (sec != NULL && elf_discarded_section (sec))
++      if (sec != NULL && discarded_section (sec))
+ 	RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section,
+ 					 rel, relend, howto, contents);
+ 
+diff --git a/bfd/elf32-tic6x.c b/bfd/elf32-tic6x.c
+index 19287fe..a879d3c 100644
+--- a/bfd/elf32-tic6x.c
++++ b/bfd/elf32-tic6x.c
+@@ -2334,7 +2334,7 @@ elf32_tic6x_relocate_section (bfd *output_bfd,
+ 				   unresolved_reloc, warned);
+ 	}
+ 
+-      if (sec != NULL && elf_discarded_section (sec))
++      if (sec != NULL && discarded_section (sec))
+ 	RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section,
+ 					 rel, relend, howto, contents);
+ 
+@@ -4018,6 +4018,9 @@ elf32_tic6x_merge_private_bfd_data (bfd *ibfd, bfd *obfd)
+   if (!_bfd_generic_verify_endian_match (ibfd, obfd))
+     return FALSE;
+ 
++  if (! is_tic6x_elf (ibfd) || ! is_tic6x_elf (obfd))
++    return TRUE;
++
+   if (!elf32_tic6x_merge_attributes (ibfd, obfd))
+     return FALSE;
+ 
+diff --git a/bfd/elf32-tilepro.c b/bfd/elf32-tilepro.c
+index f2aed9c..a4e565d 100644
+--- a/bfd/elf32-tilepro.c
++++ b/bfd/elf32-tilepro.c
+@@ -2594,7 +2594,7 @@ tilepro_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info,
+ 	    }
+ 	}
+ 
+-      if (sec != NULL && elf_discarded_section (sec))
++      if (sec != NULL && discarded_section (sec))
+ 	RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section,
+ 					 rel, relend, howto, contents);
+ 
+diff --git a/bfd/elf32-v850.c b/bfd/elf32-v850.c
+index 9e6f77d..0fbe080 100644
+--- a/bfd/elf32-v850.c
++++ b/bfd/elf32-v850.c
+@@ -2093,7 +2093,7 @@ v850_elf_relocate_section (bfd *output_bfd,
+ 				   unresolved_reloc, warned);
+ 	}
+ 
+-      if (sec != NULL && elf_discarded_section (sec))
++      if (sec != NULL && discarded_section (sec))
+ 	RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section,
+ 					 rel, relend, howto, contents);
+ 
+diff --git a/bfd/elf32-vax.c b/bfd/elf32-vax.c
+index 643381c..fc3cb7c 100644
+--- a/bfd/elf32-vax.c
++++ b/bfd/elf32-vax.c
+@@ -1450,7 +1450,7 @@ elf_vax_relocate_section (bfd *output_bfd,
+ 	    relocation = 0;
+ 	}
+ 
+-      if (sec != NULL && elf_discarded_section (sec))
++      if (sec != NULL && discarded_section (sec))
+ 	RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section,
+ 					 rel, relend, howto, contents);
+ 
+diff --git a/bfd/elf32-xc16x.c b/bfd/elf32-xc16x.c
+index 11d9840..00c7841 100644
+--- a/bfd/elf32-xc16x.c
++++ b/bfd/elf32-xc16x.c
+@@ -381,7 +381,7 @@ elf32_xc16x_relocate_section (bfd *output_bfd,
+ 				   unresolved_reloc, warned);
+ 	}
+ 
+-      if (sec != NULL && elf_discarded_section (sec))
++      if (sec != NULL && discarded_section (sec))
+ 	{
+ 	  /* For relocs against symbols from removed linkonce sections,
+ 	     or sections discarded by a linker script, we just want the
+diff --git a/bfd/elf32-xstormy16.c b/bfd/elf32-xstormy16.c
+index 6141783..86e1d5b 100644
+--- a/bfd/elf32-xstormy16.c
++++ b/bfd/elf32-xstormy16.c
+@@ -825,7 +825,7 @@ xstormy16_elf_relocate_section (bfd *                   output_bfd ATTRIBUTE_UNU
+ 				   unresolved_reloc, warned);
+ 	}
+ 
+-      if (sec != NULL && elf_discarded_section (sec))
++      if (sec != NULL && discarded_section (sec))
+ 	RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section,
+ 					 rel, relend, howto, contents);
+ 
+diff --git a/bfd/elf32-xtensa.c b/bfd/elf32-xtensa.c
+index c6e4fb4..5a51eae 100644
+--- a/bfd/elf32-xtensa.c
++++ b/bfd/elf32-xtensa.c
+@@ -1712,7 +1712,7 @@ elf_xtensa_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED,
+ 	    continue;
+ 	  for (s = abfd->sections; s != NULL; s = s->next)
+ 	    {
+-	      if (! elf_discarded_section (s)
++	      if (! discarded_section (s)
+ 		  && xtensa_is_littable_section (s)
+ 		  && s != spltlittbl)
+ 		sgotloc->size += s->size;
+@@ -2656,7 +2656,7 @@ elf_xtensa_relocate_section (bfd *output_bfd,
+ 	  sym_type = h->type;
+ 	}
+ 
+-      if (sec != NULL && elf_discarded_section (sec))
++      if (sec != NULL && discarded_section (sec))
+ 	RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section,
+ 					 rel, relend, howto, contents);
+ 
+@@ -8960,9 +8960,9 @@ relax_section (bfd *abfd, asection *sec, struct bfd_link_info *link_info)
+ 	     that here and adjust things accordingly.  */
+ 	  if (! elf_xtensa_ignore_discarded_relocs (sec)
+ 	      && elf_xtensa_action_discarded (sec) == PRETEND
+-	      && sec->sec_info_type != ELF_INFO_TYPE_STABS
++	      && sec->sec_info_type != SEC_INFO_TYPE_STABS
+ 	      && target_sec != NULL
+-	      && elf_discarded_section (target_sec))
++	      && discarded_section (target_sec))
+ 	    {
+ 	      /* It would be natural to call _bfd_elf_check_kept_section
+ 		 here, but it's not exported from elflink.c.  It's also a
+diff --git a/bfd/elf64-alpha.c b/bfd/elf64-alpha.c
+index 6076709..ddb1cd7 100644
+--- a/bfd/elf64-alpha.c
++++ b/bfd/elf64-alpha.c
+@@ -4106,7 +4106,7 @@ elf64_alpha_relocate_section_r (bfd *output_bfd ATTRIBUTE_UNUSED,
+ 	  sec = h->root.u.def.section;
+ 	}
+ 
+-      if (sec != NULL && elf_discarded_section (sec))
++      if (sec != NULL && discarded_section (sec))
+ 	RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section,
+ 					 rel, relend,
+ 					 elf64_alpha_howto_table + r_type,
+@@ -4263,7 +4263,7 @@ elf64_alpha_relocate_section (bfd *output_bfd, struct bfd_link_info *info,
+ 	     unless it has been done already.  */
+ 	  if ((sec->flags & SEC_MERGE)
+ 	      && ELF_ST_TYPE (sym->st_info) == STT_SECTION
+-	      && sec->sec_info_type == ELF_INFO_TYPE_MERGE
++	      && sec->sec_info_type == SEC_INFO_TYPE_MERGE
+ 	      && gotent
+ 	      && !gotent->reloc_xlated)
+ 	    {
+@@ -4315,7 +4315,7 @@ elf64_alpha_relocate_section (bfd *output_bfd, struct bfd_link_info *info,
+ 	  gotent = h->got_entries;
+ 	}
+ 
+-      if (sec != NULL && elf_discarded_section (sec))
++      if (sec != NULL && discarded_section (sec))
+ 	RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section,
+ 					 rel, relend, howto, contents);
+ 
+@@ -4717,7 +4717,7 @@ elf64_alpha_relocate_section (bfd *output_bfd, struct bfd_link_info *info,
+ 
+ 	    if (r_symndx < symtab_hdr->sh_info
+ 		&& sec != NULL && howto->pc_relative
+-		&& elf_discarded_section (sec))
++		&& discarded_section (sec))
+ 	      break;
+ 
+ 	    if (h != NULL)
+diff --git a/bfd/elf64-hppa.c b/bfd/elf64-hppa.c
+index 057a92d..9d2dfcf 100644
+--- a/bfd/elf64-hppa.c
++++ b/bfd/elf64-hppa.c
+@@ -3919,7 +3919,7 @@ elf64_hppa_relocate_section (bfd *output_bfd,
+             }
+ 	}
+ 
+-      if (sym_sec != NULL && elf_discarded_section (sym_sec))
++      if (sym_sec != NULL && discarded_section (sym_sec))
+ 	RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section,
+ 					 rel, relend, howto, contents);
+ 
+diff --git a/bfd/elf64-mips.c b/bfd/elf64-mips.c
+index 3feb1bb..bdd0c19 100644
+--- a/bfd/elf64-mips.c
++++ b/bfd/elf64-mips.c
+@@ -1590,6 +1590,111 @@ static reloc_howto_type mips16_elf64_howto_table_rel[] =
+ 	 0x0000ffff,		/* src_mask */
+ 	 0x0000ffff,		/* dst_mask */
+ 	 FALSE),		/* pcrel_offset */
++
++  /* MIPS16 TLS general dynamic variable reference.  */
++  HOWTO (R_MIPS16_TLS_GD,	/* type */
++	 0,			/* rightshift */
++	 2,			/* size (0 = byte, 1 = short, 2 = long) */
++	 16,			/* bitsize */
++	 FALSE,			/* pc_relative */
++	 0,			/* bitpos */
++	 complain_overflow_signed, /* complain_on_overflow */
++	 _bfd_mips_elf_generic_reloc, /* special_function */
++	 "R_MIPS16_TLS_GD",	/* name */
++	 TRUE,			/* partial_inplace */
++	 0x0000ffff,		/* src_mask */
++	 0x0000ffff,		/* dst_mask */
++	 FALSE),		/* pcrel_offset */
++
++  /* MIPS16 TLS local dynamic variable reference.  */
++  HOWTO (R_MIPS16_TLS_LDM,	/* type */
++	 0,			/* rightshift */
++	 2,			/* size (0 = byte, 1 = short, 2 = long) */
++	 16,			/* bitsize */
++	 FALSE,			/* pc_relative */
++	 0,			/* bitpos */
++	 complain_overflow_signed, /* complain_on_overflow */
++	 _bfd_mips_elf_generic_reloc, /* special_function */
++	 "R_MIPS16_TLS_LDM",	/* name */
++	 TRUE,			/* partial_inplace */
++	 0x0000ffff,		/* src_mask */
++	 0x0000ffff,		/* dst_mask */
++	 FALSE),		/* pcrel_offset */
++
++  /* MIPS16 TLS local dynamic offset.  */
++  HOWTO (R_MIPS16_TLS_DTPREL_HI16,	/* type */
++	 0,			/* rightshift */
++	 2,			/* size (0 = byte, 1 = short, 2 = long) */
++	 16,			/* bitsize */
++	 FALSE,			/* pc_relative */
++	 0,			/* bitpos */
++	 complain_overflow_signed, /* complain_on_overflow */
++	 _bfd_mips_elf_generic_reloc, /* special_function */
++	 "R_MIPS16_TLS_DTPREL_HI16",	/* name */
++	 TRUE,			/* partial_inplace */
++	 0x0000ffff,		/* src_mask */
++	 0x0000ffff,		/* dst_mask */
++	 FALSE),		/* pcrel_offset */
++
++  /* MIPS16 TLS local dynamic offset.  */
++  HOWTO (R_MIPS16_TLS_DTPREL_LO16,	/* type */
++	 0,			/* rightshift */
++	 2,			/* size (0 = byte, 1 = short, 2 = long) */
++	 16,			/* bitsize */
++	 FALSE,			/* pc_relative */
++	 0,			/* bitpos */
++	 complain_overflow_signed, /* complain_on_overflow */
++	 _bfd_mips_elf_generic_reloc, /* special_function */
++	 "R_MIPS16_TLS_DTPREL_LO16",	/* name */
++	 TRUE,			/* partial_inplace */
++	 0x0000ffff,		/* src_mask */
++	 0x0000ffff,		/* dst_mask */
++	 FALSE),		/* pcrel_offset */
++
++  /* MIPS16 TLS thread pointer offset.  */
++  HOWTO (R_MIPS16_TLS_GOTTPREL,	/* type */
++	 0,			/* rightshift */
++	 2,			/* size (0 = byte, 1 = short, 2 = long) */
++	 16,			/* bitsize */
++	 FALSE,			/* pc_relative */
++	 0,			/* bitpos */
++	 complain_overflow_signed, /* complain_on_overflow */
++	 _bfd_mips_elf_generic_reloc, /* special_function */
++	 "R_MIPS16_TLS_GOTTPREL",	/* name */
++	 TRUE,			/* partial_inplace */
++	 0x0000ffff,		/* src_mask */
++	 0x0000ffff,		/* dst_mask */
++	 FALSE),		/* pcrel_offset */
++
++  /* MIPS16 TLS thread pointer offset.  */
++  HOWTO (R_MIPS16_TLS_TPREL_HI16,	/* type */
++	 0,			/* rightshift */
++	 2,			/* size (0 = byte, 1 = short, 2 = long) */
++	 16,			/* bitsize */
++	 FALSE,			/* pc_relative */
++	 0,			/* bitpos */
++	 complain_overflow_signed, /* complain_on_overflow */
++	 _bfd_mips_elf_generic_reloc, /* special_function */
++	 "R_MIPS16_TLS_TPREL_HI16", /* name */
++	 TRUE,			/* partial_inplace */
++	 0x0000ffff,		/* src_mask */
++	 0x0000ffff,		/* dst_mask */
++	 FALSE),		/* pcrel_offset */
++
++  /* MIPS16 TLS thread pointer offset.  */
++  HOWTO (R_MIPS16_TLS_TPREL_LO16,	/* type */
++	 0,			/* rightshift */
++	 2,			/* size (0 = byte, 1 = short, 2 = long) */
++	 16,			/* bitsize */
++	 FALSE,			/* pc_relative */
++	 0,			/* bitpos */
++	 complain_overflow_signed, /* complain_on_overflow */
++	 _bfd_mips_elf_generic_reloc, /* special_function */
++	 "R_MIPS16_TLS_TPREL_LO16", /* name */
++	 TRUE,			/* partial_inplace */
++	 0x0000ffff,		/* src_mask */
++	 0x0000ffff,		/* dst_mask */
++	 FALSE),		/* pcrel_offset */
+ };
+ 
+ static reloc_howto_type mips16_elf64_howto_table_rela[] =
+@@ -1686,6 +1791,111 @@ static reloc_howto_type mips16_elf64_howto_table_rela[] =
+ 	 0x0000ffff,		/* src_mask */
+ 	 0x0000ffff,		/* dst_mask */
+ 	 FALSE),		/* pcrel_offset */
++
++  /* MIPS16 TLS general dynamic variable reference.  */
++  HOWTO (R_MIPS16_TLS_GD,	/* type */
++	 0,			/* rightshift */
++	 2,			/* size (0 = byte, 1 = short, 2 = long) */
++	 16,			/* bitsize */
++	 FALSE,			/* pc_relative */
++	 0,			/* bitpos */
++	 complain_overflow_signed, /* complain_on_overflow */
++	 _bfd_mips_elf_generic_reloc, /* special_function */
++	 "R_MIPS16_TLS_GD",	/* name */
++	 FALSE,			/* partial_inplace */
++	 0x0000ffff,		/* src_mask */
++	 0x0000ffff,		/* dst_mask */
++	 FALSE),		/* pcrel_offset */
++
++  /* MIPS16 TLS local dynamic variable reference.  */
++  HOWTO (R_MIPS16_TLS_LDM,	/* type */
++	 0,			/* rightshift */
++	 2,			/* size (0 = byte, 1 = short, 2 = long) */
++	 16,			/* bitsize */
++	 FALSE,			/* pc_relative */
++	 0,			/* bitpos */
++	 complain_overflow_signed, /* complain_on_overflow */
++	 _bfd_mips_elf_generic_reloc, /* special_function */
++	 "R_MIPS16_TLS_LDM",	/* name */
++	 FALSE,			/* partial_inplace */
++	 0x0000ffff,		/* src_mask */
++	 0x0000ffff,		/* dst_mask */
++	 FALSE),		/* pcrel_offset */
++
++  /* MIPS16 TLS local dynamic offset.  */
++  HOWTO (R_MIPS16_TLS_DTPREL_HI16,	/* type */
++	 0,			/* rightshift */
++	 2,			/* size (0 = byte, 1 = short, 2 = long) */
++	 16,			/* bitsize */
++	 FALSE,			/* pc_relative */
++	 0,			/* bitpos */
++	 complain_overflow_signed, /* complain_on_overflow */
++	 _bfd_mips_elf_generic_reloc, /* special_function */
++	 "R_MIPS16_TLS_DTPREL_HI16",	/* name */
++	 FALSE,			/* partial_inplace */
++	 0x0000ffff,		/* src_mask */
++	 0x0000ffff,		/* dst_mask */
++	 FALSE),		/* pcrel_offset */
++
++  /* MIPS16 TLS local dynamic offset.  */
++  HOWTO (R_MIPS16_TLS_DTPREL_LO16,	/* type */
++	 0,			/* rightshift */
++	 2,			/* size (0 = byte, 1 = short, 2 = long) */
++	 16,			/* bitsize */
++	 FALSE,			/* pc_relative */
++	 0,			/* bitpos */
++	 complain_overflow_signed, /* complain_on_overflow */
++	 _bfd_mips_elf_generic_reloc, /* special_function */
++	 "R_MIPS16_TLS_DTPREL_LO16",	/* name */
++	 FALSE,			/* partial_inplace */
++	 0x0000ffff,		/* src_mask */
++	 0x0000ffff,		/* dst_mask */
++	 FALSE),		/* pcrel_offset */
++
++  /* MIPS16 TLS thread pointer offset.  */
++  HOWTO (R_MIPS16_TLS_GOTTPREL,	/* type */
++	 0,			/* rightshift */
++	 2,			/* size (0 = byte, 1 = short, 2 = long) */
++	 16,			/* bitsize */
++	 FALSE,			/* pc_relative */
++	 0,			/* bitpos */
++	 complain_overflow_signed, /* complain_on_overflow */
++	 _bfd_mips_elf_generic_reloc, /* special_function */
++	 "R_MIPS16_TLS_GOTTPREL",	/* name */
++	 FALSE,			/* partial_inplace */
++	 0x0000ffff,		/* src_mask */
++	 0x0000ffff,		/* dst_mask */
++	 FALSE),		/* pcrel_offset */
++
++  /* MIPS16 TLS thread pointer offset.  */
++  HOWTO (R_MIPS16_TLS_TPREL_HI16,	/* type */
++	 0,			/* rightshift */
++	 2,			/* size (0 = byte, 1 = short, 2 = long) */
++	 16,			/* bitsize */
++	 FALSE,			/* pc_relative */
++	 0,			/* bitpos */
++	 complain_overflow_signed, /* complain_on_overflow */
++	 _bfd_mips_elf_generic_reloc, /* special_function */
++	 "R_MIPS16_TLS_TPREL_HI16", /* name */
++	 FALSE,			/* partial_inplace */
++	 0x0000ffff,		/* src_mask */
++	 0x0000ffff,		/* dst_mask */
++	 FALSE),		/* pcrel_offset */
++
++  /* MIPS16 TLS thread pointer offset.  */
++  HOWTO (R_MIPS16_TLS_TPREL_LO16,	/* type */
++	 0,			/* rightshift */
++	 2,			/* size (0 = byte, 1 = short, 2 = long) */
++	 16,			/* bitsize */
++	 FALSE,			/* pc_relative */
++	 0,			/* bitpos */
++	 complain_overflow_signed, /* complain_on_overflow */
++	 _bfd_mips_elf_generic_reloc, /* special_function */
++	 "R_MIPS16_TLS_TPREL_LO16", /* name */
++	 FALSE,			/* partial_inplace */
++	 0x0000ffff,		/* src_mask */
++	 0x0000ffff,		/* dst_mask */
++	 FALSE),		/* pcrel_offset */
+ };
+ 
+ static reloc_howto_type micromips_elf64_howto_table_rel[] =
+@@ -2908,6 +3118,15 @@ static const struct elf_reloc_map mips16_reloc_map[] =
+   { BFD_RELOC_MIPS16_CALL16, R_MIPS16_CALL16 - R_MIPS16_min },
+   { BFD_RELOC_MIPS16_HI16_S, R_MIPS16_HI16 - R_MIPS16_min },
+   { BFD_RELOC_MIPS16_LO16, R_MIPS16_LO16 - R_MIPS16_min },
++  { BFD_RELOC_MIPS16_TLS_GD, R_MIPS16_TLS_GD - R_MIPS16_min },
++  { BFD_RELOC_MIPS16_TLS_LDM, R_MIPS16_TLS_LDM - R_MIPS16_min },
++  { BFD_RELOC_MIPS16_TLS_DTPREL_HI16,
++    R_MIPS16_TLS_DTPREL_HI16 - R_MIPS16_min },
++  { BFD_RELOC_MIPS16_TLS_DTPREL_LO16,
++    R_MIPS16_TLS_DTPREL_LO16 - R_MIPS16_min },
++  { BFD_RELOC_MIPS16_TLS_GOTTPREL, R_MIPS16_TLS_GOTTPREL - R_MIPS16_min },
++  { BFD_RELOC_MIPS16_TLS_TPREL_HI16, R_MIPS16_TLS_TPREL_HI16 - R_MIPS16_min },
++  { BFD_RELOC_MIPS16_TLS_TPREL_LO16, R_MIPS16_TLS_TPREL_LO16 - R_MIPS16_min }
+ };
+ 
+ static const struct elf_reloc_map micromips_reloc_map[] =
+diff --git a/bfd/elf64-mmix.c b/bfd/elf64-mmix.c
+index ecc9ad0..9cc407f 100644
+--- a/bfd/elf64-mmix.c
++++ b/bfd/elf64-mmix.c
+@@ -1475,7 +1475,7 @@ mmix_elf_relocate_section (output_bfd, info, input_bfd, input_section,
+ 	  name = h->root.root.string;
+ 	}
+ 
+-      if (sec != NULL && elf_discarded_section (sec))
++      if (sec != NULL && discarded_section (sec))
+ 	RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section,
+ 					 rel, relend, howto, contents);
+ 
+diff --git a/bfd/elf64-ppc.c b/bfd/elf64-ppc.c
+index 93d1314..52e9ce9 100644
+--- a/bfd/elf64-ppc.c
++++ b/bfd/elf64-ppc.c
+@@ -4435,10 +4435,6 @@ ppc64_elf_copy_indirect_symbol (struct bfd_link_info *info,
+   edir->elf.ref_regular_nonweak |= eind->elf.ref_regular_nonweak;
+   edir->elf.needs_plt |= eind->elf.needs_plt;
+ 
+-  /* If we were called to copy over info for a weak sym, that's all.  */
+-  if (eind->elf.root.type != bfd_link_hash_indirect)
+-    return;
+-
+   /* Copy over any dynamic relocs we may have on the indirect sym.  */
+   if (eind->dyn_relocs != NULL)
+     {
+@@ -4471,6 +4467,16 @@ ppc64_elf_copy_indirect_symbol (struct bfd_link_info *info,
+       eind->dyn_relocs = NULL;
+     }
+ 
++  /* If we were called to copy over info for a weak sym, that's all.
++     You might think dyn_relocs need not be copied over;  After all,
++     both syms will be dynamic or both non-dynamic so we're just
++     moving reloc accounting around.  However, ELIMINATE_COPY_RELOCS 
++     code in ppc64_elf_adjust_dynamic_symbol needs to check for
++     dyn_relocs in read-only sections, and it does so on what is the
++     DIR sym here.  */
++  if (eind->elf.root.type != bfd_link_hash_indirect)
++    return;
++
+   /* Copy over got entries that we may have already seen to the
+      symbol which just became indirect.  */
+   if (eind->elf.got.glist != NULL)
+@@ -6846,7 +6852,7 @@ adjust_opd_syms (struct elf_link_hash_entry *h, void *inf ATTRIBUTE_UNUSED)
+ 	  if (dsec == NULL)
+ 	    {
+ 	      for (dsec = sym_sec->owner->sections; dsec; dsec = dsec->next)
+-		if (elf_discarded_section (dsec))
++		if (discarded_section (dsec))
+ 		  {
+ 		    ppc64_elf_tdata (sym_sec->owner)->deleted_section = dsec;
+ 		    break;
+@@ -7027,7 +7033,7 @@ ppc64_elf_edit_opd (struct bfd_link_info *info, bfd_boolean non_overlapping)
+       if (sec == NULL || sec->size == 0)
+ 	continue;
+ 
+-      if (sec->sec_info_type == ELF_INFO_TYPE_JUST_SYMS)
++      if (sec->sec_info_type == SEC_INFO_TYPE_JUST_SYMS)
+ 	continue;
+ 
+       if (sec->output_section == bfd_abs_section_ptr)
+@@ -8071,8 +8077,8 @@ ppc64_elf_edit_toc (struct bfd_link_info *info)
+       toc = bfd_get_section_by_name (ibfd, ".toc");
+       if (toc == NULL
+ 	  || toc->size == 0
+-	  || toc->sec_info_type == ELF_INFO_TYPE_JUST_SYMS
+-	  || elf_discarded_section (toc))
++	  || toc->sec_info_type == SEC_INFO_TYPE_JUST_SYMS
++	  || discarded_section (toc))
+ 	continue;
+ 
+       toc_relocs = NULL;
+@@ -8085,7 +8091,7 @@ ppc64_elf_edit_toc (struct bfd_link_info *info)
+       for (sec = ibfd->sections; sec != NULL; sec = sec->next)
+ 	{
+ 	  if (sec->reloc_count == 0
+-	      || !elf_discarded_section (sec)
++	      || !discarded_section (sec)
+ 	      || get_opd_info (sec)
+ 	      || (sec->flags & SEC_ALLOC) == 0
+ 	      || (sec->flags & SEC_DEBUGGING) != 0)
+@@ -8195,7 +8201,7 @@ ppc64_elf_edit_toc (struct bfd_link_info *info)
+ 		goto error_ret;
+ 
+ 	      if (sym_sec == NULL
+-		  || elf_discarded_section (sym_sec))
++		  || discarded_section (sym_sec))
+ 		continue;
+ 
+ 	      if (!SYMBOL_CALLS_LOCAL (info, h))
+@@ -8275,7 +8281,7 @@ ppc64_elf_edit_toc (struct bfd_link_info *info)
+ 	  int repeat;
+ 
+ 	  if (sec->reloc_count == 0
+-	      || elf_discarded_section (sec)
++	      || discarded_section (sec)
+ 	      || get_opd_info (sec)
+ 	      || (sec->flags & SEC_ALLOC) == 0
+ 	      || (sec->flags & SEC_DEBUGGING) != 0)
+@@ -8497,7 +8503,7 @@ ppc64_elf_edit_toc (struct bfd_link_info *info)
+ 	  for (sec = ibfd->sections; sec != NULL; sec = sec->next)
+ 	    {
+ 	      if (sec->reloc_count == 0
+-		  || elf_discarded_section (sec))
++		  || discarded_section (sec))
+ 		continue;
+ 
+ 	      relstart = _bfd_elf_link_read_relocs (ibfd, sec, NULL, NULL,
+@@ -12030,7 +12036,7 @@ ppc64_elf_relocate_section (bfd *output_bfd,
+ 	}
+       h = (struct ppc_link_hash_entry *) h_elf;
+ 
+-      if (sec != NULL && elf_discarded_section (sec))
++      if (sec != NULL && discarded_section (sec))
+ 	RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section,
+ 					 rel, relend,
+ 					 ppc64_elf_howto_table[r_type],
+@@ -13859,7 +13865,7 @@ ppc64_elf_finish_dynamic_sections (bfd *output_bfd,
+ 
+ 
+   if (htab->glink_eh_frame != NULL
+-      && htab->glink_eh_frame->sec_info_type == ELF_INFO_TYPE_EH_FRAME
++      && htab->glink_eh_frame->sec_info_type == SEC_INFO_TYPE_EH_FRAME
+       && !_bfd_elf_write_section_eh_frame (output_bfd, info,
+ 					   htab->glink_eh_frame,
+ 					   htab->glink_eh_frame->contents))
+diff --git a/bfd/elf64-s390.c b/bfd/elf64-s390.c
+index 9884da0..e9138a6 100644
+--- a/bfd/elf64-s390.c
++++ b/bfd/elf64-s390.c
+@@ -2270,7 +2270,7 @@ elf_s390_relocate_section (bfd *output_bfd,
+ 				   unresolved_reloc, warned);
+ 	}
+ 
+-      if (sec != NULL && elf_discarded_section (sec))
++      if (sec != NULL && discarded_section (sec))
+ 	RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section,
+ 					 rel, relend, howto, contents);
+ 
+diff --git a/bfd/elf64-sh64.c b/bfd/elf64-sh64.c
+index bbef2a2..d8f2120 100644
+--- a/bfd/elf64-sh64.c
++++ b/bfd/elf64-sh64.c
+@@ -1514,7 +1514,7 @@ sh_elf64_relocate_section (bfd *output_bfd ATTRIBUTE_UNUSED,
+ 	      _("Unexpected STO_SH5_ISA32 on local symbol is not handled"),
+ 	      input_bfd, input_section, rel->r_offset));
+ 
+-	  if (sec != NULL && elf_discarded_section (sec))
++	  if (sec != NULL && discarded_section (sec))
+ 	    /* Handled below.  */
+ 	    ;
+ 	  else if (info->relocatable)
+@@ -1657,7 +1657,7 @@ sh_elf64_relocate_section (bfd *output_bfd ATTRIBUTE_UNUSED,
+ 	    }
+ 	}
+ 
+-      if (sec != NULL && elf_discarded_section (sec))
++      if (sec != NULL && discarded_section (sec))
+ 	RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section,
+ 					 rel, relend, howto, contents);
+ 
+diff --git a/bfd/elf64-x86-64.c b/bfd/elf64-x86-64.c
+index 3a2444b..9d826e7 100644
+--- a/bfd/elf64-x86-64.c
++++ b/bfd/elf64-x86-64.c
+@@ -3062,7 +3062,7 @@ elf_x86_64_relocate_section (bfd *output_bfd,
+ 				   unresolved_reloc, warned);
+ 	}
+ 
+-      if (sec != NULL && elf_discarded_section (sec))
++      if (sec != NULL && discarded_section (sec))
+ 	RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section,
+ 					 rel, relend, howto, contents);
+ 
+@@ -3460,7 +3460,6 @@ elf_x86_64_relocate_section (bfd *output_bfd,
+ 	case R_X86_64_PC16:
+ 	case R_X86_64_PC32:
+ 	  if (info->shared
+-	      && ABI_64_P (output_bfd)
+ 	      && (input_section->flags & SEC_ALLOC) != 0
+ 	      && (input_section->flags & SEC_READONLY) != 0
+ 	      && h != NULL)
+@@ -4626,7 +4625,7 @@ elf_x86_64_finish_dynamic_sections (bfd *output_bfd,
+ 			     + PLT_FDE_START_OFFSET);
+ 	}
+       if (htab->plt_eh_frame->sec_info_type
+-	  == ELF_INFO_TYPE_EH_FRAME)
++	  == SEC_INFO_TYPE_EH_FRAME)
+ 	{
+ 	  if (! _bfd_elf_write_section_eh_frame (output_bfd, info,
+ 						 htab->plt_eh_frame,
+diff --git a/bfd/elflink.c b/bfd/elflink.c
+index fc4266b..da6be48 100644
+--- a/bfd/elflink.c
++++ b/bfd/elflink.c
+@@ -1,6 +1,6 @@
+ /* ELF linking support for BFD.
+    Copyright 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
+-   2005, 2006, 2007, 2008, 2009, 2010, 2011
++   2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012
+    Free Software Foundation, Inc.
+ 
+    This file is part of BFD, the Binary File Descriptor library.
+@@ -937,7 +937,7 @@ _bfd_elf_merge_symbol (bfd *abfd,
+   /* Silently discard TLS symbols from --just-syms.  There's no way to
+      combine a static TLS block with a new TLS block for this executable.  */
+   if (ELF_ST_TYPE (sym->st_info) == STT_TLS
+-      && sec->sec_info_type == ELF_INFO_TYPE_JUST_SYMS)
++      && sec->sec_info_type == SEC_INFO_TYPE_JUST_SYMS)
+     {
+       *skip = TRUE;
+       return TRUE;
+@@ -2708,7 +2708,7 @@ _bfd_elf_link_sec_merge_syms (struct elf_link_hash_entry *h, void *data)
+   if ((h->root.type == bfd_link_hash_defined
+        || h->root.type == bfd_link_hash_defweak)
+       && ((sec = h->root.u.def.section)->flags & SEC_MERGE)
+-      && sec->sec_info_type == ELF_INFO_TYPE_MERGE)
++      && sec->sec_info_type == SEC_INFO_TYPE_MERGE)
+     {
+       bfd *output_bfd = (bfd *) data;
+ 
+@@ -3499,7 +3499,7 @@ elf_link_add_object_symbols (bfd *abfd, struct bfd_link_info *info)
+       /* ld --just-symbols and dynamic objects don't mix very well.
+ 	 ld shouldn't allow it.  */
+       if ((s = abfd->sections) != NULL
+-	  && s->sec_info_type == ELF_INFO_TYPE_JUST_SYMS)
++	  && s->sec_info_type == SEC_INFO_TYPE_JUST_SYMS)
+ 	abort ();
+ 
+       /* If this dynamic lib was specified on the command line with
+@@ -3896,7 +3896,7 @@ error_free_dyn:
+ 	  sec = bfd_section_from_elf_index (abfd, isym->st_shndx);
+ 	  if (sec == NULL)
+ 	    sec = bfd_abs_section_ptr;
+-	  else if (elf_discarded_section (sec))
++	  else if (discarded_section (sec))
+ 	    {
+ 	      /* Symbols from discarded section are undefined.  We keep
+ 		 its visibility.  */
+@@ -4861,7 +4861,7 @@ error_free_dyn:
+ 					       &string_offset))
+ 		  goto error_return;
+ 		if (secdata->sec_info)
+-		  stab->sec_info_type = ELF_INFO_TYPE_STABS;
++		  stab->sec_info_type = SEC_INFO_TYPE_STABS;
+ 	    }
+ 	}
+     }
+@@ -6644,25 +6644,14 @@ bfd_elf_size_dynsym_hash_dynstr (bfd *output_bfd, struct bfd_link_info *info)
+   return TRUE;
+ }
+ 
+-/* Indicate that we are only retrieving symbol values from this
+-   section.  */
+-
+-void
+-_bfd_elf_link_just_syms (asection *sec, struct bfd_link_info *info)
+-{
+-  if (is_elf_hash_table (info->hash))
+-    sec->sec_info_type = ELF_INFO_TYPE_JUST_SYMS;
+-  _bfd_generic_link_just_syms (sec, info);
+-}
+-
+ /* Make sure sec_info_type is cleared if sec_info is cleared too.  */
+ 
+ static void
+ merge_sections_remove_hook (bfd *abfd ATTRIBUTE_UNUSED,
+ 			    asection *sec)
+ {
+-  BFD_ASSERT (sec->sec_info_type == ELF_INFO_TYPE_MERGE);
+-  sec->sec_info_type = ELF_INFO_TYPE_NONE;
++  BFD_ASSERT (sec->sec_info_type == SEC_INFO_TYPE_MERGE);
++  sec->sec_info_type = SEC_INFO_TYPE_NONE;
+ }
+ 
+ /* Finish SHF_MERGE section merging.  */
+@@ -6690,7 +6679,7 @@ _bfd_elf_merge_sections (bfd *abfd, struct bfd_link_info *info)
+ 					  sec, &secdata->sec_info))
+ 	      return FALSE;
+ 	    else if (secdata->sec_info)
+-	      sec->sec_info_type = ELF_INFO_TYPE_MERGE;
++	      sec->sec_info_type = SEC_INFO_TYPE_MERGE;
+ 	  }
+ 
+   if (elf_hash_table (info)->merge_info != NULL)
+@@ -8708,7 +8697,7 @@ elf_link_output_extsym (struct bfd_hash_entry *bh, void *data)
+   else if ((h->root.type == bfd_link_hash_defined
+ 	    || h->root.type == bfd_link_hash_defweak)
+ 	   && ((finfo->info->strip_discarded
+-		&& elf_discarded_section (h->root.u.def.section))
++		&& discarded_section (h->root.u.def.section))
+ 	       || (h->root.u.def.section->owner != NULL
+ 		   && (h->root.u.def.section->owner->flags & BFD_PLUGIN) != 0)))
+     strip = TRUE;
+@@ -9007,8 +8996,8 @@ elf_section_ignore_discarded_relocs (asection *sec)
+ 
+   switch (sec->sec_info_type)
+     {
+-    case ELF_INFO_TYPE_STABS:
+-    case ELF_INFO_TYPE_EH_FRAME:
++    case SEC_INFO_TYPE_STABS:
++    case SEC_INFO_TYPE_EH_FRAME:
+       return TRUE;
+     default:
+       break;
+@@ -9193,7 +9182,7 @@ elf_link_input_bfd (struct elf_final_link_info *finfo, bfd *input_bfd)
+ 	      *ppsection = NULL;
+ 	      continue;
+ 	    }
+-	  else if (isec->sec_info_type == ELF_INFO_TYPE_MERGE
++	  else if (isec->sec_info_type == SEC_INFO_TYPE_MERGE
+ 		   && ELF_ST_TYPE (isym->st_info) != STT_SECTION)
+ 	    isym->st_value =
+ 	      _bfd_merged_section_offset (output_bfd, &isec,
+@@ -9537,7 +9526,7 @@ elf_link_input_bfd (struct elf_final_link_info *finfo, bfd *input_bfd)
+ 		{
+ 		  /* Complain if the definition comes from a
+ 		     discarded section.  */
+-		  if ((sec = *ps) != NULL && elf_discarded_section (sec))
++		  if ((sec = *ps) != NULL && discarded_section (sec))
+ 		    {
+ 		      BFD_ASSERT (r_symndx != STN_UNDEF);
+ 		      if (action_discarded & COMPLAIN)
+@@ -9874,19 +9863,19 @@ elf_link_input_bfd (struct elf_final_link_info *finfo, bfd *input_bfd)
+ 	}
+       else switch (o->sec_info_type)
+ 	{
+-	case ELF_INFO_TYPE_STABS:
++	case SEC_INFO_TYPE_STABS:
+ 	  if (! (_bfd_write_section_stabs
+ 		 (output_bfd,
+ 		  &elf_hash_table (finfo->info)->stab_info,
+ 		  o, &elf_section_data (o)->sec_info, contents)))
+ 	    return FALSE;
+ 	  break;
+-	case ELF_INFO_TYPE_MERGE:
++	case SEC_INFO_TYPE_MERGE:
+ 	  if (! _bfd_write_merged_section (output_bfd, o,
+ 					   elf_section_data (o)->sec_info))
+ 	    return FALSE;
+ 	  break;
+-	case ELF_INFO_TYPE_EH_FRAME:
++	case SEC_INFO_TYPE_EH_FRAME:
+ 	  {
+ 	    if (! _bfd_elf_write_section_eh_frame (output_bfd, finfo->info,
+ 						   o, contents))
+@@ -11188,15 +11177,12 @@ bfd_elf_final_link (bfd *abfd, struct bfd_link_info *info)
+ 	goto error_return;
+ 
+       /* Check for DT_TEXTREL (late, in case the backend removes it).  */
+-      if ((info->warn_shared_textrel && info->shared)
+-	  || info->error_textrel)
++      if (((info->warn_shared_textrel && info->shared)
++	   || info->error_textrel)
++	  && (o = bfd_get_section_by_name (dynobj, ".dynamic")) != NULL)
+ 	{
+ 	  bfd_byte *dyncon, *dynconend;
+ 
+-	  /* Fix up .dynamic entries.  */
+-	  o = bfd_get_section_by_name (dynobj, ".dynamic");
+-	  BFD_ASSERT (o != NULL);
+-
+ 	  dyncon = o->contents;
+ 	  dynconend = o->contents + o->size;
+ 	  for (; dyncon < dynconend; dyncon += bed->s->sizeof_dyn)
+@@ -12418,7 +12404,7 @@ bfd_elf_reloc_symbol_deleted_p (bfd_vma offset, void *cookie)
+ 
+ 	  if ((h->root.type == bfd_link_hash_defined
+ 	       || h->root.type == bfd_link_hash_defweak)
+-	      && elf_discarded_section (h->root.u.def.section))
++	      && discarded_section (h->root.u.def.section))
+ 	    return TRUE;
+ 	  else
+ 	    return FALSE;
+@@ -12434,7 +12420,7 @@ bfd_elf_reloc_symbol_deleted_p (bfd_vma offset, void *cookie)
+ 	  /* Need to: get the symbol; get the section.  */
+ 	  isym = &rcookie->locsyms[r_symndx];
+ 	  isec = bfd_section_from_elf_index (rcookie->abfd, isym->st_shndx);
+-	  if (isec != NULL && elf_discarded_section (isec))
++	  if (isec != NULL && discarded_section (isec))
+ 	    return TRUE;
+ 	}
+       return FALSE;
+@@ -12485,7 +12471,7 @@ bfd_elf_discard_info (bfd *output_bfd, struct bfd_link_info *info)
+       if (stab != NULL
+ 	  && (stab->size == 0
+ 	      || bfd_is_abs_section (stab->output_section)
+-	      || stab->sec_info_type != ELF_INFO_TYPE_STABS))
++	      || stab->sec_info_type != SEC_INFO_TYPE_STABS))
+ 	stab = NULL;
+ 
+       if (stab == NULL
+diff --git a/bfd/elfn32-mips.c b/bfd/elfn32-mips.c
+index 00ec8b0..2189566 100644
+--- a/bfd/elfn32-mips.c
++++ b/bfd/elfn32-mips.c
+@@ -1555,6 +1555,111 @@ static reloc_howto_type elf_mips16_howto_table_rel[] =
+ 	 0x0000ffff,		/* src_mask */
+ 	 0x0000ffff,		/* dst_mask */
+ 	 FALSE),		/* pcrel_offset */
++
++  /* MIPS16 TLS general dynamic variable reference.  */
++  HOWTO (R_MIPS16_TLS_GD,	/* type */
++	 0,			/* rightshift */
++	 2,			/* size (0 = byte, 1 = short, 2 = long) */
++	 16,			/* bitsize */
++	 FALSE,			/* pc_relative */
++	 0,			/* bitpos */
++	 complain_overflow_signed, /* complain_on_overflow */
++	 _bfd_mips_elf_generic_reloc, /* special_function */
++	 "R_MIPS16_TLS_GD",	/* name */
++	 TRUE,			/* partial_inplace */
++	 0x0000ffff,		/* src_mask */
++	 0x0000ffff,		/* dst_mask */
++	 FALSE),		/* pcrel_offset */
++
++  /* MIPS16 TLS local dynamic variable reference.  */
++  HOWTO (R_MIPS16_TLS_LDM,	/* type */
++	 0,			/* rightshift */
++	 2,			/* size (0 = byte, 1 = short, 2 = long) */
++	 16,			/* bitsize */
++	 FALSE,			/* pc_relative */
++	 0,			/* bitpos */
++	 complain_overflow_signed, /* complain_on_overflow */
++	 _bfd_mips_elf_generic_reloc, /* special_function */
++	 "R_MIPS16_TLS_LDM",	/* name */
++	 TRUE,			/* partial_inplace */
++	 0x0000ffff,		/* src_mask */
++	 0x0000ffff,		/* dst_mask */
++	 FALSE),		/* pcrel_offset */
++
++  /* MIPS16 TLS local dynamic offset.  */
++  HOWTO (R_MIPS16_TLS_DTPREL_HI16,	/* type */
++	 0,			/* rightshift */
++	 2,			/* size (0 = byte, 1 = short, 2 = long) */
++	 16,			/* bitsize */
++	 FALSE,			/* pc_relative */
++	 0,			/* bitpos */
++	 complain_overflow_signed, /* complain_on_overflow */
++	 _bfd_mips_elf_generic_reloc, /* special_function */
++	 "R_MIPS16_TLS_DTPREL_HI16",	/* name */
++	 TRUE,			/* partial_inplace */
++	 0x0000ffff,		/* src_mask */
++	 0x0000ffff,		/* dst_mask */
++	 FALSE),		/* pcrel_offset */
++
++  /* MIPS16 TLS local dynamic offset.  */
++  HOWTO (R_MIPS16_TLS_DTPREL_LO16,	/* type */
++	 0,			/* rightshift */
++	 2,			/* size (0 = byte, 1 = short, 2 = long) */
++	 16,			/* bitsize */
++	 FALSE,			/* pc_relative */
++	 0,			/* bitpos */
++	 complain_overflow_signed, /* complain_on_overflow */
++	 _bfd_mips_elf_generic_reloc, /* special_function */
++	 "R_MIPS16_TLS_DTPREL_LO16",	/* name */
++	 TRUE,			/* partial_inplace */
++	 0x0000ffff,		/* src_mask */
++	 0x0000ffff,		/* dst_mask */
++	 FALSE),		/* pcrel_offset */
++
++  /* MIPS16 TLS thread pointer offset.  */
++  HOWTO (R_MIPS16_TLS_GOTTPREL,	/* type */
++	 0,			/* rightshift */
++	 2,			/* size (0 = byte, 1 = short, 2 = long) */
++	 16,			/* bitsize */
++	 FALSE,			/* pc_relative */
++	 0,			/* bitpos */
++	 complain_overflow_signed, /* complain_on_overflow */
++	 _bfd_mips_elf_generic_reloc, /* special_function */
++	 "R_MIPS16_TLS_GOTTPREL",	/* name */
++	 TRUE,			/* partial_inplace */
++	 0x0000ffff,		/* src_mask */
++	 0x0000ffff,		/* dst_mask */
++	 FALSE),		/* pcrel_offset */
++
++  /* MIPS16 TLS thread pointer offset.  */
++  HOWTO (R_MIPS16_TLS_TPREL_HI16,	/* type */
++	 0,			/* rightshift */
++	 2,			/* size (0 = byte, 1 = short, 2 = long) */
++	 16,			/* bitsize */
++	 FALSE,			/* pc_relative */
++	 0,			/* bitpos */
++	 complain_overflow_signed, /* complain_on_overflow */
++	 _bfd_mips_elf_generic_reloc, /* special_function */
++	 "R_MIPS16_TLS_TPREL_HI16", /* name */
++	 TRUE,			/* partial_inplace */
++	 0x0000ffff,		/* src_mask */
++	 0x0000ffff,		/* dst_mask */
++	 FALSE),		/* pcrel_offset */
++
++  /* MIPS16 TLS thread pointer offset.  */
++  HOWTO (R_MIPS16_TLS_TPREL_LO16,	/* type */
++	 0,			/* rightshift */
++	 2,			/* size (0 = byte, 1 = short, 2 = long) */
++	 16,			/* bitsize */
++	 FALSE,			/* pc_relative */
++	 0,			/* bitpos */
++	 complain_overflow_signed, /* complain_on_overflow */
++	 _bfd_mips_elf_generic_reloc, /* special_function */
++	 "R_MIPS16_TLS_TPREL_LO16", /* name */
++	 TRUE,			/* partial_inplace */
++	 0x0000ffff,		/* src_mask */
++	 0x0000ffff,		/* dst_mask */
++	 FALSE),		/* pcrel_offset */
+ };
+ 
+ static reloc_howto_type elf_mips16_howto_table_rela[] =
+@@ -1651,6 +1756,111 @@ static reloc_howto_type elf_mips16_howto_table_rela[] =
+ 	 0x0000ffff,		/* src_mask */
+ 	 0x0000ffff,		/* dst_mask */
+ 	 FALSE),		/* pcrel_offset */
++
++  /* MIPS16 TLS general dynamic variable reference.  */
++  HOWTO (R_MIPS16_TLS_GD,	/* type */
++	 0,			/* rightshift */
++	 2,			/* size (0 = byte, 1 = short, 2 = long) */
++	 16,			/* bitsize */
++	 FALSE,			/* pc_relative */
++	 0,			/* bitpos */
++	 complain_overflow_signed, /* complain_on_overflow */
++	 _bfd_mips_elf_generic_reloc, /* special_function */
++	 "R_MIPS16_TLS_GD",	/* name */
++	 FALSE,			/* partial_inplace */
++	 0x0000ffff,		/* src_mask */
++	 0x0000ffff,		/* dst_mask */
++	 FALSE),		/* pcrel_offset */
++
++  /* MIPS16 TLS local dynamic variable reference.  */
++  HOWTO (R_MIPS16_TLS_LDM,	/* type */
++	 0,			/* rightshift */
++	 2,			/* size (0 = byte, 1 = short, 2 = long) */
++	 16,			/* bitsize */
++	 FALSE,			/* pc_relative */
++	 0,			/* bitpos */
++	 complain_overflow_signed, /* complain_on_overflow */
++	 _bfd_mips_elf_generic_reloc, /* special_function */
++	 "R_MIPS16_TLS_LDM",	/* name */
++	 FALSE,			/* partial_inplace */
++	 0x0000ffff,		/* src_mask */
++	 0x0000ffff,		/* dst_mask */
++	 FALSE),		/* pcrel_offset */
++
++  /* MIPS16 TLS local dynamic offset.  */
++  HOWTO (R_MIPS16_TLS_DTPREL_HI16,	/* type */
++	 0,			/* rightshift */
++	 2,			/* size (0 = byte, 1 = short, 2 = long) */
++	 16,			/* bitsize */
++	 FALSE,			/* pc_relative */
++	 0,			/* bitpos */
++	 complain_overflow_signed, /* complain_on_overflow */
++	 _bfd_mips_elf_generic_reloc, /* special_function */
++	 "R_MIPS16_TLS_DTPREL_HI16",	/* name */
++	 FALSE,			/* partial_inplace */
++	 0x0000ffff,		/* src_mask */
++	 0x0000ffff,		/* dst_mask */
++	 FALSE),		/* pcrel_offset */
++
++  /* MIPS16 TLS local dynamic offset.  */
++  HOWTO (R_MIPS16_TLS_DTPREL_LO16,	/* type */
++	 0,			/* rightshift */
++	 2,			/* size (0 = byte, 1 = short, 2 = long) */
++	 16,			/* bitsize */
++	 FALSE,			/* pc_relative */
++	 0,			/* bitpos */
++	 complain_overflow_signed, /* complain_on_overflow */
++	 _bfd_mips_elf_generic_reloc, /* special_function */
++	 "R_MIPS16_TLS_DTPREL_LO16",	/* name */
++	 FALSE,			/* partial_inplace */
++	 0x0000ffff,		/* src_mask */
++	 0x0000ffff,		/* dst_mask */
++	 FALSE),		/* pcrel_offset */
++
++  /* MIPS16 TLS thread pointer offset.  */
++  HOWTO (R_MIPS16_TLS_GOTTPREL,	/* type */
++	 0,			/* rightshift */
++	 2,			/* size (0 = byte, 1 = short, 2 = long) */
++	 16,			/* bitsize */
++	 FALSE,			/* pc_relative */
++	 0,			/* bitpos */
++	 complain_overflow_signed, /* complain_on_overflow */
++	 _bfd_mips_elf_generic_reloc, /* special_function */
++	 "R_MIPS16_TLS_GOTTPREL",	/* name */
++	 FALSE,			/* partial_inplace */
++	 0x0000ffff,		/* src_mask */
++	 0x0000ffff,		/* dst_mask */
++	 FALSE),		/* pcrel_offset */
++
++  /* MIPS16 TLS thread pointer offset.  */
++  HOWTO (R_MIPS16_TLS_TPREL_HI16,	/* type */
++	 0,			/* rightshift */
++	 2,			/* size (0 = byte, 1 = short, 2 = long) */
++	 16,			/* bitsize */
++	 FALSE,			/* pc_relative */
++	 0,			/* bitpos */
++	 complain_overflow_signed, /* complain_on_overflow */
++	 _bfd_mips_elf_generic_reloc, /* special_function */
++	 "R_MIPS16_TLS_TPREL_HI16", /* name */
++	 FALSE,			/* partial_inplace */
++	 0x0000ffff,		/* src_mask */
++	 0x0000ffff,		/* dst_mask */
++	 FALSE),		/* pcrel_offset */
++
++  /* MIPS16 TLS thread pointer offset.  */
++  HOWTO (R_MIPS16_TLS_TPREL_LO16,	/* type */
++	 0,			/* rightshift */
++	 2,			/* size (0 = byte, 1 = short, 2 = long) */
++	 16,			/* bitsize */
++	 FALSE,			/* pc_relative */
++	 0,			/* bitpos */
++	 complain_overflow_signed, /* complain_on_overflow */
++	 _bfd_mips_elf_generic_reloc, /* special_function */
++	 "R_MIPS16_TLS_TPREL_LO16", /* name */
++	 FALSE,			/* partial_inplace */
++	 0x0000ffff,		/* src_mask */
++	 0x0000ffff,		/* dst_mask */
++	 FALSE),		/* pcrel_offset */
+ };
+ 
+ static reloc_howto_type elf_micromips_howto_table_rel[] =
+@@ -2724,6 +2934,15 @@ static const struct elf_reloc_map mips16_reloc_map[] =
+   { BFD_RELOC_MIPS16_CALL16, R_MIPS16_CALL16 - R_MIPS16_min },
+   { BFD_RELOC_MIPS16_HI16_S, R_MIPS16_HI16 - R_MIPS16_min },
+   { BFD_RELOC_MIPS16_LO16, R_MIPS16_LO16 - R_MIPS16_min },
++  { BFD_RELOC_MIPS16_TLS_GD, R_MIPS16_TLS_GD - R_MIPS16_min },
++  { BFD_RELOC_MIPS16_TLS_LDM, R_MIPS16_TLS_LDM - R_MIPS16_min },
++  { BFD_RELOC_MIPS16_TLS_DTPREL_HI16,
++    R_MIPS16_TLS_DTPREL_HI16 - R_MIPS16_min },
++  { BFD_RELOC_MIPS16_TLS_DTPREL_LO16,
++    R_MIPS16_TLS_DTPREL_LO16 - R_MIPS16_min },
++  { BFD_RELOC_MIPS16_TLS_GOTTPREL, R_MIPS16_TLS_GOTTPREL - R_MIPS16_min },
++  { BFD_RELOC_MIPS16_TLS_TPREL_HI16, R_MIPS16_TLS_TPREL_HI16 - R_MIPS16_min },
++  { BFD_RELOC_MIPS16_TLS_TPREL_LO16, R_MIPS16_TLS_TPREL_LO16 - R_MIPS16_min }
+ };
+ 
+ static const struct elf_reloc_map micromips_reloc_map[] =
+diff --git a/bfd/elfnn-ia64.c b/bfd/elfnn-ia64.c
+index 3e2ee0b..0f6b720 100644
+--- a/bfd/elfnn-ia64.c
++++ b/bfd/elfnn-ia64.c
+@@ -530,7 +530,7 @@ elfNN_ia64_relax_section (bfd *abfd, asection *sec,
+ 	  symtype = h->type;
+ 	}
+ 
+-      if (tsec->sec_info_type == ELF_INFO_TYPE_MERGE)
++      if (tsec->sec_info_type == SEC_INFO_TYPE_MERGE)
+ 	{
+ 	  /* At this stage in linking, no SEC_MERGE symbol has been
+ 	     adjusted, so all references to such symbols need to be
+@@ -3861,7 +3861,7 @@ elfNN_ia64_relocate_section (bfd *output_bfd,
+ 	  if (!info->relocatable
+ 	      && (sym_sec->flags & SEC_MERGE) != 0
+ 	      && ELF_ST_TYPE (sym->st_info) == STT_SECTION
+-	      && sym_sec->sec_info_type == ELF_INFO_TYPE_MERGE)
++	      && sym_sec->sec_info_type == SEC_INFO_TYPE_MERGE)
+ 	    {
+ 	      struct elfNN_ia64_local_hash_entry *loc_h;
+ 
+@@ -3919,7 +3919,7 @@ elfNN_ia64_relocate_section (bfd *output_bfd,
+ 	    continue;
+ 	}
+ 
+-      if (sym_sec != NULL && elf_discarded_section (sym_sec))
++      if (sym_sec != NULL && discarded_section (sym_sec))
+ 	RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section,
+ 					 rel, relend, howto, contents);
+ 
+diff --git a/bfd/elfxx-mips.c b/bfd/elfxx-mips.c
+index 33a454d..7911050 100644
+--- a/bfd/elfxx-mips.c
++++ b/bfd/elfxx-mips.c
+@@ -436,8 +436,8 @@ struct mips_elf_link_hash_table
+      entry is set to the address of __rld_obj_head as in IRIX5.  */
+   bfd_boolean use_rld_obj_head;
+ 
+-  /* This is the value of the __rld_map or __rld_obj_head symbol.  */
+-  bfd_vma rld_value;
++  /* The  __rld_map or __rld_obj_head symbol. */
++  struct elf_link_hash_entry *rld_symbol;
+ 
+   /* This is set if we see any mips16 stub sections.  */
+   bfd_boolean mips16_stubs_seen;
+@@ -529,6 +529,13 @@ struct mips_htab_traverse_info
+    || r_type == R_MIPS_TLS_TPREL64		\
+    || r_type == R_MIPS_TLS_TPREL_HI16		\
+    || r_type == R_MIPS_TLS_TPREL_LO16		\
++   || r_type == R_MIPS16_TLS_GD			\
++   || r_type == R_MIPS16_TLS_LDM		\
++   || r_type == R_MIPS16_TLS_DTPREL_HI16	\
++   || r_type == R_MIPS16_TLS_DTPREL_LO16	\
++   || r_type == R_MIPS16_TLS_GOTTPREL		\
++   || r_type == R_MIPS16_TLS_TPREL_HI16		\
++   || r_type == R_MIPS16_TLS_TPREL_LO16		\
+    || r_type == R_MICROMIPS_TLS_GD		\
+    || r_type == R_MICROMIPS_TLS_LDM		\
+    || r_type == R_MICROMIPS_TLS_DTPREL_HI16	\
+@@ -768,6 +775,10 @@ static bfd *reldyn_sorting_bfd;
+ #define MIPS_ELF_GOT_SIZE(abfd) \
+   (get_elf_backend_data (abfd)->s->arch_size / 8)
+ 
++/* The size of the .rld_map section. */
++#define MIPS_ELF_RLD_MAP_SIZE(abfd) \
++  (get_elf_backend_data (abfd)->s->arch_size / 8)
++
+ /* The size of a symbol-table entry.  */
+ #define MIPS_ELF_SYM_SIZE(abfd) \
+   (get_elf_backend_data (abfd)->s->sizeof_sym)
+@@ -1571,9 +1582,10 @@ _bfd_mips_elf_init_stubs (struct bfd_link_info *info,
+ }
+ 
+ /* Return true if H is a locally-defined PIC function, in the sense
+-   that it might need $25 to be valid on entry.  Note that MIPS16
+-   functions never need $25 to be valid on entry; they set up $gp
+-   using PC-relative instructions instead.  */
++   that it or its fn_stub might need $25 to be valid on entry.
++   Note that MIPS16 functions set up $gp using PC-relative instructions,
++   so they themselves never need $25 to be valid.  Only non-MIPS16
++   entry points are of interest here.  */
+ 
+ static bfd_boolean
+ mips_elf_local_pic_function_p (struct mips_elf_link_hash_entry *h)
+@@ -1582,11 +1594,32 @@ mips_elf_local_pic_function_p (struct mips_elf_link_hash_entry *h)
+ 	   || h->root.root.type == bfd_link_hash_defweak)
+ 	  && h->root.def_regular
+ 	  && !bfd_is_abs_section (h->root.root.u.def.section)
+-	  && !ELF_ST_IS_MIPS16 (h->root.other)
++	  && (!ELF_ST_IS_MIPS16 (h->root.other)
++	      || (h->fn_stub && h->need_fn_stub))
+ 	  && (PIC_OBJECT_P (h->root.root.u.def.section->owner)
+ 	      || ELF_ST_IS_MIPS_PIC (h->root.other)));
+ }
+ 
++/* Set *SEC to the input section that contains the target of STUB.
++   Return the offset of the target from the start of that section.  */
++
++static bfd_vma
++mips_elf_get_la25_target (struct mips_elf_la25_stub *stub,
++			  asection **sec)
++{
++  if (ELF_ST_IS_MIPS16 (stub->h->root.other))
++    {
++      BFD_ASSERT (stub->h->need_fn_stub);
++      *sec = stub->h->fn_stub;
++      return 0;
++    }
++  else
++    {
++      *sec = stub->h->root.root.u.def.section;
++      return stub->h->root.root.u.def.value;
++    }
++}
++
+ /* STUB describes an la25 stub that we have decided to implement
+    by inserting an LUI/ADDIU pair before the target function.
+    Create the section and redirect the function symbol to it.  */
+@@ -1611,7 +1644,7 @@ mips_elf_add_la25_intro (struct mips_elf_la25_stub *stub,
+   sprintf (name, ".text.stub.%d", (int) htab_elements (htab->la25_stubs));
+ 
+   /* Create the section.  */
+-  input_section = stub->h->root.root.u.def.section;
++  mips_elf_get_la25_target (stub, &input_section);
+   s = htab->add_stub_section (name, input_section,
+ 			      input_section->output_section);
+   if (s == NULL)
+@@ -1685,12 +1718,6 @@ mips_elf_add_la25_stub (struct bfd_link_info *info,
+   bfd_vma value;
+   void **slot;
+ 
+-  /* Prefer to use LUI/ADDIU stubs if the function is at the beginning
+-     of the section and if we would need no more than 2 nops.  */
+-  s = h->root.root.u.def.section;
+-  value = h->root.root.u.def.value;
+-  use_trampoline_p = (value != 0 || s->alignment_power > 4);
+-
+   /* Describe the stub we want.  */
+   search.stub_section = NULL;
+   search.offset = 0;
+@@ -1720,6 +1747,11 @@ mips_elf_add_la25_stub (struct bfd_link_info *info,
+   *stub = search;
+   *slot = stub;
+ 
++  /* Prefer to use LUI/ADDIU stubs if the function is at the beginning
++     of the section and if we would need no more than 2 nops.  */
++  value = mips_elf_get_la25_target (stub, &s);
++  use_trampoline_p = (value != 0 || s->alignment_power > 4);
++
+   h->la25_stub = stub;
+   return (use_trampoline_p
+ 	  ? mips_elf_add_la25_trampoline (stub, info)
+@@ -1860,6 +1892,13 @@ mips16_reloc_p (int r_type)
+     case R_MIPS16_CALL16:
+     case R_MIPS16_HI16:
+     case R_MIPS16_LO16:
++    case R_MIPS16_TLS_GD:
++    case R_MIPS16_TLS_LDM:
++    case R_MIPS16_TLS_DTPREL_HI16:
++    case R_MIPS16_TLS_DTPREL_LO16:
++    case R_MIPS16_TLS_GOTTPREL:
++    case R_MIPS16_TLS_TPREL_HI16:
++    case R_MIPS16_TLS_TPREL_LO16:
+       return TRUE;
+ 
+     default:
+@@ -1987,19 +2026,25 @@ micromips_branch_reloc_p (int r_type)
+ static inline bfd_boolean
+ tls_gd_reloc_p (unsigned int r_type)
+ {
+-  return r_type == R_MIPS_TLS_GD || r_type == R_MICROMIPS_TLS_GD;
++  return (r_type == R_MIPS_TLS_GD
++	  || r_type == R_MIPS16_TLS_GD
++	  || r_type == R_MICROMIPS_TLS_GD);
+ }
+ 
+ static inline bfd_boolean
+ tls_ldm_reloc_p (unsigned int r_type)
+ {
+-  return r_type == R_MIPS_TLS_LDM || r_type == R_MICROMIPS_TLS_LDM;
++  return (r_type == R_MIPS_TLS_LDM
++	  || r_type == R_MIPS16_TLS_LDM
++	  || r_type == R_MICROMIPS_TLS_LDM);
+ }
+ 
+ static inline bfd_boolean
+ tls_gottprel_reloc_p (unsigned int r_type)
+ {
+-  return r_type == R_MIPS_TLS_GOTTPREL || r_type == R_MICROMIPS_TLS_GOTTPREL;
++  return (r_type == R_MIPS_TLS_GOTTPREL
++	  || r_type == R_MIPS16_TLS_GOTTPREL
++	  || r_type == R_MICROMIPS_TLS_GOTTPREL);
+ }
+ 
+ void
+@@ -4907,7 +4952,8 @@ is_gott_symbol (struct bfd_link_info *info, struct elf_link_hash_entry *h)
+    stub.  */
+ 
+ static bfd_boolean
+-mips_elf_relocation_needs_la25_stub (bfd *input_bfd, int r_type)
++mips_elf_relocation_needs_la25_stub (bfd *input_bfd, int r_type,
++				     bfd_boolean target_is_16_bit_code_p)
+ {
+   /* We specifically ignore branches and jumps from EF_PIC objects,
+      where the onus is on the compiler or programmer to perform any
+@@ -4921,7 +4967,6 @@ mips_elf_relocation_needs_la25_stub (bfd *input_bfd, int r_type)
+     {
+     case R_MIPS_26:
+     case R_MIPS_PC16:
+-    case R_MIPS16_26:
+     case R_MICROMIPS_26_S1:
+     case R_MICROMIPS_PC7_S1:
+     case R_MICROMIPS_PC10_S1:
+@@ -4929,6 +4974,9 @@ mips_elf_relocation_needs_la25_stub (bfd *input_bfd, int r_type)
+     case R_MICROMIPS_PC23_S2:
+       return TRUE;
+ 
++    case R_MIPS16_26:
++      return !target_is_16_bit_code_p;
++
+     default:
+       return FALSE;
+     }
+@@ -5189,14 +5237,28 @@ mips_elf_calculate_relocation (bfd *abfd, bfd *input_bfd,
+ 	 have already noticed that we were going to need the
+ 	 stub.  */
+       if (local_p)
+-	sec = elf_tdata (input_bfd)->local_stubs[r_symndx];
++	{
++	  sec = elf_tdata (input_bfd)->local_stubs[r_symndx];
++	  value = 0;
++	}
+       else
+ 	{
+ 	  BFD_ASSERT (h->need_fn_stub);
+-	  sec = h->fn_stub;
++	  if (h->la25_stub)
++	    {
++	      /* If a LA25 header for the stub itself exists, point to the
++		 prepended LUI/ADDIU sequence.  */
++	      sec = h->la25_stub->stub_section;
++	      value = h->la25_stub->offset;
++	    }
++	  else
++	    {
++	      sec = h->fn_stub;
++	      value = 0;
++	    }
+ 	}
+ 
+-      symbol = sec->output_section->vma + sec->output_offset;
++      symbol = sec->output_section->vma + sec->output_offset + value;
+       /* The target is 16-bit, but the stub isn't.  */
+       target_is_16_bit_code_p = FALSE;
+     }
+@@ -5246,7 +5308,8 @@ mips_elf_calculate_relocation (bfd *abfd, bfd *input_bfd,
+   /* If this is a direct call to a PIC function, redirect to the
+      non-PIC stub.  */
+   else if (h != NULL && h->la25_stub
+-	   && mips_elf_relocation_needs_la25_stub (input_bfd, r_type))
++	   && mips_elf_relocation_needs_la25_stub (input_bfd, r_type,
++						   target_is_16_bit_code_p))
+     symbol = (h->la25_stub->stub_section->output_section->vma
+ 	      + h->la25_stub->stub_section->output_offset
+ 	      + h->la25_stub->offset);
+@@ -5318,6 +5381,9 @@ mips_elf_calculate_relocation (bfd *abfd, bfd *input_bfd,
+     case R_MIPS_TLS_GD:
+     case R_MIPS_TLS_GOTTPREL:
+     case R_MIPS_TLS_LDM:
++    case R_MIPS16_TLS_GD:
++    case R_MIPS16_TLS_GOTTPREL:
++    case R_MIPS16_TLS_LDM:
+     case R_MICROMIPS_TLS_GD:
+     case R_MICROMIPS_TLS_GOTTPREL:
+     case R_MICROMIPS_TLS_LDM:
+@@ -5487,6 +5553,7 @@ mips_elf_calculate_relocation (bfd *abfd, bfd *input_bfd,
+       break;
+ 
+     case R_MIPS_TLS_DTPREL_HI16:
++    case R_MIPS16_TLS_DTPREL_HI16:
+     case R_MICROMIPS_TLS_DTPREL_HI16:
+       value = (mips_elf_high (addend + symbol - dtprel_base (info))
+ 	       & howto->dst_mask);
+@@ -5495,17 +5562,22 @@ mips_elf_calculate_relocation (bfd *abfd, bfd *input_bfd,
+     case R_MIPS_TLS_DTPREL_LO16:
+     case R_MIPS_TLS_DTPREL32:
+     case R_MIPS_TLS_DTPREL64:
++    case R_MIPS16_TLS_DTPREL_LO16:
+     case R_MICROMIPS_TLS_DTPREL_LO16:
+       value = (symbol + addend - dtprel_base (info)) & howto->dst_mask;
+       break;
+ 
+     case R_MIPS_TLS_TPREL_HI16:
++    case R_MIPS16_TLS_TPREL_HI16:
+     case R_MICROMIPS_TLS_TPREL_HI16:
+       value = (mips_elf_high (addend + symbol - tprel_base (info))
+ 	       & howto->dst_mask);
+       break;
+ 
+     case R_MIPS_TLS_TPREL_LO16:
++    case R_MIPS_TLS_TPREL32:
++    case R_MIPS_TLS_TPREL64:
++    case R_MIPS16_TLS_TPREL_LO16:
+     case R_MICROMIPS_TLS_TPREL_LO16:
+       value = (symbol + addend - tprel_base (info)) & howto->dst_mask;
+       break;
+@@ -5527,10 +5599,11 @@ mips_elf_calculate_relocation (bfd *abfd, bfd *input_bfd,
+ 	       12: addu    $v0,$v1
+ 	       14: move    $gp,$v0
+ 	     So the offsets of hi and lo relocs are the same, but the
+-	     $pc is four higher than $t9 would be, so reduce
+-	     both reloc addends by 4. */
++	     base $pc is that used by the ADDIUPC instruction at $t9 + 4.
++	     ADDIUPC clears the low two bits of the instruction address,
++	     so the base is ($t9 + 4) & ~3.  */
+ 	  if (r_type == R_MIPS16_HI16)
+-	    value = mips_elf_high (addend + gp - p - 4);
++	    value = mips_elf_high (addend + gp - ((p + 4) & ~(bfd_vma) 0x3));
+ 	  /* The microMIPS .cpload sequence uses the same assembly
+ 	     instructions as the traditional psABI version, but the
+ 	     incoming $t9 has the low bit set.  */
+@@ -5553,7 +5626,7 @@ mips_elf_calculate_relocation (bfd *abfd, bfd *input_bfd,
+ 	  /* See the comment for R_MIPS16_HI16 above for the reason
+ 	     for this conditional.  */
+ 	  if (r_type == R_MIPS16_LO16)
+-	    value = addend + gp - p;
++	    value = addend + gp - (p & ~(bfd_vma) 0x3);
+ 	  else if (r_type == R_MICROMIPS_LO16
+ 		   || r_type == R_MICROMIPS_HI0_LO16)
+ 	    value = addend + gp - p + 3;
+@@ -5637,6 +5710,9 @@ mips_elf_calculate_relocation (bfd *abfd, bfd *input_bfd,
+     case R_MIPS_TLS_GOTTPREL:
+     case R_MIPS_TLS_LDM:
+     case R_MIPS_GOT_DISP:
++    case R_MIPS16_TLS_GD:
++    case R_MIPS16_TLS_GOTTPREL:
++    case R_MIPS16_TLS_LDM:
+     case R_MICROMIPS_TLS_GD:
+     case R_MICROMIPS_TLS_GOTTPREL:
+     case R_MICROMIPS_TLS_LDM:
+@@ -7081,6 +7157,7 @@ _bfd_mips_elf_add_symbol_hook (bfd *abfd, struct bfd_link_info *info,
+ 	return FALSE;
+ 
+       mips_elf_hash_table (info)->use_rld_obj_head = TRUE;
++      mips_elf_hash_table (info)->rld_symbol = h;
+     }
+ 
+   /* If this is a mips16 text symbol, add 1 to the value to make it
+@@ -7266,6 +7343,7 @@ _bfd_mips_elf_create_dynamic_sections (bfd *abfd, struct bfd_link_info *info)
+ 
+ 	  if (! bfd_elf_link_record_dynamic_symbol (info, h))
+ 	    return FALSE;
++	  mips_elf_hash_table (info)->rld_symbol = h;
+ 	}
+     }
+ 
+@@ -7767,8 +7845,6 @@ _bfd_mips_elf_check_relocs (bfd *abfd, struct bfd_link_info *info,
+       can_make_dynamic_p = FALSE;
+       switch (r_type)
+ 	{
+-	case R_MIPS16_GOT16:
+-	case R_MIPS16_CALL16:
+ 	case R_MIPS_GOT16:
+ 	case R_MIPS_CALL16:
+ 	case R_MIPS_CALL_HI16:
+@@ -7781,6 +7857,11 @@ _bfd_mips_elf_check_relocs (bfd *abfd, struct bfd_link_info *info,
+ 	case R_MIPS_TLS_GOTTPREL:
+ 	case R_MIPS_TLS_GD:
+ 	case R_MIPS_TLS_LDM:
++	case R_MIPS16_GOT16:
++	case R_MIPS16_CALL16:
++	case R_MIPS16_TLS_GOTTPREL:
++	case R_MIPS16_TLS_GD:
++	case R_MIPS16_TLS_LDM:
+ 	case R_MICROMIPS_GOT16:
+ 	case R_MICROMIPS_CALL16:
+ 	case R_MICROMIPS_CALL_HI16:
+@@ -7918,7 +7999,9 @@ _bfd_mips_elf_check_relocs (bfd *abfd, struct bfd_link_info *info,
+ 	    return FALSE;
+ 	}
+ 
+-      if (h != NULL && mips_elf_relocation_needs_la25_stub (abfd, r_type))
++      if (h != NULL
++	  && mips_elf_relocation_needs_la25_stub (abfd, r_type,
++						  ELF_ST_IS_MIPS16 (h->other)))
+ 	((struct mips_elf_link_hash_entry *) h)->has_nonpic_branches = TRUE;
+ 
+       switch (r_type)
+@@ -8015,12 +8098,14 @@ _bfd_mips_elf_check_relocs (bfd *abfd, struct bfd_link_info *info,
+ 	  break;
+ 
+ 	case R_MIPS_TLS_GOTTPREL:
++	case R_MIPS16_TLS_GOTTPREL:
+ 	case R_MICROMIPS_TLS_GOTTPREL:
+ 	  if (info->shared)
+ 	    info->flags |= DF_STATIC_TLS;
+ 	  /* Fall through */
+ 
+ 	case R_MIPS_TLS_LDM:
++	case R_MIPS16_TLS_LDM:
+ 	case R_MICROMIPS_TLS_LDM:
+ 	  if (tls_ldm_reloc_p (r_type))
+ 	    {
+@@ -8030,6 +8115,7 @@ _bfd_mips_elf_check_relocs (bfd *abfd, struct bfd_link_info *info,
+ 	  /* Fall through */
+ 
+ 	case R_MIPS_TLS_GD:
++	case R_MIPS16_TLS_GD:
+ 	case R_MICROMIPS_TLS_GD:
+ 	  /* This symbol requires a global offset table entry, or two
+ 	     for TLS GD relocations.  */
+@@ -9027,7 +9113,7 @@ _bfd_mips_elf_size_dynamic_sections (bfd *output_bfd,
+ 	{
+ 	  /* We add a room for __rld_map.  It will be filled in by the
+ 	     rtld to contain a pointer to the _r_debug structure.  */
+-	  s->size += 4;
++	  s->size += MIPS_ELF_RLD_MAP_SIZE (output_bfd);
+ 	}
+       else if (SGI_COMPAT (output_bfd)
+ 	       && CONST_STRNEQ (name, ".compact_rel"))
+@@ -9299,7 +9385,7 @@ _bfd_mips_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info,
+ 	    sec = h->root.u.def.section;
+ 	}
+ 
+-      if (sec != NULL && elf_discarded_section (sec))
++      if (sec != NULL && discarded_section (sec))
+ 	RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section,
+ 					 rel, relend, howto, contents);
+ 
+@@ -9615,9 +9701,9 @@ mips_elf_create_la25_stub (void **slot, void *data)
+   offset = stub->offset;
+ 
+   /* Work out the target address.  */
+-  target = (stub->h->root.root.u.def.section->output_section->vma
+-	    + stub->h->root.root.u.def.section->output_offset
+-	    + stub->h->root.root.u.def.value);
++  target = mips_elf_get_la25_target (stub, &s);
++  target += s->output_section->vma + s->output_offset;
++
+   target_high = ((target + 0x8000) >> 16) & 0xffff;
+   target_low = (target & 0xffff);
+ 
+@@ -10030,31 +10116,6 @@ _bfd_mips_elf_finish_dynamic_symbol (bfd *output_bfd,
+   if (IRIX_COMPAT (output_bfd) == ict_irix6)
+     mips_elf_irix6_finish_dynamic_symbol (output_bfd, name, sym);
+ 
+-  if (! info->shared)
+-    {
+-      if (! mips_elf_hash_table (info)->use_rld_obj_head
+-	  && (strcmp (name, "__rld_map") == 0
+-	      || strcmp (name, "__RLD_MAP") == 0))
+-	{
+-	  asection *s = bfd_get_section_by_name (dynobj, ".rld_map");
+-	  BFD_ASSERT (s != NULL);
+-	  sym->st_value = s->output_section->vma + s->output_offset;
+-	  bfd_put_32 (output_bfd, 0, s->contents);
+-	  if (mips_elf_hash_table (info)->rld_value == 0)
+-	    mips_elf_hash_table (info)->rld_value = sym->st_value;
+-	}
+-      else if (mips_elf_hash_table (info)->use_rld_obj_head
+-	       && strcmp (name, "__rld_obj_head") == 0)
+-	{
+-	  /* IRIX6 does not use a .rld_map section.  */
+-	  if (IRIX_COMPAT (output_bfd) == ict_irix5
+-              || IRIX_COMPAT (output_bfd) == ict_none)
+-	    BFD_ASSERT (bfd_get_section_by_name (dynobj, ".rld_map")
+-			!= NULL);
+-	  mips_elf_hash_table (info)->rld_value = sym->st_value;
+-	}
+-    }
+-
+   /* Keep dynamic MIPS16 symbols odd.  This allows the dynamic linker to
+      treat MIPS16 symbols like any other.  */
+   if (ELF_ST_IS_MIPS16 (sym->st_other))
+@@ -10517,7 +10578,19 @@ _bfd_mips_elf_finish_dynamic_sections (bfd *output_bfd,
+ 	      break;
+ 
+ 	    case DT_MIPS_RLD_MAP:
+-	      dyn.d_un.d_ptr = mips_elf_hash_table (info)->rld_value;
++	      {
++		struct elf_link_hash_entry *h;
++		h = mips_elf_hash_table (info)->rld_symbol;
++		if (!h)
++		  {
++		    dyn_to_skip = MIPS_ELF_DYN_SIZE (dynobj);
++		    swap_out_p = FALSE;
++		    break;
++		  }
++		s = h->root.u.def.section;
++		dyn.d_un.d_ptr = (s->output_section->vma + s->output_offset
++				  + h->root.u.def.value);
++	      }
+ 	      break;
+ 
+ 	    case DT_MIPS_OPTIONS:
+@@ -12794,7 +12867,7 @@ _bfd_mips_elf_link_hash_table_create (bfd *abfd)
+   ret->procedure_count = 0;
+   ret->compact_rel_size = 0;
+   ret->use_rld_obj_head = FALSE;
+-  ret->rld_value = 0;
++  ret->rld_symbol = NULL;
+   ret->mips16_stubs_seen = FALSE;
+   ret->use_plts_and_copy_relocs = FALSE;
+   ret->is_vxworks = FALSE;
+diff --git a/bfd/elfxx-sparc.c b/bfd/elfxx-sparc.c
+index 9a15124..f3c631e 100644
+--- a/bfd/elfxx-sparc.c
++++ b/bfd/elfxx-sparc.c
+@@ -2970,7 +2970,7 @@ _bfd_sparc_elf_relocate_section (bfd *output_bfd,
+ 	    }
+ 	}
+ 
+-      if (sec != NULL && elf_discarded_section (sec))
++      if (sec != NULL && discarded_section (sec))
+ 	RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section,
+ 					 rel, relend, howto, contents);
+ 
+diff --git a/bfd/elfxx-tilegx.c b/bfd/elfxx-tilegx.c
+index c484562..e1c8946 100644
+--- a/bfd/elfxx-tilegx.c
++++ b/bfd/elfxx-tilegx.c
+@@ -2908,7 +2908,7 @@ tilegx_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info,
+ 	    }
+ 	}
+ 
+-      if (sec != NULL && elf_discarded_section (sec))
++      if (sec != NULL && discarded_section (sec))
+ 	RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section,
+ 					 rel, relend, howto, contents);
+ 
+diff --git a/bfd/libbfd.h b/bfd/libbfd.h
+index 200a6fa..0395ec2 100644
+--- a/bfd/libbfd.h
++++ b/bfd/libbfd.h
+@@ -1086,6 +1086,13 @@ static const char *const bfd_reloc_code_real_names[] = { "@@uninitialized@@",
+   "BFD_RELOC_MIPS16_HI16",
+   "BFD_RELOC_MIPS16_HI16_S",
+   "BFD_RELOC_MIPS16_LO16",
++  "BFD_RELOC_MIPS16_TLS_GD",
++  "BFD_RELOC_MIPS16_TLS_LDM",
++  "BFD_RELOC_MIPS16_TLS_DTPREL_HI16",
++  "BFD_RELOC_MIPS16_TLS_DTPREL_LO16",
++  "BFD_RELOC_MIPS16_TLS_GOTTPREL",
++  "BFD_RELOC_MIPS16_TLS_TPREL_HI16",
++  "BFD_RELOC_MIPS16_TLS_TPREL_LO16",
+   "BFD_RELOC_MIPS_LITERAL",
+   "BFD_RELOC_MICROMIPS_LITERAL",
+   "BFD_RELOC_MICROMIPS_7_PCREL_S1",
+diff --git a/bfd/linker.c b/bfd/linker.c
+index 7a01e11..e5d20b2 100644
+--- a/bfd/linker.c
++++ b/bfd/linker.c
+@@ -1,6 +1,6 @@
+ /* linker.c -- BFD linker routines
+    Copyright 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+-   2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011
++   2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012
+    Free Software Foundation, Inc.
+    Written by Steve Chamberlain and Ian Lance Taylor, Cygnus Support
+ 
+@@ -810,6 +810,7 @@ void
+ _bfd_generic_link_just_syms (asection *sec,
+ 			     struct bfd_link_info *info ATTRIBUTE_UNUSED)
+ {
++  sec->sec_info_type = SEC_INFO_TYPE_JUST_SYMS;
+   sec->output_section = bfd_abs_section_ptr;
+   sec->output_offset = sec->vma;
+ }
+diff --git a/bfd/reloc.c b/bfd/reloc.c
+index 6ac7148..e3f0343 100644
+--- a/bfd/reloc.c
++++ b/bfd/reloc.c
+@@ -2247,6 +2247,23 @@ ENUMDOC
+   MIPS16 low 16 bits.
+ 
+ ENUM
++  BFD_RELOC_MIPS16_TLS_GD
++ENUMX
++  BFD_RELOC_MIPS16_TLS_LDM
++ENUMX
++  BFD_RELOC_MIPS16_TLS_DTPREL_HI16
++ENUMX
++  BFD_RELOC_MIPS16_TLS_DTPREL_LO16
++ENUMX
++  BFD_RELOC_MIPS16_TLS_GOTTPREL
++ENUMX
++  BFD_RELOC_MIPS16_TLS_TPREL_HI16
++ENUMX
++  BFD_RELOC_MIPS16_TLS_TPREL_LO16
++ENUMDOC
++  MIPS16 TLS relocations
++
++ENUM
+   BFD_RELOC_MIPS_LITERAL
+ ENUMX
+   BFD_RELOC_MICROMIPS_LITERAL
+@@ -6218,7 +6235,7 @@ bfd_generic_get_relocated_section_contents (bfd *abfd,
+ 	  bfd_reloc_status_type r;
+ 
+ 	  symbol = *(*parent)->sym_ptr_ptr;
+-	  if (symbol->section && elf_discarded_section (symbol->section))
++	  if (symbol->section && discarded_section (symbol->section))
+ 	    {
+ 	      bfd_byte *p;
+ 	      static reloc_howto_type none_howto
+diff --git a/bfd/section.c b/bfd/section.c
+index 7c1f750..e60f247 100644
+--- a/bfd/section.c
++++ b/bfd/section.c
+@@ -382,11 +382,11 @@ CODE_FRAGMENT
+ .
+ .  {* Type of sec_info information.  *}
+ .  unsigned int sec_info_type:3;
+-.#define ELF_INFO_TYPE_NONE      0
+-.#define ELF_INFO_TYPE_STABS     1
+-.#define ELF_INFO_TYPE_MERGE     2
+-.#define ELF_INFO_TYPE_EH_FRAME  3
+-.#define ELF_INFO_TYPE_JUST_SYMS 4
++.#define SEC_INFO_TYPE_NONE      0
++.#define SEC_INFO_TYPE_STABS     1
++.#define SEC_INFO_TYPE_MERGE     2
++.#define SEC_INFO_TYPE_EH_FRAME  3
++.#define SEC_INFO_TYPE_JUST_SYMS 4
+ .
+ .  {* Nonzero if this section uses RELA relocations, rather than REL.  *}
+ .  unsigned int use_rela_p:1;
+diff --git a/bfd/version.h b/bfd/version.h
+index c6800ec..8784380 100644
+--- a/bfd/version.h
++++ b/bfd/version.h
+@@ -1,4 +1,4 @@
+-#define BFD_VERSION_DATE 20111121
++#define BFD_VERSION_DATE 20120704
+ #define BFD_VERSION @bfd_version@
+ #define BFD_VERSION_STRING  @bfd_version_package@ @bfd_version_string@
+ #define REPORT_BUGS_TO @report_bugs_to@
+diff --git a/binutils/ChangeLog b/binutils/ChangeLog
+index 2f5af61..30101e5 100644
+--- a/binutils/ChangeLog
++++ b/binutils/ChangeLog
+@@ -1,3 +1,10 @@
++2012-01-26  Nick Clifton  <nickc@redhat.com>
++
++	PR binutils/13622
++	* readelf.c (process_section_groups): If there are no section
++	headers do not scan for section groups.
++	(process_note_sections): Likewise for note sections.
++
+ 2011-10-25  Alan Modra  <amodra@gmail.com>
+ 
+ 	Apply mainline patches
+diff --git a/binutils/readelf.c b/binutils/readelf.c
+index 9e13190..bf053d9 100644
+--- a/binutils/readelf.c
++++ b/binutils/readelf.c
+@@ -4937,7 +4937,8 @@ process_section_groups (FILE * file)
+   if (section_headers == NULL)
+     {
+       error (_("Section headers are not available!\n"));
+-      abort ();
++      /* PR 13622: This can happen with a corrupt ELF header.  */
++      return 0;
+     }
+ 
+   section_headers_groups = (struct group **) calloc (elf_header.e_shnum,
+@@ -12942,7 +12943,7 @@ process_note_sections (FILE * file)
+   int res = 1;
+ 
+   for (i = 0, section = section_headers;
+-       i < elf_header.e_shnum;
++       i < elf_header.e_shnum && section != NULL;
+        i++, section++)
+     if (section->sh_type == SHT_NOTE)
+       res &= process_corefile_note_segment (file,
+diff --git a/gas/ChangeLog b/gas/ChangeLog
+index b29f95f..df24933 100644
+--- a/gas/ChangeLog
++++ b/gas/ChangeLog
+@@ -1,3 +1,23 @@
++2012-01-08  Richard Sandiford  <rdsandiford@googlemail.com>
++
++	* config/tc-mips.c (s_tls_rel_directive): Call mips_clear_insn_labels.
++
++2011-12-19  Chung-Lin Tang  <cltang@codesourcery.com>
++
++	Backport from mainline:
++
++	2011-12-19  Chung-Lin Tang  <cltang@codesourcery.com>
++
++	* config/tc-mips.c (mips_pseudo_table): Add tprelword/tpreldword
++	entries.
++	(mips16_percent_op): Add MIPS16 TLS relocation ops.
++	(md_apply_fix): Add BFD_RELOC_MIPS16_TLS_* switch cases.
++	(s_tls_rel_directive): Rename from s_dtprel_internal(). Abstract out
++	directive string and reloc type as function parameters. Update
++	comments.
++	(s_dtprelword,s_dtpreldword): Change to use s_tls_rel_directive().
++	(s_tprelword,s_tpreldword): New functions.
++
+ 2011-11-15  Maciej W. Rozycki  <macro@codesourcery.com>
+ 
+ 	Apply mainline patches
+diff --git a/gas/config/tc-mips.c b/gas/config/tc-mips.c
+index 0e4c66e..5324450 100644
+--- a/gas/config/tc-mips.c
++++ b/gas/config/tc-mips.c
+@@ -1352,6 +1352,8 @@ static void s_cprestore (int);
+ static void s_cpreturn (int);
+ static void s_dtprelword (int);
+ static void s_dtpreldword (int);
++static void s_tprelword (int);
++static void s_tpreldword (int);
+ static void s_gpvalue (int);
+ static void s_gpword (int);
+ static void s_gpdword (int);
+@@ -1431,6 +1433,8 @@ static const pseudo_typeS mips_pseudo_table[] =
+   {"cpreturn", s_cpreturn, 0},
+   {"dtprelword", s_dtprelword, 0},
+   {"dtpreldword", s_dtpreldword, 0},
++  {"tprelword", s_tprelword, 0},
++  {"tpreldword", s_tpreldword, 0},
+   {"gpvalue", s_gpvalue, 0},
+   {"gpword", s_gpword, 0},
+   {"gpdword", s_gpdword, 0},
+@@ -14040,7 +14044,14 @@ static const struct percent_op_match mips16_percent_op[] =
+   {"%gprel", BFD_RELOC_MIPS16_GPREL},
+   {"%got", BFD_RELOC_MIPS16_GOT16},
+   {"%call16", BFD_RELOC_MIPS16_CALL16},
+-  {"%hi", BFD_RELOC_MIPS16_HI16_S}
++  {"%hi", BFD_RELOC_MIPS16_HI16_S},
++  {"%tlsgd", BFD_RELOC_MIPS16_TLS_GD},
++  {"%tlsldm", BFD_RELOC_MIPS16_TLS_LDM},
++  {"%dtprel_hi", BFD_RELOC_MIPS16_TLS_DTPREL_HI16},
++  {"%dtprel_lo", BFD_RELOC_MIPS16_TLS_DTPREL_LO16},
++  {"%tprel_hi", BFD_RELOC_MIPS16_TLS_TPREL_HI16},
++  {"%tprel_lo", BFD_RELOC_MIPS16_TLS_TPREL_LO16},
++  {"%gottprel", BFD_RELOC_MIPS16_TLS_GOTTPREL}
+ };
+ 
+ 
+@@ -15369,6 +15380,8 @@ md_apply_fix (fixS *fixP, valueT *valP, segT seg ATTRIBUTE_UNUSED)
+     case BFD_RELOC_MIPS_TLS_DTPREL_HI16:
+     case BFD_RELOC_MIPS_TLS_DTPREL_LO16:
+     case BFD_RELOC_MIPS_TLS_GOTTPREL:
++    case BFD_RELOC_MIPS_TLS_TPREL32:
++    case BFD_RELOC_MIPS_TLS_TPREL64:
+     case BFD_RELOC_MIPS_TLS_TPREL_HI16:
+     case BFD_RELOC_MIPS_TLS_TPREL_LO16:
+     case BFD_RELOC_MICROMIPS_TLS_GD:
+@@ -15378,6 +15391,13 @@ md_apply_fix (fixS *fixP, valueT *valP, segT seg ATTRIBUTE_UNUSED)
+     case BFD_RELOC_MICROMIPS_TLS_GOTTPREL:
+     case BFD_RELOC_MICROMIPS_TLS_TPREL_HI16:
+     case BFD_RELOC_MICROMIPS_TLS_TPREL_LO16:
++    case BFD_RELOC_MIPS16_TLS_GD:
++    case BFD_RELOC_MIPS16_TLS_LDM:
++    case BFD_RELOC_MIPS16_TLS_DTPREL_HI16:
++    case BFD_RELOC_MIPS16_TLS_DTPREL_LO16:
++    case BFD_RELOC_MIPS16_TLS_GOTTPREL:
++    case BFD_RELOC_MIPS16_TLS_TPREL_HI16:
++    case BFD_RELOC_MIPS16_TLS_TPREL_LO16:
+       S_SET_THREAD_LOCAL (fixP->fx_addsy);
+       /* fall through */
+ 
+@@ -16547,12 +16567,14 @@ s_cpreturn (int ignore ATTRIBUTE_UNUSED)
+   demand_empty_rest_of_line ();
+ }
+ 
+-/* Handle the .dtprelword and .dtpreldword pseudo-ops.  They generate
+-   a 32-bit or 64-bit DTP-relative relocation (BYTES says which) for
+-   use in DWARF debug information.  */
++/* Handle a .dtprelword, .dtpreldword, .tprelword, or .tpreldword
++   pseudo-op; DIRSTR says which. The pseudo-op generates a BYTES-size
++   DTP- or TP-relative relocation of type RTYPE, for use in either DWARF
++   debug information or MIPS16 TLS.  */
+ 
+ static void
+-s_dtprel_internal (size_t bytes)
++s_tls_rel_directive (const size_t bytes, const char *dirstr,
++		     bfd_reloc_code_real_type rtype)
+ {
+   expressionS ex;
+   char *p;
+@@ -16561,20 +16583,15 @@ s_dtprel_internal (size_t bytes)
+ 
+   if (ex.X_op != O_symbol)
+     {
+-      as_bad (_("Unsupported use of %s"), (bytes == 8
+-					   ? ".dtpreldword"
+-					   : ".dtprelword"));
++      as_bad (_("Unsupported use of %s"), dirstr);
+       ignore_rest_of_line ();
+     }
+ 
+   p = frag_more (bytes);
+   md_number_to_chars (p, 0, bytes);
+-  fix_new_exp (frag_now, p - frag_now->fr_literal, bytes, &ex, FALSE,
+-	       (bytes == 8
+-		? BFD_RELOC_MIPS_TLS_DTPREL64
+-		: BFD_RELOC_MIPS_TLS_DTPREL32));
+-
++  fix_new_exp (frag_now, p - frag_now->fr_literal, bytes, &ex, FALSE, rtype);
+   demand_empty_rest_of_line ();
++  mips_clear_insn_labels ();
+ }
+ 
+ /* Handle .dtprelword.  */
+@@ -16582,7 +16599,7 @@ s_dtprel_internal (size_t bytes)
+ static void
+ s_dtprelword (int ignore ATTRIBUTE_UNUSED)
+ {
+-  s_dtprel_internal (4);
++  s_tls_rel_directive (4, ".dtprelword", BFD_RELOC_MIPS_TLS_DTPREL32);
+ }
+ 
+ /* Handle .dtpreldword.  */
+@@ -16590,7 +16607,23 @@ s_dtprelword (int ignore ATTRIBUTE_UNUSED)
+ static void
+ s_dtpreldword (int ignore ATTRIBUTE_UNUSED)
+ {
+-  s_dtprel_internal (8);
++  s_tls_rel_directive (8, ".dtpreldword", BFD_RELOC_MIPS_TLS_DTPREL64);
++}
++
++/* Handle .tprelword.  */
++
++static void
++s_tprelword (int ignore ATTRIBUTE_UNUSED)
++{
++  s_tls_rel_directive (4, ".tprelword", BFD_RELOC_MIPS_TLS_TPREL32);
++}
++
++/* Handle .tpreldword.  */
++
++static void
++s_tpreldword (int ignore ATTRIBUTE_UNUSED)
++{
++  s_tls_rel_directive (8, ".tpreldword", BFD_RELOC_MIPS_TLS_TPREL64);
+ }
+ 
+ /* Handle the .gpvalue pseudo-op.  This is used when generating NewABI PIC
+diff --git a/gas/testsuite/ChangeLog b/gas/testsuite/ChangeLog
+index 0631572..cbb2309 100644
+--- a/gas/testsuite/ChangeLog
++++ b/gas/testsuite/ChangeLog
+@@ -1,3 +1,8 @@
++2012-01-08  Richard Sandiford  <rdsandiford@googlemail.com>
++
++	* gas/mips/tls-relw.s, gas/mips/tls-relw.d: New test.
++	* gas/mips/mips.exp: Run it.
++
+ 2011-11-14  Maciej W. Rozycki  <macro@codesourcery.com>
+ 
+ 	Apply mainline patches
+diff --git a/gas/testsuite/gas/mips/mips.exp b/gas/testsuite/gas/mips/mips.exp
+index cbaaa70..2f49a2a 100644
+--- a/gas/testsuite/gas/mips/mips.exp
++++ b/gas/testsuite/gas/mips/mips.exp
+@@ -878,6 +878,7 @@ if { [istarget mips*-*-vxworks*] } {
+ 
+ 	run_list_test "tls-ill" "-32"
+ 	run_dump_test "tls-o32"
++	run_dump_test "tls-relw"
+ 	run_dump_test "jalr2"
+ 
+ 	run_dump_test_arches "aent"	[mips_arch_list_matching mips1]
+diff --git a/gas/testsuite/gas/mips/tls-relw.d b/gas/testsuite/gas/mips/tls-relw.d
+new file mode 100644
+index 0000000..bc13b43
+--- /dev/null
++++ b/gas/testsuite/gas/mips/tls-relw.d
+@@ -0,0 +1,8 @@
++# as: -EB
++# objdump: -sj.data
++
++.*
++
++Contents of section \.data:
++ 0000 00000001 00000000 00000002 00000004  ................
++ 0010 00000000 00000003 00000010 00000000  ................
+diff --git a/gas/testsuite/gas/mips/tls-relw.s b/gas/testsuite/gas/mips/tls-relw.s
+new file mode 100644
+index 0000000..6890685
+--- /dev/null
++++ b/gas/testsuite/gas/mips/tls-relw.s
+@@ -0,0 +1,12 @@
++	.data
++start:
++	.word	1
++a:
++	.tprelword t1
++	.word	2
++	.word	a-start
++b:
++	.dtprelword t2
++	.word	3
++	.word	b-start
++	.word	0
+diff --git a/gold/ChangeLog b/gold/ChangeLog
+index 7f91606..437cf97 100644
+--- a/gold/ChangeLog
++++ b/gold/ChangeLog
+@@ -1,3 +1,185 @@
++2012-04-27  Doug Kwan  <dougkwan@google.com>
++
++	Backport from mainline:
++
++	2012-03-16  Doug Kwan  <dougkwan@google.com>
++
++		* testsuite/Makefile.am: Disable test initpri3b.
++		* testsuite/Makefile.in: Regenerate.
++
++	2012-03-14  Doug Kwan  <dougkwan@google.com>
++
++		* gold/arm.cc (Target_arm::Scan::global): Generate
++		 R_ARM_GLOB_DAT dynamic relocations for protected symbols in
++		shared objects.
++
++2012-04-06  Ian Lance Taylor  <iant@google.com>
++
++	* timer.cc: #include <unistd.h>.
++
++2011-12-19  Ian Lance Taylor  <iant@google.com>
++
++	Copy from mainline to binutils 2.22 branch:
++
++	2011-12-17  Cary Coutant  <ccoutant@google.com>
++
++	* dwarf_reader.cc (Sized_dwarf_line_info::read_lines): Add casts.
++	* resolve.cc (Symbol_table::resolve): Likewise.
++	* i386.cc (Target_i386::do_code_fill): Use char constants for nop
++	arrays.
++	* x86_64.cc (Target_x86_64::do_code_fill): Likewise.
++
++	2011-10-31  Cary Coutant  <ccoutant@google.com>
++
++	PR gold/13023
++	* expression.cc (Expression::eval_with_dot): Add
++	is_section_dot_assignment parameter.
++	(Expression::eval_maybe_dot): Likewise.  Adjust value when rhs is
++	absolute and assigning to dot within a section.
++	* script-sections.cc
++	(Output_section_element_assignment::set_section_addresses): Pass
++	dot_section to set_if_absolute.
++	(Output_section_element_dot_assignment::finalize_symbols): Pass TRUE
++	as is_section_dot_assignment flag to eval_with_dot.
++	(Output_section_element_dot_assignment::set_section_addresses):
++	Likewise.
++	* script.cc (Symbol_assignment::set_if_absolute): Add dot_section
++	parameter.  Also set value if relative to dot_section; set the
++	symbol's output_section.
++	* script.h (Expression::eval_with_dot): Add is_section_dot_assignment
++	parameter.  Adjust all callers.
++	(Expression::eval_maybe_dot): Likewise.
++	(Symbol_assignment::set_if_absolute): Add dot_section parameter.
++	Adjust all callers.
++	* testsuite/script_test_2.t: Test assignment of an absolute value
++	to dot within an output section element.
++
++	2011-10-31  Cary Coutant  <ccoutant@google.com>
++
++	* options.h (class General_options): Add --[no-]gnu-unique options.
++	* symtab.cc (Symbol_table::sized_write_globals): Convert
++	STB_GNU_UNIQUE to STB_GLOBAL if --no-gnu-unique.
++
++	2011-10-31  Cary Coutant  <ccoutant@google.com>
++
++	PR gold/13359
++	* i386.cc (Target_i386::Relocate::relocate_tls): Remove
++	unnecessary assertion.
++	* x86_64.cc (Target_x86_64::Relocate::relocate_tls): Likewise.
++
++	2011-10-31 Sriraman Tallam  <tmsriram@google.com>
++
++	* symtab.h (Symbol_table::gc_mark_symbol_for_shlib): Rename to
++	gc_mark_symbol.
++	* symtab.cc (Symbol_table::gc_mark_symbol_for_shlib): Rename to
++	gc_mark_symbol.
++	Change to just keep the section associated with symbol.
++	(Symbol_table::add_from_relobj): Mark symbols as not garbage when
++	they are externally visible and --export-dynamic is turned on.
++	(Symbol_table::gc_mark_dyn_syms): Call gc_mark_symbol.
++
++	2011-10-19  Ian Lance Taylor  <iant@google.com>
++
++	PR gold/13163
++	* script-sections.cc
++	(Output_section_element_dot_assignment::needs_output_section): New
++	function.
++
++	2011-10-19  Ian Lance Taylor  <iant@google.com>
++
++	PR gold/13204
++	* layout.cc (Layout::segment_precedes): Don't assert failure if a
++	--section-start option was seen.
++	* options.h (General_options::any_section_start): New function.
++
++	2011-10-18  Cary Coutant  <ccoutant@google.com>
++
++	* output.cc (posix_fallocate): Return 0 on success, errno on failure.
++	(Output_file::map_no_anonymous): Check for non-zero
++	return code from posix_fallocate.
++
++	2011-10-17  Cary Coutant  <ccoutant@google.com>
++
++	PR gold/13245
++	* plugin.cc (is_visible_from_outside): Check for symbols
++	referenced from dynamic objects.
++	* resolve.cc (Symbol_table::resolve): Don't count references
++	from dynamic objects as references from real ELF files.
++	* testsuite/plugin_test_2.sh: Adjust expected result.
++
++	2011-10-17  Cary Coutant  <ccoutant@google.com>
++
++	* readsyms.cc (Read_symbols::run): Don't queue an unblocker
++	task for members of lib groups.
++
++	2011-10-17  Cary Coutant  <ccoutant@google.com>
++
++	PR gold/13288
++	* fileread.cc (File_read::find_view): Add assert.
++	(File_read::make_view): Move bounds check (replace with assert)...
++	(File_read::find_or_make_view): ... to here.
++
++	2011-10-12  Cary Coutant  <ccoutant@google.com>
++
++	* output.cc (Output_file::open_base_file): Handle case where
++	::read returns less than requested size.
++
++	2011-10-10  Cary Coutant  <ccoutant@google.com>
++
++	* incremental.cc (Sized_relobj_incr::Sized_relobj_incr):
++	Initialize defined_count_.
++	(Sized_relobj_incr::do_add_symbols): Count defined symbols.
++	(Sized_relobj_incr::do_get_global_symbol_counts): Rewrite.
++	(Sized_incr_dynobj::Sized_incr_dynobj): Initialize defined_count_.
++	(Sized_incr_dynobj::do_add_symbols): Count defined symbols.
++	(Sized_incr_dynobj::do_get_global_symbol_counts): Rewrite.
++	* incremental.h (Sized_relobj_incr::defined_count_): New data
++	member.
++	(Sized_incr_dynobj::defined_count_): New data member.
++	* plugin.cc (Sized_pluginobj::do_get_global_symbol_counts):
++	Return zeroes instead of internal error.
++
++	2011-10-10  Cary Coutant  <ccoutant@google.com>
++
++	PR gold/13249
++	* output.cc (Output_reloc::Output_reloc): Add use_plt_offset flag.
++	(Output_reloc::symbol_value): Return PLT offset if flag is set.
++	* output.h (class Output_reloc): Add use_plt_offset flag.
++	(Output_reloc::type_): Adjust size of bit field.
++	(Output_reloc::use_plt_offset_): New bit field.
++	(class Output_data_reloc): Adjust all calls to Output_reloc_type.
++	(Output_data_reloc::add_local_relative): (RELA only) Add use_plt_offset
++	flag.  Adjust all callers.
++	* x86_64.cc (Target_x86_64::Scan::local): Check for IFUNC when
++	creating RELATIVE relocations.
++
++	2011-10-03   Diego Novillo  <dnovillo@google.com>
++
++	* options.cc (parse_uint): Fix dereference of RETVAL.
++
++	2011-09-29  Cary Coutant  <ccoutant@google.com>
++
++	* incremental.cc (Sized_incremental_binary::do_process_got_plt):
++	Check for NULL.
++	* symtab.cc (Symbol_table::add_from_relobj): Ignore version
++	symbols during incremental update.
++	(Symbol_table::add_from_dynobj): Likewise.
++
++	2011-09-26  Cary Coutant  <ccoutant@google.com>
++
++	* gold.cc (queue_initial_tasks): Move option checks ...
++	* options.cc (General_options::finalize): ... to here. Disable
++	some options; make others fatal.
++
++	2011-09-23  Simon Baldwin  <simonb@google.com>
++
++	* configure.ac: Add new --with-gold-ldadd and --with-gold-ldflags
++	configuration options.
++	* configure: Regenerate.
++	* Makefile.am: Handle GOLD_LDADD and GOLD_LDFLAGS.
++	* Makefile.in: Regenerate.
++	* testsuite/Makefile.in: Regenerate.
++
+ 2011-11-11  Doug Kwan  <dougkwan@google.com>
+ 
+ 	* arm.cc (Target_arm::do_make_elf_object): Allow executable also
+diff --git a/gold/arm.cc b/gold/arm.cc
+index 72c3670..a1e8e4c 100644
+--- a/gold/arm.cc
++++ b/gold/arm.cc
+@@ -8374,7 +8374,9 @@ Target_arm<big_endian>::Scan::global(Symbol_table* symtab,
+ 	    Reloc_section* rel_dyn = target->rel_dyn_section(layout);
+ 	    if (gsym->is_from_dynobj()
+ 		|| gsym->is_undefined()
+-		|| gsym->is_preemptible())
++		|| gsym->is_preemptible()
++		|| (gsym->visibility() == elfcpp::STV_PROTECTED
++		    && parameters->options().shared()))
+ 	      got->add_global_with_rel(gsym, GOT_TYPE_STANDARD,
+ 				       rel_dyn, elfcpp::R_ARM_GLOB_DAT);
+ 	    else
+diff --git a/gold/dwarf_reader.cc b/gold/dwarf_reader.cc
+index 3dc33e4..2b47a28 100644
+--- a/gold/dwarf_reader.cc
++++ b/gold/dwarf_reader.cc
+@@ -1,6 +1,6 @@
+ // dwarf_reader.cc -- parse dwarf2/3 debug information
+ 
+-// Copyright 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
++// Copyright 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc.
+ // Written by Ian Lance Taylor <iant@google.com>.
+ 
+ // This file is part of gold.
+@@ -491,8 +491,10 @@ Sized_dwarf_line_info<size, big_endian>::read_lines(unsigned const char* lineptr
+               && (shndx == -1U || lsm.shndx == -1U || shndx == lsm.shndx))
+             {
+               Offset_to_lineno_entry entry
+-                  = { lsm.address, this->current_header_index_,
+-                      lsm.file_num, true, lsm.line_num };
++                  = { static_cast<off_t>(lsm.address),
++		      this->current_header_index_,
++		      static_cast<unsigned int>(lsm.file_num),
++		      true, lsm.line_num };
+ 	      std::vector<Offset_to_lineno_entry>&
+ 		map(this->line_number_map_[lsm.shndx]);
+ 	      // If we see two consecutive entries with the same
+diff --git a/gold/expression.cc b/gold/expression.cc
+index e527b5e..e31c151 100644
+--- a/gold/expression.cc
++++ b/gold/expression.cc
+@@ -1,6 +1,6 @@
+ // expression.cc -- expressions in linker scripts for gold
+ 
+-// Copyright 2006, 2007, 2008 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.
+@@ -77,7 +77,7 @@ Expression::eval(const Symbol_table* symtab, const Layout* layout,
+ 		 bool check_assertions)
+ {
+   return this->eval_maybe_dot(symtab, layout, check_assertions,
+-			      false, 0, NULL, NULL, NULL);
++			      false, 0, NULL, NULL, NULL, false);
+ }
+ 
+ // Evaluate an expression which may refer to the dot symbol.
+@@ -87,11 +87,13 @@ Expression::eval_with_dot(const Symbol_table* symtab, const Layout* layout,
+ 			  bool check_assertions, uint64_t dot_value,
+ 			  Output_section* dot_section,
+ 			  Output_section** result_section_pointer,
+-			  uint64_t* result_alignment_pointer)
++			  uint64_t* result_alignment_pointer,
++			  bool is_section_dot_assignment)
+ {
+   return this->eval_maybe_dot(symtab, layout, check_assertions, true,
+ 			      dot_value, dot_section, result_section_pointer,
+-			      result_alignment_pointer);
++			      result_alignment_pointer,
++			      is_section_dot_assignment);
+ }
+ 
+ // Evaluate an expression which may or may not refer to the dot
+@@ -102,7 +104,8 @@ Expression::eval_maybe_dot(const Symbol_table* symtab, const Layout* layout,
+ 			   bool check_assertions, bool is_dot_available,
+ 			   uint64_t dot_value, Output_section* dot_section,
+ 			   Output_section** result_section_pointer,
+-			   uint64_t* result_alignment_pointer)
++			   uint64_t* result_alignment_pointer,
++			   bool is_section_dot_assignment)
+ {
+   Expression_eval_info eei;
+   eei.symtab = symtab;
+@@ -113,14 +116,24 @@ Expression::eval_maybe_dot(const Symbol_table* symtab, const Layout* layout,
+   eei.dot_section = dot_section;
+ 
+   // We assume the value is absolute, and only set this to a section
+-  // if we find a section relative reference.
++  // if we find a section-relative reference.
+   if (result_section_pointer != NULL)
+     *result_section_pointer = NULL;
+   eei.result_section_pointer = result_section_pointer;
+ 
+   eei.result_alignment_pointer = result_alignment_pointer;
+ 
+-  return this->value(&eei);
++  uint64_t val = this->value(&eei);
++
++  // If this is an assignment to dot within a section, and the value
++  // is absolute, treat it as a section-relative offset.
++  if (is_section_dot_assignment && *result_section_pointer == NULL)
++    {
++      gold_assert(dot_section != NULL);
++      val += dot_section->address();
++      *result_section_pointer = dot_section;
++    }
++  return val;
+ }
+ 
+ // A number.
+@@ -257,7 +270,8 @@ class Unary_expression : public Expression
+ 				      eei->dot_value,
+ 				      eei->dot_section,
+ 				      arg_section_pointer,
+-				      eei->result_alignment_pointer);
++				      eei->result_alignment_pointer,
++				      false);
+   }
+ 
+   void
+@@ -336,7 +350,8 @@ class Binary_expression : public Expression
+ 				       eei->dot_value,
+ 				       eei->dot_section,
+ 				       section_pointer,
+-				       alignment_pointer);
++				       alignment_pointer,
++				       false);
+   }
+ 
+   uint64_t
+@@ -350,7 +365,8 @@ class Binary_expression : public Expression
+ 					eei->dot_value,
+ 					eei->dot_section,
+ 					section_pointer,
+-					alignment_pointer);
++					alignment_pointer,
++					false);
+   }
+ 
+   void
+@@ -500,7 +516,8 @@ class Trinary_expression : public Expression
+ 				       eei->dot_value,
+ 				       eei->dot_section,
+ 				       section_pointer,
+-				       NULL);
++				       NULL,
++				       false);
+   }
+ 
+   uint64_t
+@@ -514,7 +531,8 @@ class Trinary_expression : public Expression
+ 				       eei->dot_value,
+ 				       eei->dot_section,
+ 				       section_pointer,
+-				       alignment_pointer);
++				       alignment_pointer,
++				       false);
+   }
+ 
+   uint64_t
+@@ -528,7 +546,8 @@ class Trinary_expression : public Expression
+ 				       eei->dot_value,
+ 				       eei->dot_section,
+ 				       section_pointer,
+-				       alignment_pointer);
++				       alignment_pointer,
++				       false);
+   }
+ 
+   void
+diff --git a/gold/fileread.cc b/gold/fileread.cc
+index 80ddfbc..c5dc320 100644
+--- a/gold/fileread.cc
++++ b/gold/fileread.cc
+@@ -329,6 +329,10 @@ inline File_read::View*
+ File_read::find_view(off_t start, section_size_type size,
+ 		     unsigned int byteshift, File_read::View** vshifted) const
+ {
++  gold_assert(start <= this->size_
++	      && (static_cast<unsigned long long>(size)
++		  <= static_cast<unsigned long long>(this->size_ - start)));
++
+   if (vshifted != NULL)
+     *vshifted = NULL;
+ 
+@@ -456,16 +460,9 @@ File_read::make_view(off_t start, section_size_type size,
+ 		     unsigned int byteshift, bool cache)
+ {
+   gold_assert(size > 0);
+-
+-  // Check that start and end of the view are within the file.
+-  if (start > this->size_
+-      || (static_cast<unsigned long long>(size)
+-          > static_cast<unsigned long long>(this->size_ - start)))
+-    gold_fatal(_("%s: attempt to map %lld bytes at offset %lld exceeds "
+-                 "size of file; the file may be corrupt"),
+-		   this->filename().c_str(),
+-		   static_cast<long long>(size),
+-		   static_cast<long long>(start));
++  gold_assert(start <= this->size_
++	      && (static_cast<unsigned long long>(size)
++		  <= static_cast<unsigned long long>(this->size_ - start)));
+ 
+   off_t poff = File_read::page_offset(start);
+ 
+@@ -523,6 +520,16 @@ File_read::View*
+ File_read::find_or_make_view(off_t offset, off_t start,
+ 			     section_size_type size, bool aligned, bool cache)
+ {
++  // Check that start and end of the view are within the file.
++  if (start > this->size_
++      || (static_cast<unsigned long long>(size)
++          > static_cast<unsigned long long>(this->size_ - start)))
++    gold_fatal(_("%s: attempt to map %lld bytes at offset %lld exceeds "
++                 "size of file; the file may be corrupt"),
++		   this->filename().c_str(),
++		   static_cast<long long>(size),
++		   static_cast<long long>(start));
++
+   unsigned int byteshift;
+   if (offset == 0)
+     byteshift = 0;
+diff --git a/gold/gold.cc b/gold/gold.cc
+index 12f25b7..693ff79 100644
+--- a/gold/gold.cc
++++ b/gold/gold.cc
+@@ -197,46 +197,29 @@ queue_initial_tasks(const General_options& options,
+   // For incremental links, the base output file.
+   Incremental_binary* ibase = NULL;
+ 
+-  if (parameters->incremental())
+-    {
+-      if (options.relocatable())
+-	gold_error(_("incremental linking is incompatible with -r"));
+-      if (options.emit_relocs())
+-	gold_error(_("incremental linking is incompatible with --emit-relocs"));
+-      if (options.gc_sections())
+-	gold_error(_("incremental linking is incompatible with --gc-sections"));
+-      if (options.icf_enabled())
+-	gold_error(_("incremental linking is incompatible with --icf"));
+-      if (options.has_plugins())
+-	gold_error(_("incremental linking is incompatible with --plugin"));
+-      if (strcmp(options.compress_debug_sections(), "none") != 0)
+-	gold_error(_("incremental linking is incompatible with "
+-		     "--compress-debug-sections"));
+-
+-      if (parameters->incremental_update())
++  if (parameters->incremental_update())
++    {
++      Output_file* of = new Output_file(options.output_file_name());
++      if (of->open_base_file(options.incremental_base(), true))
+ 	{
+-	  Output_file* of = new Output_file(options.output_file_name());
+-	  if (of->open_base_file(options.incremental_base(), true))
+-	    {
+-	      ibase = open_incremental_binary(of);
+-	      if (ibase != NULL
+-		  && ibase->check_inputs(cmdline, layout->incremental_inputs()))
+-		ibase->init_layout(layout);
+-	      else
+-		{
+-		  delete ibase;
+-		  ibase = NULL;
+-		  of->close();
+-		}
+-	    }
+-	  if (ibase == NULL)
++	  ibase = open_incremental_binary(of);
++	  if (ibase != NULL
++	      && ibase->check_inputs(cmdline, layout->incremental_inputs()))
++	    ibase->init_layout(layout);
++	  else
+ 	    {
+-	      if (set_parameters_incremental_full())
+-		gold_info(_("linking with --incremental-full"));
+-	      else
+-		gold_fallback(_("restart link with --incremental-full"));
++	      delete ibase;
++	      ibase = NULL;
++	      of->close();
+ 	    }
+ 	}
++      if (ibase == NULL)
++	{
++	  if (set_parameters_incremental_full())
++	    gold_info(_("linking with --incremental-full"));
++	  else
++	    gold_fallback(_("restart link with --incremental-full"));
++	}
+     }
+ 
+   // Read the input files.  We have to add the symbols to the symbol
+diff --git a/gold/i386.cc b/gold/i386.cc
+index 445bc68..efb6248 100644
+--- a/gold/i386.cc
++++ b/gold/i386.cc
+@@ -2709,12 +2709,6 @@ Target_i386::Relocate::relocate_tls(const Relocate_info<32, false>* relinfo,
+             }
+           if (optimized_type == tls::TLSOPT_TO_IE)
+ 	    {
+-	      if (tls_segment == NULL)
+-		{
+-		  gold_assert(parameters->errors()->error_count() > 0
+-			      || issue_undefined_symbol_error(gsym));
+-		  return;
+-		}
+ 	      this->tls_gd_to_ie(relinfo, relnum, tls_segment, rel, r_type,
+                                  got_offset, view, view_size);
+               break;
+@@ -3480,42 +3474,51 @@ Target_i386::do_code_fill(section_size_type length) const
+     }
+ 
+   // Nop sequences of various lengths.
+-  const char nop1[1] = { 0x90 };                   // nop
+-  const char nop2[2] = { 0x66, 0x90 };             // xchg %ax %ax
+-  const char nop3[3] = { 0x8d, 0x76, 0x00 };       // leal 0(%esi),%esi
+-  const char nop4[4] = { 0x8d, 0x74, 0x26, 0x00};  // leal 0(%esi,1),%esi
+-  const char nop5[5] = { 0x90, 0x8d, 0x74, 0x26,   // nop
+-                         0x00 };                   // leal 0(%esi,1),%esi
+-  const char nop6[6] = { 0x8d, 0xb6, 0x00, 0x00,   // leal 0L(%esi),%esi
+-                         0x00, 0x00 };
+-  const char nop7[7] = { 0x8d, 0xb4, 0x26, 0x00,   // leal 0L(%esi,1),%esi
+-                         0x00, 0x00, 0x00 };
+-  const char nop8[8] = { 0x90, 0x8d, 0xb4, 0x26,   // nop
+-                         0x00, 0x00, 0x00, 0x00 }; // leal 0L(%esi,1),%esi
+-  const char nop9[9] = { 0x89, 0xf6, 0x8d, 0xbc,   // movl %esi,%esi
+-                         0x27, 0x00, 0x00, 0x00,   // leal 0L(%edi,1),%edi
+-                         0x00 };
+-  const char nop10[10] = { 0x8d, 0x76, 0x00, 0x8d, // leal 0(%esi),%esi
+-                           0xbc, 0x27, 0x00, 0x00, // leal 0L(%edi,1),%edi
+-                           0x00, 0x00 };
+-  const char nop11[11] = { 0x8d, 0x74, 0x26, 0x00, // leal 0(%esi,1),%esi
+-                           0x8d, 0xbc, 0x27, 0x00, // leal 0L(%edi,1),%edi
+-                           0x00, 0x00, 0x00 };
+-  const char nop12[12] = { 0x8d, 0xb6, 0x00, 0x00, // leal 0L(%esi),%esi
+-                           0x00, 0x00, 0x8d, 0xbf, // leal 0L(%edi),%edi
+-                           0x00, 0x00, 0x00, 0x00 };
+-  const char nop13[13] = { 0x8d, 0xb6, 0x00, 0x00, // leal 0L(%esi),%esi
+-                           0x00, 0x00, 0x8d, 0xbc, // leal 0L(%edi,1),%edi
+-                           0x27, 0x00, 0x00, 0x00,
+-                           0x00 };
+-  const char nop14[14] = { 0x8d, 0xb4, 0x26, 0x00, // leal 0L(%esi,1),%esi
+-                           0x00, 0x00, 0x00, 0x8d, // leal 0L(%edi,1),%edi
+-                           0xbc, 0x27, 0x00, 0x00,
+-                           0x00, 0x00 };
+-  const char nop15[15] = { 0xeb, 0x0d, 0x90, 0x90, // jmp .+15
+-                           0x90, 0x90, 0x90, 0x90, // nop,nop,nop,...
+-                           0x90, 0x90, 0x90, 0x90,
+-                           0x90, 0x90, 0x90 };
++  const char nop1[1] = { '\x90' };                   // nop
++  const char nop2[2] = { '\x66', '\x90' };           // xchg %ax %ax
++  const char nop3[3] = { '\x8d', '\x76', '\x00' };   // leal 0(%esi),%esi
++  const char nop4[4] = { '\x8d', '\x74', '\x26',     // leal 0(%esi,1),%esi
++			 '\x00'};
++  const char nop5[5] = { '\x90', '\x8d', '\x74',     // nop
++  			 '\x26', '\x00' };           // leal 0(%esi,1),%esi
++  const char nop6[6] = { '\x8d', '\xb6', '\x00',     // leal 0L(%esi),%esi
++  			 '\x00', '\x00', '\x00' };
++  const char nop7[7] = { '\x8d', '\xb4', '\x26',     // leal 0L(%esi,1),%esi
++  			 '\x00', '\x00', '\x00',
++			 '\x00' };
++  const char nop8[8] = { '\x90', '\x8d', '\xb4',     // nop
++  			 '\x26', '\x00', '\x00',     // leal 0L(%esi,1),%esi
++			 '\x00', '\x00' };
++  const char nop9[9] = { '\x89', '\xf6', '\x8d',     // movl %esi,%esi
++  			 '\xbc', '\x27', '\x00',     // leal 0L(%edi,1),%edi
++			 '\x00', '\x00', '\x00' };
++  const char nop10[10] = { '\x8d', '\x76', '\x00',   // leal 0(%esi),%esi
++  			   '\x8d', '\xbc', '\x27',   // leal 0L(%edi,1),%edi
++			   '\x00', '\x00', '\x00',
++			   '\x00' };
++  const char nop11[11] = { '\x8d', '\x74', '\x26',   // leal 0(%esi,1),%esi
++  			   '\x00', '\x8d', '\xbc',   // leal 0L(%edi,1),%edi
++			   '\x27', '\x00', '\x00',
++			   '\x00', '\x00' };
++  const char nop12[12] = { '\x8d', '\xb6', '\x00',   // leal 0L(%esi),%esi
++  			   '\x00', '\x00', '\x00',   // leal 0L(%edi),%edi
++			   '\x8d', '\xbf', '\x00',
++			   '\x00', '\x00', '\x00' };
++  const char nop13[13] = { '\x8d', '\xb6', '\x00',   // leal 0L(%esi),%esi
++  			   '\x00', '\x00', '\x00',   // leal 0L(%edi,1),%edi
++			   '\x8d', '\xbc', '\x27',
++			   '\x00', '\x00', '\x00',
++                           '\x00' };
++  const char nop14[14] = { '\x8d', '\xb4', '\x26',   // leal 0L(%esi,1),%esi
++  			   '\x00', '\x00', '\x00',   // leal 0L(%edi,1),%edi
++			   '\x00', '\x8d', '\xbc',
++			   '\x27', '\x00', '\x00',
++                           '\x00', '\x00' };
++  const char nop15[15] = { '\xeb', '\x0d', '\x90',   // jmp .+15
++  			   '\x90', '\x90', '\x90',   // nop,nop,nop,...
++			   '\x90', '\x90', '\x90',
++			   '\x90', '\x90', '\x90',
++                           '\x90', '\x90', '\x90' };
+ 
+   const char* nops[16] = {
+     NULL,
+diff --git a/gold/incremental.cc b/gold/incremental.cc
+index b422827..75e44c5 100644
+--- a/gold/incremental.cc
++++ b/gold/incremental.cc
+@@ -685,7 +685,7 @@ Sized_incremental_binary<size, big_endian>::do_process_got_plt(
+       gold_assert(plt_desc >= first_global && plt_desc < symtab_count);
+       Symbol* sym = this->global_symbol(plt_desc - first_global);
+       // Add the PLT entry only if the symbol is still referenced.
+-      if (sym->in_reg())
++      if (sym != NULL && sym->in_reg())
+ 	{
+ 	  gold_debug(DEBUG_INCREMENTAL,
+ 		     "PLT entry %d: %s",
+@@ -1966,8 +1966,9 @@ Sized_relobj_incr<size, big_endian>::Sized_relobj_incr(
+     input_reader_(ibase->inputs_reader().input_file(input_file_index)),
+     local_symbol_count_(0), output_local_dynsym_count_(0),
+     local_symbol_index_(0), local_symbol_offset_(0), local_dynsym_offset_(0),
+-    symbols_(), incr_reloc_offset_(-1U), incr_reloc_count_(0),
+-    incr_reloc_output_index_(0), incr_relocs_(NULL), local_symbols_()
++    symbols_(), defined_count_(0), incr_reloc_offset_(-1U),
++    incr_reloc_count_(0), incr_reloc_output_index_(0), incr_relocs_(NULL),
++    local_symbols_()
+ {
+   if (this->input_reader_.is_in_system_directory())
+     this->set_is_in_system_directory();
+@@ -2120,6 +2121,9 @@ Sized_relobj_incr<size, big_endian>::do_add_symbols(
+ 
+       Symbol* res = symtab->add_from_incrobj(this, name, NULL, &sym);
+ 
++      if (shndx != elfcpp::SHN_UNDEF)
++        ++this->defined_count_;
++
+       // If this is a linker-defined symbol that hasn't yet been defined,
+       // define it now.
+       if (input_shndx == -1U && !res->is_defined())
+@@ -2283,9 +2287,21 @@ Sized_relobj_incr<size, big_endian>::do_initialize_xindex()
+ template<int size, bool big_endian>
+ void
+ Sized_relobj_incr<size, big_endian>::do_get_global_symbol_counts(
+-    const Symbol_table*, size_t*, size_t*) const
+-{
+-  gold_unreachable();
++    const Symbol_table*,
++    size_t* defined,
++    size_t* used) const
++{
++  *defined = this->defined_count_;
++  size_t count = 0;
++  for (typename Symbols::const_iterator p = this->symbols_.begin();
++       p != this->symbols_.end();
++       ++p)
++    if (*p != NULL
++	&& (*p)->source() == Symbol::FROM_OBJECT
++	&& (*p)->object() == this
++	&& (*p)->is_defined())
++      ++count;
++  *used = count;
+ }
+ 
+ // Read the relocs.
+@@ -2579,7 +2595,7 @@ Sized_incr_dynobj<size, big_endian>::Sized_incr_dynobj(
+   : Dynobj(name, NULL), ibase_(ibase),
+     input_file_index_(input_file_index),
+     input_reader_(ibase->inputs_reader().input_file(input_file_index)),
+-    symbols_()
++    symbols_(), defined_count_(0)
+ {
+   if (this->input_reader_.is_in_system_directory())
+     this->set_is_in_system_directory();
+@@ -2677,6 +2693,7 @@ Sized_incr_dynobj<size, big_endian>::do_add_symbols(
+ 	  // is meaningless, as long as it's not SHN_UNDEF.
+ 	  shndx = 1;
+ 	  v = gsym.get_st_value();
++	  ++this->defined_count_;
+ 	}
+ 
+       osym.put_st_name(0);
+@@ -2845,9 +2862,22 @@ Sized_incr_dynobj<size, big_endian>::do_initialize_xindex()
+ template<int size, bool big_endian>
+ void
+ Sized_incr_dynobj<size, big_endian>::do_get_global_symbol_counts(
+-    const Symbol_table*, size_t*, size_t*) const
+-{
+-  gold_unreachable();
++    const Symbol_table*,
++    size_t* defined,
++    size_t* used) const
++{
++  *defined = this->defined_count_;
++  size_t count = 0;
++  for (typename Symbols::const_iterator p = this->symbols_.begin();
++       p != this->symbols_.end();
++       ++p)
++    if (*p != NULL
++	&& (*p)->source() == Symbol::FROM_OBJECT
++	&& (*p)->object() == this
++	&& (*p)->is_defined()
++	&& (*p)->dynsym_index() != -1U)
++      ++count;
++  *used = count;
+ }
+ 
+ // Allocate an incremental object of the appropriate size and endianness.
+diff --git a/gold/incremental.h b/gold/incremental.h
+index e6732df..56fc52b 100644
+--- a/gold/incremental.h
++++ b/gold/incremental.h
+@@ -1996,6 +1996,8 @@ class Sized_relobj_incr : public Sized_relobj<size, big_endian>
+   unsigned int local_dynsym_offset_;
+   // The entries in the symbol table for the external symbols.
+   Symbols symbols_;
++  // Number of symbols defined in object file itself.
++  size_t defined_count_;
+   // The offset of the first incremental relocation for this object.
+   unsigned int incr_reloc_offset_;
+   // The number of incremental relocations for this object.
+@@ -2127,6 +2129,8 @@ class Sized_incr_dynobj : public Dynobj
+   Input_entry_reader input_reader_;
+   // The entries in the symbol table for the external symbols.
+   Symbols symbols_;
++  // Number of symbols defined in object file itself.
++  size_t defined_count_;
+ };
+ 
+ // Allocate an incremental object of the appropriate size and endianness.
+diff --git a/gold/layout.cc b/gold/layout.cc
+index 1c32bcf..9d8a43a 100644
+--- a/gold/layout.cc
++++ b/gold/layout.cc
+@@ -2975,8 +2975,9 @@ Layout::segment_precedes(const Output_segment* seg1,
+ 
+   // We shouldn't get here--we shouldn't create segments which we
+   // can't distinguish.  Unless of course we are using a weird linker
+-  // script.
+-  gold_assert(this->script_options_->saw_phdrs_clause());
++  // script or overlapping --section-start options.
++  gold_assert(this->script_options_->saw_phdrs_clause()
++	      || parameters->options().any_section_start());
+   return false;
+ }
+ 
+diff --git a/gold/options.cc b/gold/options.cc
+index be32645..dcf6ba7 100644
+--- a/gold/options.cc
++++ b/gold/options.cc
+@@ -198,7 +198,7 @@ parse_uint(const char* option_name, const char* arg, int* retval)
+ {
+   char* endptr;
+   *retval = strtol(arg, &endptr, 0);
+-  if (*endptr != '\0' || retval < 0)
++  if (*endptr != '\0' || *retval < 0)
+     gold_fatal(_("%s: invalid option value (expected an integer): %s"),
+                option_name, arg);
+ }
+@@ -1224,6 +1224,37 @@ General_options::finalize()
+     gold_fatal(_("Options --incremental-changed, --incremental-unchanged, "
+                  "--incremental-unknown require the use of --incremental"));
+ 
++  // Check for options that are not compatible with incremental linking.
++  // Where an option can be disabled without seriously changing the semantics
++  // of the link, we turn the option off; otherwise, we issue a fatal error.
++
++  if (this->incremental_mode_ != INCREMENTAL_OFF)
++    {
++      if (this->relocatable())
++	gold_fatal(_("incremental linking is not compatible with -r"));
++      if (this->emit_relocs())
++	gold_fatal(_("incremental linking is not compatible with "
++		     "--emit-relocs"));
++      if (this->has_plugins())
++	gold_fatal(_("incremental linking is not compatible with --plugin"));
++      if (this->gc_sections())
++	{
++	  gold_warning(_("ignoring --gc-sections for an incremental link"));
++	  this->set_gc_sections(false);
++	}
++      if (this->icf_enabled())
++	{
++	  gold_warning(_("ignoring --icf for an incremental link"));
++	  this->set_icf_status(ICF_NONE);
++	}
++      if (strcmp(this->compress_debug_sections(), "none") != 0)
++	{
++	  gold_warning(_("ignoring --compress-debug-sections for an "
++			 "incremental link"));
++	  this->set_compress_debug_sections("none");
++	}
++    }
++
+   // FIXME: we can/should be doing a lot more sanity checking here.
+ }
+ 
+diff --git a/gold/options.h b/gold/options.h
+index 768df9c..8876a1e 100644
+--- a/gold/options.h
++++ b/gold/options.h
+@@ -791,6 +791,10 @@ class General_options
+   DEFINE_bool(g, options::EXACTLY_ONE_DASH, '\0', false,
+ 	      N_("Ignored"), NULL);
+ 
++  DEFINE_bool(gnu_unique, options::TWO_DASHES, '\0', true,
++	      N_("Enable STB_GNU_UNIQUE symbol binding (default)"),
++	      N_("Disable STB_GNU_UNIQUE symbol binding"));
++
+   DEFINE_string(soname, options::ONE_DASH, 'h', NULL,
+                 N_("Set shared library name"), N_("FILENAME"));
+ 
+@@ -1385,6 +1389,11 @@ class General_options
+   bool
+   section_start(const char* secname, uint64_t* paddr) const;
+ 
++  // Return whether any --section-start option was used.
++  bool
++  any_section_start() const
++  { return !this->section_starts_.empty(); }
++
+   enum Fix_v4bx
+   {
+     // Leave original instruction.
+diff --git a/gold/output.cc b/gold/output.cc
+index 29d8e3d..a7e1e9a 100644
+--- a/gold/output.cc
++++ b/gold/output.cc
+@@ -119,7 +119,9 @@ extern "C" void *gold_mremap(void *, size_t, size_t, int);
+ static int
+ posix_fallocate(int o, off_t offset, off_t len)
+ {
+-  return ftruncate(o, offset + len);
++  if (ftruncate(o, offset + len) < 0)
++    return errno;
++  return 0;
+ }
+ #endif // !defined(HAVE_POSIX_FALLOCATE)
+ 
+@@ -706,7 +708,7 @@ Output_reloc<elfcpp::SHT_REL, dynamic, size, big_endian>::Output_reloc(
+     bool is_symbolless)
+   : address_(address), local_sym_index_(GSYM_CODE), type_(type),
+     is_relative_(is_relative), is_symbolless_(is_symbolless),
+-    is_section_symbol_(false), shndx_(INVALID_CODE)
++    is_section_symbol_(false), use_plt_offset_(false), shndx_(INVALID_CODE)
+ {
+   // this->type_ is a bitfield; make sure TYPE fits.
+   gold_assert(this->type_ == type);
+@@ -727,7 +729,7 @@ Output_reloc<elfcpp::SHT_REL, dynamic, size, big_endian>::Output_reloc(
+     bool is_symbolless)
+   : address_(address), local_sym_index_(GSYM_CODE), type_(type),
+     is_relative_(is_relative), is_symbolless_(is_symbolless),
+-    is_section_symbol_(false), shndx_(shndx)
++    is_section_symbol_(false), use_plt_offset_(false), shndx_(shndx)
+ {
+   gold_assert(shndx != INVALID_CODE);
+   // this->type_ is a bitfield; make sure TYPE fits.
+@@ -749,10 +751,12 @@ Output_reloc<elfcpp::SHT_REL, dynamic, size, big_endian>::Output_reloc(
+     Address address,
+     bool is_relative,
+     bool is_symbolless,
+-    bool is_section_symbol)
++    bool is_section_symbol,
++    bool use_plt_offset)
+   : address_(address), local_sym_index_(local_sym_index), type_(type),
+     is_relative_(is_relative), is_symbolless_(is_symbolless),
+-    is_section_symbol_(is_section_symbol), shndx_(INVALID_CODE)
++    is_section_symbol_(is_section_symbol), use_plt_offset_(use_plt_offset),
++    shndx_(INVALID_CODE)
+ {
+   gold_assert(local_sym_index != GSYM_CODE
+               && local_sym_index != INVALID_CODE);
+@@ -773,10 +777,12 @@ Output_reloc<elfcpp::SHT_REL, dynamic, size, big_endian>::Output_reloc(
+     Address address,
+     bool is_relative,
+     bool is_symbolless,
+-    bool is_section_symbol)
++    bool is_section_symbol,
++    bool use_plt_offset)
+   : address_(address), local_sym_index_(local_sym_index), type_(type),
+     is_relative_(is_relative), is_symbolless_(is_symbolless),
+-    is_section_symbol_(is_section_symbol), shndx_(shndx)
++    is_section_symbol_(is_section_symbol), use_plt_offset_(use_plt_offset),
++    shndx_(shndx)
+ {
+   gold_assert(local_sym_index != GSYM_CODE
+               && local_sym_index != INVALID_CODE);
+@@ -799,7 +805,7 @@ Output_reloc<elfcpp::SHT_REL, dynamic, size, big_endian>::Output_reloc(
+     Address address)
+   : address_(address), local_sym_index_(SECTION_CODE), type_(type),
+     is_relative_(false), is_symbolless_(false),
+-    is_section_symbol_(true), shndx_(INVALID_CODE)
++    is_section_symbol_(true), use_plt_offset_(false), shndx_(INVALID_CODE)
+ {
+   // this->type_ is a bitfield; make sure TYPE fits.
+   gold_assert(this->type_ == type);
+@@ -820,7 +826,7 @@ Output_reloc<elfcpp::SHT_REL, dynamic, size, big_endian>::Output_reloc(
+     Address address)
+   : address_(address), local_sym_index_(SECTION_CODE), type_(type),
+     is_relative_(false), is_symbolless_(false),
+-    is_section_symbol_(true), shndx_(shndx)
++    is_section_symbol_(true), use_plt_offset_(false), shndx_(shndx)
+ {
+   gold_assert(shndx != INVALID_CODE);
+   // this->type_ is a bitfield; make sure TYPE fits.
+@@ -842,7 +848,7 @@ Output_reloc<elfcpp::SHT_REL, dynamic, size, big_endian>::Output_reloc(
+     Address address)
+   : address_(address), local_sym_index_(0), type_(type),
+     is_relative_(false), is_symbolless_(false),
+-    is_section_symbol_(false), shndx_(INVALID_CODE)
++    is_section_symbol_(false), use_plt_offset_(false), shndx_(INVALID_CODE)
+ {
+   // this->type_ is a bitfield; make sure TYPE fits.
+   gold_assert(this->type_ == type);
+@@ -858,7 +864,7 @@ Output_reloc<elfcpp::SHT_REL, dynamic, size, big_endian>::Output_reloc(
+     Address address)
+   : address_(address), local_sym_index_(0), type_(type),
+     is_relative_(false), is_symbolless_(false),
+-    is_section_symbol_(false), shndx_(shndx)
++    is_section_symbol_(false), use_plt_offset_(false), shndx_(shndx)
+ {
+   gold_assert(shndx != INVALID_CODE);
+   // this->type_ is a bitfield; make sure TYPE fits.
+@@ -877,7 +883,7 @@ Output_reloc<elfcpp::SHT_REL, dynamic, size, big_endian>::Output_reloc(
+     Address address)
+   : address_(address), local_sym_index_(TARGET_CODE), type_(type),
+     is_relative_(false), is_symbolless_(false),
+-    is_section_symbol_(false), shndx_(INVALID_CODE)
++    is_section_symbol_(false), use_plt_offset_(false), shndx_(INVALID_CODE)
+ {
+   // this->type_ is a bitfield; make sure TYPE fits.
+   gold_assert(this->type_ == type);
+@@ -894,7 +900,7 @@ Output_reloc<elfcpp::SHT_REL, dynamic, size, big_endian>::Output_reloc(
+     Address address)
+   : address_(address), local_sym_index_(TARGET_CODE), type_(type),
+     is_relative_(false), is_symbolless_(false),
+-    is_section_symbol_(false), shndx_(shndx)
++    is_section_symbol_(false), use_plt_offset_(false), shndx_(shndx)
+ {
+   gold_assert(shndx != INVALID_CODE);
+   // this->type_ is a bitfield; make sure TYPE fits.
+@@ -1121,6 +1127,12 @@ Output_reloc<elfcpp::SHT_REL, dynamic, size, big_endian>::symbol_value(
+   Sized_relobj_file<size, big_endian>* relobj =
+       this->u1_.relobj->sized_relobj();
+   gold_assert(relobj != NULL);
++  if (this->use_plt_offset_)
++    {
++      uint64_t plt_address =
++	  parameters->target().plt_address_for_local(relobj, lsi);
++      return plt_address + relobj->local_plt_offset(lsi);
++    }
+   const Symbol_value<size>* symval = relobj->local_symbol(lsi);
+   return symval->value(relobj, addend);
+ }
+@@ -4880,17 +4892,27 @@ Output_file::open_base_file(const char* base_name, bool writable)
+   if (use_base_file)
+     {
+       this->open(s.st_size);
+-      ssize_t len = ::read(o, this->base_, s.st_size);
+-      if (len < 0)
+-        {
+-	  gold_info(_("%s: read failed: %s"), base_name, strerror(errno));
+-	  return false;
+-        }
+-      if (len < s.st_size)
+-        {
+-	  gold_info(_("%s: file too short"), base_name);
+-	  return false;
+-        }
++      ssize_t bytes_to_read = s.st_size;
++      unsigned char* p = this->base_;
++      while (bytes_to_read > 0)
++	{
++	  ssize_t len = ::read(o, p, bytes_to_read);
++	  if (len < 0)
++	    {
++	      gold_info(_("%s: read failed: %s"), base_name, strerror(errno));
++	      return false;
++	    }
++	  if (len == 0)
++	    {
++	      gold_info(_("%s: file too short: read only %lld of %lld bytes"),
++			base_name,
++			static_cast<long long>(s.st_size - bytes_to_read),
++			static_cast<long long>(s.st_size));
++	      return false;
++	    }
++	  p += len;
++	  bytes_to_read -= len;
++	}
+       ::close(o);
+       return true;
+     }
+@@ -5052,8 +5074,12 @@ Output_file::map_no_anonymous(bool writable)
+   // output file will wind up incomplete, but we will have already
+   // exited.  The alternative to fallocate would be to use fdatasync,
+   // but that would be a more significant performance hit.
+-  if (writable && ::posix_fallocate(o, 0, this->file_size_) < 0)
+-    gold_fatal(_("%s: %s"), this->name_, strerror(errno));
++  if (writable)
++    {
++      int err = ::posix_fallocate(o, 0, this->file_size_);
++      if (err != 0)
++       gold_fatal(_("%s: %s"), this->name_, strerror(err));
++    }
+ 
+   // Map the file into memory.
+   int prot = PROT_READ;
+diff --git a/gold/output.h b/gold/output.h
+index 1bec2c0..e2d35e2 100644
+--- a/gold/output.h
++++ b/gold/output.h
+@@ -1033,12 +1033,14 @@ class Output_reloc<elfcpp::SHT_REL, dynamic, size, big_endian>
+   Output_reloc(Sized_relobj<size, big_endian>* relobj,
+ 	       unsigned int local_sym_index, unsigned int type,
+ 	       Output_data* od, Address address, bool is_relative,
+-               bool is_symbolless, bool is_section_symbol);
++               bool is_symbolless, bool is_section_symbol,
++               bool use_plt_offset);
+ 
+   Output_reloc(Sized_relobj<size, big_endian>* relobj,
+ 	       unsigned int local_sym_index, unsigned int type,
+ 	       unsigned int shndx, Address address, bool is_relative,
+-               bool is_symbolless, bool is_section_symbol);
++               bool is_symbolless, bool is_section_symbol,
++               bool use_plt_offset);
+ 
+   // A reloc against the STT_SECTION symbol of an output section.
+ 
+@@ -1216,7 +1218,7 @@ class Output_reloc<elfcpp::SHT_REL, dynamic, size, big_endian>
+   // input file.
+   unsigned int local_sym_index_;
+   // The reloc type--a processor specific code.
+-  unsigned int type_ : 29;
++  unsigned int type_ : 28;
+   // True if the relocation is a RELATIVE relocation.
+   bool is_relative_ : 1;
+   // True if the relocation is one which should not use
+@@ -1224,6 +1226,10 @@ class Output_reloc<elfcpp::SHT_REL, dynamic, size, big_endian>
+   bool is_symbolless_ : 1;
+   // True if the relocation is against a section symbol.
+   bool is_section_symbol_ : 1;
++  // True if the addend should be the PLT offset.  This is used only
++  // for RELATIVE relocations to local symbols.
++  // (Used only for RELA, but stored here for space.)
++  bool use_plt_offset_ : 1;
+   // If the reloc address is an input section in an object, the
+   // section index.  This is INVALID_CODE if the reloc address is
+   // specified in some other way.
+@@ -1268,9 +1274,10 @@ class Output_reloc<elfcpp::SHT_RELA, dynamic, size, big_endian>
+ 	       unsigned int local_sym_index, unsigned int type,
+ 	       Output_data* od, Address address,
+ 	       Addend addend, bool is_relative,
+-	       bool is_symbolless, bool is_section_symbol)
++	       bool is_symbolless, bool is_section_symbol,
++	       bool use_plt_offset)
+     : rel_(relobj, local_sym_index, type, od, address, is_relative,
+-           is_symbolless, is_section_symbol),
++           is_symbolless, is_section_symbol, use_plt_offset),
+       addend_(addend)
+   { }
+ 
+@@ -1278,9 +1285,10 @@ class Output_reloc<elfcpp::SHT_RELA, dynamic, size, big_endian>
+ 	       unsigned int local_sym_index, unsigned int type,
+ 	       unsigned int shndx, Address address,
+ 	       Addend addend, bool is_relative,
+-	       bool is_symbolless, bool is_section_symbol)
++	       bool is_symbolless, bool is_section_symbol,
++	       bool use_plt_offset)
+     : rel_(relobj, local_sym_index, type, shndx, address, is_relative,
+-           is_symbolless, is_section_symbol),
++           is_symbolless, is_section_symbol, use_plt_offset),
+       addend_(addend)
+   { }
+ 
+@@ -1571,7 +1579,7 @@ class Output_data_reloc<elfcpp::SHT_REL, dynamic, size, big_endian>
+ 	    Output_data* od, Address address)
+   {
+     this->add(od, Output_reloc_type(relobj, local_sym_index, type, od,
+-                                    address, false, false, false));
++                                    address, false, false, false, false));
+   }
+ 
+   void
+@@ -1580,7 +1588,7 @@ class Output_data_reloc<elfcpp::SHT_REL, dynamic, size, big_endian>
+ 	    Output_data* od, unsigned int shndx, Address address)
+   {
+     this->add(od, Output_reloc_type(relobj, local_sym_index, type, shndx,
+-				    address, false, false, false));
++				    address, false, false, false, false));
+   }
+ 
+   // Add a RELATIVE reloc against a local symbol.
+@@ -1591,7 +1599,7 @@ class Output_data_reloc<elfcpp::SHT_REL, dynamic, size, big_endian>
+ 	             Output_data* od, Address address)
+   {
+     this->add(od, Output_reloc_type(relobj, local_sym_index, type, od,
+-                                    address, true, true, false));
++                                    address, true, true, false, false));
+   }
+ 
+   void
+@@ -1600,7 +1608,7 @@ class Output_data_reloc<elfcpp::SHT_REL, dynamic, size, big_endian>
+ 	             Output_data* od, unsigned int shndx, Address address)
+   {
+     this->add(od, Output_reloc_type(relobj, local_sym_index, type, shndx,
+-				    address, true, true, false));
++				    address, true, true, false, false));
+   }
+ 
+   // Add a local relocation which does not use a symbol for the relocation,
+@@ -1612,7 +1620,7 @@ class Output_data_reloc<elfcpp::SHT_REL, dynamic, size, big_endian>
+ 			      Output_data* od, Address address)
+   {
+     this->add(od, Output_reloc_type(relobj, local_sym_index, type, od,
+-                                    address, false, true, false));
++                                    address, false, true, false, false));
+   }
+ 
+   void
+@@ -1622,7 +1630,7 @@ class Output_data_reloc<elfcpp::SHT_REL, dynamic, size, big_endian>
+ 			      Address address)
+   {
+     this->add(od, Output_reloc_type(relobj, local_sym_index, type, shndx,
+-				    address, false, true, false));
++				    address, false, true, false, false));
+   }
+ 
+   // Add a reloc against a local section symbol.  This will be
+@@ -1635,7 +1643,7 @@ class Output_data_reloc<elfcpp::SHT_REL, dynamic, size, big_endian>
+                     Output_data* od, Address address)
+   {
+     this->add(od, Output_reloc_type(relobj, input_shndx, type, od,
+-                                    address, false, false, true));
++                                    address, false, false, true, false));
+   }
+ 
+   void
+@@ -1644,7 +1652,7 @@ class Output_data_reloc<elfcpp::SHT_REL, dynamic, size, big_endian>
+                     Output_data* od, unsigned int shndx, Address address)
+   {
+     this->add(od, Output_reloc_type(relobj, input_shndx, type, shndx,
+-                                    address, false, false, true));
++                                    address, false, false, true, false));
+   }
+ 
+   // A reloc against the STT_SECTION symbol of an output section.
+@@ -1767,7 +1775,7 @@ class Output_data_reloc<elfcpp::SHT_RELA, dynamic, size, big_endian>
+ 	    Output_data* od, Address address, Addend addend)
+   {
+     this->add(od, Output_reloc_type(relobj, local_sym_index, type, od, address,
+-				    addend, false, false, false));
++				    addend, false, false, false, false));
+   }
+ 
+   void
+@@ -1777,7 +1785,8 @@ class Output_data_reloc<elfcpp::SHT_RELA, dynamic, size, big_endian>
+ 	    Addend addend)
+   {
+     this->add(od, Output_reloc_type(relobj, local_sym_index, type, shndx,
+-                                    address, addend, false, false, false));
++                                    address, addend, false, false, false,
++                                    false));
+   }
+ 
+   // Add a RELATIVE reloc against a local symbol.
+@@ -1785,20 +1794,23 @@ class Output_data_reloc<elfcpp::SHT_RELA, dynamic, size, big_endian>
+   void
+   add_local_relative(Sized_relobj<size, big_endian>* relobj,
+ 	             unsigned int local_sym_index, unsigned int type,
+-	             Output_data* od, Address address, Addend addend)
++	             Output_data* od, Address address, Addend addend,
++	             bool use_plt_offset)
+   {
+     this->add(od, Output_reloc_type(relobj, local_sym_index, type, od, address,
+-				    addend, true, true, false));
++				    addend, true, true, false,
++				    use_plt_offset));
+   }
+ 
+   void
+   add_local_relative(Sized_relobj<size, big_endian>* relobj,
+ 	             unsigned int local_sym_index, unsigned int type,
+ 	             Output_data* od, unsigned int shndx, Address address,
+-	             Addend addend)
++	             Addend addend, bool use_plt_offset)
+   {
+     this->add(od, Output_reloc_type(relobj, local_sym_index, type, shndx,
+-                                    address, addend, true, true, false));
++                                    address, addend, true, true, false,
++                                    use_plt_offset));
+   }
+ 
+   // Add a local relocation which does not use a symbol for the relocation,
+@@ -1810,7 +1822,7 @@ class Output_data_reloc<elfcpp::SHT_RELA, dynamic, size, big_endian>
+ 			      Output_data* od, Address address, Addend addend)
+   {
+     this->add(od, Output_reloc_type(relobj, local_sym_index, type, od, address,
+-				    addend, false, true, false));
++				    addend, false, true, false, false));
+   }
+ 
+   void
+@@ -1820,7 +1832,8 @@ class Output_data_reloc<elfcpp::SHT_RELA, dynamic, size, big_endian>
+ 			      Address address, Addend addend)
+   {
+     this->add(od, Output_reloc_type(relobj, local_sym_index, type, shndx,
+-                                    address, addend, false, true, false));
++                                    address, addend, false, true, false,
++                                    false));
+   }
+ 
+   // Add a reloc against a local section symbol.  This will be
+@@ -1833,7 +1846,7 @@ class Output_data_reloc<elfcpp::SHT_RELA, dynamic, size, big_endian>
+                     Output_data* od, Address address, Addend addend)
+   {
+     this->add(od, Output_reloc_type(relobj, input_shndx, type, od, address,
+-				    addend, false, false, true));
++				    addend, false, false, true, false));
+   }
+ 
+   void
+@@ -1843,7 +1856,8 @@ class Output_data_reloc<elfcpp::SHT_RELA, dynamic, size, big_endian>
+ 		    Addend addend)
+   {
+     this->add(od, Output_reloc_type(relobj, input_shndx, type, shndx,
+-                                    address, addend, false, false, true));
++                                    address, addend, false, false, true,
++                                    false));
+   }
+ 
+   // A reloc against the STT_SECTION symbol of an output section.
+diff --git a/gold/plugin.cc b/gold/plugin.cc
+index 3ccd8d0..b4e68f8 100644
+--- a/gold/plugin.cc
++++ b/gold/plugin.cc
+@@ -818,7 +818,9 @@ Pluginobj::Pluginobj(const std::string& name, Input_file* input_file,
+ }
+ 
+ // Return TRUE if a defined symbol is referenced from outside the
+-// universe of claimed objects.
++// universe of claimed objects.  Only references from relocatable,
++// non-IR (unclaimed) objects count as a reference.  References from
++// dynamic objects count only as "visible".
+ 
+ static inline bool
+ is_referenced_from_outside(Symbol* lsym)
+@@ -838,6 +840,8 @@ is_referenced_from_outside(Symbol* lsym)
+ static inline bool
+ is_visible_from_outside(Symbol* lsym)
+ {
++  if (lsym->in_dyn())
++    return true;
+   if (parameters->options().export_dynamic() || parameters->options().shared())
+     return lsym->is_externally_visible();
+   return false;
+@@ -1244,14 +1248,18 @@ Sized_pluginobj<size, big_endian>::do_initialize_xindex()
+   return NULL;
+ }
+ 
+-// Get symbol counts.  Not used for plugin objects.
++// Get symbol counts.  Don't count plugin objects; the replacement
++// files will provide the counts.
+ 
+ template<int size, bool big_endian>
+ void
+-Sized_pluginobj<size, big_endian>::do_get_global_symbol_counts(const Symbol_table*,
+-                                                   size_t*, size_t*) const
++Sized_pluginobj<size, big_endian>::do_get_global_symbol_counts(
++    const Symbol_table*,
++    size_t* defined,
++    size_t* used) const
+ {
+-  gold_unreachable();
++  *defined = 0;
++  *used = 0;
+ }
+ 
+ // Get symbols.  Not used for plugin objects.
+diff --git a/gold/powerpc.cc b/gold/powerpc.cc
+index 45783c3..62a17ca 100644
+--- a/gold/powerpc.cc
++++ b/gold/powerpc.cc
+@@ -1329,7 +1329,7 @@ Target_powerpc<size, big_endian>::Scan::local(
+               rela_dyn->add_local_relative(object, r_sym, r_type,
+ 					   output_section, data_shndx,
+ 					   reloc.get_r_offset(),
+-					   reloc.get_r_addend());
++					   reloc.get_r_addend(), false);
+             }
+         }
+       break;
+@@ -1372,7 +1372,7 @@ Target_powerpc<size, big_endian>::Scan::local(
+ 		object->set_local_got_offset(r_sym, GOT_TYPE_STANDARD, off);
+ 		rela_dyn->add_local_relative(object, r_sym,
+ 					     elfcpp::R_POWERPC_RELATIVE,
+-					     got, off, 0);
++					     got, off, 0, false);
+ 	      }
+           }
+ 	else
+diff --git a/gold/readsyms.cc b/gold/readsyms.cc
+index 1e50942..9974722 100644
+--- a/gold/readsyms.cc
++++ b/gold/readsyms.cc
+@@ -161,8 +161,10 @@ void
+ Read_symbols::run(Workqueue* workqueue)
+ {
+   // If we didn't queue a new task, then we need to explicitly unblock
+-  // the token.
+-  if (!this->do_read_symbols(workqueue))
++  // the token. If the object is a member of a lib group, however,
++  // the token was already added to the list of locks for the task,
++  // and it will be unblocked automatically at the end of the task.
++  if (!this->do_read_symbols(workqueue) && this->member_ == NULL)
+     workqueue->queue_soon(new Unblock_token(this->this_blocker_,
+ 					    this->next_blocker_));
+ }
+diff --git a/gold/resolve.cc b/gold/resolve.cc
+index 03288ec..780038a 100644
+--- a/gold/resolve.cc
++++ b/gold/resolve.cc
+@@ -296,7 +296,7 @@ Symbol_table::resolve(Sized_symbol<size>* to,
+ 
+   // Record if we've seen this symbol in a real ELF object (i.e., the
+   // symbol is referenced from outside the world known to the plugin).
+-  if (object->pluginobj() == NULL)
++  if (object->pluginobj() == NULL && !object->is_dynamic())
+     to->set_in_real_elf();
+ 
+   // If we're processing replacement files, allow new symbols to override
+@@ -336,9 +336,9 @@ Symbol_table::resolve(Sized_symbol<size>* to,
+       && to->name()[0] == '_' && to->name()[1] == 'Z')
+     {
+       Symbol_location fromloc
+-          = { object, orig_st_shndx, sym.get_st_value() };
++          = { object, orig_st_shndx, static_cast<off_t>(sym.get_st_value()) };
+       Symbol_location toloc = { to->object(), to->shndx(&to_is_ordinary),
+-				to->value() };
++				static_cast<off_t>(to->value()) };
+       this->candidate_odr_violations_[to->name()].insert(fromloc);
+       this->candidate_odr_violations_[to->name()].insert(toloc);
+     }
+diff --git a/gold/script-sections.cc b/gold/script-sections.cc
+index 1fad88d..f90c0b3 100644
+--- a/gold/script-sections.cc
++++ b/gold/script-sections.cc
+@@ -680,7 +680,7 @@ class Sections_element_assignment : public Sections_element
+   set_section_addresses(Symbol_table* symtab, Layout* layout,
+ 			uint64_t* dot_value, uint64_t*, uint64_t*)
+   {
+-    this->assignment_.set_if_absolute(symtab, layout, true, *dot_value);
++    this->assignment_.set_if_absolute(symtab, layout, true, *dot_value, NULL);
+   }
+ 
+   // Print for debugging.
+@@ -714,7 +714,7 @@ class Sections_element_dot_assignment : public Sections_element
+     // output section definition the dot symbol is always considered
+     // to be absolute.
+     *dot_value = this->val_->eval_with_dot(symtab, layout, true, *dot_value,
+-					   NULL, NULL, NULL);
++					   NULL, NULL, NULL, false);
+   }
+ 
+   // Update the dot symbol while setting section addresses.
+@@ -724,7 +724,7 @@ class Sections_element_dot_assignment : public Sections_element
+ 			uint64_t* load_address)
+   {
+     *dot_value = this->val_->eval_with_dot(symtab, layout, false, *dot_value,
+-					   NULL, NULL, dot_alignment);
++					   NULL, NULL, dot_alignment, false);
+     *load_address = *dot_value;
+   }
+ 
+@@ -866,9 +866,11 @@ class Output_section_element_assignment : public Output_section_element
+   void
+   set_section_addresses(Symbol_table* symtab, Layout* layout, Output_section*,
+ 			uint64_t, uint64_t* dot_value, uint64_t*,
+-			Output_section**, std::string*, Input_section_list*)
++			Output_section** dot_section, std::string*,
++			Input_section_list*)
+   {
+-    this->assignment_.set_if_absolute(symtab, layout, true, *dot_value);
++    this->assignment_.set_if_absolute(symtab, layout, true, *dot_value,
++				      *dot_section);
+   }
+ 
+   // Print for debugging.
+@@ -892,20 +894,28 @@ class Output_section_element_dot_assignment : public Output_section_element
+     : val_(val)
+   { }
+ 
++  // An assignment to dot within an output section is enough to force
++  // the output section to exist.
++  bool
++  needs_output_section() const
++  { return true; }
++
+   // Finalize the symbol.
+   void
+   finalize_symbols(Symbol_table* symtab, const Layout* layout,
+ 		   uint64_t* dot_value, Output_section** dot_section)
+   {
+     *dot_value = this->val_->eval_with_dot(symtab, layout, true, *dot_value,
+-					   *dot_section, dot_section, NULL);
++					   *dot_section, dot_section, NULL,
++					   true);
+   }
+ 
+   // Update the dot symbol while setting section addresses.
+   void
+   set_section_addresses(Symbol_table* symtab, Layout* layout, Output_section*,
+ 			uint64_t, uint64_t* dot_value, uint64_t*,
+-			Output_section**, std::string*, Input_section_list*);
++			Output_section** dot_section, std::string*,
++			Input_section_list*);
+ 
+   // Print for debugging.
+   void
+@@ -936,7 +946,8 @@ Output_section_element_dot_assignment::set_section_addresses(
+ {
+   uint64_t next_dot = this->val_->eval_with_dot(symtab, layout, false,
+ 						*dot_value, *dot_section,
+-						dot_section, dot_alignment);
++						dot_section, dot_alignment,
++						true);
+   if (next_dot < *dot_value)
+     gold_error(_("dot may not move backward"));
+   if (next_dot > *dot_value && output_section != NULL)
+@@ -1037,7 +1048,8 @@ Output_data_expression::do_write_to_buffer(unsigned char* buf)
+ {
+   uint64_t val = this->val_->eval_with_dot(this->symtab_, this->layout_,
+ 					   true, this->dot_value_,
+-					   this->dot_section_, NULL, NULL);
++					   this->dot_section_, NULL, NULL,
++					   false);
+ 
+   if (parameters->target().is_big_endian())
+     this->endian_write_to_buffer<true>(val, buf);
+@@ -1187,7 +1199,7 @@ class Output_section_element_fill : public Output_section_element
+     Output_section* fill_section;
+     uint64_t fill_val = this->val_->eval_with_dot(symtab, layout, false,
+ 						  *dot_value, *dot_section,
+-						  &fill_section, NULL);
++						  &fill_section, NULL, false);
+     if (fill_section != NULL)
+       gold_warning(_("fill value is not absolute"));
+     // FIXME: The GNU linker supports fill values of arbitrary length.
+@@ -2108,13 +2120,13 @@ Output_section_definition::finalize_symbols(Symbol_table* symtab,
+ 	{
+ 	  address = this->address_->eval_with_dot(symtab, layout, true,
+ 						  *dot_value, NULL,
+-						  NULL, NULL);
++						  NULL, NULL, false);
+ 	}
+       if (this->align_ != NULL)
+ 	{
+ 	  uint64_t align = this->align_->eval_with_dot(symtab, layout, true,
+ 						       *dot_value, NULL,
+-						       NULL, NULL);
++						       NULL, NULL, false);
+ 	  address = align_address(address, align);
+ 	}
+       *dot_value = address;
+@@ -2303,7 +2315,7 @@ Output_section_definition::set_section_addresses(Symbol_table* symtab,
+   else
+     address = this->address_->eval_with_dot(symtab, layout, true,
+ 					    *dot_value, NULL, NULL,
+-					    dot_alignment);
++					    dot_alignment, false);
+   uint64_t align;
+   if (this->align_ == NULL)
+     {
+@@ -2316,7 +2328,7 @@ Output_section_definition::set_section_addresses(Symbol_table* symtab,
+     {
+       Output_section* align_section;
+       align = this->align_->eval_with_dot(symtab, layout, true, *dot_value,
+-					  NULL, &align_section, NULL);
++					  NULL, &align_section, NULL, false);
+       if (align_section != NULL)
+ 	gold_warning(_("alignment of section %s is not absolute"),
+ 		     this->name_.c_str());
+@@ -2401,7 +2413,7 @@ Output_section_definition::set_section_addresses(Symbol_table* symtab,
+       laddr = this->load_address_->eval_with_dot(symtab, layout, true,
+ 						 *dot_value,
+ 						 this->output_section_,
+-						 NULL, NULL);
++						 NULL, NULL, false);
+       if (this->output_section_ != NULL)
+         this->output_section_->set_load_address(laddr);
+     }
+@@ -2416,7 +2428,8 @@ Output_section_definition::set_section_addresses(Symbol_table* symtab,
+       Output_section* subalign_section;
+       subalign = this->subalign_->eval_with_dot(symtab, layout, true,
+ 						*dot_value, NULL,
+-						&subalign_section, NULL);
++						&subalign_section, NULL,
++						false);
+       if (subalign_section != NULL)
+ 	gold_warning(_("subalign of section %s is not absolute"),
+ 		     this->name_.c_str());
+@@ -2431,7 +2444,7 @@ Output_section_definition::set_section_addresses(Symbol_table* symtab,
+       uint64_t fill_val = this->fill_->eval_with_dot(symtab, layout, true,
+ 						     *dot_value,
+ 						     NULL, &fill_section,
+-						     NULL);
++						     NULL, false);
+       if (fill_section != NULL)
+ 	gold_warning(_("fill of section %s is not absolute"),
+ 		     this->name_.c_str());
+diff --git a/gold/script.cc b/gold/script.cc
+index 7df0c9e..b471cf9 100644
+--- a/gold/script.cc
++++ b/gold/script.cc
+@@ -983,18 +983,20 @@ Symbol_assignment::sized_finalize(Symbol_table* symtab, const Layout* layout,
+   uint64_t final_val = this->val_->eval_maybe_dot(symtab, layout, true,
+ 						  is_dot_available,
+ 						  dot_value, dot_section,
+-						  &section, NULL);
++						  &section, NULL, false);
+   Sized_symbol<size>* ssym = symtab->get_sized_symbol<size>(this->sym_);
+   ssym->set_value(final_val);
+   if (section != NULL)
+     ssym->set_output_section(section);
+ }
+ 
+-// Set the symbol value if the expression yields an absolute value.
++// Set the symbol value if the expression yields an absolute value or
++// a value relative to DOT_SECTION.
+ 
+ void
+ Symbol_assignment::set_if_absolute(Symbol_table* symtab, const Layout* layout,
+-				   bool is_dot_available, uint64_t dot_value)
++				   bool is_dot_available, uint64_t dot_value,
++				   Output_section* dot_section)
+ {
+   if (this->sym_ == NULL)
+     return;
+@@ -1002,8 +1004,9 @@ Symbol_assignment::set_if_absolute(Symbol_table* symtab, const Layout* layout,
+   Output_section* val_section;
+   uint64_t val = this->val_->eval_maybe_dot(symtab, layout, false,
+ 					    is_dot_available, dot_value,
+-					    NULL, &val_section, NULL);
+-  if (val_section != NULL)
++					    dot_section, &val_section, NULL,
++					    false);
++  if (val_section != NULL && val_section != dot_section)
+     return;
+ 
+   if (parameters->target().get_size() == 32)
+@@ -1026,6 +1029,8 @@ Symbol_assignment::set_if_absolute(Symbol_table* symtab, const Layout* layout,
+     }
+   else
+     gold_unreachable();
++  if (val_section != NULL)
++    this->sym_->set_output_section(val_section);
+ }
+ 
+ // Print for debugging.
+@@ -1215,7 +1220,7 @@ Script_options::set_section_addresses(Symbol_table* symtab, Layout* layout)
+   for (Symbol_assignments::iterator p = this->symbol_assignments_.begin();
+        p != this->symbol_assignments_.end();
+        ++p)
+-    (*p)->set_if_absolute(symtab, layout, false, 0);
++    (*p)->set_if_absolute(symtab, layout, false, 0, NULL);
+ 
+   return this->script_sections_.set_section_addresses(symtab, layout);
+ }
+diff --git a/gold/script.h b/gold/script.h
+index 73079a4..f41f438 100644
+--- a/gold/script.h
++++ b/gold/script.h
+@@ -90,20 +90,28 @@ class Expression
+   // the section address.  If RESULT_ALIGNMENT is not NULL, this sets
+   // *RESULT_ALIGNMENT to the alignment of the value of that alignment
+   // is larger than *RESULT_ALIGNMENT; this will only be non-zero if
+-  // this is an ALIGN expression.
++  // this is an ALIGN expression.  If IS_SECTION_DOT_ASSIGMENT is true,
++  // we are evaluating an assignment to dot within an output section,
++  // and an absolute value should be interpreted as an offset within
++  // the section.
+   uint64_t
+   eval_with_dot(const Symbol_table*, const Layout*, bool check_assertions,
+ 		uint64_t dot_value, Output_section* dot_section,
+-		Output_section** result_section, uint64_t* result_alignment);
++		Output_section** result_section, uint64_t* result_alignment,
++		bool is_section_dot_assignment);
+ 
+   // Return the value of an expression which may or may not be
+   // permitted to refer to the dot symbol, depending on
+-  // is_dot_available.
++  // is_dot_available.  If IS_SECTION_DOT_ASSIGMENT is true,
++  // we are evaluating an assignment to dot within an output section,
++  // and an absolute value should be interpreted as an offset within
++  // the section.
+   uint64_t
+   eval_maybe_dot(const Symbol_table*, const Layout*, bool check_assertions,
+ 		 bool is_dot_available, uint64_t dot_value,
+ 		 Output_section* dot_section,
+-		 Output_section** result_section, uint64_t* result_alignment);
++		 Output_section** result_section, uint64_t* result_alignment,
++		 bool is_section_dot_assignment);
+ 
+   // Print the expression to the FILE.  This is for debugging.
+   virtual void
+@@ -339,12 +347,12 @@ class Symbol_assignment
+   finalize_with_dot(Symbol_table*, const Layout*, uint64_t dot_value,
+ 		    Output_section* dot_section);
+ 
+-  // Set the symbol value, but only if the value is absolute.  This is
+-  // used while processing a SECTIONS clause.  We assume that dot is
+-  // an absolute value here.  We do not check assertions.
++  // Set the symbol value, but only if the value is absolute or relative to
++  // DOT_SECTION.  This is used while processing a SECTIONS clause.
++  // We assume that dot is an absolute value here.  We do not check assertions.
+   void
+   set_if_absolute(Symbol_table*, const Layout*, bool is_dot_available,
+-		  uint64_t dot_value);
++		  uint64_t dot_value, Output_section* dot_section);
+ 
+   const std::string&
+   name() const
+diff --git a/gold/sparc.cc b/gold/sparc.cc
+index 5f67a4e..12e1dee 100644
+--- a/gold/sparc.cc
++++ b/gold/sparc.cc
+@@ -1855,7 +1855,7 @@ Target_sparc<size, big_endian>::Scan::local(
+           rela_dyn->add_local_relative(object, r_sym, elfcpp::R_SPARC_RELATIVE,
+ 				       output_section, data_shndx,
+ 				       reloc.get_r_offset(),
+-				       reloc.get_r_addend());
++				       reloc.get_r_addend(), false);
+         }
+       break;
+ 
+@@ -1946,7 +1946,7 @@ Target_sparc<size, big_endian>::Scan::local(
+ 		object->set_local_got_offset(r_sym, GOT_TYPE_STANDARD, off);
+ 		rela_dyn->add_local_relative(object, r_sym,
+ 					     elfcpp::R_SPARC_RELATIVE,
+-					     got, off, 0);
++					     got, off, 0, false);
+ 	      }
+ 	  }
+ 	else
+diff --git a/gold/symtab.cc b/gold/symtab.cc
+index ff1b5ca..f0ba1d5 100644
+--- a/gold/symtab.cc
++++ b/gold/symtab.cc
+@@ -602,20 +602,16 @@ Symbol_table::gc_mark_undef_symbols(Layout* layout)
+ }
+ 
+ void
+-Symbol_table::gc_mark_symbol_for_shlib(Symbol* sym)
++Symbol_table::gc_mark_symbol(Symbol* sym)
+ {
+-  if (!sym->is_from_dynobj() 
+-      && sym->is_externally_visible())
++  // Add the object and section to the work list.
++  Relobj* obj = static_cast<Relobj*>(sym->object());
++  bool is_ordinary;
++  unsigned int shndx = sym->shndx(&is_ordinary);
++  if (is_ordinary && shndx != elfcpp::SHN_UNDEF)
+     {
+-      //Add the object and section to the work list.
+-      Relobj* obj = static_cast<Relobj*>(sym->object());
+-      bool is_ordinary;
+-      unsigned int shndx = sym->shndx(&is_ordinary);
+-      if (is_ordinary && shndx != elfcpp::SHN_UNDEF)
+-        {
+-          gold_assert(this->gc_!= NULL);
+-          this->gc_->worklist().push(Section_id(obj, shndx));
+-        }
++      gold_assert(this->gc_!= NULL);
++      this->gc_->worklist().push(Section_id(obj, shndx));
+     }
+ }
+ 
+@@ -626,16 +622,7 @@ Symbol_table::gc_mark_dyn_syms(Symbol* sym)
+ {
+   if (sym->in_dyn() && sym->source() == Symbol::FROM_OBJECT
+       && !sym->object()->is_dynamic())
+-    {
+-      Relobj* obj = static_cast<Relobj*>(sym->object()); 
+-      bool is_ordinary;
+-      unsigned int shndx = sym->shndx(&is_ordinary);
+-      if (is_ordinary && shndx != elfcpp::SHN_UNDEF)
+-        {
+-          gold_assert(this->gc_ != NULL);
+-          this->gc_->worklist().push(Section_id(obj, shndx));
+-        }
+-    }
++    this->gc_mark_symbol(sym);
+ }
+ 
+ // Make TO a symbol which forwards to FROM.
+@@ -1143,6 +1130,14 @@ Symbol_table::add_from_relobj(
+       bool is_default_version = false;
+       bool is_forced_local = false;
+ 
++      // FIXME: For incremental links, we don't store version information,
++      // so we need to ignore version symbols for now.
++      if (parameters->incremental_update() && ver != NULL)
++	{
++	  namelen = ver - name;
++	  ver = NULL;
++	}
++
+       if (ver != NULL)
+         {
+           // The symbol name is of the form foo@VERSION or foo@@VERSION
+@@ -1243,11 +1238,16 @@ Symbol_table::add_from_relobj(
+       if (is_forced_local)
+ 	this->force_local(res);
+ 
+-      // If building a shared library using garbage collection, do not 
+-      // treat externally visible symbols as garbage.
+-      if (parameters->options().gc_sections() 
+-          && parameters->options().shared())
+-        this->gc_mark_symbol_for_shlib(res);
++      // Do not treat this symbol as garbage if this symbol will be
++      // exported to the dynamic symbol table.  This is true when
++      // building a shared library or using --export-dynamic and
++      // the symbol is externally visible.
++      if (parameters->options().gc_sections()
++	  && res->is_externally_visible()
++	  && !res->is_from_dynobj()
++          && (parameters->options().shared()
++	      || parameters->options().export_dynamic()))
++        this->gc_mark_symbol(res);
+ 
+       if (is_defined_in_discarded_section)
+ 	res->set_is_defined_in_discarded_section();
+@@ -1346,6 +1346,11 @@ Symbol_table::add_from_dynobj(
+       return;
+     }
+ 
++  // FIXME: For incremental links, we don't store version information,
++  // so we need to ignore version symbols for now.
++  if (parameters->incremental_update())
++    versym = NULL;
++
+   if (versym != NULL && versym_size / 2 < count)
+     {
+       dynobj->error(_("too few symbol versions"));
+@@ -2809,6 +2814,12 @@ Symbol_table::sized_write_globals(const Stringpool* sympool,
+       typename elfcpp::Elf_types<size>::Elf_Addr sym_value = sym->value();
+       typename elfcpp::Elf_types<size>::Elf_Addr dynsym_value = sym_value;
+       elfcpp::STB binding = sym->binding();
++
++      // If --no-gnu-unique is set, change STB_GNU_UNIQUE to STB_GLOBAL.
++      if (binding == elfcpp::STB_GNU_UNIQUE
++	  && !parameters->options().gnu_unique())
++	binding = elfcpp::STB_GLOBAL;
++
+       switch (sym->source())
+ 	{
+ 	case Symbol::FROM_OBJECT:
+diff --git a/gold/symtab.h b/gold/symtab.h
+index b9b9e00..427f72f 100644
+--- a/gold/symtab.h
++++ b/gold/symtab.h
+@@ -1308,10 +1308,9 @@ class Symbol_table
+   void
+   gc_mark_undef_symbols(Layout*);
+ 
+-  // During garbage collection, this ensures externally visible symbols
+-  // are not treated as garbage while building shared objects.
++  // This tells garbage collection that this symbol is referenced.
+   void
+-  gc_mark_symbol_for_shlib(Symbol* sym);
++  gc_mark_symbol(Symbol* sym);
+ 
+   // During garbage collection, this keeps sections that correspond to 
+   // symbols seen in dynamic objects.
+diff --git a/gold/testsuite/Makefile.am b/gold/testsuite/Makefile.am
+index 9b8605b..97d6457 100644
+--- a/gold/testsuite/Makefile.am
++++ b/gold/testsuite/Makefile.am
+@@ -870,11 +870,16 @@ initpri3a_DEPENDENCIES = gcctestdir/ld
+ initpri3a_LDFLAGS = -Bgcctestdir/
+ initpri3a_LDADD =
+ 
+-check_PROGRAMS += initpri3b
+-initpri3b_SOURCES = initpri3.c
+-initpri3b_DEPENDENCIES = gcctestdir/ld
+-initpri3b_LDFLAGS = -Bgcctestdir/ -Wl,--no-ctors-in-init-array
+-initpri3b_LDADD =
++# This test fails on targets not using .ctors and .dtors sections (e.g. ARM
++# EABI). Given that gcc is moving towards using .init_array in all cases,
++# this test is commented out.  A better fix would be checking whether gcc
++# uses .ctors or .init_array sections in configure.
++
++# check_PROGRAMS += initpri3b
++# initpri3b_SOURCES = initpri3.c
++# initpri3b_DEPENDENCIES = gcctestdir/ld
++# initpri3b_LDFLAGS = -Bgcctestdir/ -Wl,--no-ctors-in-init-array
++# initpri3b_LDADD =
+ 
+ # Test --detect-odr-violations
+ check_SCRIPTS += debug_msg.sh
+diff --git a/gold/testsuite/Makefile.in b/gold/testsuite/Makefile.in
+index 67149fb..518d32b 100644
+--- a/gold/testsuite/Makefile.in
++++ b/gold/testsuite/Makefile.in
+@@ -56,6 +56,17 @@ check_PROGRAMS = $(am__EXEEXT_1) $(am__EXEEXT_2) $(am__EXEEXT_3) \
+ @NATIVE_OR_CROSS_LINKER_TRUE@am__append_1 = object_unittest \
+ @NATIVE_OR_CROSS_LINKER_TRUE@	binary_unittest
+ 
++# This test fails on targets not using .ctors and .dtors sections (e.g. ARM
++# EABI). Given that gcc is moving towards using .init_array in all cases,
++# this test is commented out.  A better fix would be checking whether gcc
++# uses .ctors or .init_array sections in configure.
++
++# check_PROGRAMS += initpri3b
++# initpri3b_SOURCES = initpri3.c
++# initpri3b_DEPENDENCIES = gcctestdir/ld
++# initpri3b_LDFLAGS = -Bgcctestdir/ -Wl,--no-ctors-in-init-array
++# initpri3b_LDADD =
++
+ # Test --detect-odr-violations
+ 
+ # Similar to --detect-odr-violations: check for undefined symbols in .so's
+@@ -189,7 +200,7 @@ check_PROGRAMS = $(am__EXEEXT_1) $(am__EXEEXT_2) $(am__EXEEXT_3) \
+ # Test -o when emitting to a special file (such as something in /dev).
+ @GCC_TRUE@@NATIVE_LINKER_TRUE@am__append_24 = many_sections_test \
+ @GCC_TRUE@@NATIVE_LINKER_TRUE@	many_sections_r_test initpri1 \
+-@GCC_TRUE@@NATIVE_LINKER_TRUE@	initpri2 initpri3a initpri3b \
++@GCC_TRUE@@NATIVE_LINKER_TRUE@	initpri2 initpri3a \
+ @GCC_TRUE@@NATIVE_LINKER_TRUE@	flagstest_o_specialfile
+ @GCC_FALSE@many_sections_test_DEPENDENCIES =
+ @NATIVE_LINKER_FALSE@many_sections_test_DEPENDENCIES =
+@@ -204,8 +215,6 @@ check_PROGRAMS = $(am__EXEEXT_1) $(am__EXEEXT_2) $(am__EXEEXT_3) \
+ @NATIVE_LINKER_FALSE@initpri2_DEPENDENCIES =
+ @GCC_FALSE@initpri3a_DEPENDENCIES =
+ @NATIVE_LINKER_FALSE@initpri3a_DEPENDENCIES =
+-@GCC_FALSE@initpri3b_DEPENDENCIES =
+-@NATIVE_LINKER_FALSE@initpri3b_DEPENDENCIES =
+ 
+ # Check that --detect-odr-violations works with compressed debug sections.
+ @GCC_TRUE@@HAVE_ZLIB_TRUE@@NATIVE_LINKER_TRUE@am__append_27 = debug_msg_cdebug.err
+@@ -712,7 +721,6 @@ libgoldtest_a_OBJECTS = $(am_libgoldtest_a_OBJECTS)
+ @GCC_TRUE@@NATIVE_LINKER_TRUE@	initpri1$(EXEEXT) \
+ @GCC_TRUE@@NATIVE_LINKER_TRUE@	initpri2$(EXEEXT) \
+ @GCC_TRUE@@NATIVE_LINKER_TRUE@	initpri3a$(EXEEXT) \
+-@GCC_TRUE@@NATIVE_LINKER_TRUE@	initpri3b$(EXEEXT) \
+ @GCC_TRUE@@NATIVE_LINKER_TRUE@	flagstest_o_specialfile$(EXEEXT)
+ @GCC_TRUE@@HAVE_ZLIB_TRUE@@NATIVE_LINKER_TRUE@am__EXEEXT_21 = flagstest_compress_debug_sections$(EXEEXT) \
+ @GCC_TRUE@@HAVE_ZLIB_TRUE@@NATIVE_LINKER_TRUE@	flagstest_o_specialfile_and_compress_debug_sections$(EXEEXT)
+@@ -1200,11 +1208,6 @@ initpri2_LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(initpri2_LDFLAGS) \
+ initpri3a_OBJECTS = $(am_initpri3a_OBJECTS)
+ initpri3a_LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(initpri3a_LDFLAGS) \
+ 	$(LDFLAGS) -o $@
+-@GCC_TRUE@@NATIVE_LINKER_TRUE@am_initpri3b_OBJECTS =  \
+-@GCC_TRUE@@NATIVE_LINKER_TRUE@	initpri3.$(OBJEXT)
+-initpri3b_OBJECTS = $(am_initpri3b_OBJECTS)
+-initpri3b_LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(initpri3b_LDFLAGS) \
+-	$(LDFLAGS) -o $@
+ @GCC_TRUE@@NATIVE_LINKER_TRUE@am_justsyms_OBJECTS =  \
+ @GCC_TRUE@@NATIVE_LINKER_TRUE@	justsyms_1.$(OBJEXT)
+ justsyms_OBJECTS = $(am_justsyms_OBJECTS)
+@@ -1698,7 +1701,7 @@ SOURCES = $(libgoldtest_a_SOURCES) basic_pic_test.c basic_pie_test.c \
+ 	incremental_copy_test.c incremental_test_2.c \
+ 	incremental_test_3.c incremental_test_4.c incremental_test_5.c \
+ 	incremental_test_6.c $(initpri1_SOURCES) $(initpri2_SOURCES) \
+-	$(initpri3a_SOURCES) $(initpri3b_SOURCES) $(justsyms_SOURCES) \
++	$(initpri3a_SOURCES) $(justsyms_SOURCES) \
+ 	$(justsyms_exec_SOURCES) $(large_SOURCES) local_labels_test.c \
+ 	many_sections_r_test.c $(many_sections_test_SOURCES) \
+ 	$(object_unittest_SOURCES) permission_test.c plugin_test_1.c \
+@@ -1844,6 +1847,8 @@ EGREP = @EGREP@
+ EXEEXT = @EXEEXT@
+ GENCAT = @GENCAT@
+ GMSGFMT = @GMSGFMT@
++GOLD_LDADD = @GOLD_LDADD@
++GOLD_LDFLAGS = @GOLD_LDFLAGS@
+ GREP = @GREP@
+ INCINTL = @INCINTL@
+ INSTALL = @INSTALL@
+@@ -2279,10 +2284,6 @@ LDADD = libgoldtest.a ../libgold.a ../../libiberty/libiberty.a $(LIBINTL) \
+ @GCC_TRUE@@NATIVE_LINKER_TRUE@initpri3a_DEPENDENCIES = gcctestdir/ld
+ @GCC_TRUE@@NATIVE_LINKER_TRUE@initpri3a_LDFLAGS = -Bgcctestdir/
+ @GCC_TRUE@@NATIVE_LINKER_TRUE@initpri3a_LDADD = 
+-@GCC_TRUE@@NATIVE_LINKER_TRUE@initpri3b_SOURCES = initpri3.c
+-@GCC_TRUE@@NATIVE_LINKER_TRUE@initpri3b_DEPENDENCIES = gcctestdir/ld
+-@GCC_TRUE@@NATIVE_LINKER_TRUE@initpri3b_LDFLAGS = -Bgcctestdir/ -Wl,--no-ctors-in-init-array
+-@GCC_TRUE@@NATIVE_LINKER_TRUE@initpri3b_LDADD = 
+ @GCC_TRUE@@NATIVE_LINKER_TRUE@ver_test_SOURCES = ver_test_main.cc
+ @GCC_TRUE@@NATIVE_LINKER_TRUE@ver_test_DEPENDENCIES = gcctestdir/ld ver_test_1.so ver_test_2.so ver_test_4.so
+ @GCC_TRUE@@NATIVE_LINKER_TRUE@ver_test_LDFLAGS = -Bgcctestdir/ -Wl,-R,.
+@@ -2926,9 +2927,6 @@ initpri2$(EXEEXT): $(initpri2_OBJECTS) $(initpri2_DEPENDENCIES)
+ initpri3a$(EXEEXT): $(initpri3a_OBJECTS) $(initpri3a_DEPENDENCIES) 
+ 	@rm -f initpri3a$(EXEEXT)
+ 	$(initpri3a_LINK) $(initpri3a_OBJECTS) $(initpri3a_LDADD) $(LIBS)
+-initpri3b$(EXEEXT): $(initpri3b_OBJECTS) $(initpri3b_DEPENDENCIES) 
+-	@rm -f initpri3b$(EXEEXT)
+-	$(initpri3b_LINK) $(initpri3b_OBJECTS) $(initpri3b_LDADD) $(LIBS)
+ justsyms$(EXEEXT): $(justsyms_OBJECTS) $(justsyms_DEPENDENCIES) 
+ 	@rm -f justsyms$(EXEEXT)
+ 	$(justsyms_LINK) $(justsyms_OBJECTS) $(justsyms_LDADD) $(LIBS)
+@@ -3867,8 +3865,6 @@ initpri2.log: initpri2$(EXEEXT)
+ 	@p='initpri2$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post)
+ initpri3a.log: initpri3a$(EXEEXT)
+ 	@p='initpri3a$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post)
+-initpri3b.log: initpri3b$(EXEEXT)
+-	@p='initpri3b$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post)
+ flagstest_o_specialfile.log: flagstest_o_specialfile$(EXEEXT)
+ 	@p='flagstest_o_specialfile$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post)
+ flagstest_compress_debug_sections.log: flagstest_compress_debug_sections$(EXEEXT)
+diff --git a/gold/testsuite/plugin_test_2.sh b/gold/testsuite/plugin_test_2.sh
+index a47d22a..293b1f0 100755
+--- a/gold/testsuite/plugin_test_2.sh
++++ b/gold/testsuite/plugin_test_2.sh
+@@ -45,7 +45,7 @@ check plugin_test_2.err "two_file_test_main.o: claim file hook called"
+ check plugin_test_2.err "two_file_test_1.syms: claim file hook called"
+ check plugin_test_2.err "two_file_test_1b.syms: claim file hook called"
+ check plugin_test_2.err "two_file_shared_2.so: claim file hook called"
+-check plugin_test_2.err "two_file_test_1.syms: _Z4f13iv: PREVAILING_DEF_REG"
++check plugin_test_2.err "two_file_test_1.syms: _Z4f13iv: PREVAILING_DEF_IRONLY_EXP"
+ check plugin_test_2.err "two_file_test_1.syms: _Z2t2v: PREVAILING_DEF_REG"
+ check plugin_test_2.err "two_file_test_1.syms: v2: RESOLVED_DYN"
+ check plugin_test_2.err "two_file_test_1.syms: t17data: RESOLVED_DYN"
+diff --git a/gold/testsuite/script_test_2.t b/gold/testsuite/script_test_2.t
+index 73d39df..6a0188f 100644
+--- a/gold/testsuite/script_test_2.t
++++ b/gold/testsuite/script_test_2.t
+@@ -49,7 +49,7 @@ SECTIONS
+     /* This should match the remaining sections.  */
+     *(.gold_test)
+ 
+-    . = . + 4;
++    . = 60;
+     start_data = .;
+     BYTE(1)
+     SHORT(2)
+diff --git a/gold/timer.cc b/gold/timer.cc
+index d9b8874..44e19f5 100644
+--- a/gold/timer.cc
++++ b/gold/timer.cc
+@@ -22,6 +22,8 @@
+ 
+ #include "gold.h"
+ 
++#include <unistd.h>
++
+ #ifdef HAVE_TIMES
+ #include <sys/times.h>
+ #endif
+diff --git a/gold/x86_64.cc b/gold/x86_64.cc
+index e6b0021..e7c981b 100644
+--- a/gold/x86_64.cc
++++ b/gold/x86_64.cc
+@@ -1549,7 +1549,7 @@ Target_x86_64::reserve_local_got_entry(
+     case GOT_TYPE_STANDARD:
+       if (parameters->options().output_is_position_independent())
+ 	rela_dyn->add_local_relative(obj, r_sym, elfcpp::R_X86_64_RELATIVE,
+-				     this->got_, got_offset, 0);
++				     this->got_, got_offset, 0, false);
+       break;
+     case GOT_TYPE_TLS_OFFSET:
+       rela_dyn->add_local(obj, r_sym, elfcpp::R_X86_64_TPOFF64,
+@@ -1953,8 +1953,8 @@ Target_x86_64::Scan::local(Symbol_table* symtab,
+                            const elfcpp::Sym<64, false>& lsym)
+ {
+   // A local STT_GNU_IFUNC symbol may require a PLT entry.
+-  if (lsym.get_st_type() == elfcpp::STT_GNU_IFUNC
+-      && this->reloc_needs_plt_for_ifunc(object, r_type))
++  bool is_ifunc = lsym.get_st_type() == elfcpp::STT_GNU_IFUNC;
++  if (is_ifunc && this->reloc_needs_plt_for_ifunc(object, r_type))
+     {
+       unsigned int r_sym = elfcpp::elf_r_sym<64>(reloc.get_r_info());
+       target->make_local_ifunc_plt_entry(symtab, layout, object, r_sym);
+@@ -1982,7 +1982,7 @@ Target_x86_64::Scan::local(Symbol_table* symtab,
+ 				       elfcpp::R_X86_64_RELATIVE,
+ 				       output_section, data_shndx,
+ 				       reloc.get_r_offset(),
+-				       reloc.get_r_addend());
++				       reloc.get_r_addend(), is_ifunc);
+         }
+       break;
+ 
+@@ -2058,7 +2058,7 @@ Target_x86_64::Scan::local(Symbol_table* symtab,
+ 	// lets function pointers compare correctly with shared
+ 	// libraries.  Otherwise we would need an IRELATIVE reloc.
+ 	bool is_new;
+-	if (lsym.get_st_type() == elfcpp::STT_GNU_IFUNC)
++	if (is_ifunc)
+ 	  is_new = got->add_local_plt(object, r_sym, GOT_TYPE_STANDARD);
+ 	else
+ 	  is_new = got->add_local(object, r_sym, GOT_TYPE_STANDARD);
+@@ -2076,7 +2076,7 @@ Target_x86_64::Scan::local(Symbol_table* symtab,
+ 		      object->local_got_offset(r_sym, GOT_TYPE_STANDARD);
+ 		    rela_dyn->add_local_relative(object, r_sym,
+ 						 elfcpp::R_X86_64_RELATIVE,
+-						 got, got_offset, 0);
++						 got, got_offset, 0, is_ifunc);
+ 		  }
+                 else
+                   {
+@@ -3181,12 +3181,6 @@ Target_x86_64::Relocate::relocate_tls(const Relocate_info<64, false>* relinfo,
+             }
+           if (optimized_type == tls::TLSOPT_TO_IE)
+             {
+-	      if (tls_segment == NULL)
+-		{
+-		  gold_assert(parameters->errors()->error_count() > 0
+-			      || issue_undefined_symbol_error(gsym));
+-		  return;
+-		}
+               value = target->got_plt_section()->address() + got_offset;
+               this->tls_gd_to_ie(relinfo, relnum, tls_segment, rela, r_type,
+                                  value, view, address, view_size);
+@@ -3867,42 +3861,51 @@ Target_x86_64::do_code_fill(section_size_type length) const
+     }
+ 
+   // Nop sequences of various lengths.
+-  const char nop1[1] = { 0x90 };                   // nop
+-  const char nop2[2] = { 0x66, 0x90 };             // xchg %ax %ax
+-  const char nop3[3] = { 0x0f, 0x1f, 0x00 };       // nop (%rax)
+-  const char nop4[4] = { 0x0f, 0x1f, 0x40, 0x00};  // nop 0(%rax)
+-  const char nop5[5] = { 0x0f, 0x1f, 0x44, 0x00,   // nop 0(%rax,%rax,1)
+-                         0x00 };
+-  const char nop6[6] = { 0x66, 0x0f, 0x1f, 0x44,   // nopw 0(%rax,%rax,1)
+-                         0x00, 0x00 };
+-  const char nop7[7] = { 0x0f, 0x1f, 0x80, 0x00,   // nopl 0L(%rax)
+-                         0x00, 0x00, 0x00 };
+-  const char nop8[8] = { 0x0f, 0x1f, 0x84, 0x00,   // nopl 0L(%rax,%rax,1)
+-                         0x00, 0x00, 0x00, 0x00 };
+-  const char nop9[9] = { 0x66, 0x0f, 0x1f, 0x84,   // nopw 0L(%rax,%rax,1)
+-                         0x00, 0x00, 0x00, 0x00,
+-                         0x00 };
+-  const char nop10[10] = { 0x66, 0x2e, 0x0f, 0x1f, // nopw %cs:0L(%rax,%rax,1)
+-                           0x84, 0x00, 0x00, 0x00,
+-                           0x00, 0x00 };
+-  const char nop11[11] = { 0x66, 0x66, 0x2e, 0x0f, // data16
+-                           0x1f, 0x84, 0x00, 0x00, // nopw %cs:0L(%rax,%rax,1)
+-                           0x00, 0x00, 0x00 };
+-  const char nop12[12] = { 0x66, 0x66, 0x66, 0x2e, // data16; data16
+-                           0x0f, 0x1f, 0x84, 0x00, // nopw %cs:0L(%rax,%rax,1)
+-                           0x00, 0x00, 0x00, 0x00 };
+-  const char nop13[13] = { 0x66, 0x66, 0x66, 0x66, // data16; data16; data16
+-                           0x2e, 0x0f, 0x1f, 0x84, // nopw %cs:0L(%rax,%rax,1)
+-                           0x00, 0x00, 0x00, 0x00,
+-                           0x00 };
+-  const char nop14[14] = { 0x66, 0x66, 0x66, 0x66, // data16; data16; data16
+-                           0x66, 0x2e, 0x0f, 0x1f, // data16
+-                           0x84, 0x00, 0x00, 0x00, // nopw %cs:0L(%rax,%rax,1)
+-                           0x00, 0x00 };
+-  const char nop15[15] = { 0x66, 0x66, 0x66, 0x66, // data16; data16; data16
+-                           0x66, 0x66, 0x2e, 0x0f, // data16; data16
+-                           0x1f, 0x84, 0x00, 0x00, // nopw %cs:0L(%rax,%rax,1)
+-                           0x00, 0x00, 0x00 };
++  const char nop1[1] = { '\x90' };                 // nop
++  const char nop2[2] = { '\x66', '\x90' };         // xchg %ax %ax
++  const char nop3[3] = { '\x0f', '\x1f', '\x00' }; // nop (%rax)
++  const char nop4[4] = { '\x0f', '\x1f', '\x40',   // nop 0(%rax)
++  			 '\x00'};
++  const char nop5[5] = { '\x0f', '\x1f', '\x44',   // nop 0(%rax,%rax,1)
++			 '\x00', '\x00' };
++  const char nop6[6] = { '\x66', '\x0f', '\x1f',   // nopw 0(%rax,%rax,1)
++  			 '\x44', '\x00', '\x00' };
++  const char nop7[7] = { '\x0f', '\x1f', '\x80',   // nopl 0L(%rax)
++  			 '\x00', '\x00', '\x00',
++			 '\x00' };
++  const char nop8[8] = { '\x0f', '\x1f', '\x84',   // nopl 0L(%rax,%rax,1)
++  			 '\x00', '\x00', '\x00',
++			 '\x00', '\x00' };
++  const char nop9[9] = { '\x66', '\x0f', '\x1f',   // nopw 0L(%rax,%rax,1)
++  			 '\x84', '\x00', '\x00',
++			 '\x00', '\x00', '\x00' };
++  const char nop10[10] = { '\x66', '\x2e', '\x0f', // nopw %cs:0L(%rax,%rax,1)
++  			   '\x1f', '\x84', '\x00',
++			   '\x00', '\x00', '\x00',
++			   '\x00' };
++  const char nop11[11] = { '\x66', '\x66', '\x2e', // data16
++  			   '\x0f', '\x1f', '\x84', // nopw %cs:0L(%rax,%rax,1)
++			   '\x00', '\x00', '\x00',
++			   '\x00', '\x00' };
++  const char nop12[12] = { '\x66', '\x66', '\x66', // data16; data16
++  			   '\x2e', '\x0f', '\x1f', // nopw %cs:0L(%rax,%rax,1)
++			   '\x84', '\x00', '\x00',
++			   '\x00', '\x00', '\x00' };
++  const char nop13[13] = { '\x66', '\x66', '\x66', // data16; data16; data16
++  			   '\x66', '\x2e', '\x0f', // nopw %cs:0L(%rax,%rax,1)
++			   '\x1f', '\x84', '\x00',
++			   '\x00', '\x00', '\x00',
++                           '\x00' };
++  const char nop14[14] = { '\x66', '\x66', '\x66', // data16; data16; data16
++  			   '\x66', '\x66', '\x2e', // data16
++			   '\x0f', '\x1f', '\x84', // nopw %cs:0L(%rax,%rax,1)
++			   '\x00', '\x00', '\x00',
++                           '\x00', '\x00' };
++  const char nop15[15] = { '\x66', '\x66', '\x66', // data16; data16; data16
++  			   '\x66', '\x66', '\x66', // data16; data16
++			   '\x2e', '\x0f', '\x1f', // nopw %cs:0L(%rax,%rax,1)
++			   '\x84', '\x00', '\x00',
++                           '\x00', '\x00', '\x00' };
+ 
+   const char* nops[16] = {
+     NULL,
+diff --git a/include/ChangeLog b/include/ChangeLog
+index af96977..e32f0f9 100644
+--- a/include/ChangeLog
++++ b/include/ChangeLog
+@@ -1,3 +1,11 @@
++2011-12-19  Chung-Lin Tang  <cltang@codesourcery.com>
++
++	Backport from mainline:
++
++	2011-12-19  Chung-Lin Tang  <cltang@codesourcery.com>
++
++	* elf/mips.h (elf_mips_reloc_type): Add R_MIPS16_TLS_* entries.
++
+ 2011-10-25  Alan Modra  <amodra@gmail.com>
+ 
+ 	Apply mainline patches.
+diff --git a/include/elf/mips.h b/include/elf/mips.h
+index db5fa54..c2c5922 100644
+--- a/include/elf/mips.h
++++ b/include/elf/mips.h
+@@ -98,7 +98,14 @@ START_RELOC_NUMBERS (elf_mips_reloc_type)
+   RELOC_NUMBER (R_MIPS16_CALL16, 103)
+   RELOC_NUMBER (R_MIPS16_HI16, 104)
+   RELOC_NUMBER (R_MIPS16_LO16, 105)
+-  FAKE_RELOC (R_MIPS16_max, 106)
++  RELOC_NUMBER (R_MIPS16_TLS_GD, 106)
++  RELOC_NUMBER (R_MIPS16_TLS_LDM, 107)
++  RELOC_NUMBER (R_MIPS16_TLS_DTPREL_HI16, 108)
++  RELOC_NUMBER (R_MIPS16_TLS_DTPREL_LO16, 109)
++  RELOC_NUMBER (R_MIPS16_TLS_GOTTPREL, 110)
++  RELOC_NUMBER (R_MIPS16_TLS_TPREL_HI16, 111)
++  RELOC_NUMBER (R_MIPS16_TLS_TPREL_LO16, 112)
++  FAKE_RELOC (R_MIPS16_max, 113)
+   /* These relocations are specific to VxWorks.  */
+   RELOC_NUMBER (R_MIPS_COPY, 126)
+   RELOC_NUMBER (R_MIPS_JUMP_SLOT, 127)
+diff --git a/ld/ChangeLog b/ld/ChangeLog
+index f5fa6ff..98fd778 100644
+--- a/ld/ChangeLog
++++ b/ld/ChangeLog
+@@ -1,3 +1,23 @@
++2012-05-11  Ralf Corsépius  <ralf.corsepius@rtems.org>
++
++	PR ld/13991
++	Backport from mainline:
++	2012-04-24  Alan Modra  <amodra@gmail.com>
++
++	* ld/ldlang.c (size_input_section): Use sec_info_type rather than
++	usrdata->flags.just_syms.
++	* ld/ldwrite.c (build_link_order): Likewise.
++	* ld/emultempl/hppaelf.em (build_section_lists): Likewise.
++	* ld/emultempl/ppc64elf.em (build_toc_list): Likewise.
++	* ld/emultempl/armelf.em (build_section_lists): Likewise.
++	(after_allocation): Update for renamed sec_info_type value.
++	* ld/emultempl/tic6xdsbt.em: Likewise.
++
++2011-12-20  Joseph Myers  <joseph@codesourcery.com>
++
++	* emulparams/elf32bmip.sh (OTHER_SECTIONS): Put .mdebug.* and
++	.gcc_compiled_long* sections at address 0.
++
+ 2011-11-02  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>
+ 
+ 	Backport from mainline:
+diff --git a/ld/emulparams/elf32bmip.sh b/ld/emulparams/elf32bmip.sh
+index 44a0b8a..f0fcd2c 100644
+--- a/ld/emulparams/elf32bmip.sh
++++ b/ld/emulparams/elf32bmip.sh
+@@ -64,14 +64,14 @@ OTHER_BSS_SYMBOLS='_fbss = .;'
+ OTHER_SECTIONS='
+   .gptab.sdata : { *(.gptab.data) *(.gptab.sdata) }
+   .gptab.sbss : { *(.gptab.bss) *(.gptab.sbss) }
+-  .mdebug.abi32 : { KEEP(*(.mdebug.abi32)) }
+-  .mdebug.abiN32 : { KEEP(*(.mdebug.abiN32)) }
+-  .mdebug.abi64 : { KEEP(*(.mdebug.abi64)) }
+-  .mdebug.abiO64 : { KEEP(*(.mdebug.abiO64)) }
+-  .mdebug.eabi32 : { KEEP(*(.mdebug.eabi32)) }
+-  .mdebug.eabi64 : { KEEP(*(.mdebug.eabi64)) }
+-  .gcc_compiled_long32 : { KEEP(*(.gcc_compiled_long32)) }
+-  .gcc_compiled_long64 : { KEEP(*(.gcc_compiled_long64)) }
++  .mdebug.abi32 0 : { KEEP(*(.mdebug.abi32)) }
++  .mdebug.abiN32 0 : { KEEP(*(.mdebug.abiN32)) }
++  .mdebug.abi64 0 : { KEEP(*(.mdebug.abi64)) }
++  .mdebug.abiO64 0 : { KEEP(*(.mdebug.abiO64)) }
++  .mdebug.eabi32 0 : { KEEP(*(.mdebug.eabi32)) }
++  .mdebug.eabi64 0 : { KEEP(*(.mdebug.eabi64)) }
++  .gcc_compiled_long32 0 : { KEEP(*(.gcc_compiled_long32)) }
++  .gcc_compiled_long64 0 : { KEEP(*(.gcc_compiled_long64)) }
+ '
+ ARCH=mips
+ MACHINE=
+diff --git a/ld/emultempl/armelf.em b/ld/emultempl/armelf.em
+index d29da59..7631474 100644
+--- a/ld/emultempl/armelf.em
++++ b/ld/emultempl/armelf.em
+@@ -240,7 +240,7 @@ build_section_lists (lang_statement_union_type *statement)
+     {
+       asection *i = statement->input_section.section;
+ 
+-      if (!((lang_input_statement_type *) i->owner->usrdata)->just_syms_flag
++      if (i->sec_info_type != SEC_INFO_TYPE_JUST_SYMS
+ 	  && (i->flags & SEC_EXCLUDE) == 0
+ 	  && i->output_section != NULL
+ 	  && i->output_section->owner == link_info.output_bfd)
+@@ -299,7 +299,7 @@ gld${EMULATION_NAME}_after_allocation (void)
+ 		  && elf_section_type (sec) == SHT_PROGBITS
+ 		  && (elf_section_flags (sec) & SHF_EXECINSTR) != 0
+ 		  && (sec->flags & SEC_EXCLUDE) == 0
+-		  && sec->sec_info_type != ELF_INFO_TYPE_JUST_SYMS
++		  && sec->sec_info_type != SEC_INFO_TYPE_JUST_SYMS
+ 		  && out_sec != bfd_abs_section_ptr)
+ 		{
+ 		  if (sec_count == list_size)
+diff --git a/ld/emultempl/hppaelf.em b/ld/emultempl/hppaelf.em
+index 1137ba2..6258bf4 100644
+--- a/ld/emultempl/hppaelf.em
++++ b/ld/emultempl/hppaelf.em
+@@ -229,7 +229,7 @@ build_section_lists (lang_statement_union_type *statement)
+     {
+       asection *i = statement->input_section.section;
+ 
+-      if (!((lang_input_statement_type *) i->owner->usrdata)->just_syms_flag
++      if (i->sec_info_type != SEC_INFO_TYPE_JUST_SYMS
+ 	  && (i->flags & SEC_EXCLUDE) == 0
+ 	  && i->output_section != NULL
+ 	  && i->output_section->owner == link_info.output_bfd)
+diff --git a/ld/emultempl/ppc64elf.em b/ld/emultempl/ppc64elf.em
+index 92a468f..52b9f05 100644
+--- a/ld/emultempl/ppc64elf.em
++++ b/ld/emultempl/ppc64elf.em
+@@ -428,7 +428,7 @@ build_toc_list (lang_statement_union_type *statement)
+     {
+       asection *i = statement->input_section.section;
+ 
+-      if (!((lang_input_statement_type *) i->owner->usrdata)->just_syms_flag
++      if (i->sec_info_type != SEC_INFO_TYPE_JUST_SYMS
+ 	  && (i->flags & SEC_EXCLUDE) == 0
+ 	  && i->output_section == toc_section)
+ 	{
+@@ -446,7 +446,7 @@ build_section_lists (lang_statement_union_type *statement)
+     {
+       asection *i = statement->input_section.section;
+ 
+-      if (!((lang_input_statement_type *) i->owner->usrdata)->just_syms_flag
++      if (i->sec_info_type != SEC_INFO_TYPE_JUST_SYMS
+ 	  && (i->flags & SEC_EXCLUDE) == 0
+ 	  && i->output_section != NULL
+ 	  && i->output_section->owner == link_info.output_bfd)
+diff --git a/ld/emultempl/tic6xdsbt.em b/ld/emultempl/tic6xdsbt.em
+index e287005..fd7a12b 100644
+--- a/ld/emultempl/tic6xdsbt.em
++++ b/ld/emultempl/tic6xdsbt.em
+@@ -122,7 +122,7 @@ gld${EMULATION_NAME}_after_allocation (void)
+ 		  && elf_section_type (sec) == SHT_PROGBITS
+ 		  && (elf_section_flags (sec) & SHF_EXECINSTR) != 0
+ 		  && (sec->flags & SEC_EXCLUDE) == 0
+-		  && sec->sec_info_type != ELF_INFO_TYPE_JUST_SYMS
++		  && sec->sec_info_type != SEC_INFO_TYPE_JUST_SYMS
+ 		  && out_sec != bfd_abs_section_ptr)
+ 		{
+ 		  if (sec_count == list_size)
+diff --git a/ld/ldlang.c b/ld/ldlang.c
+index 2c56b56..7ecbae2 100644
+--- a/ld/ldlang.c
++++ b/ld/ldlang.c
+@@ -4648,7 +4648,7 @@ size_input_section
+   lang_input_section_type *is = &((*this_ptr)->input_section);
+   asection *i = is->section;
+ 
+-  if (!((lang_input_statement_type *) i->owner->usrdata)->just_syms_flag
++  if (i->sec_info_type != SEC_INFO_TYPE_JUST_SYMS
+       && (i->flags & SEC_EXCLUDE) == 0)
+     {
+       unsigned int alignment_needed;
+diff --git a/ld/ldwrite.c b/ld/ldwrite.c
+index b7a1469..2503d1f 100644
+--- a/ld/ldwrite.c
++++ b/ld/ldwrite.c
+@@ -1,6 +1,6 @@
+ /* ldwrite.c -- write out the linked file
+    Copyright 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 2000, 2002,
+-   2003, 2004, 2005, 2006, 2007, 2008, 2010
++   2003, 2004, 2005, 2006, 2007, 2008, 2010, 2012
+    Free Software Foundation, Inc.
+    Written by Steve Chamberlain sac@cygnus.com
+ 
+@@ -240,7 +240,7 @@ build_link_order (lang_statement_union_type *statement)
+ 	   attached */
+ 	asection *i = statement->input_section.section;
+ 
+-	if (!((lang_input_statement_type *) i->owner->usrdata)->just_syms_flag
++	if (i->sec_info_type != SEC_INFO_TYPE_JUST_SYMS
+ 	    && (i->flags & SEC_EXCLUDE) == 0)
+ 	  {
+ 	    asection *output_section = i->output_section;
+diff --git a/ld/testsuite/ChangeLog b/ld/testsuite/ChangeLog
+index 233d962..6318c4f 100644
+--- a/ld/testsuite/ChangeLog
++++ b/ld/testsuite/ChangeLog
+@@ -1,3 +1,22 @@
++2012-01-10  H.J. Lu  <hongjiu.lu@intel.com>
++
++	Backport from mainline:
++	PR ld/13581
++	* ld-x86-64/ilp32-4.s: New.
++	* ld-x86-64/ilp32-10.d: Likewise.
++	* ld-x86-64/ilp32-10.s: Likewise.
++
++	* ld-x86-64/ilp32-4.d: Adjusted.
++	* ld-x86-64/ilp32-5.d: Likewise.
++	* ld-x86-64/ilp32-5.s: Likewise.
++
++	* ld-x86-64/x86-64.exp: Run ilp32-10.
++
++2011-12-01  Hans-Peter Nilsson  <hp@axis.com>
++
++	* ld-cris/pic-gc-72.d: Revert last change to adjust for reverted
++	cause for last change.
++
+ 2011-11-10  Matthew Gretton-Dann  <matthew.gretton-dann@arm.com>
+ 
+ 	Apply mainline patches.
+diff --git a/ld/testsuite/ld-cris/pic-gc-72.d b/ld/testsuite/ld-cris/pic-gc-72.d
+index 7e72752..7c30980 100644
+--- a/ld/testsuite/ld-cris/pic-gc-72.d
++++ b/ld/testsuite/ld-cris/pic-gc-72.d
+@@ -19,11 +19,10 @@ Contents of section .dynsym:
+ Contents of section .dynstr:
+ #...
+ Contents of section .text:
+- 016e 0f050f05                             .*
++ 0188 0f050f05                             .*
+ Contents of section .dynamic:
+- 2174 .*
+ #...
+ Contents of section .got:
+- 21cc 74210000 00000000 00000000           .*
++ 21e4 8c210000 00000000 00000000           .*
+ Contents of section .data:
+- 21d8 00000000                             .*
++ 21f0 00000000                             .*
+diff --git a/ld/testsuite/ld-x86-64/ilp32-10.d b/ld/testsuite/ld-x86-64/ilp32-10.d
+new file mode 100644
+index 0000000..43d9fbd
+--- /dev/null
++++ b/ld/testsuite/ld-x86-64/ilp32-10.d
+@@ -0,0 +1,3 @@
++#as: --x32
++#ld: -shared -melf32_x86_64
++#error: .*relocation R_X86_64_PC32 against undefined symbol `bar' can not be used when making a shared object; recompile with -fPIC
+diff --git a/ld/testsuite/ld-x86-64/ilp32-10.s b/ld/testsuite/ld-x86-64/ilp32-10.s
+new file mode 100644
+index 0000000..70e4a90
+--- /dev/null
++++ b/ld/testsuite/ld-x86-64/ilp32-10.s
+@@ -0,0 +1,3 @@
++	.globl foo
++foo:
++	mov bar(%rip), %rax
+diff --git a/ld/testsuite/ld-x86-64/ilp32-4.d b/ld/testsuite/ld-x86-64/ilp32-4.d
+index 84dc7b2..92d8a67 100644
+--- a/ld/testsuite/ld-x86-64/ilp32-4.d
++++ b/ld/testsuite/ld-x86-64/ilp32-4.d
+@@ -1,36 +1,30 @@
+-#source: start.s
+ #as: --x32
+ #ld: -m elf32_x86_64 -shared --no-ld-generated-unwind-info
+ #readelf: -d -S --wide
+ 
+-There are 10 section headers, starting at offset 0x22c:
++There are 9 section headers, starting at offset 0x1d8:
+ 
+ Section Headers:
+   \[Nr\] Name              Type            Addr     Off    Size   ES Flg Lk Inf Al
+   \[ 0\]                   NULL            00000000 000000 000000 00      0   0  0
+-  \[ 1\] .hash             HASH            00000094 000094 000030 04   A  2   0  4
+-  \[ 2\] .dynsym           DYNSYM          000000c4 0000c4 000070 10   A  3   2  4
+-  \[ 3\] .dynstr           STRTAB          00000134 000134 00001d 00   A  0   0  1
+-  \[ 4\] .rela.dyn         RELA            00000154 000154 00000c 0c   A  2   0  4
+-  \[ 5\] .text             PROGBITS        00000160 000160 000005 00  AX  0   0  4
+-  \[ 6\] .dynamic          DYNAMIC         00200168 000168 000078 08  WA  3   0  4
+-  \[ 7\] .shstrtab         STRTAB          00000000 0001e0 00004a 00      0   0  1
+-  \[ 8\] .symtab           SYMTAB          00000000 0003bc 0000e0 10      9   9  4
+-  \[ 9\] .strtab           STRTAB          00000000 00049c 000043 00      0   0  1
++  \[ 1\] .hash             HASH            00000094 000094 00002c 04   A  2   0  4
++  \[ 2\] .dynsym           DYNSYM          000000c0 0000c0 000060 10   A  3   2  4
++  \[ 3\] .dynstr           STRTAB          00000120 000120 000019 00   A  0   0  1
++  \[ 4\] .text             PROGBITS        0000013c 00013c 000001 00  AX  0   0  4
++  \[ 5\] .dynamic          DYNAMIC         00200140 000140 000058 08  WA  3   0  4
++  \[ 6\] .shstrtab         STRTAB          00000000 000198 000040 00      0   0  1
++  \[ 7\] .symtab           SYMTAB          00000000 000340 0000c0 10      8   8  4
++  \[ 8\] .strtab           STRTAB          00000000 000400 00003f 00      0   0  1
+ Key to Flags:
+   W \(write\), A \(alloc\), X \(execute\), M \(merge\), S \(strings\), l \(large\)
+   I \(info\), L \(link order\), G \(group\), T \(TLS\), E \(exclude\), x \(unknown\)
+   O \(extra OS processing required\) o \(OS specific\), p \(processor specific\)
+ 
+-Dynamic section at offset 0x168 contains 10 entries:
++Dynamic section at offset 0x140 contains 6 entries:
+   Tag        Type                         Name/Value
+  0x00000004 \(HASH\)                       0x94
+- 0x00000005 \(STRTAB\)                     0x134
+- 0x00000006 \(SYMTAB\)                     0xc4
+- 0x0000000a \(STRSZ\)                      29 \(bytes\)
++ 0x00000005 \(STRTAB\)                     0x120
++ 0x00000006 \(SYMTAB\)                     0xc0
++ 0x0000000a \(STRSZ\)                      25 \(bytes\)
+  0x0000000b \(SYMENT\)                     16 \(bytes\)
+- 0x00000007 \(RELA\)                       0x154
+- 0x00000008 \(RELASZ\)                     12 \(bytes\)
+- 0x00000009 \(RELAENT\)                    12 \(bytes\)
+- 0x00000016 \(TEXTREL\)                    0x0
+  0x00000000 \(NULL\)                       0x0
+diff --git a/ld/testsuite/ld-x86-64/ilp32-4.s b/ld/testsuite/ld-x86-64/ilp32-4.s
+new file mode 100644
+index 0000000..5f270c7
+--- /dev/null
++++ b/ld/testsuite/ld-x86-64/ilp32-4.s
+@@ -0,0 +1,3 @@
++	.globl _start
++_start:
++	ret
+diff --git a/ld/testsuite/ld-x86-64/ilp32-5.d b/ld/testsuite/ld-x86-64/ilp32-5.d
+index e4673e5..4870c2b 100644
+--- a/ld/testsuite/ld-x86-64/ilp32-5.d
++++ b/ld/testsuite/ld-x86-64/ilp32-5.d
+@@ -4,5 +4,5 @@
+ 
+ #...
+ [0-9a-f]+ +[0-9a-f]+ +R_X86_64_RELATIVE +[0-9a-f]+
+-[0-9a-f]+ +[0-9a-f]+ +R_X86_64_PC32 +[0-9a-f]+ +foo - 4
++[0-9a-f]+ +[0-9a-f]+ +R_X86_64_GLOB_DAT +[0-9a-f]+ +foo \+ 0
+ [0-9a-f]+ +[0-9a-f]+ +R_X86_64_32 +[0-9a-f]+ +foo \+ 0
+diff --git a/ld/testsuite/ld-x86-64/ilp32-5.s b/ld/testsuite/ld-x86-64/ilp32-5.s
+index 0d97807..ef0c60e 100644
+--- a/ld/testsuite/ld-x86-64/ilp32-5.s
++++ b/ld/testsuite/ld-x86-64/ilp32-5.s
+@@ -1,6 +1,6 @@
+ 	.globl bar
+ bar:
+-	mov foo(%rip), %rax
++	mov foo@GOTPCREL(%rip), %rax
+ 
+ 	.data
+ xxx:
+diff --git a/ld/testsuite/ld-x86-64/x86-64.exp b/ld/testsuite/ld-x86-64/x86-64.exp
+index 77b081b..44d3e07 100644
+--- a/ld/testsuite/ld-x86-64/x86-64.exp
++++ b/ld/testsuite/ld-x86-64/x86-64.exp
+@@ -207,6 +207,7 @@ run_dump_test "ilp32-6"
+ run_dump_test "ilp32-7"
+ run_dump_test "ilp32-8"
+ run_dump_test "ilp32-9"
++run_dump_test "ilp32-10"
+ run_dump_test "ia32-1"
+ run_dump_test "ia32-2"
+ run_dump_test "ia32-3"
+diff --git a/opcodes/ChangeLog b/opcodes/ChangeLog
+index a445030..26f759e 100644
+--- a/opcodes/ChangeLog
++++ b/opcodes/ChangeLog
+@@ -1,3 +1,8 @@
++2011-11-25  Pierre Muller  <muller@ics.u-strasbg.fr>
++
++	* mips-dis.c (print_insn_micromips): Rename local variable iprintf
++	to infprintf to avoid shadow warning.
++
+ 2011-10-27  Peter Bergner  <bergner@vnet.ibm.com>
+ 
+ 	* ppc-opc.c (powerpc_opcodes) <drrndq, drrndq., dtstexq, dctqpq,
+diff --git a/opcodes/mips-dis.c b/opcodes/mips-dis.c
+index 4e18d8a..72285de 100644
+--- a/opcodes/mips-dis.c
++++ b/opcodes/mips-dis.c
+@@ -2260,7 +2260,7 @@ print_insn_mips16 (bfd_vma memaddr, struct disassemble_info *info)
+ static int
+ print_insn_micromips (bfd_vma memaddr, struct disassemble_info *info)
+ {
+-  const fprintf_ftype iprintf = info->fprintf_func;
++  const fprintf_ftype infprintf = info->fprintf_func;
+   const struct mips_opcode *op, *opend;
+   unsigned int lsb, msbd, msb;
+   void *is = info->stream;
+@@ -2307,7 +2307,7 @@ print_insn_micromips (bfd_vma memaddr, struct disassemble_info *info)
+       status = (*info->read_memory_func) (memaddr + 2, buffer, 2, info);
+       if (status != 0)
+ 	{
+-	  iprintf (is, "micromips 0x%x", higher);
++	  infprintf (is, "micromips 0x%x", higher);
+ 	  (*info->memory_error_func) (status, memaddr + 2, info);
+ 	  return -1;
+ 	}
+@@ -2320,7 +2320,7 @@ print_insn_micromips (bfd_vma memaddr, struct disassemble_info *info)
+       status = (*info->read_memory_func) (memaddr + 4, buffer, 2, info);
+       if (status != 0)
+ 	{
+-	  iprintf (is, "micromips 0x%x", higher);
++	  infprintf (is, "micromips 0x%x", higher);
+ 	  (*info->memory_error_func) (status, memaddr + 4, info);
+ 	  return -1;
+ 	}
+@@ -2328,7 +2328,7 @@ print_insn_micromips (bfd_vma memaddr, struct disassemble_info *info)
+ 	insn = bfd_getb16 (buffer);
+       else
+ 	insn = bfd_getl16 (buffer);
+-      iprintf (is, "0x%x%04x (48-bit insn)", higher, insn);
++      infprintf (is, "0x%x%04x (48-bit insn)", higher, insn);
+ 
+       info->insn_type = dis_noninsn;
+       return 6;
+@@ -2341,7 +2341,7 @@ print_insn_micromips (bfd_vma memaddr, struct disassemble_info *info)
+       status = (*info->read_memory_func) (memaddr + 2, buffer, 2, info);
+       if (status != 0)
+ 	{
+-	  iprintf (is, "micromips 0x%x", higher);
++	  infprintf (is, "micromips 0x%x", higher);
+ 	  (*info->memory_error_func) (status, memaddr + 2, info);
+ 	  return -1;
+ 	}
+@@ -2371,9 +2371,9 @@ print_insn_micromips (bfd_vma memaddr, struct disassemble_info *info)
+ 	{
+ 	  const char *s;
+ 
+-	  iprintf (is, "%s", op->name);
++	  infprintf (is, "%s", op->name);
+ 	  if (op->args[0] != '\0')
+-	    iprintf (is, "\t");
++	    infprintf (is, "\t");
+ 
+ 	  for (s = op->args; *s != '\0'; s++)
+ 	    {
+@@ -2382,37 +2382,37 @@ print_insn_micromips (bfd_vma memaddr, struct disassemble_info *info)
+ 		case ',':
+ 		case '(':
+ 		case ')':
+-		  iprintf (is, "%c", *s);
++		  infprintf (is, "%c", *s);
+ 		  break;
+ 
+ 		case '.':
+ 		  delta = GET_OP (insn, OFFSET10);
+ 		  if (delta & 0x200)
+ 		    delta |= ~0x3ff;
+-		  iprintf (is, "%d", delta);
++		  infprintf (is, "%d", delta);
+ 		  break;
+ 
+ 		case '1':
+-		  iprintf (is, "0x%lx", GET_OP (insn, STYPE));
++		  infprintf (is, "0x%lx", GET_OP (insn, STYPE));
+ 		  break;
+ 
+ 		case '<':
+-		  iprintf (is, "0x%lx", GET_OP (insn, SHAMT));
++		  infprintf (is, "0x%lx", GET_OP (insn, SHAMT));
+ 		  break;
+ 
+ 		case '\\':
+-		  iprintf (is, "0x%lx", GET_OP (insn, 3BITPOS));
++		  infprintf (is, "0x%lx", GET_OP (insn, 3BITPOS));
+ 		  break;
+ 
+ 		case '|':
+-		  iprintf (is, "0x%lx", GET_OP (insn, TRAP));
++		  infprintf (is, "0x%lx", GET_OP (insn, TRAP));
+ 		  break;
+ 
+ 		case '~':
+ 		  delta = GET_OP (insn, OFFSET12);
+ 		  if (delta & 0x800)
+ 		    delta |= ~0x7ff;
+-		  iprintf (is, "%d", delta);
++		  infprintf (is, "%d", delta);
+ 		  break;
+ 
+ 		case 'a':
+@@ -2433,34 +2433,34 @@ print_insn_micromips (bfd_vma memaddr, struct disassemble_info *info)
+ 		case 'r':
+ 		case 's':
+ 		case 'v':
+-		  iprintf (is, "%s", mips_gpr_names[GET_OP (insn, RS)]);
++		  infprintf (is, "%s", mips_gpr_names[GET_OP (insn, RS)]);
+ 		  break;
+ 
+ 		case 'c':
+-		  iprintf (is, "0x%lx", GET_OP (insn, CODE));
++		  infprintf (is, "0x%lx", GET_OP (insn, CODE));
+ 		  break;
+ 
+ 		case 'd':
+-		  iprintf (is, "%s", mips_gpr_names[GET_OP (insn, RD)]);
++		  infprintf (is, "%s", mips_gpr_names[GET_OP (insn, RD)]);
+ 		  break;
+ 
+ 		case 'h':
+-		  iprintf (is, "0x%lx", GET_OP (insn, PREFX));
++		  infprintf (is, "0x%lx", GET_OP (insn, PREFX));
+ 		  break;
+ 
+ 		case 'i':
+ 		case 'u':
+-		  iprintf (is, "0x%lx", GET_OP (insn, IMMEDIATE));
++		  infprintf (is, "0x%lx", GET_OP (insn, IMMEDIATE));
+ 		  break;
+ 
+ 		case 'j': /* Same as i, but sign-extended.  */
+ 		case 'o':
+ 		  delta = (GET_OP (insn, DELTA) ^ 0x8000) - 0x8000;
+-		  iprintf (is, "%d", delta);
++		  infprintf (is, "%d", delta);
+ 		  break;
+ 
+ 		case 'k':
+-		  iprintf (is, "0x%x", GET_OP (insn, CACHE));
++		  infprintf (is, "0x%x", GET_OP (insn, CACHE));
+ 		  break;
+ 
+ 		case 'n':
+@@ -2472,26 +2472,26 @@ print_insn_micromips (bfd_vma memaddr, struct disassemble_info *info)
+ 		    if (s_reg_encode != 0)
+ 		      {
+ 			if (s_reg_encode == 1)
+-			  iprintf (is, "%s", mips_gpr_names[16]);
++			  infprintf (is, "%s", mips_gpr_names[16]);
+ 			else if (s_reg_encode < 9)
+-			  iprintf (is, "%s-%s",
++			  infprintf (is, "%s-%s",
+ 				   mips_gpr_names[16],
+ 				   mips_gpr_names[15 + s_reg_encode]);
+ 			else if (s_reg_encode == 9)
+-			  iprintf (is, "%s-%s,%s",
++			  infprintf (is, "%s-%s,%s",
+ 				   mips_gpr_names[16],
+ 				   mips_gpr_names[23],
+ 				   mips_gpr_names[30]);
+ 			else
+-			  iprintf (is, "UNKNOWN");
++			  infprintf (is, "UNKNOWN");
+ 		      }
+ 
+ 		    if (immed & 0x10) /* For ra.  */
+ 		      {
+ 			if (s_reg_encode == 0)
+-			  iprintf (is, "%s", mips_gpr_names[31]);
++			  infprintf (is, "%s", mips_gpr_names[31]);
+ 			else
+-			  iprintf (is, ",%s", mips_gpr_names[31]);
++			  infprintf (is, ",%s", mips_gpr_names[31]);
+ 		      }
+ 		    break;
+ 		  }
+@@ -2504,32 +2504,32 @@ print_insn_micromips (bfd_vma memaddr, struct disassemble_info *info)
+ 		  break;
+ 
+ 		case 'q':
+-		  iprintf (is, "0x%lx", GET_OP (insn, CODE2));
++		  infprintf (is, "0x%lx", GET_OP (insn, CODE2));
+ 		  break;
+ 
+ 		case 't':
+ 		case 'w':
+-		  iprintf (is, "%s", mips_gpr_names[GET_OP (insn, RT)]);
++		  infprintf (is, "%s", mips_gpr_names[GET_OP (insn, RT)]);
+ 		  break;
+ 
+ 		case 'y':
+-		  iprintf (is, "%s", mips_gpr_names[GET_OP (insn, RS3)]);
++		  infprintf (is, "%s", mips_gpr_names[GET_OP (insn, RS3)]);
+ 		  break;
+ 
+ 		case 'z':
+-		  iprintf (is, "%s", mips_gpr_names[0]);
++		  infprintf (is, "%s", mips_gpr_names[0]);
+ 		  break;
+ 
+ 		case 'B':
+-		  iprintf (is, "0x%lx", GET_OP (insn, CODE10));
++		  infprintf (is, "0x%lx", GET_OP (insn, CODE10));
+ 		  break;
+ 
+ 		case 'C':
+-		  iprintf (is, "0x%lx", GET_OP (insn, COPZ));
++		  infprintf (is, "0x%lx", GET_OP (insn, COPZ));
+ 		  break;
+ 
+ 		case 'D':
+-		  iprintf (is, "%s", mips_fpr_names[GET_OP (insn, FD)]);
++		  infprintf (is, "%s", mips_fpr_names[GET_OP (insn, FD)]);
+ 		  break;
+ 
+ 		case 'E':
+@@ -2540,7 +2540,7 @@ print_insn_micromips (bfd_vma memaddr, struct disassemble_info *info)
+ 		    'T' format.  Therefore, until we gain understanding of
+ 		    cp2 register names, we can simply print the register
+ 		    numbers.  */
+-		  iprintf (is, "$%ld", GET_OP (insn, RT));
++		  infprintf (is, "$%ld", GET_OP (insn, RT));
+ 		  break;
+ 
+ 		case 'G':
+@@ -2559,44 +2559,44 @@ print_insn_micromips (bfd_vma memaddr, struct disassemble_info *info)
+ 		    case 0x000002fc:				/* mtc0  */
+ 		    case 0x580000fc:				/* dmfc0 */
+ 		    case 0x580002fc:				/* dmtc0 */
+-		      iprintf (is, "%s", mips_cp0_names[GET_OP (insn, RS)]);
++		      infprintf (is, "%s", mips_cp0_names[GET_OP (insn, RS)]);
+ 		      break;
+ 		    default:
+-		      iprintf (is, "$%ld", GET_OP (insn, RS));
++		      infprintf (is, "$%ld", GET_OP (insn, RS));
+ 		      break;
+ 		    }
+ 		  break;
+ 
+ 		case 'H':
+-		  iprintf (is, "%ld", GET_OP (insn, SEL));
++		  infprintf (is, "%ld", GET_OP (insn, SEL));
+ 		  break;
+ 
+ 		case 'K':
+-		  iprintf (is, "%s", mips_hwr_names[GET_OP (insn, RS)]);
++		  infprintf (is, "%s", mips_hwr_names[GET_OP (insn, RS)]);
+ 		  break;
+ 
+ 		case 'M':
+-		  iprintf (is, "$fcc%ld", GET_OP (insn, CCC));
++		  infprintf (is, "$fcc%ld", GET_OP (insn, CCC));
+ 		  break;
+ 
+ 		case 'N':
+-		  iprintf (is,
++		  infprintf (is,
+ 			   (op->pinfo & (FP_D | FP_S)) != 0
+ 			   ? "$fcc%ld" : "$cc%ld",
+ 			   GET_OP (insn, BCC));
+ 		  break;
+ 
+ 		case 'R':
+-		  iprintf (is, "%s", mips_fpr_names[GET_OP (insn, FR)]);
++		  infprintf (is, "%s", mips_fpr_names[GET_OP (insn, FR)]);
+ 		  break;
+ 
+ 		case 'S':
+ 		case 'V':
+-		  iprintf (is, "%s", mips_fpr_names[GET_OP (insn, FS)]);
++		  infprintf (is, "%s", mips_fpr_names[GET_OP (insn, FS)]);
+ 		  break;
+ 
+ 		case 'T':
+-		  iprintf (is, "%s", mips_fpr_names[GET_OP (insn, FT)]);
++		  infprintf (is, "%s", mips_fpr_names[GET_OP (insn, FT)]);
+ 		  break;
+ 
+ 		case '+':
+@@ -2606,18 +2606,18 @@ print_insn_micromips (bfd_vma memaddr, struct disassemble_info *info)
+ 		    {
+ 		    case 'A':
+ 		      lsb = GET_OP (insn, EXTLSB);
+-		      iprintf (is, "0x%x", lsb);
++		      infprintf (is, "0x%x", lsb);
+ 		      break;
+ 
+ 		    case 'B':
+ 		      msb = GET_OP (insn, INSMSB);
+-		      iprintf (is, "0x%x", msb - lsb + 1);
++		      infprintf (is, "0x%x", msb - lsb + 1);
+ 		      break;
+ 
+ 		    case 'C':
+ 		    case 'H':
+ 		      msbd = GET_OP (insn, EXTMSBD);
+-		      iprintf (is, "0x%x", msbd + 1);
++		      infprintf (is, "0x%x", msbd + 1);
+ 		      break;
+ 
+ 		    case 'D':
+@@ -2637,30 +2637,30 @@ print_insn_micromips (bfd_vma memaddr, struct disassemble_info *info)
+ 						     mips_cp0sel_names_len,
+ 						     cp0reg, sel);
+ 			if (n != NULL)
+-			  iprintf (is, "%s", n->name);
++			  infprintf (is, "%s", n->name);
+ 			else
+-			  iprintf (is, "$%d,%d", cp0reg, sel);
++			  infprintf (is, "$%d,%d", cp0reg, sel);
+ 			break;
+ 		      }
+ 
+ 		    case 'E':
+ 		      lsb = GET_OP (insn, EXTLSB) + 32;
+-		      iprintf (is, "0x%x", lsb);
++		      infprintf (is, "0x%x", lsb);
+ 		      break;
+ 
+ 		    case 'F':
+ 		      msb = GET_OP (insn, INSMSB) + 32;
+-		      iprintf (is, "0x%x", msb - lsb + 1);
++		      infprintf (is, "0x%x", msb - lsb + 1);
+ 		      break;
+ 
+ 		    case 'G':
+ 		      msbd = GET_OP (insn, EXTMSBD) + 32;
+-		      iprintf (is, "0x%x", msbd + 1);
++		      infprintf (is, "0x%x", msbd + 1);
+ 		      break;
+ 
+ 		    default:
+ 		      /* xgettext:c-format */
+-		      iprintf (is,
++		      infprintf (is,
+ 			       _("# internal disassembler error, "
+ 				 "unrecognized modifier (+%c)"),
+ 			       *s);
+@@ -2674,111 +2674,111 @@ print_insn_micromips (bfd_vma memaddr, struct disassemble_info *info)
+ 		  switch (*s)
+ 		    {
+ 		    case 'a':	/* global pointer.  */
+-		      iprintf (is, "%s", mips_gpr_names[28]);
++		      infprintf (is, "%s", mips_gpr_names[28]);
+ 		      break;
+ 
+ 		    case 'b':
+ 		      regno = micromips_to_32_reg_b_map[GET_OP (insn, MB)];
+-		      iprintf (is, "%s", mips_gpr_names[regno]);
++		      infprintf (is, "%s", mips_gpr_names[regno]);
+ 		      break;
+ 
+ 		    case 'c':
+ 		      regno = micromips_to_32_reg_c_map[GET_OP (insn, MC)];
+-		      iprintf (is, "%s", mips_gpr_names[regno]);
++		      infprintf (is, "%s", mips_gpr_names[regno]);
+ 		      break;
+ 
+ 		    case 'd':
+ 		      regno = micromips_to_32_reg_d_map[GET_OP (insn, MD)];
+-		      iprintf (is, "%s", mips_gpr_names[regno]);
++		      infprintf (is, "%s", mips_gpr_names[regno]);
+ 		      break;
+ 
+ 		    case 'e':
+ 		      regno = micromips_to_32_reg_e_map[GET_OP (insn, ME)];
+-		      iprintf (is, "%s", mips_gpr_names[regno]);
++		      infprintf (is, "%s", mips_gpr_names[regno]);
+ 		      break;
+ 
+ 		    case 'f':
+ 		      /* Save lastregno for "mt" to print out later.  */
+ 		      lastregno = micromips_to_32_reg_f_map[GET_OP (insn, MF)];
+-		      iprintf (is, "%s", mips_gpr_names[lastregno]);
++		      infprintf (is, "%s", mips_gpr_names[lastregno]);
+ 		      break;
+ 
+ 		    case 'g':
+ 		      regno = micromips_to_32_reg_g_map[GET_OP (insn, MG)];
+-		      iprintf (is, "%s", mips_gpr_names[regno]);
++		      infprintf (is, "%s", mips_gpr_names[regno]);
+ 		      break;
+ 
+ 		    case 'h':
+ 		      regno = micromips_to_32_reg_h_map[GET_OP (insn, MH)];
+-		      iprintf (is, "%s", mips_gpr_names[regno]);
++		      infprintf (is, "%s", mips_gpr_names[regno]);
+ 		      break;
+ 
+ 		    case 'i':
+ 		      regno = micromips_to_32_reg_i_map[GET_OP (insn, MI)];
+-		      iprintf (is, "%s", mips_gpr_names[regno]);
++		      infprintf (is, "%s", mips_gpr_names[regno]);
+ 		      break;
+ 
+ 		    case 'j':
+-		      iprintf (is, "%s", mips_gpr_names[GET_OP (insn, MJ)]);
++		      infprintf (is, "%s", mips_gpr_names[GET_OP (insn, MJ)]);
+ 		      break;
+ 
+ 		    case 'l':
+ 		      regno = micromips_to_32_reg_l_map[GET_OP (insn, ML)];
+-		      iprintf (is, "%s", mips_gpr_names[regno]);
++		      infprintf (is, "%s", mips_gpr_names[regno]);
+ 		      break;
+ 
+ 		    case 'm':
+ 		      regno = micromips_to_32_reg_m_map[GET_OP (insn, MM)];
+-		      iprintf (is, "%s", mips_gpr_names[regno]);
++		      infprintf (is, "%s", mips_gpr_names[regno]);
+ 		      break;
+ 
+ 		    case 'n':
+ 		      regno = micromips_to_32_reg_n_map[GET_OP (insn, MN)];
+-		      iprintf (is, "%s", mips_gpr_names[regno]);
++		      infprintf (is, "%s", mips_gpr_names[regno]);
+ 		      break;
+ 
+ 		    case 'p':
+ 		      /* Save lastregno for "mt" to print out later.  */
+ 		      lastregno = GET_OP (insn, MP);
+-		      iprintf (is, "%s", mips_gpr_names[lastregno]);
++		      infprintf (is, "%s", mips_gpr_names[lastregno]);
+ 		      break;
+ 
+ 		    case 'q':
+ 		      regno = micromips_to_32_reg_q_map[GET_OP (insn, MQ)];
+-		      iprintf (is, "%s", mips_gpr_names[regno]);
++		      infprintf (is, "%s", mips_gpr_names[regno]);
+ 		      break;
+ 
+ 		    case 'r':	/* program counter.  */
+-		      iprintf (is, "$pc");
++		      infprintf (is, "$pc");
+ 		      break;
+ 
+ 		    case 's':	/* stack pointer.  */
+ 		      lastregno = 29;
+-		      iprintf (is, "%s", mips_gpr_names[29]);
++		      infprintf (is, "%s", mips_gpr_names[29]);
+ 		      break;
+ 
+ 		    case 't':
+-		      iprintf (is, "%s", mips_gpr_names[lastregno]);
++		      infprintf (is, "%s", mips_gpr_names[lastregno]);
+ 		      break;
+ 
+ 		    case 'z':	/* $0.  */
+-		      iprintf (is, "%s", mips_gpr_names[0]);
++		      infprintf (is, "%s", mips_gpr_names[0]);
+ 		      break;
+ 
+ 		    case 'A':
+ 		      /* Sign-extend the immediate.  */
+ 		      immed = ((GET_OP (insn, IMMA) ^ 0x40) - 0x40) << 2;
+-		      iprintf (is, "%d", immed);
++		      infprintf (is, "%d", immed);
+ 		      break;
+ 
+ 		    case 'B':
+ 		      immed = micromips_imm_b_map[GET_OP (insn, IMMB)];
+-		      iprintf (is, "%d", immed);
++		      infprintf (is, "%d", immed);
+ 		      break;
+ 
+ 		    case 'C':
+ 		      immed = micromips_imm_c_map[GET_OP (insn, IMMC)];
+-		      iprintf (is, "0x%lx", immed);
++		      infprintf (is, "0x%lx", immed);
+ 		      break;
+ 
+ 		    case 'D':
+@@ -2797,50 +2797,50 @@ print_insn_micromips (bfd_vma memaddr, struct disassemble_info *info)
+ 
+ 		    case 'F':
+ 		      immed = GET_OP (insn, IMMF);
+-		      iprintf (is, "0x%x", immed);
++		      infprintf (is, "0x%x", immed);
+ 		      break;
+ 
+ 		    case 'G':
+ 		      immed = (insn >> MICROMIPSOP_SH_IMMG) + 1;
+ 		      immed = (immed & MICROMIPSOP_MASK_IMMG) - 1;
+-		      iprintf (is, "%d", immed);
++		      infprintf (is, "%d", immed);
+ 		      break;
+ 
+ 		    case 'H':
+ 		      immed = GET_OP (insn, IMMH) << 1;
+-		      iprintf (is, "%d", immed);
++		      infprintf (is, "%d", immed);
+ 		      break;
+ 
+ 		    case 'I':
+ 		      immed = (insn >> MICROMIPSOP_SH_IMMI) + 1;
+ 		      immed = (immed & MICROMIPSOP_MASK_IMMI) - 1;
+-		      iprintf (is, "%d", immed);
++		      infprintf (is, "%d", immed);
+ 		      break;
+ 
+ 		    case 'J':
+ 		      immed = GET_OP (insn, IMMJ) << 2;
+-		      iprintf (is, "%d", immed);
++		      infprintf (is, "%d", immed);
+ 		      break;
+ 
+ 		    case 'L':
+ 		      immed = GET_OP (insn, IMML);
+-		      iprintf (is, "%d", immed);
++		      infprintf (is, "%d", immed);
+ 		      break;
+ 
+ 		    case 'M':
+ 		      immed = (insn >> MICROMIPSOP_SH_IMMM) - 1;
+ 		      immed = (immed & MICROMIPSOP_MASK_IMMM) + 1;
+-		      iprintf (is, "%d", immed);
++		      infprintf (is, "%d", immed);
+ 		      break;
+ 
+ 		    case 'N':
+ 		      immed = GET_OP (insn, IMMN);
+ 		      if (immed == 0)
+-			iprintf (is, "%s,%s",
++			infprintf (is, "%s,%s",
+ 				 mips_gpr_names[16],
+ 				 mips_gpr_names[31]);
+ 		      else
+-			iprintf (is, "%s-%s,%s",
++			infprintf (is, "%s-%s,%s",
+ 				 mips_gpr_names[16],
+ 				 mips_gpr_names[16 + immed],
+ 				 mips_gpr_names[31]);
+@@ -2848,35 +2848,35 @@ print_insn_micromips (bfd_vma memaddr, struct disassemble_info *info)
+ 
+ 		    case 'O':
+ 		      immed = GET_OP (insn, IMMO);
+-		      iprintf (is, "0x%x", immed);
++		      infprintf (is, "0x%x", immed);
+ 		      break;
+ 
+ 		    case 'P':
+ 		      immed = GET_OP (insn, IMMP) << 2;
+-		      iprintf (is, "%d", immed);
++		      infprintf (is, "%d", immed);
+ 		      break;
+ 
+ 		    case 'Q':
+ 		      /* Sign-extend the immediate.  */
+ 		      immed = (GET_OP (insn, IMMQ) ^ 0x400000) - 0x400000;
+ 		      immed <<= 2;
+-		      iprintf (is, "%d", immed);
++		      infprintf (is, "%d", immed);
+ 		      break;
+ 
+ 		    case 'U':
+ 		      immed = GET_OP (insn, IMMU) << 2;
+-		      iprintf (is, "%d", immed);
++		      infprintf (is, "%d", immed);
+ 		      break;
+ 
+ 		    case 'W':
+ 		      immed = GET_OP (insn, IMMW) << 2;
+-		      iprintf (is, "%d", immed);
++		      infprintf (is, "%d", immed);
+ 		      break;
+ 
+ 		    case 'X':
+ 		      /* Sign-extend the immediate.  */
+ 		      immed = (GET_OP (insn, IMMX) ^ 0x8) - 0x8;
+-		      iprintf (is, "%d", immed);
++		      infprintf (is, "%d", immed);
+ 		      break;
+ 
+ 		    case 'Y':
+@@ -2885,12 +2885,12 @@ print_insn_micromips (bfd_vma memaddr, struct disassemble_info *info)
+ 		      if (immed >= -2 && immed <= 1)
+ 			immed ^= 0x100;
+ 		      immed = immed << 2;
+-		      iprintf (is, "%d", immed);
++		      infprintf (is, "%d", immed);
+ 		      break;
+ 
+ 		    default:
+ 		      /* xgettext:c-format */
+-		      iprintf (is,
++		      infprintf (is,
+ 			       _("# internal disassembler error, "
+ 				 "unrecognized modifier (m%c)"),
+ 			       *s);
+@@ -2900,7 +2900,7 @@ print_insn_micromips (bfd_vma memaddr, struct disassemble_info *info)
+ 
+ 		default:
+ 		  /* xgettext:c-format */
+-		  iprintf (is,
++		  infprintf (is,
+ 			   _("# internal disassembler error, "
+ 			     "unrecognized modifier (%c)"),
+ 			   *s);
+@@ -2937,7 +2937,7 @@ print_insn_micromips (bfd_vma memaddr, struct disassemble_info *info)
+     }
+ #undef GET_OP
+ 
+-  iprintf (is, "0x%x", insn);
++  infprintf (is, "0x%x", insn);
+   info->insn_type = dis_noninsn;
+ 
+   return length;
--- binutils-2.22.orig/debian/patches/160_gas_pr12698.diff
+++ binutils-2.22/debian/patches/160_gas_pr12698.diff
@@ -0,0 +1,54 @@
+# DP: Proposed patch for PR gas/12698
+
+2011-04-15  Bernd Schmidt  <bernds@codesourcery.com>
+
+	gas/
+	* config/tc-arm.c (m_profile_p): New function.
+	(parse_psr, do_t_mrs, do_t_msr): Use m_profile_p.
+
+
+--- a/gas/config/tc-arm.c
++++ b/gas/config/tc-arm.c
+@@ -234,6 +234,15 @@
+ static const arm_feature_set fpu_neon_ext_fma = ARM_FEATURE (0, FPU_NEON_EXT_FMA);
+ static const arm_feature_set fpu_vfp_ext_fma = ARM_FEATURE (0, FPU_VFP_EXT_FMA);
+ 
++/* Return whether FEATURES indicates an M profile CPU, without getting
++   confused by ARM_ANY.  */
++static int
++m_profile_p (arm_feature_set features)
++{
++  return (ARM_CPU_HAS_FEATURE (features, arm_ext_v6m)
++	  && !ARM_CPU_HAS_FEATURE (features, arm_ext_v7a));
++}
++
+ static int mfloat_abi_opt = -1;
+ /* Record user cpu selection for object attributes.  */
+ static arm_feature_set selected_cpu = ARM_ARCH_NONE;
+@@ -5354,7 +5363,7 @@
+   const struct asm_psr *psr;
+   char *start;
+   bfd_boolean is_apsr = FALSE;
+-  bfd_boolean m_profile = ARM_CPU_HAS_FEATURE (selected_cpu, arm_ext_m);
++  bfd_boolean m_profile = m_profile_p (selected_cpu);
+ 
+   /* CPSR's and SPSR's can now be lowercase.  This is just a convenience
+      feature for ease of use and backwards compatibility.  */
+@@ -10947,7 +10956,7 @@
+     {
+       int flags = inst.operands[1].imm & (PSR_c|PSR_x|PSR_s|PSR_f|SPSR_BIT);
+ 
+-      if (ARM_CPU_HAS_FEATURE (selected_cpu, arm_ext_m))
++      if (m_profile_p (selected_cpu))
+ 	constraint (flags != 0, _("selected processor does not support "
+         	    "requested special purpose register"));
+       else
+@@ -10979,7 +10988,7 @@
+   else
+     flags = inst.operands[0].imm;
+ 
+-  if (ARM_CPU_HAS_FEATURE (selected_cpu, arm_ext_m))
++  if (m_profile_p (selected_cpu))
+     {
+       int bits = inst.operands[0].imm & (PSR_c|PSR_x|PSR_s|PSR_f|SPSR_BIT);
+ 
--- binutils-2.22.orig/debian/patches/pr13449.diff
+++ binutils-2.22/debian/patches/pr13449.diff
@@ -0,0 +1,20 @@
+2011-12-21  Nick Clifton  <nickc@redhat.com>
+
+	PR gas/13449
+	* config/tc-arm.c (create_unwind_entry): Zero allocated table
+	entries.
+
+ 
+diff --git a/gas/config/tc-arm.c b/gas/config/tc-arm.c
+index 865f430..02a63a6 100644
+--- a/gas/config/tc-arm.c
++++ b/gas/config/tc-arm.c
+@@ -19944,6 +19944,8 @@ create_unwind_entry (int have_data)
+ 
+   /* Allocate the table entry.	*/
+   ptr = frag_more ((size << 2) + 4);
++  /* PR 13449: Zero the table entries in case some of them are not used.  */
++  memset (ptr, 0, (size << 2) + 4);
+   where = frag_now_fix () - ((size << 2) + 4);
+ 
+   switch (unwind.personality_index)
