diff options
Diffstat (limited to 'gold/layout.cc')
-rw-r--r-- | gold/layout.cc | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/gold/layout.cc b/gold/layout.cc index 07a3590..504028a 100644 --- a/gold/layout.cc +++ b/gold/layout.cc @@ -4710,7 +4710,8 @@ void Layout::add_target_dynamic_tags(bool use_rel, const Output_data* plt_got, const Output_data* plt_rel, const Output_data_reloc_generic* dyn_rel, - bool add_debug, bool dynrel_includes_plt) + bool add_debug, bool dynrel_includes_plt, + const Output_data_reloc_generic* dyn_relr) { Output_data_dynamic* odyn = this->dynamic_data_; if (odyn == NULL) @@ -4783,6 +4784,14 @@ Layout::add_target_dynamic_tags(bool use_rel, const Output_data* plt_got, } } + if (dyn_relr != NULL && dyn_relr->output_section() != NULL) + { + const int size = parameters->target().get_size(); + odyn->add_section_address(elfcpp::DT_RELR, dyn_relr->output_section()); + odyn->add_section_size(elfcpp::DT_RELRSZ, dyn_relr->output_section()); + odyn->add_constant(elfcpp::DT_RELRENT, size / 8); + } + if (add_debug && !parameters->options().shared()) { // The value of the DT_DEBUG tag is filled in by the dynamic |