There are also ELFv1 powerxx variants of these stubs.
ppc_stub_long_branch_notoc:
- . paddi %r12,dest@pcrel
+ . pla %r12,dest@pcrel
. b dest
ppc_stub_plt_branch_notoc:
. lis %r11,(dest-1f)@highesta34
. ori %r11,%r11,(dest-1f)@highera34
. sldi %r11,%r11,34
- . 1: paddi %r12,dest@pcrel
+ . 1: pla %r12,dest@pcrel
. add %r12,%r11,%r12
. mtctr %r12
. bctr
. lis %r11,(xxx-1f)@highesta34
. ori %r11,%r11,(xxx-1f)@highera34
. sldi %r11,%r11,34
- . 1: paddi %r12,xxx@pcrel
+ . 1: pla %r12,xxx@pcrel
. ldx %r12,%r11,%r12
. mtctr %r12
. bctr
&& !(r_type == R_PPC64_PLTCALL_NOTOC
&& (((h ? h->other : sym->st_other)
& STO_PPC64_LOCAL_MASK)
- != 1 << STO_PPC64_LOCAL_BIT)))
+ > 1 << STO_PPC64_LOCAL_BIT)))
*tls_maskp &= ~PLT_KEEP;
}
}
pld ra,symbol@got@pcrel
load/store rt,0(ra)
or
- paddi ra,symbol@pcrel
+ pla ra,symbol@pcrel
load/store rt,0(ra)
may be translated to
pload/pstore rt,symbol@pcrel
the prefix insn in *PINSN1 and a NOP in *PINSN2.
On entry to this function, the linker has already determined that
- the pld can be replaced with paddi: *PINSN1 is that paddi insn,
+ the pld can be replaced with pla: *PINSN1 is that pla insn,
while *PINSN2 is the second instruction. */
static bfd_boolean
&& code_sec->output_section != NULL
&& (((hash ? hash->elf.other : sym->st_other)
& STO_PPC64_LOCAL_MASK)
- != 1 << STO_PPC64_LOCAL_BIT)))
+ > 1 << STO_PPC64_LOCAL_BIT)))
stub_type = ppc_stub_long_branch_notoc;
}
else if (stub_type != ppc_stub_plt_call)
|| stub_entry->stub_type == ppc_stub_plt_branch_both)
&& (r_type != R_PPC64_REL24_NOTOC
|| ((fdh ? fdh->elf.other : sym->st_other)
- & STO_PPC64_LOCAL_MASK) == 1 << STO_PPC64_LOCAL_BIT)
+ & STO_PPC64_LOCAL_MASK) <= 1 << STO_PPC64_LOCAL_BIT)
&& (relocation + addend - from + max_br_offset
< 2 * max_br_offset))
stub_entry = NULL;