diff --git a/bfd/ChangeLog b/bfd/ChangeLog index 8b315fa99b..ff8feab996 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,9 @@ +2017-12-13 Renlin Li + + * 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 * bfd.c (bfd_get_sign_extend_vma): Correct typo. diff --git a/bfd/elfnn-aarch64.c b/bfd/elfnn-aarch64.c index 212d335abc..52da856df7 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: diff --git a/ld/ChangeLog b/ld/ChangeLog index db025ee7b6..d0b80d1898 100644 --- a/ld/ChangeLog +++ b/ld/ChangeLog @@ -1,3 +1,13 @@ +2017-12-13 Renlin Li + + * testsuite/ld-aarch64/aarch64-elf.exp: Run new test cases. + * testsuite/ld-aarch64/emit-relocs-258-dyn-bad.d: New. + * testsuite/ld-aarch64/emit-relocs-258.s: New. + * testsuite/ld-aarch64/emit-relocs-259-dyn-bad.d: New. + * testsuite/ld-aarch64/emit-relocs-259.s: New. + * testsuite/ld-aarch64/gc-relocs-257.s: Put R_AARCH64_ABS32, + R_AARCH64_ABS16 data into data section. + 2017-12-07 Alan Modra PR 22465 diff --git a/ld/testsuite/ld-aarch64/aarch64-elf.exp b/ld/testsuite/ld-aarch64/aarch64-elf.exp index b9c9885cb4..fffc60e1b9 100644 --- a/ld/testsuite/ld-aarch64/aarch64-elf.exp +++ b/ld/testsuite/ld-aarch64/aarch64-elf.exp @@ -103,6 +103,8 @@ run_dump_test_lp64 "emit-relocs-257" run_dump_test_lp64 "emit-relocs-257-be" # 258 is tested in 257 # 259 is tested in 257 +run_dump_test_lp64 "emit-relocs-258-dyn-bad" +run_dump_test_lp64 "emit-relocs-259-dyn-bad" run_dump_test_lp64 "emit-relocs-260" run_dump_test_lp64 "emit-relocs-260-be" # 261 is tested by 260 diff --git a/ld/testsuite/ld-aarch64/emit-relocs-258-dyn-bad.d b/ld/testsuite/ld-aarch64/emit-relocs-258-dyn-bad.d new file mode 100644 index 0000000000..4de6e55d0b --- /dev/null +++ b/ld/testsuite/ld-aarch64/emit-relocs-258-dyn-bad.d @@ -0,0 +1,4 @@ +#name: LP64 R_AARCH64_ABS32 shared library test +#source: emit-relocs-258.s +#ld: -shared +#error: .*: relocation R_AARCH64_ABS32 against `dummy' can not be used when making a shared object diff --git a/ld/testsuite/ld-aarch64/emit-relocs-258.s b/ld/testsuite/ld-aarch64/emit-relocs-258.s new file mode 100644 index 0000000000..f724776243 --- /dev/null +++ b/ld/testsuite/ld-aarch64/emit-relocs-258.s @@ -0,0 +1,6 @@ +.text + + ldr x0, .L1 + +.L1: + .word dummy diff --git a/ld/testsuite/ld-aarch64/emit-relocs-259-dyn-bad.d b/ld/testsuite/ld-aarch64/emit-relocs-259-dyn-bad.d new file mode 100644 index 0000000000..f133e8991e --- /dev/null +++ b/ld/testsuite/ld-aarch64/emit-relocs-259-dyn-bad.d @@ -0,0 +1,4 @@ +#name: R_AARCH64_ABS16 shared library test +#source: emit-relocs-259.s +#ld: -shared +#error: .*: relocation R_AARCH64_ABS16 against `dummy' can not be used when making a shared object diff --git a/ld/testsuite/ld-aarch64/emit-relocs-259.s b/ld/testsuite/ld-aarch64/emit-relocs-259.s new file mode 100644 index 0000000000..7e1ba3ceb4 --- /dev/null +++ b/ld/testsuite/ld-aarch64/emit-relocs-259.s @@ -0,0 +1,6 @@ +.text + + ldr x0, .L1 + +.L1: + .hword dummy diff --git a/ld/testsuite/ld-aarch64/gc-relocs-257.s b/ld/testsuite/ld-aarch64/gc-relocs-257.s index dcc9db1b2d..f57f9c6669 100644 --- a/ld/testsuite/ld-aarch64/gc-relocs-257.s +++ b/ld/testsuite/ld-aarch64/gc-relocs-257.s @@ -1,8 +1,10 @@ .text - .word tempy + and x0, x0, x0 + and x0, x0, #0x1 .xword tempy2 + + .data + .word tempy .hword tempy3 .hword tempy3+8 - and x0, x0, x0 - and x0, x0, #0x1