123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147 |
- .text
- .globl _start
- _start:
- # original PCREL_OPT definition, with second insn immediately after first
- pld 9,sym@got@pcrel
- .reloc .-8,R_PPC64_PCREL_OPT,0
- lbz 3,0(9)
- # but we now allow an offset to the second insn
- pld 22,sym@got@pcrel
- .reloc .-8,R_PPC64_PCREL_OPT,0f-(.-8)
- nop
- 0: lhz 4,0(22)
- # in fact, it can even be before the "first" insn
- 0: lha 3,0(9)
- pld 9,sym@got@pcrel
- .reloc .-8,R_PPC64_PCREL_OPT,0b-(.-8)
- bne 0b
- # and of course, other local labels work
- pld 9,sym@got@pcrel
- .reloc .-8,R_PPC64_PCREL_OPT,.L1-(.-8)
- .L1: lwz 3,0(9)
- pld 9,sym@got@pcrel
- .reloc .-8,R_PPC64_PCREL_OPT,0f-(.-8)
- 0: lwa 3,0(9)
- pld 9,sym@got@pcrel
- .reloc .-8,R_PPC64_PCREL_OPT,0f-(.-8)
- 0: ld 3,0(9)
- pld 9,sym@got@pcrel
- .reloc .-8,R_PPC64_PCREL_OPT,0f-(.-8)
- 0: lq 14,0(9)
- pld 9,sym@got@pcrel
- .reloc .-8,R_PPC64_PCREL_OPT,0f-(.-8)
- 0: lfs 1,0(9)
- pld 9,sym@got@pcrel
- .reloc .-8,R_PPC64_PCREL_OPT,0f-(.-8)
- 0: lfd 1,0(9)
- pld 9,sym@got@pcrel
- .reloc .-8,R_PPC64_PCREL_OPT,0f-(.-8)
- 0: lxsd 30,0(9)
- pld 9,sym@got@pcrel
- .reloc .-8,R_PPC64_PCREL_OPT,0f-(.-8)
- 0: lxssp 31,0(9)
- pld 9,sym@got@pcrel
- .reloc .-8,R_PPC64_PCREL_OPT,0f-(.-8)
- 0: lxv 63,0(9)
- pld 9,sym@got@pcrel
- .reloc .-8,R_PPC64_PCREL_OPT,0f-(.-8)
- 0: lxv 0,0(9)
- pld 9,sym@got@pcrel
- .reloc .-8,R_PPC64_PCREL_OPT,0f-(.-8)
- 0: stb 3,0(9)
- pld 9,sym@got@pcrel
- .reloc .-8,R_PPC64_PCREL_OPT,0f-(.-8)
- 0: sth 3,0(9)
- pld 9,sym@got@pcrel
- .reloc .-8,R_PPC64_PCREL_OPT,0f-(.-8)
- 0: stw 3,0(9)
- pld 9,sym@got@pcrel
- .reloc .-8,R_PPC64_PCREL_OPT,0f-(.-8)
- 0: std 3,0(9)
- pld 9,sym@got@pcrel
- .reloc .-8,R_PPC64_PCREL_OPT,0f-(.-8)
- 0: stq 14,0(9)
- pld 9,sym@got@pcrel
- .reloc .-8,R_PPC64_PCREL_OPT,0f-(.-8)
- 0: stfd 1,0(9)
- pld 9,sym@got@pcrel
- .reloc .-8,R_PPC64_PCREL_OPT,0f-(.-8)
- 0: stfs 2,0(9)
- pld 9,sym@got@pcrel
- .reloc .-8,R_PPC64_PCREL_OPT,0f-(.-8)
- 0: stxsd 30,0(9)
- pld 9,sym@got@pcrel
- .reloc .-8,R_PPC64_PCREL_OPT,0f-(.-8)
- 0: stxssp 31,0(9)
- pld 9,sym@got@pcrel
- .reloc .-8,R_PPC64_PCREL_OPT,0f-(.-8)
- 0: stxv 63,0(9)
- pld 9,sym@got@pcrel
- .reloc .-8,R_PPC64_PCREL_OPT,0f-(.-8)
- 0: stxv 0,0(9)
- #offsets are allowed too
- pld 9,sym@got@pcrel
- 0:
- lbz 3,0x1234(9)
- .reloc 0b-8,R_PPC64_PCREL_OPT,(.-4)-(0b-8)
- #and prefix insns as the second insn
- pld 9,sym@got@pcrel
- 0:
- plq 4,0x12345678(9)
- .reloc 0b-8,R_PPC64_PCREL_OPT,(.-8)-(0b-8)
- # This should not optimize
- .extern i
- .type i,@object
- pld 9,i@got@pcrel
- .reloc .-8,R_PPC64_PCREL_OPT,0f-(.-8)
- 0: ld 0,0(9)
- # and this should edit from GOT indirect to GOT relative
- # ie. change the pld to paddi, leaving the lbz as is.
- pld 7,sym@got@pcrel
- lbz 6,0(7)
- pld 9,sym@got@pcrel
- .reloc .-8,R_PPC64_PCREL_OPT,0f-(.-8)
- 0: lxvp 62,0(9)
- pld 9,sym@got@pcrel
- .reloc .-8,R_PPC64_PCREL_OPT,0f-(.-8)
- 0: lxvp 0,0(9)
- pld 9,sym@got@pcrel
- .reloc .-8,R_PPC64_PCREL_OPT,0f-(.-8)
- 0: stxvp 62,0(9)
- pld 9,sym@got@pcrel
- .reloc .-8,R_PPC64_PCREL_OPT,0f-(.-8)
- 0: stxvp 0,0(9)
- .data
- sym: .space 32
|