From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 45499 invoked by alias); 28 May 2015 23:54:08 -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 45485 invoked by uid 89); 28 May 2015 23:54:08 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=0.4 required=5.0 tests=AWL,BAYES_50,KAM_ASCII_DIVIDERS,KAM_STOCKGEN,RCVD_IN_DNSWL_LOW,SPF_PASS,T_RP_MATCHES_RCVD autolearn=no version=3.3.2 X-HELO: mail-vn0-f49.google.com Received: from mail-vn0-f49.google.com (HELO mail-vn0-f49.google.com) (209.85.216.49) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES128-GCM-SHA256 encrypted) ESMTPS; Thu, 28 May 2015 23:54:06 +0000 Received: by vnbg190 with SMTP id g190so6656914vnb.4 for ; Thu, 28 May 2015 16:54:04 -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:cc:content-type; bh=tXjj8HxF12KpZuU9LTAY0a+FBxQs3ve+NJar2hfC4G4=; b=CHJ+yNE/ruFkLBX+SwLJydRp1mcvdzcw8w091x6EU02BoXZDgxluyIBGTiUs2liMbK gRDZHtZm3kyr3fLUkzsh1ZWjW3SR2E9a3yluIJlLad+LbO8mNc3PFXYTIo2fN2/wv5ta m0wbcwV0eNtjwNZnkM9Kj5fi7A2LB7BpHzeHzDtR32VvTlUlEdmtJb/g7JKRBlKZngYY ifguCgiaLkid6hVVG/+rVw3xcepzEFTloTgDC7KD2vavR463uSsOCO11gdVtbP0yGuZa dE3mc3JtrIkNCwwUgxtZWnV9P1KCpzH8eHgK0cJy0/idlqtELrjxqAL1wDc04lbkx+YK jgsg== X-Gm-Message-State: ALoCoQn1wj2jGqLL8HvdoYIfLH4DQDxppmRkOQA1KvsMSg1TKOH9fQ8eheaAquALZT9iyQaZp6XS MIME-Version: 1.0 X-Received: by 10.52.3.166 with SMTP id d6mr4869305vdd.69.1432857244012; Thu, 28 May 2015 16:54:04 -0700 (PDT) Received: by 10.52.229.196 with HTTP; Thu, 28 May 2015 16:54:03 -0700 (PDT) In-Reply-To: References: <555E5376.3060706@redhat.com> <555EF018.2050309@redhat.com> Date: Fri, 29 May 2015 03:51:00 -0000 Message-ID: Subject: Re: [RFC][PATCH][X86_64] Eliminate PLT stubs for specified external functions via -fno-plt= From: Sriraman Tallam To: "H.J. Lu" Cc: Pedro Alves , Michael Matz , David Li , GCC Patches , Jan Hubicka Content-Type: multipart/mixed; boundary=20cf3033477d0b94ed05172d1389 X-IsSubscribed: yes X-SW-Source: 2015-05/txt/msg02714.txt.bz2 --20cf3033477d0b94ed05172d1389 Content-Type: text/plain; charset=UTF-8 Content-length: 3318 On Thu, May 28, 2015 at 2:52 PM, H.J. Lu wrote: > On Thu, May 28, 2015 at 2:27 PM, Sriraman Tallam wrote: >> On Thu, May 28, 2015 at 2:01 PM, H.J. Lu wrote: >>> On Thu, May 28, 2015 at 1:54 PM, Sriraman Tallam wrote: >>>> On Thu, May 28, 2015 at 12:05 PM, H.J. Lu wrote: >>>>> On Thu, May 28, 2015 at 11:50 AM, Sriraman Tallam wrote: >>>>>> On Thu, May 28, 2015 at 11:42 AM, H.J. Lu wrote: >>>>>>> On Thu, May 28, 2015 at 11:34 AM, Sriraman Tallam wrote: >>>>>>>> I have attached a patch that adds the new attribute "noplt". Please review. >>>>>>>> >>>>>>>> * config/i386/i386.c (avoid_plt_to_call): New function. >>>>>>>> (ix86_output_call_insn): Generate indirect call for functions >>>>>>>> marked with "noplt" attribute. >>>>>>>> (attribute_spec ix86_attribute_): Define new attribute "noplt". >>>>>>>> * doc/extend.texi: Document new attribute "noplt". >>>>>>>> * gcc.target/i386/noplt-1.c: New testcase. >>>>>>>> * gcc.target/i386/noplt-2.c: New testcase. >>>>>>>> >>>>>>> >>>>>>> 2 comments: >>>>>>> >>>>>>> 1. Don't remove "%!" prefix before call/jmp. It is needed for MPX. >>>>>>> 2. Don't you need to check >>>>>>> >>>>>>> && !TARGET_MACHO >>>>>>> && !TARGET_SEH >>>>>>> && !TARGET_PECOFF >>>>>>> >>>>>>> since it only works for ELF. >>>>>> >>>>>> Ok, I will make this change. OTOH, is it just better to piggy-back on >>>>>> existing -fno-plt change by Alex in calls.c >>>>>> and do this: >>>>>> >>>>>> Index: calls.c >>>>>> =================================================================== >>>>>> --- calls.c (revision 223720) >>>>>> +++ calls.c (working copy) >>>>>> @@ -226,9 +226,11 @@ prepare_call_address (tree fndecl_or_type, rtx fun >>>>>> && targetm.small_register_classes_for_mode_p (FUNCTION_MODE)) >>>>>> ? force_not_mem (memory_address (FUNCTION_MODE, funexp)) >>>>>> : memory_address (FUNCTION_MODE, funexp)); >>>>>> - else if (flag_pic && !flag_plt && fndecl_or_type >>>>>> + else if (fndecl_or_type >>>>>> && TREE_CODE (fndecl_or_type) == FUNCTION_DECL >>>>>> - && !targetm.binds_local_p (fndecl_or_type)) >>>>>> + && !targetm.binds_local_p (fndecl_or_type) >>>>>> + && ((flag_pic && !flag_plt) >>>>>> + || (lookup_attribute ("noplt", DECL_ATTRIBUTES(fndecl_or_type))))) >>>>>> { >>>>>> funexp = force_reg (Pmode, funexp); >>>>>> } >>>>>> >>>>> >>>>> Does it work on non-PIC calls? >>>> >>>> You are right, it doesnt work. I have attached the patch with the >>>> changes you mentioned. >>>> >>> >>> Since direct_p is true, do wee need >>> >>> + if (GET_CODE (call_op) != SYMBOL_REF >>> + || SYMBOL_REF_LOCAL_P (call_op)) >>> + return false; >> >> We do need it right because for this case below, I do not want an >> indirect call: >> >> __attribute__((noplt)) >> int foo() { >> return 0; >> } >> >> int main() >> { >> return foo(); >> } >> >> Assuming foo is not inlined, if I remove the lines you mentioned, I >> will get an indirect call which is unnecessary. >> > > I meant the "GET_CODE (call_op) != SYMBOL_REF" part isn't > needed. I should have realized that :), sorry. Patch fixed. Thanks Sri > > > > -- > H.J. --20cf3033477d0b94ed05172d1389 Content-Type: text/plain; charset=US-ASCII; name="noplt_attrib_patch.txt" Content-Disposition: attachment; filename="noplt_attrib_patch.txt" Content-Transfer-Encoding: base64 X-Attachment-Id: f_ia8u7dwu0 Content-length: 5661 CSogY29uZmlnL2kzODYvaTM4Ni5jIChhdm9pZF9wbHRfdG9fY2FsbCk6IE5l dyBmdW5jdGlvbi4KCShpeDg2X291dHB1dF9jYWxsX2luc24pOiBHZW5lcmF0 ZSBpbmRpcmVjdCBjYWxsIGZvciBmdW5jdGlvbnMKCW1hcmtlZCB3aXRoICJu b3BsdCIgYXR0cmlidXRlLgoJKGF0dHJpYnV0ZV9zcGVjIGl4ODZfYXR0cmli dXRlXyk6IERlZmluZSBuZXcgYXR0cmlidXRlICJub3BsdCIuCgkqIGRvYy9l eHRlbmQudGV4aTogRG9jdW1lbnQgbmV3IGF0dHJpYnV0ZSAibm9wbHQiLgoJ KiBnY2MudGFyZ2V0L2kzODYvbm9wbHQtMS5jOiBOZXcgdGVzdGNhc2UuCgkq IGdjYy50YXJnZXQvaTM4Ni9ub3BsdC0yLmM6IE5ldyB0ZXN0Y2FzZS4KCklu ZGV4OiBjb25maWcvaTM4Ni9pMzg2LmMKPT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PQotLS0gY29uZmlnL2kzODYvaTM4Ni5jCShyZXZpc2lvbiAyMjM3MjApCisr KyBjb25maWcvaTM4Ni9pMzg2LmMJKHdvcmtpbmcgY29weSkKQEAgLTI1NTk5 LDYgKzI1NTk5LDI0IEBAIGl4ODZfZXhwYW5kX2NhbGwgKHJ0eCByZXR2YWws IHJ0eCBmbmFkZHIsIHJ0eCBjYWxsCiAgIHJldHVybiBjYWxsOwogfQogCisv KiBSZXR1cm4gdHJ1ZSBpZiB0aGUgZnVuY3Rpb24gYmVpbmcgY2FsbGVkIHdh cyBtYXJrZWQgd2l0aCBhdHRyaWJ1dGUKKyAgICJub3BsdCIuICBJZiB0aGlz IGZ1bmN0aW9uIGlzIGRlZmluZWQsIHRoaXMgc2hvdWxkIHJldHVybiBmYWxz ZS4gICovCitzdGF0aWMgYm9vbAorYXZvaWRfcGx0X3RvX2NhbGwgKHJ0eCBj YWxsX29wKQoreworICBpZiAoU1lNQk9MX1JFRl9MT0NBTF9QIChjYWxsX29w KSkKKyAgICByZXR1cm4gZmFsc2U7CisKKyAgdHJlZSBzeW1ib2xfZGVjbCA9 IFNZTUJPTF9SRUZfREVDTCAoY2FsbF9vcCk7CisKKyAgaWYgKHN5bWJvbF9k ZWNsICE9IE5VTExfVFJFRQorICAgICAgJiYgVFJFRV9DT0RFIChzeW1ib2xf ZGVjbCkgPT0gRlVOQ1RJT05fREVDTAorICAgICAgJiYgbG9va3VwX2F0dHJp YnV0ZSAoIm5vcGx0IiwgREVDTF9BVFRSSUJVVEVTIChzeW1ib2xfZGVjbCkp KQorICAgIHJldHVybiB0cnVlOworCisgIHJldHVybiBmYWxzZTsKK30KKwog LyogT3V0cHV0IHRoZSBhc3NlbWJseSBmb3IgYSBjYWxsIGluc3RydWN0aW9u LiAgKi8KIAogY29uc3QgY2hhciAqCkBAIC0yNTYxMSw3ICsyNTYyOSwxMyBA QCBpeDg2X291dHB1dF9jYWxsX2luc24gKHJ0eF9pbnNuICppbnNuLCBydHgg Y2FsbF9vcAogICBpZiAoU0lCTElOR19DQUxMX1AgKGluc24pKQogICAgIHsK ICAgICAgIGlmIChkaXJlY3RfcCkKLQl4YXNtID0gIiUham1wXHQlUDAiOwor CXsKKwkgIGlmICghVEFSR0VUX01BQ0hPICYmICFUQVJHRVRfU0VIICYmICFU QVJHRVRfUEVDT0ZGCisJICAgICAgJiYgVEFSR0VUXzY0QklUICYmIGF2b2lk X3BsdF90b19jYWxsIChjYWxsX29wKSkKKwkgICAgeGFzbSA9ICIlIWptcFx0 KiVwMEBHT1RQQ1JFTCglJXJpcCkiOworCSAgZWxzZQorCSAgICB4YXNtID0g IiUham1wXHQlUDAiOworCX0KICAgICAgIC8qIFNFSCBlcGlsb2d1ZSBkZXRl Y3Rpb24gcmVxdWlyZXMgdGhlIGluZGlyZWN0IGJyYW5jaCBjYXNlCiAJIHRv IGluY2x1ZGUgUkVYLlcuICAqLwogICAgICAgZWxzZSBpZiAoVEFSR0VUX1NF SCkKQEAgLTI1NjU0LDcgKzI1Njc4LDEzIEBAIGl4ODZfb3V0cHV0X2NhbGxf aW5zbiAocnR4X2luc24gKmluc24sIHJ0eCBjYWxsX29wCiAgICAgfQogCiAg IGlmIChkaXJlY3RfcCkKLSAgICB4YXNtID0gIiUhY2FsbFx0JVAwIjsKKyAg ICB7CisgICAgICBpZiAoIVRBUkdFVF9NQUNITyAmJiAhVEFSR0VUX1NFSCAm JiAhVEFSR0VUX1BFQ09GRgorCSAgJiYgVEFSR0VUXzY0QklUICYmIGF2b2lk X3BsdF90b19jYWxsIChjYWxsX29wKSkKKyAgICAgICAgeGFzbSA9ICIlIWNh bGxcdColcDBAR09UUENSRUwoJSVyaXApIjsKKyAgICAgIGVsc2UKKyAgICAg ICAgeGFzbSA9ICIlIWNhbGxcdCVQMCI7CisgICAgfQogICBlbHNlCiAgICAg eGFzbSA9ICIlIWNhbGxcdCVBMCI7CiAKQEAgLTQ2NjI4LDYgKzQ2NjU4LDkg QEAgc3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfc3BlYyBpeDg2X2F0 dHJpYnV0ZV8KICAgICBmYWxzZSB9LAogICB7ICJjYWxsZWVfcG9wX2FnZ3Jl Z2F0ZV9yZXR1cm4iLCAxLCAxLCBmYWxzZSwgdHJ1ZSwgdHJ1ZSwKICAgICBp eDg2X2hhbmRsZV9jYWxsZWVfcG9wX2FnZ3JlZ2F0ZV9yZXR1cm4sIHRydWUg fSwKKyAgLyogQXR0cmlidXRlIHRvIGF2b2lkIGNhbGxpbmcgZnVuY3Rpb24g dmlhIFBMVC4gICovCisgIHsgIm5vcGx0IiwgMCwgMCwgdHJ1ZSwgZmFsc2Us IGZhbHNlLCBpeDg2X2hhbmRsZV9mbmRlY2xfYXR0cmlidXRlLAorICAgIGZh bHNlIH0sCiAgIC8qIEVuZCBlbGVtZW50LiAgKi8KICAgeyBOVUxMLCAgICAg ICAgMCwgMCwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgTlVMTCwgZmFsc2UgfQog fTsKSW5kZXg6IGRvYy9leHRlbmQudGV4aQo9PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09Ci0tLSBkb2MvZXh0ZW5kLnRleGkJKHJldmlzaW9uIDIyMzcyMCkKKysr IGRvYy9leHRlbmQudGV4aQkod29ya2luZyBjb3B5KQpAQCAtNDg1OCw2ICs0 ODU4LDEzIEBAIE9uIHg4Ni0zMiB0YXJnZXRzLCB0aGUgQGNvZGV7c3RkY2Fs bH0gYXR0cmlidXRlIGNhCiBhc3N1bWUgdGhhdCB0aGUgY2FsbGVkIGZ1bmN0 aW9uIHBvcHMgb2ZmIHRoZSBzdGFjayBzcGFjZSB1c2VkIHRvCiBwYXNzIGFy Z3VtZW50cywgdW5sZXNzIGl0IHRha2VzIGEgdmFyaWFibGUgbnVtYmVyIG9m IGFyZ3VtZW50cy4KIAorQGl0ZW0gbm9wbHQKK0BjaW5kZXggQGNvZGV7bm9w bHR9IGZ1bmN0aW9uIGF0dHJpYnV0ZSwgeDg2LTY0CitAY2luZGV4IGZ1bmN0 aW9ucyB3aG9zZSBjYWxscyBkbyBub3QgZ28gdmlhIFBMVAorT24geDg2LTY0 IHRhcmdldHMuIHRoZSBAY29kZXtub3BsdH0gYXR0cmlidXRlIGNhdXNlcyB0 aGUgY29tcGlsZXIgdG8KK2NhbGwgdGhpcyBleHRlcm5hbCBmdW5jdGlvbiBp bmRpcmVjdGx5IHVzaW5nIGEgR09UIGVudHJ5IGFuZCBhdm9pZCB0aGUKK1BM VC4KKwogQGl0ZW0gdGFyZ2V0IChAdmFye29wdGlvbnN9KQogQGNpbmRleCBA Y29kZXt0YXJnZXR9IGZ1bmN0aW9uIGF0dHJpYnV0ZQogQXMgZGlzY3Vzc2Vk IGluIEByZWZ7Q29tbW9uIEZ1bmN0aW9uIEF0dHJpYnV0ZXN9LCB0aGlzIGF0 dHJpYnV0ZSAKSW5kZXg6IHRlc3RzdWl0ZS9nY2MudGFyZ2V0L2kzODYvbm9w bHQtMS5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHRlc3RzdWl0ZS9n Y2MudGFyZ2V0L2kzODYvbm9wbHQtMS5jCShyZXZpc2lvbiAwKQorKysgdGVz dHN1aXRlL2djYy50YXJnZXQvaTM4Ni9ub3BsdC0xLmMJKHdvcmtpbmcgY29w eSkKQEAgLTAsMCArMSwxMyBAQAorLyogeyBkZy1kbyBjb21waWxlIHsgdGFy Z2V0IHg4Nl82NC0qLSogfSB9ICovCisKKworX19hdHRyaWJ1dGVfXyAoKG5v cGx0KSkKK3ZvaWQgZm9vKCk7CisKK2ludCBtYWluKCkKK3sKKyAgZm9vKCk7 CisgIHJldHVybiAwOworfQorCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3Nl bWJsZXIgImNhbGxcWyBcdFxdXFwqLipmb28uKkBHT1RQQ1JFTFxcKCVyaXBc XCkiIH0gfSAqLyAKSW5kZXg6IHRlc3RzdWl0ZS9nY2MudGFyZ2V0L2kzODYv bm9wbHQtMi5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHRlc3RzdWl0 ZS9nY2MudGFyZ2V0L2kzODYvbm9wbHQtMi5jCShyZXZpc2lvbiAwKQorKysg dGVzdHN1aXRlL2djYy50YXJnZXQvaTM4Ni9ub3BsdC0yLmMJKHdvcmtpbmcg Y29weSkKQEAgLTAsMCArMSwxMyBAQAorLyogeyBkZy1kbyBjb21waWxlIHsg dGFyZ2V0IHg4Nl82NC0qLSogfSB9ICovCisvKiB7IGRnLW9wdGlvbnMgIi1P MiIgfSAqLworCisKK19fYXR0cmlidXRlX18gKChub3BsdCkpCitpbnQgZm9v KCk7CisKK2ludCBtYWluKCkKK3sKKyAgcmV0dXJuIGZvbygpOworfQorCisv KiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXIgImptcFxbIFx0XF1cXCou KmZvby4qQEdPVFBDUkVMXFwoJXJpcFxcKSIgfSB9ICovIAo= --20cf3033477d0b94ed05172d1389--