diff --git a/bfd/elfnn-aarch64.c b/bfd/elfnn-aarch64.c index a33aea0eab02ac97cb605cac677d8ac27a475967..9a9bd46f4579d6ad1ec0d2a7c8df3b7d7ba1000a 100644 --- a/bfd/elfnn-aarch64.c +++ b/bfd/elfnn-aarch64.c @@ -6456,6 +6456,15 @@ c64_symbol_section_adjustment (struct elf_link_hash_entry *h, bfd_vma value, } return C64_SYM_LDSCRIPT_DEF; } + + if (h->start_stop) + { + asection *s = h->u2.start_stop_section->output_section; + BFD_ASSERT (s != NULL); + *ret_sec = s; + return C64_SYM_LDSCRIPT_DEF; + } + return C64_SYM_STANDARD; } diff --git a/ld/testsuite/ld-aarch64/aarch64-elf.exp b/ld/testsuite/ld-aarch64/aarch64-elf.exp index 49b2e70adca947b61294bf1d589ce366b81da569..f0d2048efc37c2df3f4dfea304c7f93f8fe3a169 100644 --- a/ld/testsuite/ld-aarch64/aarch64-elf.exp +++ b/ld/testsuite/ld-aarch64/aarch64-elf.exp @@ -271,6 +271,7 @@ run_dump_test_lp64 "morello-sec-round-include-relro" run_dump_test_lp64 "morello-pcc-bounds-include-readonly" run_dump_test_lp64 "morello-sec-round-choose-linker-syms" run_dump_test_lp64 "morello-entry-point" +run_dump_test_lp64 "morello-sec-start_stop-round" run_dump_test_lp64 "morello-tlsdesc" run_dump_test_lp64 "morello-tlsdesc-static" run_dump_test_lp64 "morello-tlsdesc-staticpie" diff --git a/ld/testsuite/ld-aarch64/morello-sec-start_stop-round.d b/ld/testsuite/ld-aarch64/morello-sec-start_stop-round.d new file mode 100644 index 0000000000000000000000000000000000000000..3987696e5ab864a4ef1f57016eb9a87f2849f8a2 --- /dev/null +++ b/ld/testsuite/ld-aarch64/morello-sec-start_stop-round.d @@ -0,0 +1,26 @@ +#as: -march=morello+c64 +#ld: -static +#objdump: -d -j .data -j __libc_atexit + +.*: file format .* + + +Disassembly of section \.data: + +[0-9a-f]+ <__data_start>: +#record: START_LIBC_ADDR +.*: ([0-9a-f]+) .* +.*: 00000000 .* +.*: 00000008 .* +.*: 02000000 .* + +Disassembly of section __libc_atexit: + +# Use `string tolower` because we know we only have a number so it won't change +# anything. That's needed because the current record/check implementation +# doesn't have a way to define a replacement which is just the existing +# variable. +#check: START_LIBC string tolower $START_LIBC_ADDR +00000000START_LIBC <__start___libc_atexit>: +.*: 0000002a .* +.*: 00000000 .* diff --git a/ld/testsuite/ld-aarch64/morello-sec-start_stop-round.s b/ld/testsuite/ld-aarch64/morello-sec-start_stop-round.s new file mode 100644 index 0000000000000000000000000000000000000000..b89273e82460c05cadfd2e3365be671411558e93 --- /dev/null +++ b/ld/testsuite/ld-aarch64/morello-sec-start_stop-round.s @@ -0,0 +1,10 @@ +.section __libc_atexit,"aw" + .xword 42 +.data +atexit_location: + .chericap __start___libc_atexit +.text +.globl _start +.type _start STT_FUNC +_start: + add c0, c0, :lo12:atexit_location