public inbox for src-cvs@sourceware.org
help / color / mirror / Atom feed
From: hjl@sourceware.org
To: src-cvs@sourceware.org
Subject: gdb and binutils branch hjl/plt.got created. a5c1ff6451a95499c668e53122b88c85fcc52e42
Date: Sun, 23 Nov 2014 16:41:00 -0000	[thread overview]
Message-ID: <20141123164129.23788.qmail@sourceware.org> (raw)

This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "gdb and binutils".

The branch, hjl/plt.got has been created
        at  a5c1ff6451a95499c668e53122b88c85fcc52e42 (commit)

- Log -----------------------------------------------------------------
https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=a5c1ff6451a95499c668e53122b88c85fcc52e42

commit a5c1ff6451a95499c668e53122b88c85fcc52e42
Author: H.J. Lu <hjl.tools@gmail.com>
Date:   Wed Nov 19 11:51:07 2014 -0800

    Optimize out i386/x86-64 JUMP_SLOT relocation
    
    When there are both PLT and GOT references to the same function symbol,
    linker will create a GOTPLT slot for PLT entry and a GOT slot for GOT
    reference.  A run-time JUMP_SLOT relocation is created to update the
    GOTPLT slot and a run-time GLOB_DAT relocation is created to update the
    GOT slot.  Both JUMP_SLOT and GLOB_DAT relocations will apply the same
    symbol value to GOTPLT and GOT slots, respectively, at run-time.
    
    This optimization combines GOTPLT and GOT slots into a single GOT slot
    and removes the run-time JUMP_SLOT relocation.  It replaces the regular
    PLT entry:
    
    	indirect jump	[GOTPLT slot]
    	push		relocation index
    	jump		PLT0
    
    with an GOT PLT entry with an indirect jump via the GOT slot:
    
    	indirect jump	[GOT slot]
    	nop
    
    and resolves PLT reference to the GOT PLT entry.
    
    We must avoid this optimization if pointer equality is needed since
    we don't clear symbol value in this case and the dynamic linker won't
    update the GOT slot.  Otherwise, the resulting binary will get into an
    infinite loop at run-time.
    
    bfd/
    
    	* elf32-i386.c (elf_i386_got_plt_entry): New.
    	(elf_i386_pic_got_plt_entry): Likewise.
    	(elf_i386_link_hash_entry): Add plt_got.
    	(elf_i386_link_hash_table): Likewise.
    	(elf_i386_link_hash_newfunc): Initialize plt_got.offset to -1.
    	(elf_i386_get_local_sym_hash): Likewise.
    	(elf_i386_check_relocs): Create the GOT PLT if there are both
    	PLT and GOT references when the regular PLT is used.
    	(elf_i386_allocate_dynrelocs): Use the GOT PLT if there are
    	both PLT and GOT references unless pointer equality is needed.
    	(elf_i386_relocate_section): Also check the GOT PLT when
    	resolving R_386_PLT32.
    	(elf_i386_finish_dynamic_symbol): Use the GOT PLT if it is
    	available.
    
    	* elf64-x86-64.c (elf_x86_64_link_hash_entry): Add plt_got.
    	(elf_x86_64_link_hash_table): Likewise.
    	(elf_x86_64_link_hash_newfunc): Initialize plt_got.offset to -1.
    	(elf_x86_64_get_local_sym_hash): Likewise.
    	(elf_x86_64_check_relocs): Create the GOT PLT if there are both
    	PLT and GOT references when the regular PLT is used.
    	(elf_x86_64_allocate_dynrelocs): Use the GOT PLT if there are
    	both PLT and GOT references unless pointer equality is needed.
    	(elf_x86_64_relocate_section): Also check the GOT PLT when
    	resolving R_X86_64_PLT32.
    	(elf_x86_64_finish_dynamic_symbol): Use the GOT PLT if it is
    	available.
    
    ld/
    
    	* emulparams/elf_i386.sh (TINY_READONLY_SECTION): New.
    	* emulparams/elf_x86_64.sh (TINY_READONLY_SECTION): Add .plt.got.
    
    ld/testsuite/
    
    	* ld-i386/i386.exp: Add run-time relocation tests for plt-main.
    	* ld-i386/plt-main.rd: New file.
    	* ld-x86-64/plt-main-bnd.dd: Likewise.
    	* ld-x86-64/plt-main.rd: Likewise.
    	* ld-x86-64/x86-64.exp: Add run-time relocation tests for
    	plt-main.

-----------------------------------------------------------------------


hooks/post-receive
-- 
gdb and binutils


                 reply	other threads:[~2014-11-23 16:41 UTC|newest]

Thread overview: [no followups] expand[flat|nested]  mbox.gz  Atom feed

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20141123164129.23788.qmail@sourceware.org \
    --to=hjl@sourceware.org \
    --cc=src-cvs@sourceware.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).