PR27451, -z start_stop_gc for powerpc64
PowerPC64 has its own gc_mark_dynamic_ref. bfd/ PR 27451 * elf64-ppc.c (ppc64_elf_gc_mark_dynamic_ref): Ignore synthesized linker defined start/stop symbols when start_stop_gc. ld/ * testsuite/ld-powerpc/startstop.d, * testsuite/ld-powerpc/startstop.r, * testsuite/ld-powerpc/startstop.s: New test. * testsuite/ld-powerpc/powerpc.exp: Run it.
This commit is contained in:
parent
f5b9c288a3
commit
b80e421f91
@ -1,3 +1,9 @@
|
||||
2021-03-02 Alan Modra <amodra@gmail.com>
|
||||
|
||||
PR 27451
|
||||
* elf64-ppc.c (ppc64_elf_gc_mark_dynamic_ref): Ignore synthesized
|
||||
linker defined start/stop symbols when start_stop_gc.
|
||||
|
||||
2021-03-02 Alan Modra <amodra@gmail.com>
|
||||
|
||||
* elf64-ppc.c (ppc64_elf_relocate_section): Don't optimise got
|
||||
|
@ -5749,6 +5749,9 @@ ppc64_elf_gc_mark_dynamic_ref (struct elf_link_hash_entry *h, void *inf)
|
||||
|
||||
if ((eh->elf.root.type == bfd_link_hash_defined
|
||||
|| eh->elf.root.type == bfd_link_hash_defweak)
|
||||
&& (!eh->elf.start_stop
|
||||
|| eh->elf.root.ldscript_def
|
||||
|| !info->start_stop_gc)
|
||||
&& ((eh->elf.ref_dynamic && !eh->elf.forced_local)
|
||||
|| ((eh->elf.def_regular || ELF_COMMON_DEF_P (&eh->elf))
|
||||
&& ELF_ST_VISIBILITY (eh->elf.other) != STV_INTERNAL
|
||||
|
@ -1,3 +1,10 @@
|
||||
2021-03-02 Alan Modra <amodra@gmail.com>
|
||||
|
||||
* testsuite/ld-powerpc/startstop.d,
|
||||
* testsuite/ld-powerpc/startstop.r,
|
||||
* testsuite/ld-powerpc/startstop.s: New test.
|
||||
* testsuite/ld-powerpc/powerpc.exp: Run it.
|
||||
|
||||
2021-03-02 Alan Modra <amodra@gmail.com>
|
||||
|
||||
* testsuite/ld-powerpc/weak1.d,
|
||||
|
@ -350,6 +350,9 @@ set ppc64elftests {
|
||||
{"weak1.so" "-shared -melf64ppc --hash-style=both" ""
|
||||
"-a64 -mpower10" {weak1.s}
|
||||
{{objdump -d weak1so.d} {readelf {-srW} weak1so.r}} "weak1.so"}
|
||||
{"startstop" "-shared -melf64ppc --hash-style=sysv --gc-sections -z start-stop-gc" ""
|
||||
"-a64 -mpower10" {startstop.s}
|
||||
{{objdump -d startstop.d} {readelf {-rW} startstop.r}} "startstop.so"}
|
||||
}
|
||||
|
||||
set ppceabitests {
|
||||
|
10
ld/testsuite/ld-powerpc/startstop.d
Normal file
10
ld/testsuite/ld-powerpc/startstop.d
Normal file
@ -0,0 +1,10 @@
|
||||
|
||||
.*: file format .*
|
||||
|
||||
Disassembly of section \.text:
|
||||
|
||||
0+140 <_start>:
|
||||
140: (04 10 00 01|01 00 10 04) pld r3,66000
|
||||
144: (e4 60 01 d0|d0 01 60 e4)
|
||||
148: (04 10 00 01|01 00 10 04) pld r4,65984
|
||||
14c: (e4 80 01 c0|c0 01 80 e4)
|
2
ld/testsuite/ld-powerpc/startstop.r
Normal file
2
ld/testsuite/ld-powerpc/startstop.r
Normal file
@ -0,0 +1,2 @@
|
||||
|
||||
There are no relocations in this file.
|
16
ld/testsuite/ld-powerpc/startstop.s
Normal file
16
ld/testsuite/ld-powerpc/startstop.s
Normal file
@ -0,0 +1,16 @@
|
||||
.weak __start_xx
|
||||
.weak __stop_xx
|
||||
|
||||
.global _start
|
||||
_start:
|
||||
pld 3,__start_xx@got@pcrel
|
||||
pld 4,__stop_xx@got@pcrel
|
||||
|
||||
.section xx,"a",unique,0
|
||||
.byte 0
|
||||
|
||||
.section xx,"a",unique,1
|
||||
.byte 1
|
||||
|
||||
.section xx,"a",unique,2
|
||||
.byte 2
|
Loading…
x
Reference in New Issue
Block a user