{"id":807949,"url":"http://patchwork.ozlabs.org/api/patches/807949/?format=json","web_url":"http://patchwork.ozlabs.org/project/glibc/patch/1504132534.3182.4.camel@cavium.com/","project":{"id":41,"url":"http://patchwork.ozlabs.org/api/projects/41/?format=json","name":"GNU C Library","link_name":"glibc","list_id":"libc-alpha.sourceware.org","list_email":"libc-alpha@sourceware.org","web_url":"","scm_url":"","webscm_url":"","list_archive_url":"","list_archive_url_format":"","commit_url_format":""},"msgid":"<1504132534.3182.4.camel@cavium.com>","list_archive_url":null,"date":"2017-08-30T22:35:34","name":"[aarch64] Fix hpwcap argument passed to ifunc resolvers","commit_ref":null,"pull_url":null,"state":"new","archived":false,"hash":"9b14cb48360e85e76df163dcdf9080ca5f35a1b7","submitter":{"id":70332,"url":"http://patchwork.ozlabs.org/api/people/70332/?format=json","name":"Steve Ellcey","email":"sellcey@cavium.com"},"delegate":null,"mbox":"http://patchwork.ozlabs.org/project/glibc/patch/1504132534.3182.4.camel@cavium.com/mbox/","series":[{"id":710,"url":"http://patchwork.ozlabs.org/api/series/710/?format=json","web_url":"http://patchwork.ozlabs.org/project/glibc/list/?series=710","date":"2017-08-30T22:35:34","name":"[aarch64] Fix hpwcap argument passed to ifunc resolvers","version":1,"mbox":"http://patchwork.ozlabs.org/series/710/mbox/"}],"comments":"http://patchwork.ozlabs.org/api/patches/807949/comments/","check":"pending","checks":"http://patchwork.ozlabs.org/api/patches/807949/checks/","tags":{},"related":[],"headers":{"Return-Path":"<libc-alpha-return-83894-incoming=patchwork.ozlabs.org@sourceware.org>","X-Original-To":"incoming@patchwork.ozlabs.org","Delivered-To":["patchwork-incoming@bilbo.ozlabs.org","mailing list libc-alpha@sourceware.org"],"Authentication-Results":["ozlabs.org;\n\tspf=pass (mailfrom) smtp.mailfrom=sourceware.org\n\t(client-ip=209.132.180.131; helo=sourceware.org;\n\tenvelope-from=libc-alpha-return-83894-incoming=patchwork.ozlabs.org@sourceware.org;\n\treceiver=<UNKNOWN>)","ozlabs.org; dkim=pass (1024-bit key;\n\tsecure) header.d=sourceware.org header.i=@sourceware.org\n\theader.b=\"XBl/43xb\"; dkim-atps=neutral","sourceware.org; auth=none","spf=none (sender IP is )\n\tsmtp.mailfrom=Steve.Ellcey@cavium.com; "],"Received":["from sourceware.org (server1.sourceware.org [209.132.180.131])\n\t(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256\n\tbits)) (No client certificate requested)\n\tby ozlabs.org (Postfix) with ESMTPS id 3xjL27106Dz9s7G\n\tfor <incoming@patchwork.ozlabs.org>;\n\tThu, 31 Aug 2017 08:35:58 +1000 (AEST)","(qmail 124361 invoked by alias); 30 Aug 2017 22:35:49 -0000","(qmail 124352 invoked by uid 89); 30 Aug 2017 22:35:49 -0000"],"DomainKey-Signature":"a=rsa-sha1; c=nofws; d=sourceware.org; h=list-id\n\t:list-unsubscribe:list-subscribe:list-archive:list-post\n\t:list-help:sender:message-id:subject:from:reply-to:to:date\n\t:content-type:mime-version; q=dns; s=default; b=oGqlarmi7PXcxxuV\n\tnd3gVhoewkHQkOkESzuddBuCSyx0lXg/KUU31mHxcrf/iqT025+0ECHkPourHTwv\n\tga8/EJpiAklVN4W/B44XBBIV9RwGurgM+zXpVNsfV8WYpMZpwvTYOr4NHR4Pee3Y\n\tyZj5oFPVFEHqAFuq2qYMmHV+RHo=","DKIM-Signature":"v=1; a=rsa-sha1; c=relaxed; d=sourceware.org; h=list-id\n\t:list-unsubscribe:list-subscribe:list-archive:list-post\n\t:list-help:sender:message-id:subject:from:reply-to:to:date\n\t:content-type:mime-version; s=default; bh=+ITxJalVn9qb7rI6tmrcye\n\txipZs=; b=XBl/43xbX4a+2F/nvHyB/IbT7H9u9IxWkYQxRSK68TwH/G2NAfYtOI\n\tkwHPq+M5VxeGc3MZq5CICxoyc0Ivs6jZAygiwBupGQp/vdcz6AwKVgeeuwXBHjEx\n\txCA54O1ZzSfnQ/ccgd/2kcdRsb0sJOcogF3hVieNc6K1aOpH3ukWQ=","Mailing-List":"contact libc-alpha-help@sourceware.org; run by ezmlm","Precedence":"bulk","List-Id":"<libc-alpha.sourceware.org>","List-Unsubscribe":"<mailto:libc-alpha-unsubscribe-incoming=patchwork.ozlabs.org@sourceware.org>","List-Subscribe":"<mailto:libc-alpha-subscribe@sourceware.org>","List-Archive":"<http://sourceware.org/ml/libc-alpha/>","List-Post":"<mailto:libc-alpha@sourceware.org>","List-Help":"<mailto:libc-alpha-help@sourceware.org>,\n\t<http://sourceware.org/ml/#faqs>","Sender":"libc-alpha-owner@sourceware.org","X-Virus-Found":"No","X-Spam-SWARE-Status":"No, score=-25.2 required=5.0 tests=AWL, BAYES_00,\n\tGIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3,\n\tRCVD_IN_DNSWL_NONE,\n\tSPF_HELO_PASS autolearn=ham version=3.3.2 spammy=","X-HELO":"NAM02-BL2-obe.outbound.protection.outlook.com","Message-ID":"<1504132534.3182.4.camel@cavium.com>","Subject":"[PATCH][aarch64] Fix hpwcap argument passed to ifunc resolvers","From":"Steve Ellcey <sellcey@cavium.com>","Reply-To":"sellcey@cavium.com","To":"libc-alpha <libc-alpha@sourceware.org>","Date":"Wed, 30 Aug 2017 15:35:34 -0700","Content-Type":"multipart/mixed; boundary=\"=-aDWfOCYxyvkVAVVJf3tL\"","Mime-Version":"1.0","X-ClientProxiedBy":"MWHPR1201CA0018.namprd12.prod.outlook.com (10.174.253.28)\n\tTo DM5PR07MB3546.namprd07.prod.outlook.com\n\t(10.164.153.144)","X-MS-PublicTrafficType":"Email","X-MS-Office365-Filtering-Correlation-Id":"fce5793c-61a5-4544-c11a-08d4eff76f25","X-Microsoft-Antispam":"UriScan:; BCL:0; PCL:0;\n\tRULEID:(300000500095)(300135000095)(300000501095)(300135300095)(22001)(300000502095)(300135100095)(2017030254152)(300000503095)(300135400095)(2017052603199)(49563074)(201703131423075)(201703031133081)(201702281549075)(300000504095)(300135200095)(300000505095)(300135600095)(300000506095)(300135500095);\n\tSRVR:DM5PR07MB3546; ","X-Microsoft-Exchange-Diagnostics":["1; DM5PR07MB3546;\n\t3:XzGcqqIzpYc1vgR+6Ek76t5r5dX6yl8w0zJNe4ZUWa4x0sIF3J+wpZ8mlLYZILiII7tyOhcNEmKR4i5YUkM/fHl1WoQq+x4M10mdSUhp/ams5sKwcB5PwKdQ0SMUVKkY0lG5p+Yu2dEIwHMJVy0Ohuegeqnkb7sxSgHoVLnJji9fr7WNqSg/zTkT7CEmaZJoB6MK402+PUrjFQRi2yKW2wkscVAyCdukqxI447KvZh1ob0j4AXULrWDL9MqiAxRA;\n\t25:nu0kU6VUZAdxVAFGv+BTUKTa/+VpGFQ7Y6+tuBrDnRsBsQoCiEsaWqGbbfr5a1RaZHXXt073EAygs0ZwdOyuonVWczgiBR2Tpgtw0EW+0HQ8vYyix0pk1NIymVQ6d9RnFPNN1bRPEU2ORbygJlYrfekqhFTZyvQQke34/128svfCksdC9MPopBSgrTny5Mx6c7LrT9njfLu0Et86DurZUTBg7sAQ+qfJzEmXhm7BkcKGYiKwnmIlSjIysa13w1fxtiFBrCYgU4BUdx7pjax/fTWg2UvBeNVOIlDlXgghzdcj4Inv7FRKuJST3Guu8b/iLkVHmHmUhIeFSXaPMc6rog==;\n\t31:bsqZK0WYDJe311/GfJjPkHINxJV1VdrfxycguwEh06eRhn0TJ8zo6rwcgyY6CjP6ENOto0e/e/6WNnhNUgBIIMd+4fjEpXHegkmVX3ZaLC7AYdFRPsXIAHRqoTf490OFVIV9GdWvQtR8lwaoOQNuOPWtUUVZufjtC2Hv7jn0R11FMpdR12g7DtuU8wymOfMrAkixKHccacjkSPlEWY5XGBfe9rfd/HuA4PSWll97bCY=","1; DM5PR07MB3546;\n\t20:DqCJW0L6drk3J43JCk11uIDJF+9qaqhOTGYy9Vad9oiqmy8PDA8znYlasEy2M50pmBNOl6b+fPqhX0erasYdmG4b32qWW7BsD5LB9Q6Fj/C4w8lQM368/kHpdibc7W4G9WXajmRaXH70IJOPY2OH2nt3k5LUBiuQPeCv/GswjMR9A1Po/thVold4lrpN/Fo/Q+ehZDLgDPFTwYqxapQMHudsP/Q/9h0Xfx4sETU5KGgXyeOBKWrwekzgWuMNjkzDT16mwYRIvqaj6+erheGQnfC40tD66CeuW96qduZz5OEbzkKxuIJEg9Yyzd0Zr/CefLGdvK3XC/pDK2YNKxGZ6vECp0B75W0eI6bQ7iSC+uFNDlWauqYg5yis8T4Aq/D36GviOI2J56Pfr3mDz7Bd8T1ppkZGX58zGJrjibrFPSKibKu+od+POtjQyeaXj+BKCQYehmVBckXsni2WsgPkp36AjTkEf4WYexXufKyGRj8Z49zeawR0JSgIcJONn1gh;\n\t4:D3bYfv0JyVyHHrm4WJGl3r+psApDR+QkO0sO7iIobA/NrPFQnhCwN6Wmc7TL6VDoJ3UbYXwjM7J1kfitNBY4HSa8pv9kZzZltB4aEOeN6Jiz2TEZuL/g5lgZ3xu6q7wtkbnBzUigKlC+gPU9iHZSSfYwATtGZusTkwJ9SZ8dERTLsEyfZFW1MnALMF2QI7hhncEhIS+JP41zBHW47bs3O4iwkm7WbNEB+/85GTzoRuSQ1YA7QDmxbKfSHsDLAFpC1g53e41lZ7r4Ko9tmQHis81cu0fyjk0t+xRTl7YDkiyxY00JhDLMS7xz06cXRYEbBE6Roar2OMxSD/sm8pzfYA==","1; DM5PR07MB3546;\n\t23:Hl0OF0DhWT4Cw/YrJrIXd99DpnKmtw+9Db0cFrv1UelmAbI0pUya1Q1eKvLuKN/uc8C8i8d/+gQsJqSwpa38KwI0u2WUpui3ogzlVN44N04OrRvlnxwXI4toohdlZF/Lad6+u5uhso7yX7byNwlGSwJ6NU+ebGhXMx8NlDP+dC1BAK9cg3dA6gIzXEdKh4sZyysK69PnIYlrGMHzB5A64xMGtsrQwLVC8Z0+96fZvOPQNK0pvHBRJF5vDf0ZhxE+lTXtNqseygHMqLj6yAMnRywfBceAwKJHqvuOJz4wZMCFKVms3IYXgN0+wOPrk8Ln8PI8wtrrjHO5oIC5PU/VM0B3QWgVChAIn9w2u/NfuzrhXZGQz1aOul+EG1cm+s2JCSyFrbBxS6MAirFS/b+4R2qCntMg08fc5iA9D0PlP2f/VyNRsaIf4cXtM9q2IfbrVZq8AAXHYb6mUBQyngRMhjUFZkXeChNN6N3/76J1QBlq+9l/JyPIEaqcnecC09mHYMAfM/Ubbbeu5p++J6FEPAPYBz4U5RSgT+robzPx+MqnVA1gxJARnde8D4y6+B+o3CUPvE+BhVWZcofVImmx2XFZY7OixM1g0+vCbyhuuWiWCFVNZIIr9F7jfqN6yoypimg7e0lKcbXKkqGryPYO+OEmtQdWMNrA4HsMO3RYK+9Pmdbw8Llx+yFJrQevUK6YHupxVibXTevSOInBlzjPhBc7Hre+d1JxGboiUh+UJd3mdt5tl9b8Syqk8oS65OCRc3FlevQ4yxhwLQz4x/qygJUxvATLNLo56+vM+0iMvPeMsaXRGd0R+tEOe9O9XhT/G36yZUhtNSz+GZSRpTUzJ6iRJBO9c4LiGSj3Z8eUA/GzWMgsJatp4R/K2v9CReB1ugYdMODu8EozR08RqPmtkuNoVN5pV6bX9Ko0QmFNK9Wm3yVGwBI9fb2SiTJokNFX/oDdiBHvgz62rtrwjIP/qSs/O0cMPV9zFpoG53TPBPZJ6YV/8mknnkfRW6bTCEViljt97l6gbA+joSxF75Wy7JOObP6MiShPN8PDGsJhdPD+sV1ysT1gkA112ojcONn9H454FwMZJOLrKrDOMTRA4idBEboXADqoBf04lKXi7s/J+MLidcvVAsRWCEdXWAh0nnIs+dNERv4G3686g8hA3g==","1; DM5PR07MB3546;\n\t6:j+18bqPOBpRaq5jfeHbv1eNgInDl47Gf/Cx58mTft3JIEhSmawJwlR2FFzJ6sJ4Aie6eFx5c95MYP/xTQTx5FeuNGRJTgt/Bcl+mGdzkr18+/RvUVk9UvWh+qsXs+sgngyE6BATTXpgi0f1lHNDh+Ui+pu7NbOvzJJZZ9PcKkgREPqTXsveOKXxIinTQx7cXkEIT6WMcOJqzeVeaX64woptOrW9DIlsTeT06O1PD7ackOldSuj2AaEwJYC/lTR0vVHsP+BUUEGpSUhr6auH+JEkdypqoKbpLX85mflk+BJD3JcK10TF/54s79wgdMZTD0LacTnKlGb/giAvkmsowjw==;\n\t5:4yZu2T26J9Qz8s3aCRaUa50wD1Lh6YgvjwMRVeI/4ZXd3BOzIrsjZvvVwBLWNnN5N+1AqGSNdqw0azztb9DgmFMPD0Z1CoPCl1BvNmNtuWUSHhANSAICgYegv86ToUGdy4asXXE2bJZyEnV3jvk3dA==;\n\t24:4vBciFNIRr2lUnuQl0PhKHQKDFdyzRTY3Hpw2dXrGyZIOXv9LSmYedgXsRITf9Ym0SqCiFqM5a45f4GfnUloQAcL7YVl897N3sboebLeJg8=;\n\t7:7HQ7e8HY/pfSJtxcQuEUlNat0evNbMW1O/O5Ne6w5ygtrwUCcsEDH8d5wsDMH+GC75Nwgv9m7UuSaClYmBZLTji9lpHniHlwyJYP+xzSppArKsk4Hv7rCdqsXpA6dRZogyFccxAjtajNfip07bF9Km3uh9KOKCoH8Js5etsdFCJo1IiuXp2P0Ox7zoFWVcuD8lzxszSp7G5U0ytUDaFe7tYtLYHzDiFLBBO9YmIXdEQ="],"X-MS-TrafficTypeDiagnostic":"DM5PR07MB3546:","X-Exchange-Antispam-Report-Test":"UriScan:(22074186197030)(183786458502308);","X-Microsoft-Antispam-PRVS":"<DM5PR07MB3546AA200629848959CDD6CCF59C0@DM5PR07MB3546.namprd07.prod.outlook.com>","X-Exchange-Antispam-Report-CFA-Test":"BCL:0; PCL:0;\n\tRULEID:(100000700101)(100105000095)(100000701101)(100105300095)(100000702101)(100105100095)(102415395)(6040450)(601004)(2401047)(8121501046)(5005006)(100000703101)(100105400095)(10201501046)(93006095)(93001095)(3002001)(6041248)(20161123555025)(20161123560025)(20161123558100)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(20161123562025)(20161123564025)(6072148)(201708071742011)(100000704101)(100105200095)(100000705101)(100105500095);\n\tSRVR:DM5PR07MB3546; BCL:0; PCL:0;\n\tRULEID:(100000800101)(100110000095)(100000801101)(100110300095)(100000802101)(100110100095)(100000803101)(100110400095)(100000804101)(100110200095)(100000805101)(100110500095);\n\tSRVR:DM5PR07MB3546; ","X-Forefront-PRVS":"041517DFAB","X-Forefront-Antispam-Report":"SFV:NSPM;\n\tSFS:(10009020)(6009001)(189002)(377424004)(199003)(106356001)(966005)(25786009)(50226002)(105586002)(8676002)(2906002)(103116003)(5660300001)(81166006)(81156014)(8936002)(3450700001)(189998001)(568964002)(305945005)(6116002)(33646002)(512874002)(2476003)(3846002)(110136004)(50986999)(478600001)(43066003)(4610100001)(84326002)(7736002)(36756003)(101416001)(72206003)(5890100001)(6916009)(69596002)(6506006)(97736004)(68736007)(53416004)(6306002)(66066001)(53936002)(6512007)(42186005)(6486002)(99106002);\n\tDIR:OUT; SFP:1101; SCL:1; SRVR:DM5PR07MB3546;\n\tH:sellcey-dt.caveonetworks.com; FPR:; SPF:None;\n\tPTR:InfoNoRecords; MX:1; A:1; LANG:en; ","Received-SPF":"None (protection.outlook.com: cavium.com does not designate\n\tpermitted sender hosts)","SpamDiagnosticOutput":"1:99","SpamDiagnosticMetadata":"NSPM","X-OriginatorOrg":"cavium.com","X-MS-Exchange-CrossTenant-OriginalArrivalTime":"30 Aug 2017 22:35:36.4600\n\t(UTC)","X-MS-Exchange-CrossTenant-FromEntityHeader":"Hosted","X-MS-Exchange-CrossTenant-Id":"711e4ccf-2e9b-4bcf-a551-4094005b6194","X-MS-Exchange-Transport-CrossTenantHeadersStamped":"DM5PR07MB3546"},"content":"I submitted a patch to gcc to use IFUNCs in libatomic.\n\nhttps://gcc.gnu.org/ml/gcc-patches/2017-08/msg00545.html\n\nWhile addressing some of the comments to that patch I\nrealized I needed some changes to glibc in order to\nenable the functionality correctly.  This patch has\nthose changes.  In elf_ifunc_invoke I changed the\nargument type passed to the ifunc resolver function\nfrom 'unsigned long int' to 'uint64_t'.  This doesn't\nmatter until we do ILP32 but I would like to change\nit now so that I can check in the gcc patch with a \nmatching type and not have to change it later.  The\nother change here is to use hwcap_mask to mask out\nthe hwcap value passed to the resolver function.  This\nmeans that ifunc resolvers that use the hwcap argument\nto check for hardware capabilities will be affected\nby LD_HWCAP_MASK in the same way that glibc resolver\nfunctions are.\n\nFinally, I updated HWCAP_IMPORTANT to be all the\nknown HWCAP_* values or'ed together so that nothing\nwas masked out by default.  This was set to just\nHWCAP_CPUID before and if you did not set LD_HWCAP_MASK\nbut tried to check HWCAP_ATOMICS in a ifunc resolver\nyou would get 0 because the default value of hwcap_mask\nwould not have that bit set and it would get masked out by\nthe AND operation I added to elf_ifunc_invoke.  I don't\nthink we want any of the hardware capabilities masked out\nby default, but only if the user sets LD_HWCAP_MASK.\n\nTested on aarch64 with a modified GCC libatomic patch\nand with the glibc testsuite.\n\nSteve Ellcey\nsellcey@cavium.com\n\n\n2017-08-30  Steve Ellcey  <sellcey@cavium.com>\n\n\t* sysdeps/aarch64/dl-irel.h: Include elf/dl-hwcaps.h\n\tfor GET_HWCAP_MASK.\n\t(elf_ifunc_invoke): Change argument type and use\n\tGET_HWCAP_MASK to mask out bits in dl_hwcap.\n\t* sysdeps/unix/sysv/linux/aarch64/dl-procinfo.h (HWCAP_IMPORTANT):\n\tUse bitwise or of all defined HWCAP values as default value.","diff":"diff --git a/sysdeps/aarch64/dl-irel.h b/sysdeps/aarch64/dl-irel.h\nindex 4a80275..3ef8497 100644\n--- a/sysdeps/aarch64/dl-irel.h\n+++ b/sysdeps/aarch64/dl-irel.h\n@@ -24,6 +24,7 @@\n #include <unistd.h>\n #include <ldsodefs.h>\n #include <sysdep.h>\n+#include <elf/dl-hwcaps.h>\n \n #define ELF_MACHINE_IRELA\t1\n \n@@ -31,7 +32,8 @@ static inline ElfW(Addr)\n __attribute ((always_inline))\n elf_ifunc_invoke (ElfW(Addr) addr)\n {\n-  return ((ElfW(Addr) (*) (unsigned long int)) (addr)) (GLRO(dl_hwcap));\n+  return ((ElfW(Addr) (*) (uint64_t)) (addr))\n+\t   (GLRO(dl_hwcap) & GET_HWCAP_MASK());\n }\n \n static inline void\ndiff --git a/sysdeps/unix/sysv/linux/aarch64/dl-procinfo.h b/sysdeps/unix/sysv/linux/aarch64/dl-procinfo.h\nindex 0333a18..19637f6 100644\n--- a/sysdeps/unix/sysv/linux/aarch64/dl-procinfo.h\n+++ b/sysdeps/unix/sysv/linux/aarch64/dl-procinfo.h\n@@ -33,9 +33,15 @@\n /* Offset of the last bit allocated in HWCAP.  */\n #define _DL_HWCAP_LAST 15\n \n-/* HWCAP_CPUID should be available by default to influence IFUNC as well as\n-   library search.  */\n-#define HWCAP_IMPORTANT HWCAP_CPUID\n+/* HWCAP_IMPORTANT is used to set the default value of hwcap_mask, we do not\n+   want to mask out any HWCAP values because then we could not use them in\n+   an IFUNC selector.  */\n+#define HWCAP_IMPORTANT (HWCAP_FP | HWCAP_ASIMD | HWCAP_EVTSTRM | HWCAP_AES \\\n+\t\t\t | HWCAP_PMULL | HWCAP_SHA1 | HWCAP_SHA2 | HWCAP_CRC32 \\\n+\t\t\t | HWCAP_ATOMICS | HWCAP_FPHP | HWCAP_ASIMDHP \\\n+\t\t         | HWCAP_CPUID | HWCAP_ASIMDRDM | HWCAP_JSCVT \\\n+\t\t\t | HWCAP_FCMA | HWCAP_LRCPC)\n+\n \n static inline const char *\n __attribute__ ((unused))\n","prefixes":["aarch64"]}