diff options
-rw-r--r-- | gold/ChangeLog | 7 | ||||
-rw-r--r-- | gold/aarch64.cc | 6 |
2 files changed, 11 insertions, 2 deletions
diff --git a/gold/ChangeLog b/gold/ChangeLog index 3560e2f..06cafb0 100644 --- a/gold/ChangeLog +++ b/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. + 2016-01-12 H.J. Lu <hongjiu.lu@intel.com> * i386.cc (Target_i386::Classify_reloc::get_r_addend): Remove diff --git a/gold/aarch64.cc b/gold/aarch64.cc index 5ad061b..6cd6f12 100644 --- a/gold/aarch64.cc +++ b/gold/aarch64.cc @@ -1327,10 +1327,12 @@ Reloc_stub<size, big_endian>::stub_type_for_reloc( 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; } |