From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 28119 invoked by alias); 9 Jun 2014 22:55:14 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Received: (qmail 28108 invoked by uid 89); 9 Jun 2014 22:55:13 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-3.2 required=5.0 tests=AWL,BAYES_00,RCVD_IN_DNSWL_LOW,RP_MATCHES_RCVD,SPF_PASS autolearn=ham version=3.3.2 X-HELO: mail-ve0-f176.google.com Received: from mail-ve0-f176.google.com (HELO mail-ve0-f176.google.com) (209.85.128.176) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES128-SHA encrypted) ESMTPS; Mon, 09 Jun 2014 22:55:11 +0000 Received: by mail-ve0-f176.google.com with SMTP id db12so4291091veb.35 for ; Mon, 09 Jun 2014 15:55:09 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:mime-version:in-reply-to:references:date :message-id:subject:from:to:content-type; bh=wAGknGyuBAnpKm3kIGtzrGzL6OawSO9IAiif1ZBiOs0=; b=mgv7i7BgZpQCwUKNRPXhX1HEYxU2nfZD9UtYfjopD8AZOL5T0R6qEamacDEnLaB3Ng rsfccWWH3K1Xw1hf71ftURd437d0A7UfEC9saZ0EHvaUwgzpDcZxIPQgaApCf0xGlvey 5sohOn77BbYqGdhqGXTiCfyKDLAI6aKFun9qvR8OTvo6VQeFnWLYtWECiQ1Xnxvjj/Bn ChyukEnkzMSP+XUdU7Hk7EPJCqBbf49WQbrk+rXIhlt1u6u16FSBh8160cbeT44aXLSr 3RESdXCjZr73ly6PYLZLq11hbs+uX2rvqnGMvHe7tMplNVJMID6ntCMIjWGNoM8YozYj G1ow== X-Gm-Message-State: ALoCoQn6wbl5dC/H3kx718xRxESfs8u203msWnybOx7dUrIvGgTFLxc+2Lh1KpHKdpmL1kXVpvtr MIME-Version: 1.0 X-Received: by 10.58.132.70 with SMTP id os6mr102942veb.36.1402354509246; Mon, 09 Jun 2014 15:55:09 -0700 (PDT) Received: by 10.52.102.133 with HTTP; Mon, 9 Jun 2014 15:55:09 -0700 (PDT) In-Reply-To: References: Date: Mon, 09 Jun 2014 22:55:00 -0000 Message-ID: Subject: Re: [PATCH x86_64] Optimize access to globals in "-fpie -pie" builds with copy relocations From: Sriraman Tallam To: GCC Patches , David Li , Cary Coutant , Ian Lance Taylor , Paul Pluzhnikov Content-Type: text/plain; charset=UTF-8 X-IsSubscribed: yes X-SW-Source: 2014-06/txt/msg00756.txt.bz2 Ping. On Mon, May 19, 2014 at 11:11 AM, Sriraman Tallam wrote: > Ping. > > On Thu, May 15, 2014 at 11:34 AM, Sriraman Tallam wrote: >> Optimize access to globals with -fpie, x86_64 only: >> >> Currently, with -fPIE/-fpie, GCC accesses globals that are extern to the module >> using the GOT. This is two instructions, one to get the address of the global >> from the GOT and the other to get the value. If it turns out that the global >> gets defined in the executable at link-time, it still needs to go through the >> GOT as it is too late then to generate a direct access. >> >> Examples: >> >> foo.cc >> ------ >> int a_glob; >> int main () { >> return a_glob; // defined in this file >> } >> >> With -O2 -fpie -pie, the generated code directly accesses the global via >> PC-relative insn: >> >> 5e0
: >> mov 0x165a(%rip),%eax # 1c40 >> >> foo.cc >> ------ >> >> extern int a_glob; >> int main () { >> return a_glob; // defined in this file >> } >> >> With -O2 -fpie -pie, the generated code accesses global via GOT using two >> memory loads: >> >> 6f0
: >> mov 0x1609(%rip),%rax # 1d00 <_DYNAMIC+0x230> >> mov (%rax),%eax >> >> This is true even if in the latter case the global was defined in the >> executable through a different file. >> >> Some experiments on google benchmarks shows that the extra memory loads affects >> performance by 1% to 5%. >> >> >> Solution - Copy Relocations: >> >> When the linker supports copy relocations, GCC can always assume that the >> global will be defined in the executable. For globals that are truly extern >> (come from shared objects), the linker will create copy relocations and have >> them defined in the executable. Result is that no global access needs to go >> through the GOT and hence improves performance. >> >> This patch to the gold linker : >> https://sourceware.org/ml/binutils/2014-05/msg00092.html >> submitted recently allows gold to generate copy relocations for -pie mode when >> necessary. >> >> I have added option -mld-pie-copyrelocs which when combined with -fpie would do >> this. Note that the BFD linker does not support pie copyrelocs yet and this >> option cannot be used there. >> >> Please review. >> >> >> ChangeLog: >> >> * config/i386/i36.opt (mld-pie-copyrelocs): New option. >> * config/i386/i386.c (legitimate_pic_address_disp_p): Check if this >> address is still legitimate in the presence of copy relocations >> and -fpie. >> * testsuite/gcc.target/i386/ld-pie-copyrelocs-1.c: New test. >> * testsuite/gcc.target/i386/ld-pie-copyrelocs-2.c: New test. >> >> >> >> Patch attached. >> Thanks >> Sri