From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 81341 invoked by alias); 29 May 2015 21:37:56 -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 81331 invoked by uid 89); 29 May 2015 21:37:55 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=0.5 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-f41.google.com Received: from mail-vn0-f41.google.com (HELO mail-vn0-f41.google.com) (209.85.216.41) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES128-GCM-SHA256 encrypted) ESMTPS; Fri, 29 May 2015 21:37:54 +0000 Received: by vnbf1 with SMTP id f1so9814817vnb.2 for ; Fri, 29 May 2015 14:37:51 -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=yZcKu1B1mhfxviE+26UBC/NOgYxzFn4T43Lac8LfSHQ=; b=IQQA2Wd/ROBQgoB43FOKBnam0CXCbFgWHkiw6OmgZe4n9yB2qMiaxQhC7guE9na9uS eZwto3w1cO1hQ29NNkw/HrAWzeNmaNN1OUolA7SycObQWeicgyHTHkPds+aUB0wbLpnv CWaQMi0Yh/KWs7tnDY8gCUZ7xwXFvEf5vTi2/Y9l/9lRgk17YFzgq/ZYuZP3TXtLIAhK XKnvC6f3XCJ5LX9yDBLNN0m4nDkjGViKoBBik4djfbdeO8cb6TNZhAnGXq6Bl4SnirdM G3ajhTHjf82+1/kBHoiwRxQhYt27GT+xOmLiOCpzGWj5BhapuzJmn45eOU/GcA8GN6MG b7Qw== X-Gm-Message-State: ALoCoQk4ozHeh0VOjrt5WFB5Q248tMSi1L0EbIw3GcG2FBIVhuWyI6KFme1eVGQh+Cyu1U83BERE MIME-Version: 1.0 X-Received: by 10.52.89.174 with SMTP id bp14mr9298547vdb.58.1432935471410; Fri, 29 May 2015 14:37:51 -0700 (PDT) Received: by 10.52.229.196 with HTTP; Fri, 29 May 2015 14:37:51 -0700 (PDT) In-Reply-To: <20150529193552.GA52215@kam.mff.cuni.cz> References: <20150529193552.GA52215@kam.mff.cuni.cz> Date: Fri, 29 May 2015 22:56:00 -0000 Message-ID: Subject: Re: [RFC][PATCH][X86_64] Eliminate PLT stubs for specified external functions via -fno-plt= From: Sriraman Tallam To: Jan Hubicka Cc: "H.J. Lu" , Pedro Alves , Michael Matz , David Li , GCC Patches Content-Type: multipart/mixed; boundary=20cf307abdc9c2cb6e05173f4982 X-IsSubscribed: yes X-SW-Source: 2015-05/txt/msg02831.txt.bz2 --20cf307abdc9c2cb6e05173f4982 Content-Type: text/plain; charset=UTF-8 Content-length: 2769 On Fri, May 29, 2015 at 12:35 PM, Jan Hubicka wrote: >> * 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. >> >> Index: config/i386/i386.c >> =================================================================== >> --- config/i386/i386.c (revision 223720) >> +++ config/i386/i386.c (working copy) >> @@ -25599,6 +25599,24 @@ ix86_expand_call (rtx retval, rtx fnaddr, rtx call >> return call; >> } >> >> +/* Return true if the function being called was marked with attribute >> + "noplt". If this function is defined, this should return false. */ >> +static bool >> +avoid_plt_to_call (rtx call_op) >> +{ >> + if (SYMBOL_REF_LOCAL_P (call_op)) >> + return false; >> + >> + tree symbol_decl = SYMBOL_REF_DECL (call_op); >> + >> + if (symbol_decl != NULL_TREE >> + && TREE_CODE (symbol_decl) == FUNCTION_DECL >> + && lookup_attribute ("noplt", DECL_ATTRIBUTES (symbol_decl))) >> + return true; >> + >> + return false; >> +} > > OK, now we have __attribute__ (optimize("noplt")) which binds to the caller and makes > all calls in the function to skip PLT and __attribute__ ("noplt") which binds to callee > and makes all calls to function to not use PLT. > > That sort of makes sense to me, but why "noplt" attribute is not implemented at generic level > just like -fplt? Is it only because every target supporting PLT would need update in its > call expansion patterns? Yes, that is what I had in mind. > > Also I think the PLT calls have EBX in call fusage wich is added by ix86_expand_call. > else > { > /* Static functions and indirect calls don't need the pic register. */ > if (flag_pic > && (!TARGET_64BIT > || (ix86_cmodel == CM_LARGE_PIC > && DEFAULT_ABI != MS_ABI)) > && GET_CODE (XEXP (fnaddr, 0)) == SYMBOL_REF > && ! SYMBOL_REF_LOCAL_P (XEXP (fnaddr, 0))) > { > use_reg (&use, gen_rtx_REG (Pmode, REAL_PIC_OFFSET_TABLE_REGNUM)); > if (ix86_use_pseudo_pic_reg ()) > emit_move_insn (gen_rtx_REG (Pmode, REAL_PIC_OFFSET_TABLE_REGNUM), > pic_offset_table_rtx); > } > > I think you want to take that away from FUSAGE there just like we do for local calls > (and in fact the code should already check flag_pic && flag_plt I suppose. Done that now and patch attached. Thanks Sri > > Honza --20cf307abdc9c2cb6e05173f4982 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_iaa4s19r0 Content-length: 7081 CSogY29uZmlnL2kzODYvaTM4Ni5jIChhdm9pZF9wbHRfdG9fY2FsbCk6IE5l dyBmdW5jdGlvbi4KCShpeDg2X2V4cGFuZF9jYWxsKTogRG9udCB1c2UgdGhl IFBJQyByZWdpc3RlciB3aGVuIGV4dGVybmFsIGZ1bmN0aW9uCgljYWxscyBh cmUgbm90IG1hZGUgdmlhIFBMVC4KCShpeDg2X291dHB1dF9jYWxsX2luc24p OiBHZW5lcmF0ZSBpbmRpcmVjdCBjYWxsIGZvciBmdW5jdGlvbnMKCW1hcmtl ZCB3aXRoICJub3BsdCIgYXR0cmlidXRlLgoJKGF0dHJpYnV0ZV9zcGVjIGl4 ODZfYXR0cmlidXRlXyk6IERlZmluZSBuZXcgYXR0cmlidXRlICJub3BsdCIu CgkqIGRvYy9leHRlbmQudGV4aTogRG9jdW1lbnQgbmV3IGF0dHJpYnV0ZSAi bm9wbHQiLgoJKiBnY2MudGFyZ2V0L2kzODYvbm9wbHQtMS5jOiBOZXcgdGVz dGNhc2UuCgkqIGdjYy50YXJnZXQvaTM4Ni9ub3BsdC0yLmM6IE5ldyB0ZXN0 Y2FzZS4KCkluZGV4OiBjb25maWcvaTM4Ni9pMzg2LmMKPT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PQotLS0gY29uZmlnL2kzODYvaTM4Ni5jCShyZXZpc2lvbiAy MjM3MjApCisrKyBjb25maWcvaTM4Ni9pMzg2LmMJKHdvcmtpbmcgY29weSkK QEAgLTI1NDc1LDYgKzI1NDc1LDI4IEBAIGNvbnN0cnVjdF9wbHRfYWRkcmVz cyAocnR4IHN5bWJvbCkKICAgcmV0dXJuIHRtcDsKIH0KIAorLyogUmV0dXJu IHRydWUgaWYgdGhlIGZ1bmN0aW9uIGJlaW5nIGNhbGxlZCB3YXMgbWFya2Vk IHdpdGggYXR0cmlidXRlCisgICAibm9wbHQiLiAgSWYgdGhpcyBmdW5jdGlv biBpcyBkZWZpbmVkLCB0aGlzIHNob3VsZCByZXR1cm4gZmFsc2UuICBUaGlz CisgICBpcyBjdXJyZW50bHkgdXNlZCBvbmx5IHdpdGggNjQtYml0IEVMRiB0 YXJnZXRzLiAgKi8KK3N0YXRpYyBib29sCithdm9pZF9wbHRfdG9fY2FsbCAo cnR4IGNhbGxfb3ApCit7CisgIGlmICghVEFSR0VUXzY0QklUIHx8IFRBUkdF VF9NQUNIT3x8IFRBUkdFVF9TRUggfHwgVEFSR0VUX1BFQ09GRikKKyAgICBy ZXR1cm4gZmFsc2U7CisKKyAgaWYgKFNZTUJPTF9SRUZfTE9DQUxfUCAoY2Fs bF9vcCkpCisgICAgcmV0dXJuIGZhbHNlOworCisgIHRyZWUgc3ltYm9sX2Rl Y2wgPSBTWU1CT0xfUkVGX0RFQ0wgKGNhbGxfb3ApOworCisgIGlmIChzeW1i b2xfZGVjbCAhPSBOVUxMX1RSRUUKKyAgICAgICYmIFRSRUVfQ09ERSAoc3lt Ym9sX2RlY2wpID09IEZVTkNUSU9OX0RFQ0wKKyAgICAgICYmIGxvb2t1cF9h dHRyaWJ1dGUgKCJub3BsdCIsIERFQ0xfQVRUUklCVVRFUyAoc3ltYm9sX2Rl Y2wpKSkKKyAgICByZXR1cm4gdHJ1ZTsKKworICByZXR1cm4gZmFsc2U7Cit9 CisKIHJ0eAogaXg4Nl9leHBhbmRfY2FsbCAocnR4IHJldHZhbCwgcnR4IGZu YWRkciwgcnR4IGNhbGxhcmcxLAogCQkgIHJ0eCBjYWxsYXJnMiwKQEAgLTI1 NDk3LDEzICsyNTUxOSwxNiBAQCBpeDg2X2V4cGFuZF9jYWxsIChydHggcmV0 dmFsLCBydHggZm5hZGRyLCBydHggY2FsbAogICAgIH0KICAgZWxzZQogICAg IHsKLSAgICAgIC8qIFN0YXRpYyBmdW5jdGlvbnMgYW5kIGluZGlyZWN0IGNh bGxzIGRvbid0IG5lZWQgdGhlIHBpYyByZWdpc3Rlci4gICovCisgICAgICAv KiBTdGF0aWMgZnVuY3Rpb25zIGFuZCBpbmRpcmVjdCBjYWxscyBkb24ndCBu ZWVkIHRoZSBwaWMgcmVnaXN0ZXIuICBBbHNvLAorCSBjaGVjayBpZiBQTFQg d2FzIGV4cGxpY2l0bHkgYXZvaWRlZCB2aWEgbm8tcGx0IG9yICJub3BsdCIg YXR0cmlidXRlLCBtYWtpbmcKKwkgaXQgYW4gaW5kaXJlY3QgY2FsbC4gICov CiAgICAgICBpZiAoZmxhZ19waWMKIAkgICYmICghVEFSR0VUXzY0QklUCiAJ ICAgICAgfHwgKGl4ODZfY21vZGVsID09IENNX0xBUkdFX1BJQwogCQkgICYm IERFRkFVTFRfQUJJICE9IE1TX0FCSSkpCiAJICAmJiBHRVRfQ09ERSAoWEVY UCAoZm5hZGRyLCAwKSkgPT0gU1lNQk9MX1JFRgotCSAgJiYgISBTWU1CT0xf UkVGX0xPQ0FMX1AgKFhFWFAgKGZuYWRkciwgMCkpKQorCSAgJiYgISBTWU1C T0xfUkVGX0xPQ0FMX1AgKFhFWFAgKGZuYWRkciwgMCkpCisJICAmJiBmbGFn X3BsdCAmJiAhYXZvaWRfcGx0X3RvX2NhbGwgKFhFWFAgKGZuYWRkciwgMCkp KQogCXsKIAkgIHVzZV9yZWcgKCZ1c2UsIGdlbl9ydHhfUkVHIChQbW9kZSwg UkVBTF9QSUNfT0ZGU0VUX1RBQkxFX1JFR05VTSkpOwogCSAgaWYgKGl4ODZf dXNlX3BzZXVkb19waWNfcmVnICgpKQpAQCAtMjU2MTEsNyArMjU2MzYsMTMg QEAgaXg4Nl9vdXRwdXRfY2FsbF9pbnNuIChydHhfaW5zbiAqaW5zbiwgcnR4 IGNhbGxfb3AKICAgaWYgKFNJQkxJTkdfQ0FMTF9QIChpbnNuKSkKICAgICB7 CiAgICAgICBpZiAoZGlyZWN0X3ApCi0JeGFzbSA9ICIlIWptcFx0JVAwIjsK Kwl7CisJICBpZiAoIVRBUkdFVF9NQUNITyAmJiAhVEFSR0VUX1NFSCAmJiAh VEFSR0VUX1BFQ09GRgorCSAgICAgICYmIFRBUkdFVF82NEJJVCAmJiBhdm9p ZF9wbHRfdG9fY2FsbCAoY2FsbF9vcCkpCisJICAgIHhhc20gPSAiJSFqbXBc dColcDBAR09UUENSRUwoJSVyaXApIjsKKwkgIGVsc2UKKwkgICAgeGFzbSA9 ICIlIWptcFx0JVAwIjsKKwl9CiAgICAgICAvKiBTRUggZXBpbG9ndWUgZGV0 ZWN0aW9uIHJlcXVpcmVzIHRoZSBpbmRpcmVjdCBicmFuY2ggY2FzZQogCSB0 byBpbmNsdWRlIFJFWC5XLiAgKi8KICAgICAgIGVsc2UgaWYgKFRBUkdFVF9T RUgpCkBAIC0yNTY1NCw3ICsyNTY4NSwxMyBAQCBpeDg2X291dHB1dF9jYWxs X2luc24gKHJ0eF9pbnNuICppbnNuLCBydHggY2FsbF9vcAogICAgIH0KIAog ICBpZiAoZGlyZWN0X3ApCi0gICAgeGFzbSA9ICIlIWNhbGxcdCVQMCI7Cisg ICAgeworICAgICAgaWYgKCFUQVJHRVRfTUFDSE8gJiYgIVRBUkdFVF9TRUgg JiYgIVRBUkdFVF9QRUNPRkYKKwkgICYmIFRBUkdFVF82NEJJVCAmJiBhdm9p ZF9wbHRfdG9fY2FsbCAoY2FsbF9vcCkpCisgICAgICAgIHhhc20gPSAiJSFj YWxsXHQqJXAwQEdPVFBDUkVMKCUlcmlwKSI7CisgICAgICBlbHNlCisgICAg ICAgIHhhc20gPSAiJSFjYWxsXHQlUDAiOworICAgIH0KICAgZWxzZQogICAg IHhhc20gPSAiJSFjYWxsXHQlQTAiOwogCkBAIC00NjYyOCw2ICs0NjY2NSw5 IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX3NwZWMgaXg4Nl9h dHRyaWJ1dGVfCiAgICAgZmFsc2UgfSwKICAgeyAiY2FsbGVlX3BvcF9hZ2dy ZWdhdGVfcmV0dXJuIiwgMSwgMSwgZmFsc2UsIHRydWUsIHRydWUsCiAgICAg aXg4Nl9oYW5kbGVfY2FsbGVlX3BvcF9hZ2dyZWdhdGVfcmV0dXJuLCB0cnVl IH0sCisgIC8qIEF0dHJpYnV0ZSB0byBhdm9pZCBjYWxsaW5nIGZ1bmN0aW9u IHZpYSBQTFQuICAqLworICB7ICJub3BsdCIsIDAsIDAsIHRydWUsIGZhbHNl LCBmYWxzZSwgaXg4Nl9oYW5kbGVfZm5kZWNsX2F0dHJpYnV0ZSwKKyAgICBm YWxzZSB9LAogICAvKiBFbmQgZWxlbWVudC4gICovCiAgIHsgTlVMTCwgICAg ICAgIDAsIDAsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIE5VTEwsIGZhbHNlIH0K IH07CkluZGV4OiBkb2MvZXh0ZW5kLnRleGkKPT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PQotLS0gZG9jL2V4dGVuZC50ZXhpCShyZXZpc2lvbiAyMjM3MjApCisr KyBkb2MvZXh0ZW5kLnRleGkJKHdvcmtpbmcgY29weSkKQEAgLTQ4NTgsNiAr NDg1OCwxMyBAQCBPbiB4ODYtMzIgdGFyZ2V0cywgdGhlIEBjb2Rle3N0ZGNh bGx9IGF0dHJpYnV0ZSBjYQogYXNzdW1lIHRoYXQgdGhlIGNhbGxlZCBmdW5j dGlvbiBwb3BzIG9mZiB0aGUgc3RhY2sgc3BhY2UgdXNlZCB0bwogcGFzcyBh cmd1bWVudHMsIHVubGVzcyBpdCB0YWtlcyBhIHZhcmlhYmxlIG51bWJlciBv ZiBhcmd1bWVudHMuCiAKK0BpdGVtIG5vcGx0CitAY2luZGV4IEBjb2Rle25v cGx0fSBmdW5jdGlvbiBhdHRyaWJ1dGUsIHg4Ni02NAorQGNpbmRleCBmdW5j dGlvbnMgd2hvc2UgY2FsbHMgZG8gbm90IGdvIHZpYSBQTFQKK09uIHg4Ni02 NCB0YXJnZXRzLiB0aGUgQGNvZGV7bm9wbHR9IGF0dHJpYnV0ZSBjYXVzZXMg dGhlIGNvbXBpbGVyIHRvCitjYWxsIHRoaXMgZXh0ZXJuYWwgZnVuY3Rpb24g aW5kaXJlY3RseSB1c2luZyBhIEdPVCBlbnRyeSBhbmQgYXZvaWQgdGhlCitQ TFQuCisKIEBpdGVtIHRhcmdldCAoQHZhcntvcHRpb25zfSkKIEBjaW5kZXgg QGNvZGV7dGFyZ2V0fSBmdW5jdGlvbiBhdHRyaWJ1dGUKIEFzIGRpc2N1c3Nl ZCBpbiBAcmVme0NvbW1vbiBGdW5jdGlvbiBBdHRyaWJ1dGVzfSwgdGhpcyBh dHRyaWJ1dGUgCkluZGV4OiB0ZXN0c3VpdGUvZ2NjLnRhcmdldC9pMzg2L25v cGx0LTEuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSB0ZXN0c3VpdGUv Z2NjLnRhcmdldC9pMzg2L25vcGx0LTEuYwkocmV2aXNpb24gMCkKKysrIHRl c3RzdWl0ZS9nY2MudGFyZ2V0L2kzODYvbm9wbHQtMS5jCSh3b3JraW5nIGNv cHkpCkBAIC0wLDAgKzEsMTMgQEAKKy8qIHsgZGctZG8gY29tcGlsZSB7IHRh cmdldCB4ODZfNjQtKi1saW51eCogfSB9ICovCisKKworX19hdHRyaWJ1dGVf XyAoKG5vcGx0KSkKK3ZvaWQgZm9vKCk7CisKK2ludCBtYWluKCkKK3sKKyAg Zm9vKCk7CisgIHJldHVybiAwOworfQorCisvKiB7IGRnLWZpbmFsIHsgc2Nh bi1hc3NlbWJsZXIgImNhbGxcWyBcdFxdXFwqLipmb28uKkBHT1RQQ1JFTFxc KCVyaXBcXCkiIH0gfSAqLyAKSW5kZXg6IHRlc3RzdWl0ZS9nY2MudGFyZ2V0 L2kzODYvbm9wbHQtMi5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHRl c3RzdWl0ZS9nY2MudGFyZ2V0L2kzODYvbm9wbHQtMi5jCShyZXZpc2lvbiAw KQorKysgdGVzdHN1aXRlL2djYy50YXJnZXQvaTM4Ni9ub3BsdC0yLmMJKHdv cmtpbmcgY29weSkKQEAgLTAsMCArMSwxMyBAQAorLyogeyBkZy1kbyBjb21w aWxlIHsgdGFyZ2V0IHg4Nl82NC0qLWxpbnV4KiB9IH0gKi8KKy8qIHsgZGct b3B0aW9ucyAiLU8yIiB9ICovCisKKworX19hdHRyaWJ1dGVfXyAoKG5vcGx0 KSkKK2ludCBmb28oKTsKKworaW50IG1haW4oKQoreworICByZXR1cm4gZm9v KCk7Cit9CisKKy8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlciAiam1w XFsgXHRcXVxcKi4qZm9vLipAR09UUENSRUxcXCglcmlwXFwpIiB9IH0gKi8g Cg== --20cf307abdc9c2cb6e05173f4982--