Home | History | Annotate | Download | only in bfd

Lines Matching defs:plt

472    The code for position independent PLT entries looks like this:
474 r12 holds addr of the current GOT at entry to the PLT
476 The GOT holds the address in the PLT to be executed.
479 28(15) = Offset into rela.plt
494 BRC 15,-x # 4 bytes Jump to start of PLT
497 .long ? # 4 bytes offset into rela.plt
499 This was the general case. There are two additional, optimizes PLT
507 L 1,14(1) # 4 bytes Load offset in rela.plt in r1
508 BRC 15,-x # 4 bytes Jump to start of PLT
510 .long ? # 4 bytes offset into rela.plt
519 L 1,14(1) # 4 bytes Load offset in rela.plt in r1
520 BRC 15,-x # 4 bytes Jump to start of PLT
522 .long ? # 4 bytes offset into rela.plt
524 Total = 32 bytes per PLT entry
526 The code for static build PLT entries looks like this:
534 BRC 15,-x # 4 bytes Jump to start of PLT
537 .long ? # 4 bytes offset into rela.plt */
547 0xa7, 0xf4, 0x00, 0x00, /* j first plt */
550 0x00, 0x00, 0x00, 0x00 /* rela.plt offset */
553 /* Generic PLT pic entry. */
562 0xa7, 0xf4, 0x00, 0x00, /* j first plt */
565 0x00, 0x00, 0x00, 0x00 /* rela.plt offset */
568 /* Optimized PLT pic entry for GOT offset < 4k. xx will be replaced
569 when generating the PLT slot with the GOT offset. */
578 0xa7, 0xf4, 0x00, 0x00, /* j first plt */
583 /* Optimized PLT pic entry for GOT offset < 32k. xx will be replaced
584 when generating the PLT slot with the GOT offset. */
593 0xa7, 0xf4, 0x00, 0x00, /* j first plt */
599 /* The first PLT entry pushes the offset into the rela.plt
603 /* The first entry in the PLT for PIC code:
606 ST 1,28(15) # R1 has offset into rela.plt
612 The first entry in the PLT for static code:
615 ST 1,28(15) # R1 has offset into rela.plt
679 /* This structure represents an entry in the local PLT list needed for
691 } plt;
700 /* A local PLT is needed for ifunc symbols. */
936 struct plt_entry *plt;
950 plt = elf_s390_local_plt (abfd);
951 plt[r_symndx].plt.refcount++;
1016 always gets a PLT slot. */
1060 h->plt.refcount += 1;
1073 to create a plt entry or a local got entry. To be able to
1081 h->plt.refcount += 1;
1202 /* We may need a .plt entry if the function this reloc
1204 h->plt.refcount += 1;
1363 /* Make sure we emit a GOT entry if the symbol was supposed to have a PLT
1365 not have any PLT for this symbol, by for example
1398 /* STT_GNU_IFUNC symbol must go through PLT. */
1402 calls via local PLT. */
1425 if (h->plt.refcount <= 0)
1426 h->plt.refcount = 1;
1428 h->plt.refcount += 1;
1432 if (h->plt.refcount <= 0)
1434 h->plt.offset = (bfd_vma) -1;
1446 if (h->plt.refcount <= 0
1455 h->plt.offset = (bfd_vma) -1;
1463 /* It's possible that we incorrectly decided a .plt reloc was
1468 h->plt.offset = (bfd_vma) -1;
1548 /* Allocate space in .plt, .got and associated reloc sections for
1564 /* Since STT_GNU_IFUNC symbol must go through PLT, we handle it
1569 && h->plt.refcount > 0)
1585 /* If this is the first .plt entry, make room for the special
1590 h->plt.offset = s->size;
1594 location in the .plt. This is required to make function
1601 h->root.u.def.value = h->plt.offset;
1607 /* We also need to make an entry in the .got.plt section, which
1611 /* We also need to make an entry in the .rela.plt section. */
1616 h->plt.offset = (bfd_vma) -1;
1623 h->plt.offset = (bfd_vma) -1;
1871 if (local_plt[i].plt.refcount > 0)
1873 local_plt[i].plt.offset = htab->elf.iplt->size;
1879 local_plt[i].plt.offset = (bfd_vma) -1;
1894 /* Allocate global sym .plt and .got entries, and space for global
1937 .rela.plt. We must create it in
2088 /* Address of the PLT slot. */
2091 + local_plt[r_symndx].plt.offset);
2110 /* Write the PLT slot address into the GOT slot. */
2162 relocation is against the jump slot entry of a plt that
2164 is against the jump slot of a plt entry that has been
2170 if (h != NULL && h->plt.offset != (bfd_vma) -1)
2176 plt_index = h->plt.offset / PLT_ENTRY_SIZE;
2186 plt_index = (h->plt.offset - PLT_FIRST_ENTRY_SIZE) /
2189 /* Offset in GOT is PLT index plus GOT headers(3)
2219 BFD_ASSERT (h->plt.offset != (bfd_vma) -1);
2225 off = h->plt.offset / PLT_ENTRY_SIZE * GOT_ENTRY_SIZE;
2230 of the PLT slot. This will be handled in
2361 + h->plt.offset
2394 if (h->plt.offset == (bfd_vma) -1
2397 /* We didn't make a PLT entry for this symbol. This
2406 + h->plt.offset);
2410 + h->plt.offset);
2419 /* For local symbols or if we didn't make a PLT entry for
2422 || h->plt.offset == (bfd_vma) -1
2432 + h->plt.offset
2437 + h->plt.offset
2455 reason. 31 bit PLT entries require r12 to hold the
2464 + h ->plt.offset);
2482 go through PLT. */
2485 + h ->plt.offset);
2984 brasl %r14,_tls_get_offset@plt -> brcl 0,. */
3009 brasl %r14,__tls_get_addr@plt ->
3048 brasl %r14,__tls_get_offset@plt -> brcl 0,. */
3141 /* Generate the PLT slots together with the dynamic relocations needed
3157 asection *plt, *gotplt, *relplt;
3168 /* Index of the PLT slot within iplt section. */
3170 plt = htab->elf.iplt;
3171 /* Offset into the igot.plt section. */
3177 relative_offset = - (plt->output_offset +
3188 memcpy (plt->contents + iplt_offset, elf_s390_plt_entry,
3191 /* Adjust jump to the first plt entry. */
3193 plt->contents + iplt_offset + 20);
3199 plt->contents + iplt_offset + 24);
3205 memcpy (plt->contents + iplt_offset,
3210 value comes from the first word of the plt entry. Look
3213 plt->contents + iplt_offset + 2);
3215 /* Adjust the jump to the first plt entry. */
3217 plt->contents + iplt_offset + 20);
3224 memcpy (plt->contents + iplt_offset,
3230 plt->contents + iplt_offset + 2);
3232 /* Adjust the jump to the first plt entry. */
3234 plt->contents + iplt_offset + 20);
3238 memcpy (plt->contents + iplt_offset,
3242 /* Adjust the jump to the first plt entry. */
3244 plt->contents + iplt_offset + 20);
3248 plt->contents + iplt_offset + 24);
3253 plt->contents + iplt_offset + 28);
3258 (plt->output_section->vma
3259 + plt->output_offset
3264 /* Fill in the entry in the .rela.plt section. */
3301 if (h->plt.offset != (bfd_vma) -1)
3314 htab, h->plt.offset,
3331 plt_index = (h->plt.offset - PLT_FIRST_ENTRY_SIZE) / PLT_ENTRY_SIZE;
3333 /* Offset in GOT is PLT index plus GOT headers(3) times 4,
3349 memcpy (htab->elf.splt->contents + h->plt.offset, elf_s390_plt_entry,
3352 /* Adjust jump to the first plt entry. */
3354 htab->elf.splt->contents + h->plt.offset + 20);
3361 htab->elf.splt->contents + h->plt.offset + 24);
3367 memcpy (htab->elf.splt->contents + h->plt.offset,
3372 value comes from the first word of the plt entry. Look
3375 htab->elf.splt->contents + h->plt.offset + 2);
3377 /* Adjust the jump to the first plt entry. */
3379 htab->elf.splt->contents + h->plt.offset + 20);
3386 memcpy (htab->elf.splt->contents + h->plt.offset,
3392 htab->elf.splt->contents + h->plt.offset + 2);
3394 /* Adjust the jump to the first plt entry. */
3396 htab->elf.splt->contents + h->plt.offset + 20);
3400 memcpy (htab->elf.splt->contents + h->plt.offset,
3404 /* Adjust the jump to the first plt entry. */
3406 htab->elf.splt->contents + h->plt.offset + 20);
3410 htab->elf.splt->contents + h->plt.offset + 24);
3414 htab->elf.splt->contents + h->plt.offset + 28);
3421 + h->plt.offset
3425 /* Fill in the entry in the .rela.plt section. */
3437 the .plt section. Leave the value alone. This is a clue
3482 filled with the PLT slot address for pointer
3486 + h->plt.offset),
3714 if (local_plt[i].plt.offset != (bfd_vma) -1)
3723 local_plt[i].plt.offset,
3861 /* Return address for Ith PLT stub in section PLT, for relocation REL
3865 elf_s390_plt_sym_val (bfd_vma i, const asection *plt,
3868 return plt->vma + PLT_FIRST_ENTRY_SIZE + i * PLT_ENTRY_SIZE;