diff options
Diffstat (limited to 'bfd')
-rw-r--r-- | bfd/ChangeLog | 6 | ||||
-rw-r--r-- | bfd/elfnn-aarch64.c | 21 |
2 files changed, 27 insertions, 0 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog index 8b315fa..ff8feab 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,9 @@ +2017-12-13 Renlin Li <renlin.li@arm.com> + + * elfnn-aarch64.c (elfNN_aarch64_check_relocs): Disallow + BFD_RELOC_AARCH64_16 in shared object const section. Disallow + BFD_RELOC_AARCH64_32 in shared object const section under LP64. + 2017-12-11 Sangamesh Mallayya <sangamesh.swamy@in.ibm.com> * bfd.c (bfd_get_sign_extend_vma): Correct typo. diff --git a/bfd/elfnn-aarch64.c b/bfd/elfnn-aarch64.c index 212d335..52da856 100644 --- a/bfd/elfnn-aarch64.c +++ b/bfd/elfnn-aarch64.c @@ -7070,6 +7070,27 @@ elfNN_aarch64_check_relocs (bfd *abfd, struct bfd_link_info *info, switch (bfd_r_type) { + case BFD_RELOC_AARCH64_16: +#if ARCH_SIZE == 64 + case BFD_RELOC_AARCH64_32: +#endif + if (bfd_link_pic (info) + && (sec->flags & SEC_ALLOC) != 0 + && (sec->flags & SEC_READONLY) != 0) + { + int howto_index = bfd_r_type - BFD_RELOC_AARCH64_RELOC_START; + _bfd_error_handler + /* xgettext:c-format */ + (_("%B: relocation %s against `%s' can not be used when making " + "a shared object"), + abfd, elfNN_aarch64_howto_table[howto_index].name, + (h) ? h->root.root.string : "a local symbol"); + bfd_set_error (bfd_error_bad_value); + return FALSE; + } + else + break; + case BFD_RELOC_AARCH64_MOVW_G0_NC: case BFD_RELOC_AARCH64_MOVW_G1_NC: case BFD_RELOC_AARCH64_MOVW_G2_NC: |