aboutsummaryrefslogtreecommitdiff
path: root/ld/emultempl
diff options
context:
space:
mode:
authorAlan Modra <amodra@gmail.com>2015-02-02 21:48:46 +1030
committerAlan Modra <amodra@gmail.com>2015-02-02 21:54:10 +1030
commit6c2573b7abfc3a504b902e46169cc521b6aa5eb7 (patch)
tree070a15300ba57dbe7d10160875e049edb4ad7d38 /ld/emultempl
parent0c4bd9d97731e2cdff46efa7e7325e4716641a59 (diff)
downloadgdb-6c2573b7abfc3a504b902e46169cc521b6aa5eb7.zip
gdb-6c2573b7abfc3a504b902e46169cc521b6aa5eb7.tar.gz
gdb-6c2573b7abfc3a504b902e46169cc521b6aa5eb7.tar.bz2
xlc -z relro toc section fixes
Moving .toc out of .got caused us to lose toc sorting and multi-toc support. * emultempl/ppc64elf.em (toc_section_name): New var. (ppc_after_open): Set it. (ppc_before_allocation): Use it. (gld${EMULATION_NAME}_after_allocation): Here too.
Diffstat (limited to 'ld/emultempl')
-rw-r--r--ld/emultempl/ppc64elf.em10
1 files changed, 8 insertions, 2 deletions
diff --git a/ld/emultempl/ppc64elf.em b/ld/emultempl/ppc64elf.em
index 5a784fd..fd9a3ce 100644
--- a/ld/emultempl/ppc64elf.em
+++ b/ld/emultempl/ppc64elf.em
@@ -62,6 +62,8 @@ static int no_toc_opt = 0;
/* Whether to sort input toc and got sections. */
static int no_toc_sort = 0;
+/* Input .toc sections will be placed in this output section. */
+static const char *toc_section_name = ".got";
static asection *toc_section = 0;
/* This is called before the input files are opened. We create a new
@@ -124,6 +126,10 @@ ppc_after_open (void)
else
i = &(*i)->next;
}
+ /* Instead, .toc input sections will be mapped to the
+ read/write .toc output section. If user scripts don't
+ provide one then we'll lose toc sorting and multi-toc. */
+ toc_section_name = ".toc";
}
}
gld${EMULATION_NAME}_after_open ();
@@ -301,7 +307,7 @@ ppc_before_allocation (void)
{
lang_output_section_statement_type *toc_os;
- toc_os = lang_output_section_find (".got");
+ toc_os = lang_output_section_find (toc_section_name);
if (toc_os != NULL)
sort_toc_sections (&toc_os->children, NULL, NULL);
}
@@ -504,7 +510,7 @@ gld${EMULATION_NAME}_after_allocation (void)
if (!params.no_multi_toc)
{
toc_section = bfd_get_section_by_name (link_info.output_bfd,
- ".got");
+ toc_section_name);
if (toc_section != NULL)
lang_for_each_statement (build_toc_list);
}