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.
This commit is contained in:
Alan Modra 2015-02-02 21:48:46 +10:30
parent 0c4bd9d977
commit 6c2573b7ab
2 changed files with 15 additions and 2 deletions

View File

@ -1,3 +1,10 @@
2015-02-02 Alan Modra <amodra@gmail.com>
* 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.
2015-01-29 H.J. Lu <hongjiu.lu@intel.com>
* ldfile.c (ldfile_try_open_bfd): Replace plugin_active_plugins_p()

View File

@ -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);
}