TIC6X __c6xabi_DSBT_BASE

Adding an undefined __c6xabi_DSBT_BASE via an EXTERN in the linker
script isn't ideal, as the symbol is not always needed.  This patch
adds the undefined symbol on encountering relocations where it is
implicitly referenced.

bfd/
	* elf32-tic6x.c (elf32_tic6x_check_relocs): Reference
	__c6xabi_DSBT_BASE explicitly for R_C6000_SBR_* relocs.
ld/
	* emulparams/elf32_tic6x_le.sh (EXECUTABLE_SYMBOLS): Don't define.
This commit is contained in:
Alan Modra 2018-06-02 18:05:24 +09:30
parent e5a77256e8
commit 527278f336
4 changed files with 22 additions and 1 deletions

View File

@ -1,3 +1,8 @@
2018-06-07 Alan Modra <amodra@gmail.com>
* elf32-tic6x.c (elf32_tic6x_check_relocs): Reference
__c6xabi_DSBT_BASE explicitly for R_C6000_SBR_* relocs.
2018-06-05 Alan Modra <amodra@gmail.com>
* bfd.c (struct bfd): Update comment on "where" usage.

View File

@ -2972,6 +2972,19 @@ elf32_tic6x_check_relocs (bfd *abfd, struct bfd_link_info *info,
case R_C6000_SBR_H16_B:
case R_C6000_SBR_H16_H:
case R_C6000_SBR_H16_W:
{
/* These relocations implicitly reference __c6xabi_DSBT_BASE.
Add an explicit reference so that the symbol will be
provided by a linker script. */
struct bfd_link_hash_entry *bh = NULL;
if (!_bfd_generic_link_add_one_symbol (info, abfd,
"__c6xabi_DSBT_BASE",
BSF_GLOBAL,
bfd_und_section_ptr, 0,
NULL, FALSE, FALSE, &bh))
return FALSE;
((struct elf_link_hash_entry *) bh)->non_elf = 0;
}
if (h != NULL && bfd_link_executable (info))
{
/* For B14-relative addresses, we might need a copy

View File

@ -1,3 +1,7 @@
2018-06-07 Alan Modra <amodra@gmail.com>
* emulparams/elf32_tic6x_le.sh (EXECUTABLE_SYMBOLS): Don't define.
2018-06-06 Alan Modra <amodra@gmail.com>
* Makefile.am (earmelf_fbsd.c): Correct dependencies.

View File

@ -22,7 +22,6 @@ case ${target} in
esac
MAXPAGESIZE="CONSTANT (MAXPAGESIZE)"
ARCH=tic6x
EXECUTABLE_SYMBOLS="EXTERN (__c6xabi_DSBT_BASE);"
OTHER_GOT_SYMBOLS="PROVIDE_HIDDEN (__c6xabi_DSBT_BASE = .);"
# ".bss" is near (small) BSS, ".far" is far (normal) BSS, ".const" is
# far read-only data, ".rodata" is near read-only data. ".neardata"