+ else
+ {
+ got_plt_entry = elf_i386_pic_got_plt_entry;
+ got_offset += (got->output_section->vma
+ + got->output_offset
+ - gotplt->output_section->vma
+ - gotplt->output_offset);
+ }
+
+ plt_offset = eh->plt_got.offset;
+ memcpy (plt->contents + plt_offset, got_plt_entry,
+ sizeof (elf_i386_got_plt_entry));
+ bfd_put_32 (output_bfd, got_offset,
+ plt->contents + plt_offset + plt_got_offset);
+ }
+
+ if (!h->def_regular
+ && (h->plt.offset != (bfd_vma) -1
+ || eh->plt_got.offset != (bfd_vma) -1))
+ {
+ /* Mark the symbol as undefined, rather than as defined in
+ the .plt section. Leave the value if there were any
+ relocations where pointer equality matters (this is a clue
+ for the dynamic linker, to make function pointer
+ comparisons work between an application and shared
+ library), otherwise set it to zero. If a function is only
+ called from a binary, there is no need to slow down
+ shared libraries because of that. */
+ sym->st_shndx = SHN_UNDEF;
+ if (!h->pointer_equality_needed)
+ sym->st_value = 0;