mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-08-06 06:45:56 +08:00
[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.
This commit is contained in:
@ -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
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user