Backport trunk patch wrt wrong stub generated for aarch64 large DSOs.

Tested by build.py for linux aarch64 toolchains.

The upstream patch is:

commit 9a472eda40ba686e45bf4922455518ffa3c887e1
Author: Han Shen <shenhan@google.com>
Date:   Fri Jan 15 09:31:23 2016 -0800

    [gold][aarch64] PR gold/19472 - DSOs need pc-relative stubs.

    The stub generated during relaxation uses absolute addressing mode
    for
    shared libraries, which is not correct. Use pc-relative addressing
    instead.

    gold/ChangeLog:

    2016-01-15 Han Shen	 <shenhan@google.com>

	PR gold/19472 - DSOs need pc-relative stubs.

	* aarch64.cc (Reloc_stub::stub_type_for_reloc): Return
	PC-relative stub type for DSOs and pie executables.

Change-Id: Id0022975cf93600117ff5bf300b9d736d6ad1f80
diff --git a/binutils-2.25/gold/ChangeLog b/binutils-2.25/gold/ChangeLog
index bf9cc55..2ba3b2b 100644
--- a/binutils-2.25/gold/ChangeLog
+++ b/binutils-2.25/gold/ChangeLog
@@ -1,3 +1,10 @@
+2016-01-15 Han Shen  <shenhan@google.com>
+
+	PR gold/19472 - need pc-relative stubs.
+
+	* aarch64.cc (Reloc_stub::stub_type_for_reloc): Return PC-relative
+	stub type for DSOs and pie executables.
+
 2015-11-05  Cary Coutant  <ccoutant@gmail.com>
 
 	PR gold/19163
diff --git a/binutils-2.25/gold/aarch64.cc b/binutils-2.25/gold/aarch64.cc
index 1cc68d1..445f324 100644
--- a/binutils-2.25/gold/aarch64.cc
+++ b/binutils-2.25/gold/aarch64.cc
@@ -1327,10 +1327,12 @@
   if (aarch64_valid_for_adrp_p(location, dest))
     return ST_ADRP_BRANCH;
 
-  if (parameters->options().output_is_position_independent()
-      && parameters->options().output_is_executable())
+  // Always use PC-relative addressing in case of -shared or -pie.
+  if (parameters->options().output_is_position_independent())
     return ST_LONG_BRANCH_PCREL;
 
+  // This saves 2 insns per stub, compared to ST_LONG_BRANCH_PCREL.
+  // But is only applicable to non-shared or non-pie.
   return ST_LONG_BRANCH_ABS;
 }