From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 59265 invoked by alias); 18 Aug 2017 11:06:50 -0000 Mailing-List: contact elfutils-devel-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Post: List-Help: List-Subscribe: Sender: elfutils-devel-owner@sourceware.org Received: (qmail 55301 invoked by uid 89); 18 Aug 2017 11:06:47 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Checked: by ClamAV 0.99.2 on sourceware.org X-Virus-Found: No X-Spam-SWARE-Status: No, score=-25.8 required=5.0 tests=AWL,BAYES_00,GIT_PATCH_0,GIT_PATCH_1,GIT_PATCH_2,GIT_PATCH_3,RCVD_IN_DNSWL_NONE,SPF_HELO_PASS,SPF_PASS autolearn=ham version=3.3.2 spammy=complains, employ X-Spam-Status: No, score=-25.8 required=5.0 tests=AWL,BAYES_00,GIT_PATCH_0,GIT_PATCH_1,GIT_PATCH_2,GIT_PATCH_3,RCVD_IN_DNSWL_NONE,SPF_HELO_PASS,SPF_PASS autolearn=ham version=3.3.2 X-Spam-Checker-Version: SpamAssassin 3.3.2 (2011-06-06) on sourceware.org X-Spam-Level: X-HELO: EUR01-DB5-obe.outbound.protection.outlook.com Received: from mail-db5eur01on0110.outbound.protection.outlook.com (HELO EUR01-DB5-obe.outbound.protection.outlook.com) (104.47.2.110) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Fri, 18 Aug 2017 11:06:45 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qtcompany.onmicrosoft.com; s=selector1-qt-io; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=L0AbUEPLnhqFElZ+l+67jEdrPvn2jysSywLC7b3e6jw=; b=HLGNPVbXstotMADz693ICJVRGVVMCJzbQnWHGpzUMKc+sYhnPJQ8Nu8G1YIZX+TWh67HYBqDzKQNh8QUo1/Pb0P/+lpcAaeJFt7GRO6QahIRNWofwFhGnXWvlWQHmYE49JcKluWZ6NZcbf4esk/X2j3rCaqzdU1cUIzgRraqLOM= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=ulf.hermann@qt.io; Received: from [10.9.78.66] (62.220.2.194) by HE1PR0201MB1834.eurprd02.prod.outlook.com (2603:10a6:3:b::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1362.18; Fri, 18 Aug 2017 11:06:40 +0000 From: Ulf Hermann Subject: [PATCH v2] Check if gcc complains about __attribute__ (visibility(..)) To: elfutils-devel@sourceware.org Message-ID: <5e89ee5d-ecdf-1e3a-3e67-0d617b524da6@qt.io> Date: Fri, 18 Aug 2017 11:06:00 -0000 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.2.1 MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: 7bit X-Originating-IP: [62.220.2.194] X-ClientProxiedBy: VI1P189CA0005.EURP189.PROD.OUTLOOK.COM (2603:10a6:802:2a::18) To HE1PR0201MB1834.eurprd02.prod.outlook.com (2603:10a6:3:b::12) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: b2603cc8-47e5-497a-7176-08d4e62933fa X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:(300000500095)(300135000095)(300000501095)(300135300095)(22001)(300000502095)(300135100095)(2017030254152)(300000503095)(300135400095)(201703131423075)(201703031133081)(201702281549075)(300000504095)(300135200095)(300000505095)(300135600095)(300000506095)(300135500095);SRVR:HE1PR0201MB1834; X-Microsoft-Exchange-Diagnostics: 1;HE1PR0201MB1834;3:lnBxyECBKOfUhqdLP45pgSc9e4BcxSy5wAJfwFFEsQejlD8k5Lt9CLTU+zSEmA4VJz7LshPL8H/5aKxh6psQKdPr5Oh7oQ+gHYP3jJesPkOicW596Ryp3VpkZ5DzyX/sIS0I3M0AjIFgW/ukDjCMZlFE1mLahVGetfa6zu349YCFUmeSauFAySjDOjLatDkqXCaMYdysJ+zCArmQIiMZESitdo0NLSYfKS6VwQJvWit0i0H0L3bh27EDGNLEjjQg;25:8smv74sGZz8t8pMH5z6yHtXkBCS5DaT6bLe+BsVy6hiv222+pQU+uwEcK6w7HPSoJvpM3uyc5WtiGV7iDdbPjbsX3iS+dmdfCKTXYwN+H8cpDSc5IXzX8TKgbLgQ4iDn1kUum3BBkYg3VsYTbdVnPVFgRq9hGMiO5ZOCydXml8dOtGmWrhgWlMjz4PhtuLtOCK84ldUKAOoa3h5p/C+VkgN5POd6wvokLAj7jatryXGhUZJf3qWbGgST3II0GMnmlhvOhJF1RvuTmHDqOdXLraK/ASyE1sYxGJPrGKRWOR7gjzjVU0NbGAhRXGl72p4ceWvYJ7GwLD1XbFVvYkk5gQ==;31:GrTLqfTmk0Yv78XRzcxMYf4LmSj/bD4D20vFjqdDyXQeF166jFggaKdN8yvVNGavaWRq7Ns58v5Yv+qCgqbGAlZyUuoq70AqtFBK2FLRiAYVgUydZeLRElyc14k4nItVCK5oNpo9+9hgxFowSZjfHGNdOwD2+HRcI0EjZP98KAMcIopLlTuu7MHlvUsZdmmNszW0a622J3uwgDT5umsTLMHdbpTa1YEYN7rqEQy0B9Q= X-MS-TrafficTypeDiagnostic: HE1PR0201MB1834: X-Microsoft-Exchange-Diagnostics: 1;HE1PR0201MB1834;20:KaATR+Z8hz7HOmiF9uYUWuIOT6Wi1r9lDNUFzjFCfj+h2mfERSlYb+c1sBZHfJp3InrUNPwc/X2iVSyYoclBmqg2/UCVA9batiEymQjK5SW8GLjMYRJixGGxPdaskUZhw0pW+reuHcYY4MLByZB5yBHBCKWcuvoXsMKTD+mKfa1SDXuhpI9kjX828GuWCk/3vgwNiPeRxF7wqh9oa4MUhW8QjjrdXOLHHijYpGy68CncBOt9+XI/LZaQVK6bxFXOFMXGnzEP7XIaGdvCMoKzhDIiL39TY2pQ3mGAJoJDpZjdZ6FmjXHWuQVxPqTC2qtkL1yvqkZiNNpkZZVoa7Tr76FsvxD6VexJC5L7tElO2doDF39j5YLyL00AOQZBummji2w+W4EwtkpkezYPVjOS/jBULwqkx36qcyh10J24Ilx86MoSazoS3ZFD5MmDdmD4s6qz3rJ7iPamx8TczqCMLIsNrwF+v+XYihvI40qgTUBXwZuUjaBzCea1ayyTyVT6;4:QedJ78+7dwyLXorkjqJee08YxzinS18j632ganVcTi1MPAI+GinznGHMTwGahK7JMc0RQH/TgbVQ+eYQnra/qQSJdZU95GB6kYs8ObEz1gIZm55ik6I/HdEFYPRP/jkjy7RnOmtIOldPqVoL0Rz3vJunTyC2QIXxkhcGjWwdHIu6/6uGgWC5SFk6Gw/R0MUnHbSKy55rHGJglozWHoq4a7hvAhFdFSIGsXszzcSGXSrKvA45QTWhidvwdmoPG0ON X-Exchange-Antispam-Report-Test: UriScan:; X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(100000700101)(100105000095)(100000701101)(100105300095)(100000702101)(100105100095)(6040450)(601004)(2401047)(8121501046)(5005006)(3002001)(93006095)(93001095)(100000703101)(100105400095)(10201501046)(6041248)(20161123562025)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(20161123555025)(20161123564025)(20161123560025)(20161123558100)(6072148)(201708071742011)(100000704101)(100105200095)(100000705101)(100105500095);SRVR:HE1PR0201MB1834;BCL:0;PCL:0;RULEID:(100000800101)(100110000095)(100000801101)(100110300095)(100000802101)(100110100095)(100000803101)(100110400095)(100000804101)(100110200095)(100000805101)(100110500095);SRVR:HE1PR0201MB1834; X-Forefront-PRVS: 040359335D X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10019020)(4630300001)(7370300001)(6049001)(6009001)(39830400002)(54534003)(377424004)(189002)(199003)(106356001)(23676002)(478600001)(101416001)(189998001)(50466002)(97736004)(25786009)(68736007)(4001350100001)(64126003)(105586002)(6666003)(575784001)(110136004)(31696002)(6486002)(65826007)(65806001)(77096006)(230700001)(86362001)(65956001)(7736002)(47776003)(31686004)(305945005)(54356999)(50986999)(33646002)(7350300001)(66066001)(6116002)(3846002)(74482002)(5660300001)(2361001)(2351001)(6916009)(42186005)(81166006)(8676002)(81156014)(36756003)(2906002)(83506001)(53936002);DIR:OUT;SFP:1102;SCL:1;SRVR:HE1PR0201MB1834;H:[10.9.78.66];FPR:;SPF:None;PTR:InfoNoRecords;MX:1;A:1;LANG:en; Received-SPF: None (protection.outlook.com: qt.io does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?utf-8?B?MTtIRTFQUjAyMDFNQjE4MzQ7MjM6QnVyeVZmUVJBdXJKY3lrZDlBcXE4NUFN?= =?utf-8?B?dnIrb3BsVk5RUHBXOE9hTElqOTE4dUlUcnQwdzNJZXNabk94TTVkZUJycW5V?= =?utf-8?B?aFVvckJqcmtRUkc2TjNMdTFEenlhNGVwTmpoZUJFN0VUUmREZVJaSmIzcjdR?= =?utf-8?B?Mm1xQnFYK0c2ZlpyYjlOTnphZzR3U0dRdVFBY3dwMjUrVzFBbjJ6MDZWWWdj?= =?utf-8?B?WmxwMW05eFZnWDRtSUhjaUNVSXdSc2FmcVZpWTI1UlRONzQxZy9HcWllejlv?= =?utf-8?B?c1h6Ykl0QVVnYmYyN3BuOGNqRjR0aGdPZW91OTVtbEs3Rmhuc1VlekFqakFO?= =?utf-8?B?NXhxWE54TXpJeVdGY3pzeGtCN2I1eGxEbVFiZ2l0ZVNkZWxjNFFkcUhYT1FP?= =?utf-8?B?ODNhNHJxZzI4OVprVXZBMit6MVJmeU1sMlpRMHUvQm1Sd1N6MmFMRXY0RGsy?= =?utf-8?B?VzF5VmlTNEFEc05VeDIzalhrdDQwNVlsaXNYTjd5Mm5JV2tmdnAyRVZoS3FR?= =?utf-8?B?Vk9LN0JTTzhXSTM2dGRlNU5MaGtKeVRMbXpvWWpuc0F4WnErSEdaaFREcHls?= =?utf-8?B?THY1ZTh0UDczdndaNXI1cm5USWpJR0JCNUpBaUpIN1NuUENraDcrbmwvOE9n?= =?utf-8?B?TGtaYlBnM1hnZXNneWRKZXZDZFpTSHgzSVQ2RWt1UTBSSGptZWlac3RrWElJ?= =?utf-8?B?WnQyT0lYcTdacjNMNmVQdy8yQ0VhSDNOOVE3MFhWN2gxcm93ZG1ORzhRaHdD?= =?utf-8?B?ZEh5UWdpbTdRWlRFT1lvSjJRWmZob3JkRVVlR21uREFHNnFJKy9PWlU2YnBB?= =?utf-8?B?c2ltaHR6R2pHTVZRUzJ0SVV5enJqNUgzMTh1Uk96SFFOaC85cW9Mbmh6ZXla?= =?utf-8?B?WWMvUW55ZklPdG51RE0xL3d5SGM0V2pEbVdOMEN3RFRaUTNRZk5LejJLVm90?= =?utf-8?B?Z1VzbGhONFU0TEpCNHhxaVJZT0QrMUxZbFFlNmczMzl3alAzNWlNVnkxK3k2?= =?utf-8?B?a0tEek1QbldMQy83bTdOK1cvV05uSUJNdlVZQ2lFMnBnNU9hekpPVnVra1B6?= =?utf-8?B?SlgvSU9Hb25nSXZxKzQyMTZFT0NyM29wa2x1QUFsSHVkUFAwVUdKdFFKVGIv?= =?utf-8?B?c2pLd0ovRDlmTGx4cHZDaytsRlpWSWZrRTZGcWpoa2Y4NlFITmlVV2lnbU5E?= =?utf-8?B?SDh0cjVTQWJDUkhJcHhyc1VZMkFKa1dtUHhxZGZxeGZabXYxSTdNRGU2SkF0?= =?utf-8?B?eHIvWTVwSGh2VDZBQVF5TndmSTdVbWJiQURraEpDekVySGNLOEhvTFNUaUwy?= =?utf-8?B?dWdCa0llQWJUQUdLQVQvNjMwZmE5aWU4WlJ6bDk5cXpXb0hSWkxTbEVvd0l2?= =?utf-8?B?V29pcXhwRlQ0Tk4rRWJ1d0RvaVpWVlh2K20xY2lENzdxMk5TakRzMXV0ajRH?= =?utf-8?B?MWJMY25mSmg0SHRUTlNXdU16MU1pc1pmM1VUTXBSK3BCMDJUVHFnazNsRkJo?= =?utf-8?B?QS9zbkFpRVh0TGozSUJqVXM2UzNUL0RucVo4M0tkK0NjVE42ZXZsUmZlZHYx?= =?utf-8?B?TGxHZFpjZE4rNnltNGRkTWJPSjlpbVNQbUJKRmhpTWVpQk5hSWVhU3pIUUs2?= =?utf-8?B?N2ZUbTB4N3RscmxYWVc1M1pOSjB0eVRONExyZlF4M3l6dTJXRm0zN2xoZlFE?= =?utf-8?B?czY5TEtCb0g4Q3k2U3pJRXBmL1RVL3JZd0ZOL2NBVExQMG1COFhvN1R4djJ5?= =?utf-8?B?KzhLYmU3bjBta2lTVjZDRkx0ZUJHWDZ6aHBMbmQrQzVSQ3lyRjQ0RiszTUFR?= =?utf-8?B?NEFUMk1WcVJoaVY1NWVTamRxZVdWaStIMkpUR3lrd3p1OVZGZz09?= X-Microsoft-Exchange-Diagnostics: 1;HE1PR0201MB1834;6:4Wc/Wn6GGKyl7AyBOI+cpMnS5v5FvDVBzi0qHvUj4HPUMMA2VgCydeF5zSJfKonrCKR0Ck6QsqsIjvLRb9+5TCbXC3Ahs5fS12tqZpj0hsn3xnwU3EvlsaIOg5FlPf/LjSZs87Ln77IccgSqfIeZe7G7zfIj+b61cJa4zqMqjj+2R+x+skiyb52O1o6zLnu+lEPgI6rJEEq1riUcHMxBQmHrt4vFBqc5qsZBcbvrYcfiOqLeWTYoNwe+nZiLn1gjDI6sCxnc1U+R8pepXxZHo72+YzU0mt3AtTGQAJTuHQiwtMmuPjwqFCJDCdkJR5G04b1Sem2Ho6OApezvDHt7wQ==;5:vlO1uQwsnTTicoSDzociUG83vI6w0NsJEEp4IHjvXe7uk2o6Nd7xo6BtDyWuHnNCesBFnImNWHJqvZ4QYIOqTRN+YfRtgPwOphmTgS5Ze+M6fQ1U2yxPLKorVPoGUISFETRV/8LoKqIU5UPoMaqUSA==;24:xSKFMygGUjxwaNfm39nJEpVePP1GX1vptWR8aX/eHDnMborBImZWKxP2kbqIVMssKQi1FhMwPiqAszdv/9yhiGmFzsmeLhimSvyOwvDsv8M=;7:RJhkpiz1/cBE/zojxAN82rsxR7aWNztpzUX0jeEM+0x+hC+7QY39cUWQsiN75IdcE+lhJSWGWS00ijF4H3lMhyNi4T5YdbP41lJK3MoHzBERMPSSsSTw4KIyQvjKxCv+d/gIdB3OD6A1GzGzcF2+MROtAAN2OPaYJbhMtEhRK8cvt8fZvdP0piNB6PXKkqEO4frXeF4A+SSbh0tJ+957640mJaNmtCAR2u3R/k6WvPE= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: qt.io X-MS-Exchange-CrossTenant-OriginalArrivalTime: 18 Aug 2017 11:06:40.4462 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: HE1PR0201MB1834 X-IsSubscribed: yes X-SW-Source: 2017-q3/txt/msg00078.txt.bz2 If so, define attribute_hidden to be empty. Also, use attribute_hidden in all places where we hide symbols. If this attribute is missing, it simply means that we cannot hide private symbols in the binary using attributes. This disables some optimizations and may increase the risk of symbol name clashes with other libraries, but is not fatal. However, we still employ linker version scripts to explicitly define the exported symbols. This serves much of the same purpose. Also, as all our symbols are prefixed with the library name, and "__" for private ones, the chance of clashes is low anyway. (I'm reposting this patch, rebased and with extended commit message. v1 was apparently not accepted because the patch's implications were misunderstood.) Signed-off-by: Ulf Hermann --- ChangeLog | 5 +++++ configure.ac | 16 ++++++++++++++++ lib/ChangeLog | 5 +++++ lib/eu-config.h | 4 ++++ libdw/ChangeLog | 5 +++++ libdw/libdwP.h | 2 +- libdw/libdw_alloc.c | 2 +- libelf/ChangeLog | 4 ++++ libelf/libelfP.h | 2 +- 9 files changed, 42 insertions(+), 3 deletions(-) diff --git a/ChangeLog b/ChangeLog index 62146227..84fd2555 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,10 @@ 2017-04-27 Ulf Hermann + * configure.ac: Check if the compiler supports + __attribute__((visibility(...))). + +2017-04-27 Ulf Hermann + * configure.ac: Check if -fPIC, -fPIE, -Wl,-z,defs, and -Wl,-z,relro are supported by the compiler. diff --git a/configure.ac b/configure.ac index e6e3b675..c4fc7e3d 100644 --- a/configure.ac +++ b/configure.ac @@ -127,6 +127,22 @@ CFLAGS="$old_CFLAGS"]) AS_IF([test "x$ac_cv_c99" != xyes], AC_MSG_ERROR([gcc with GNU99 support required])) +AC_CACHE_CHECK([whether gcc supports __attribute__((visibility()))], + ac_cv_visibility, [dnl +save_CFLAGS="$CFLAGS" +CFLAGS="$save_CFLAGS -Werror" +AC_COMPILE_IFELSE([AC_LANG_SOURCE([dnl +int __attribute__((visibility("hidden"))) +foo (int a) +{ + return a; +}])], ac_cv_visibility=yes, ac_cv_visibility=no) +CFLAGS="$save_CFLAGS"]) +if test "$ac_cv_visibility" = "yes"; then + AC_DEFINE([HAVE_VISIBILITY], [1], + [Defined if __attribute__((visibility())) is supported]) +fi + AC_CACHE_CHECK([whether gcc supports -fPIC], ac_cv_fpic, [dnl save_CFLAGS="$CFLAGS" CFLAGS="$save_CFLAGS -fPIC -Werror" diff --git a/lib/ChangeLog b/lib/ChangeLog index 67ef2792..23c0f41b 100644 --- a/lib/ChangeLog +++ b/lib/ChangeLog @@ -1,5 +1,10 @@ 2017-04-27 Ulf Hermann + * eu-config.h: Define attribute_hidden to be empty if the compiler + doesn't support it. + +2017-04-27 Ulf Hermann + * Makefile.am: Use fpic_CFLAGS. 2017-07-18 Mark Wielaard diff --git a/lib/eu-config.h b/lib/eu-config.h index 400cdc6e..07098282 100644 --- a/lib/eu-config.h +++ b/lib/eu-config.h @@ -68,8 +68,12 @@ #define internal_strong_alias(name, aliasname) \ extern __typeof (name) aliasname __attribute__ ((alias (#name))) internal_function; +#ifdef HAVE_VISIBILITY #define attribute_hidden \ __attribute__ ((visibility ("hidden"))) +#else +#define attribute_hidden /* empty */ +#endif /* Define ALLOW_UNALIGNED if the architecture allows operations on unaligned memory locations. */ diff --git a/libdw/ChangeLog b/libdw/ChangeLog index 67d7799d..c13344af 100644 --- a/libdw/ChangeLog +++ b/libdw/ChangeLog @@ -1,5 +1,10 @@ 2017-02-27 Ulf Hermann + * libdwP.h: Use attribute_hidden. + * libdw_alloc.c: Likewise. + +2017-02-27 Ulf Hermann + * Makefile.am: Use fpic_CFLAGS and dso_LDFLAGS. 2017-07-26 Mark Wielaard diff --git a/libdw/libdwP.h b/libdw/libdwP.h index 6ad322c1..78c00132 100644 --- a/libdw/libdwP.h +++ b/libdw/libdwP.h @@ -434,7 +434,7 @@ extern void *__libdw_allocate (Dwarf *dbg, size_t minsize, size_t align) __attribute__ ((__malloc__)) __nonnull_attribute__ (1); /* Default OOM handler. */ -extern void __libdw_oom (void) __attribute ((noreturn, visibility ("hidden"))); +extern void __libdw_oom (void) __attribute ((noreturn)) attribute_hidden; /* Allocate the internal data for a unit not seen before. */ extern struct Dwarf_CU *__libdw_intern_next_unit (Dwarf *dbg, bool debug_types) diff --git a/libdw/libdw_alloc.c b/libdw/libdw_alloc.c index 28a8cf6e..d6af23a2 100644 --- a/libdw/libdw_alloc.c +++ b/libdw/libdw_alloc.c @@ -70,7 +70,7 @@ dwarf_new_oom_handler (Dwarf *dbg, Dwarf_OOM handler) void -__attribute ((noreturn, visibility ("hidden"))) +__attribute ((noreturn)) attribute_hidden __libdw_oom (void) { while (1) diff --git a/libelf/ChangeLog b/libelf/ChangeLog index a0736467..9793d068 100644 --- a/libelf/ChangeLog +++ b/libelf/ChangeLog @@ -1,5 +1,9 @@ 2017-04-27 Ulf Hermann + * libelfP.h: Use attribute_hidden. + +2017-04-27 Ulf Hermann + * Makefile.am: Use fpic_CFLAGS and dso_LDFLAGS. 2017-08-15 Mark Wielaard diff --git a/libelf/libelfP.h b/libelf/libelfP.h index 7ee6625a..a4a0a3a9 100644 --- a/libelf/libelfP.h +++ b/libelf/libelfP.h @@ -578,7 +578,7 @@ extern Elf_Data *__elf64_xlatetof_internal (Elf_Data *__dest, extern unsigned int __elf_version_internal (unsigned int __version) attribute_hidden; extern unsigned long int __elf_hash_internal (const char *__string) - __attribute__ ((__pure__, visibility ("hidden"))); + __attribute__ ((__pure__)) attribute_hidden; extern long int __elf32_checksum_internal (Elf *__elf) attribute_hidden; extern long int __elf64_checksum_internal (Elf *__elf) attribute_hidden; -- 2.11.0