aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--bfd/ChangeLog5
-rw-r--r--bfd/elf32-tic6x.c13
-rw-r--r--ld/ChangeLog4
-rw-r--r--ld/emulparams/elf32_tic6x_le.sh1
4 files changed, 22 insertions, 1 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog
index 8b14491..c7e28b8 100644
--- a/bfd/ChangeLog
+++ b/bfd/ChangeLog
@@ -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.
diff --git a/bfd/elf32-tic6x.c b/bfd/elf32-tic6x.c
index 96965b3..768bfb8 100644
--- a/bfd/elf32-tic6x.c
+++ b/bfd/elf32-tic6x.c
@@ -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
diff --git a/ld/ChangeLog b/ld/ChangeLog
index e750941..f12b6bd 100644
--- a/ld/ChangeLog
+++ b/ld/ChangeLog
@@ -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.
diff --git a/ld/emulparams/elf32_tic6x_le.sh b/ld/emulparams/elf32_tic6x_le.sh
index efd7b24..d9ebe58 100644
--- a/ld/emulparams/elf32_tic6x_le.sh
+++ b/ld/emulparams/elf32_tic6x_le.sh
@@ -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"