From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 7342 invoked by alias); 15 May 2014 18:34:19 -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 7320 invoked by uid 89); 15 May 2014 18:34:18 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-2.4 required=5.0 tests=AWL,BAYES_00,KAM_STOCKGEN,RCVD_IN_DNSWL_LOW,RP_MATCHES_RCVD,SPF_PASS autolearn=no version=3.3.2 X-HELO: mail-vc0-f176.google.com Received: from mail-vc0-f176.google.com (HELO mail-vc0-f176.google.com) (209.85.220.176) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES128-SHA encrypted) ESMTPS; Thu, 15 May 2014 18:34:15 +0000 Received: by mail-vc0-f176.google.com with SMTP id lg15so4839608vcb.7 for ; Thu, 15 May 2014 11:34:12 -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:date:message-id:subject:from:to :content-type; bh=Fe8O7d9CDXB3faYkt7p1qo4eyODT/uSPxUSlWzDQxkE=; b=lssHSrhGnahkDOwD8MG4Ojf0p16a/78PPrTkD0sjLzF1lD6x5PoJiFfKocJ0TwEscc pX3zC6KvGYWJYwNa8j6pvWqTZR6V/s0aApC7oYqM34bbM2UkxE4xkp8DPSwhhEwUY5s7 BCRvZEKTEKhFnDFryhFu8uzUelhnIClgjo1v53WOC3vZaiort86LKunLdOwKs2pNkbOz UqNz6djzS9cAIQ5a1bmvAJsu0i0B1yOXxeVFGKBWgR1AoaqVMJkzNZBU0Mf/cBL6I71F EMTqb6HRXGsrm7Rci8HQPuQ8grY4ja5vk2SgrwW6r+4GzvrOntPRTV5T8U1b0yHFFqWT CMrA== X-Gm-Message-State: ALoCoQkqVDDOGU8R8sXpbVtg+jAR7q3qRi/sS7zq5uQiasqHB/7mD4pgwd7G1nrWcn3wqAnaClMw MIME-Version: 1.0 X-Received: by 10.220.89.4 with SMTP id c4mr95903vcm.53.1400178852140; Thu, 15 May 2014 11:34:12 -0700 (PDT) Received: by 10.52.29.48 with HTTP; Thu, 15 May 2014 11:34:12 -0700 (PDT) Date: Thu, 15 May 2014 18:34:00 -0000 Message-ID: Subject: [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 Content-Type: multipart/mixed; boundary=047d7b3a84561ad39604f9748b75 X-IsSubscribed: yes X-SW-Source: 2014-05/txt/msg01215.txt.bz2 --047d7b3a84561ad39604f9748b75 Content-Type: text/plain; charset=UTF-8 Content-length: 2296 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 --047d7b3a84561ad39604f9748b75 Content-Type: text/plain; charset=UTF-8; name="gcc_pie_copyrelocs_patch.txt" Content-Disposition: attachment; filename="gcc_pie_copyrelocs_patch.txt" Content-Transfer-Encoding: base64 X-Attachment-Id: f_hv8ebqz00 Content-length: 6576 T3B0aW1pemUgYWNjZXNzIHRvIGdsb2JhbHMgd2l0aCAtZnBpZSwgeDg2XzY0 IG9ubHk6CgpDdXJyZW50bHksIHdpdGggLWZQSUUvLWZwaWUsIEdDQyBhY2Nl c3NlcyBnbG9iYWxzIHRoYXQgYXJlIGV4dGVybiB0byB0aGUgbW9kdWxlCnVz aW5nIHRoZSBHT1QuICBUaGlzIGlzIHR3byBpbnN0cnVjdGlvbnMsIG9uZSB0 byBnZXQgdGhlIGFkZHJlc3Mgb2YgdGhlIGdsb2JhbApmcm9tIHRoZSBHT1Qg YW5kIHRoZSBvdGhlciB0byBnZXQgdGhlIHZhbHVlLiAgSWYgaXQgdHVybnMg b3V0IHRoYXQgdGhlIGdsb2JhbApnZXRzIGRlZmluZWQgaW4gdGhlIGV4ZWN1 dGFibGUgYXQgbGluay10aW1lLCBpdCBzdGlsbCBuZWVkcyB0byBnbyB0aHJv dWdoIHRoZQpHT1QgYXMgaXQgaXMgdG9vIGxhdGUgdGhlbiB0byBnZW5lcmF0 ZSBhIGRpcmVjdCBhY2Nlc3MuIAoKRXhhbXBsZXM6Cgpmb28uY2MKLS0tLS0t CmludCBhX2dsb2I7CmludCBtYWluICgpIHsKIMKgcmV0dXJuIGFfZ2xvYjsg Ly8gZGVmaW5lZCBpbiB0aGlzIGZpbGUKfQoKV2l0aCAtTzIgLWZwaWUgLXBp ZSwgdGhlIGdlbmVyYXRlZCBjb2RlIGRpcmVjdGx5IGFjY2Vzc2VzIHRoZSBn bG9iYWwgdmlhClBDLXJlbGF0aXZlIGluc246Cgo1ZTAgwqDCoDxtYWluPjoK IMKgwqBtb3YgwqDCoMKgMHgxNjVhKCVyaXApLCVlYXggwqDCoMKgwqDCoMKg wqAjIDFjNDAgPGFfZ2xvYj4KCmZvby5jYwotLS0tLS0KCmV4dGVybiBpbnQg YV9nbG9iOwppbnQgbWFpbiAoKSB7CiDCoHJldHVybiBhX2dsb2I7IC8vIGRl ZmluZWQgaW4gdGhpcyBmaWxlCn0KCldpdGggLU8yIC1mcGllIC1waWUsIHRo ZSBnZW5lcmF0ZWQgY29kZSBhY2Nlc3NlcyBnbG9iYWwgdmlhIEdPVCB1c2lu ZyB0d28KbWVtb3J5IGxvYWRzOgoKNmYwIMKgPG1haW4+OgogwqDCoG1vdiDC oMKgwqAweDE2MDkoJXJpcCksJXJheCDCoMKgIyAxZDAwIDxfRFlOQU1JQysw eDIzMD4KIMKgwqBtb3YgwqDCoMKgKCVyYXgpLCVlYXgKClRoaXMgaXMgdHJ1 ZSBldmVuIGlmIGluIHRoZSBsYXR0ZXIgY2FzZSB0aGUgZ2xvYmFsIHdhcyBk ZWZpbmVkIGluIHRoZQpleGVjdXRhYmxlIHRocm91Z2ggYSBkaWZmZXJlbnQg ZmlsZS4KClNvbWUgZXhwZXJpbWVudHMgb24gZ29vZ2xlIGJlbmNobWFya3Mg c2hvd3MgdGhhdCB0aGUgZXh0cmEgbWVtb3J5IGxvYWRzIGFmZmVjdHMKcGVy Zm9ybWFuY2UgYnkgMSUgdG8gNSUuIAoKClNvbHV0aW9uIC0gQ29weSBSZWxv Y2F0aW9uczoKCldoZW4gdGhlIGxpbmtlciBzdXBwb3J0cyBjb3B5IHJlbG9j YXRpb25zLCBHQ0MgY2FuIGFsd2F5cyBhc3N1bWUgdGhhdCB0aGUKZ2xvYmFs IHdpbGwgYmUgZGVmaW5lZCBpbiB0aGUgZXhlY3V0YWJsZS4gIEZvciBnbG9i YWxzIHRoYXQgYXJlIHRydWx5IGV4dGVybgooY29tZSBmcm9tIHNoYXJlZCBv YmplY3RzKSwgdGhlIGxpbmtlciB3aWxsIGNyZWF0ZSBjb3B5IHJlbG9jYXRp b25zIGFuZCBoYXZlCnRoZW0gZGVmaW5lZCBpbiB0aGUgZXhlY3V0YWJsZS4g UmVzdWx0IGlzIHRoYXQgbm8gZ2xvYmFsIGFjY2VzcyBuZWVkcyB0byBnbwp0 aHJvdWdoIHRoZSBHT1QgYW5kIGhlbmNlIGltcHJvdmVzIHBlcmZvcm1hbmNl LgoKVGhpcyBwYXRjaCB0byB0aGUgZ29sZCBsaW5rZXIgOgpodHRwczovL3Nv dXJjZXdhcmUub3JnL21sL2JpbnV0aWxzLzIwMTQtMDUvbXNnMDAwOTIuaHRt bApzdWJtaXR0ZWQgcmVjZW50bHkgYWxsb3dzIGdvbGQgdG8gZ2VuZXJhdGUg Y29weSByZWxvY2F0aW9ucyBmb3IgLXBpZSBtb2RlIHdoZW4KbmVjZXNzYXJ5 LgoKSSBoYXZlIGFkZGVkIG9wdGlvbiAtbWxkLXBpZS1jb3B5cmVsb2NzIHdo aWNoIHdoZW4gY29tYmluZWQgd2l0aCAtZnBpZSB3b3VsZCBkbwp0aGlzLiAg Tm90ZSB0aGF0IHRoZSBCRkQgbGlua2VyIGRvZXMgbm90IHN1cHBvcnQgcGll IGNvcHlyZWxvY3MgeWV0IGFuZCB0aGlzCm9wdGlvbiBjYW5ub3QgYmUgdXNl ZCB0aGVyZS4KClBsZWFzZSByZXZpZXcuCgoKQ2hhbmdlTG9nOgoKCSogY29u ZmlnL2kzODYvaTM2Lm9wdCAobWxkLXBpZS1jb3B5cmVsb2NzKTogTmV3IG9w dGlvbi4KCSogY29uZmlnL2kzODYvaTM4Ni5jIChsZWdpdGltYXRlX3BpY19h ZGRyZXNzX2Rpc3BfcCk6IENoZWNrIGlmIHRoaXMKCSAgYWRkcmVzcyBpcyBz dGlsbCBsZWdpdGltYXRlIGluIHRoZSBwcmVzZW5jZSBvZiBjb3B5IHJlbG9j YXRpb25zCgkgIGFuZCAtZnBpZS4KCSogdGVzdHN1aXRlL2djYy50YXJnZXQv aTM4Ni9sZC1waWUtY29weXJlbG9jcy0xLmM6IE5ldyB0ZXN0LgoJKiB0ZXN0 c3VpdGUvZ2NjLnRhcmdldC9pMzg2L2xkLXBpZS1jb3B5cmVsb2NzLTIuYzog TmV3IHRlc3QuCgoKSW5kZXg6IGNvbmZpZy9pMzg2L2kzODYub3B0Cj09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT0KLS0tIGNvbmZpZy9pMzg2L2kzODYub3B0CShy ZXZpc2lvbiAyMTA0MzcpCisrKyBjb25maWcvaTM4Ni9pMzg2Lm9wdAkod29y a2luZyBjb3B5KQpAQCAtMTA4LDYgKzEwOCwxMCBAQCBpbnQgeF9peDg2X2R1 bXBfdHVuZXMKIFRhcmdldFNhdmUKIGludCB4X2l4ODZfZm9yY2VfYWxpZ25f YXJnX3BvaW50ZXIKIAorOzsgLW1sZC1waWUtY29weXJlbG9jcworVGFyZ2V0 U2F2ZQoraW50IHhfaXg4Nl9sZF9waWVfY29weXJlbG9jcworCiA7OyAtbWZv cmNlLWRyYXA9IAogVGFyZ2V0U2F2ZQogaW50IHhfaXg4Nl9mb3JjZV9kcmFw CkBAIC0yOTEsNiArMjk1LDEwIEBAIG1mYW5jeS1tYXRoLTM4NwogVGFyZ2V0 IFJlamVjdE5lZ2F0aXZlIFJlcG9ydCBJbnZlcnNlTWFzayhOT19GQU5DWV9N QVRIXzM4NywgVVNFX0ZBTkNZX01BVEhfMzg3KSBTYXZlCiBHZW5lcmF0ZSBz aW4sIGNvcywgc3FydCBmb3IgRlBVCiAKK21sZC1waWUtY29weXJlbG9jcwor VGFyZ2V0IFJlcG9ydCBWYXIoaXg4Nl9sZF9waWVfY29weXJlbG9jcykgSW5p dCgwKQorVXNlIGxpbmtlciBjb3B5IHJlbG9jcyBmb3IgcGllCisKIG1mb3Jj ZS1kcmFwCiBUYXJnZXQgUmVwb3J0IFZhcihpeDg2X2ZvcmNlX2RyYXApCiBB bHdheXMgdXNlIER5bmFtaWMgUmVhbGlnbmVkIEFyZ3VtZW50IFBvaW50ZXIg KERSQVApIHRvIHJlYWxpZ24gc3RhY2sKSW5kZXg6IGNvbmZpZy9pMzg2L2kz ODYuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBjb25maWcvaTM4Ni9p Mzg2LmMJKHJldmlzaW9uIDIxMDQzNykKKysrIGNvbmZpZy9pMzg2L2kzODYu Ywkod29ya2luZyBjb3B5KQpAQCAtMTI2ODQsNyArMTI2ODQsOSBAQCBsZWdp dGltYXRlX3BpY19hZGRyZXNzX2Rpc3BfcCAocnR4IGRpc3ApCiAJCXJldHVy biB0cnVlOwogCSAgICB9CiAJICBlbHNlIGlmICghU1lNQk9MX1JFRl9GQVJf QUREUl9QIChvcDApCi0JCSAgICYmIFNZTUJPTF9SRUZfTE9DQUxfUCAob3Aw KQorCQkgICAmJiAoU1lNQk9MX1JFRl9MT0NBTF9QIChvcDApCisJCSAgICAg ICB8fCAoVEFSR0VUXzY0QklUICYmIGl4ODZfbGRfcGllX2NvcHlyZWxvY3Mg JiYgZmxhZ19waWUKKwkJCSAgICYmICFTWU1CT0xfUkVGX0ZVTkNUSU9OX1Ag KG9wMCkpKQogCQkgICAmJiBpeDg2X2Ntb2RlbCAhPSBDTV9MQVJHRV9QSUMp CiAJICAgIHJldHVybiB0cnVlOwogCSAgYnJlYWs7CkluZGV4OiB0ZXN0c3Vp dGUvZ2NjLnRhcmdldC9pMzg2L2xkLXBpZS1jb3B5cmVsb2NzLTEuYwo9PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09Ci0tLSB0ZXN0c3VpdGUvZ2NjLnRhcmdldC9p Mzg2L2xkLXBpZS1jb3B5cmVsb2NzLTEuYwkocmV2aXNpb24gMCkKKysrIHRl c3RzdWl0ZS9nY2MudGFyZ2V0L2kzODYvbGQtcGllLWNvcHlyZWxvY3MtMS5j CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEzIEBACisvKiBUZXN0IGlmIC1t bGQtcGllLWNvcHlyZWxvY3MgZG9lcyB0aGUgcmlnaHQgdGhpbmcuICovCisv KiB7IGRnLWRvIGNvbXBpbGUgfSAqLworLyogeyBkZy1vcHRpb25zICItTzIg LWZwaWUgLW1sZC1waWUtY29weXJlbG9jcyIgfSAqLworCitleHRlcm4gaW50 IGdsb2JfYTsKKworaW50IGZvbyAoKQoreworICByZXR1cm4gZ2xvYl9hOwor fQorCisvKiBnbG9iX2Egc2hvdWxkIG5ldmVyIGJlIGFjY2Vzc2VkIHdpdGgg YSBHT1RQQ1JFTCAgKi8gCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJs ZXItbm90ICJnbG9iX2FcXEBHT1RQQ1JFTCIgeyB0YXJnZXQgeyB4ODZfNjQt Ki0qIH0gfSB9IH0gKi8KSW5kZXg6IHRlc3RzdWl0ZS9nY2MudGFyZ2V0L2kz ODYvbGQtcGllLWNvcHlyZWxvY3MtMi5jCj09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT0KLS0tIHRlc3RzdWl0ZS9nY2MudGFyZ2V0L2kzODYvbGQtcGllLWNvcHly ZWxvY3MtMi5jCShyZXZpc2lvbiAwKQorKysgdGVzdHN1aXRlL2djYy50YXJn ZXQvaTM4Ni9sZC1waWUtY29weXJlbG9jcy0yLmMJKHJldmlzaW9uIDApCkBA IC0wLDAgKzEsMTMgQEAKKy8qIFRlc3QgaWYgLW1uby1sZC1waWUtY29weXJl bG9jcyBkb2VzIHRoZSByaWdodCB0aGluZy4gKi8KKy8qIHsgZGctZG8gY29t cGlsZSB9ICovCisvKiB7IGRnLW9wdGlvbnMgIi1PMiAtZnBpZSAtbW5vLWxk LXBpZS1jb3B5cmVsb2NzIiB9ICovCisKK2V4dGVybiBpbnQgZ2xvYl9hOwor CitpbnQgZm9vICgpCit7CisgIHJldHVybiBnbG9iX2E7Cit9CisKKy8qIGds b2JfYSBzaG91bGQgYWx3YXlzIGJlIGFjY2Vzc2VkIHZpYSBHT1QgICovIAor LyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyICJnbG9iX2FcXEBHT1Qi IHsgdGFyZ2V0IHsgeDg2XzY0LSotKiB9IH0gfSB9ICovCgo= --047d7b3a84561ad39604f9748b75--