From patchwork Thu Feb 9 00:02:12 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Steve Ellcey X-Patchwork-Id: 19187 Received: (qmail 78330 invoked by alias); 9 Feb 2017 00:02:33 -0000 Mailing-List: contact libc-alpha-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: libc-alpha-owner@sourceware.org Delivered-To: mailing list libc-alpha@sourceware.org Received: (qmail 78309 invoked by uid 89); 9 Feb 2017 00:02:32 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-1.9 required=5.0 tests=AWL, BAYES_00, RCVD_IN_DNSWL_NONE, SPF_HELO_PASS autolearn=ham version=3.3.2 spammy=mrs X-HELO: NAM01-BN3-obe.outbound.protection.outlook.com Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=Steve.Ellcey@cavium.com; Message-ID: <1486598532.2866.66.camel@caviumnetworks.com> Subject: Re: [PATCH] Add ifunc memcpy and memmove for aarch64 From: Steve Ellcey To: Siddhesh Poyarekar , Adhemerval Zanella , Wilco Dijkstra CC: "libc-alpha@sourceware.org" , nd Date: Wed, 8 Feb 2017 16:02:12 -0800 In-Reply-To: <805d8c52-1397-ddd0-71cc-93d019f8a7f2@gotplt.org> References: <1486509609.2866.59.camel@caviumnetworks.com> <805d8c52-1397-ddd0-71cc-93d019f8a7f2@gotplt.org> MIME-Version: 1.0 X-ClientProxiedBy: MWHPR1201CA0016.namprd12.prod.outlook.com (10.174.253.26) To SN2PR0701MB1072.namprd07.prod.outlook.com (10.160.59.18) X-MS-Office365-Filtering-Correlation-Id: 74947e66-fc15-4600-8ba7-08d4507ee918 X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(22001); SRVR:SN2PR0701MB1072; X-Microsoft-Exchange-Diagnostics: 1; SN2PR0701MB1072; 3:Y82cH86rCjxnLj0V/ke6jwyLhduswIjBZ9Dbphe7fLpzbLq5t6HBPNAJ/62YIY9oKqFANB2oUhvFx/+w0dGj80jAbTWzrR3gPfhXnBwlp4Sl+tlDVFqtdQsahLacBSdsT9cqYcAe8B6gpr6sffTY60LYD1ZFKmz/Jl/j65vUfQaoi1biQTx57PLNxGkkBu0FaqCUO6nX0C3Aebd+b4FVFqe15Uw8xB01ysCdg4b3d37l7u/8sfpr8H9IzexlzCDiFJU9HpZrXd9JkMAWo0eKFA==; 25:Dt8nMFTPwi5u/wfOIc1hOQzlsNo6xeo/adlmDBZsgs+ngB0b1JzbfVzf3phFdPQiiekIhjMJcKX1e9SFYGX9SPrED2zwaObghL8uj1I4Xpkmil3s1M3Oz6MOscBvGlOA9RNbDjh0hrWT++g5y8uz4sv6mf1spz4IBuAz6aSXsa1w2/10bx2z93pfOqIsa5wJp60G7eVPD3KhvrO8Re0h53Nx91PVQ7iCcZhgL7cvWWEv8TJFTofDDuakUXkTG8I202Wr6/BdduH9XUXc6AyVINDdiH468R/YWFNCwz+ambWGAIQajmxXF94FsJ6m1usvfvO6XdYPxtSA6HvKxg0G0Rcr19ngVrGHYuT6FQySkSkWIC4qDR42fJo+WnAqeEtZLTZSWQnmBSpn5FmvBiL6/i2MiqqDfOVC6fwaXdV3dCDMiYgJ6f1ZOtJrw50kC8UkdXNuCyAvlYPA9NQ721V0ghdoXONsvypHohTXKhCFEkqKbyHuUKdsCns0fxehUJQr X-Microsoft-Exchange-Diagnostics: 1; SN2PR0701MB1072; 31:vdAwVD6v3Cz8ye1NVvMYGE2cP1C1BinyC9M6shoAqzrb8avcC7T+7gDgnZ7iM8gTqZwjWzNw3VgDHF9lf+eCgZMUrsih2WQVLhapF8mDrbpm1qtziJ2XcxE9t0Swc17BspmgYPkdIFxgGB+E9TfnSGImM7xPILt5oYfw051r9ggPdtzqNHsqBcP+wbH8ticPyvkYJDw96Z5nHkm/4GN5XVBzga1yo3ZIUkiEV3A1/S2qqqjvA8rp4IS6soHPLX/mM07oBbWEgueJEdp1rt9tWyKyc0+BG6JHv8Yk1IOd9YJAXj8cIIZzbLBopPCNJVnQqNNqMqcKKjEixG7rXI8QJw== X-Microsoft-Exchange-Diagnostics: 1; SN2PR0701MB1072; 20:Re38AfMNg+mKGVGnqVWhjWroBFfDMufkU+6Sx7p5oom/+OlaA4tcYbcVvD/4m+12W3B7P7HZk3vYLrPF0O7zfrzjNixEn06ueZpilvpfPauZtUqg4Ra4G3wyjTZTGuyr0jt6YlpZWj7E6KIOl5j9HM5VAw8B8FadXFoslWGj0IkHFcwUneXjqouxt+/hxrk443J+cATs7aQooq3Awy3E8+eshg1BPznCi7i97S6EYu8B+xUyQmJhJCzUV3vxn/K/zr6rTO3T/Vb0ZjWWNUFX0tub6q55wpOLws8/HF2p2KZeTMoKJNoaQsu2sJDj4gBXAjWLpKCMk975oUpJan/X1KzTw8wliRU5ek/7I24QvCzx1hiydwvQvYh0feNxEHNisSsSTzfDAKAoxVwL7MegiLeTl1aRjjtTINce/l2c1vZOkdLkxE+HiPep8oyGIdm9z37IQeAEBwYXuQBWkfcVZ8bCwraXjSsFkKePD+VY1cGAUImQfakcg3TCAKXUh52SQowbiaUBe/P7puDc0QtsVe3GYcljVDb2j2eNIlEdCbSlm0kyjCIjBhm1ragfXl0iRXcNdVyQ/0vsrzDucvAK2Dba19OtR791sQMDhCe9xdw= X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(102415395)(6040375)(601004)(2401047)(8121501046)(2017020702029)(20170203043)(5005006)(10201501046)(3002001)(6041248)(20161123558025)(20161123560025)(20161123562025)(20161123555025)(20161123564025)(6072148); SRVR:SN2PR0701MB1072; BCL:0; PCL:0; RULEID:; SRVR:SN2PR0701MB1072; X-Microsoft-Exchange-Diagnostics: 1; SN2PR0701MB1072; 4:V0s+DJyT5VDZ1Z90SQRM1wA8kTKMX8WSSPzXDVHYioWCfrqPxsiJ8CbCYpLuuN6W6H9L6jTb3ASY3hjUvlCniggCV+fneT6ikfBYl7X/su5vr+33tebfOE/240uYpTzV0fHJM9UdHOYKpOr9/F6MI+eg93kc3GKHDq2duFS+7nW9AJDSn0O0Kq+Ow5XMmw/zRG6o6PVd+eLlOTZlC0PHkd0bi/f8MHR7VlgBrNVZ+YOwYQWNM/Lz07ZSNeEtb8/xs54FR5PNz7Z//JE4VXFmgGnntQpoZE4CIJVg3ufa+mvJ9Xh6Zo5ltRr8R6Vzn/QAf9SCUtt7iKf6Y/wTNgTnt8UxetWtGbuK5pISIn5tgd1TbJAaL5fQG6BTbIzA7SfuxzMxhXbSYaCuNyBU1r5cMVwDUC3sGtZgeAqVzzm2hDFUgYKePH1Xk+rI39k/w/RVfHOYXmGHuR7W4Dj7mJg+CrEN6eeLaewb/zUn9RsRi9kIUAf5wxgQPrNGeCpviLXmmHPx7YHGTdoTOpfKCky5XAm6/Ve6Qez07jN5ZeZP9TwfT8FQ07i6cdeE33fNIUX+TUIbe+mvnRi9E2mr+twCPp3XDf6lBDsy/NiM72LX+ThO5q4i+Suq4fl5coRXid4FO+aFkUyZbK2g07fvdpUfD4ZLIkEquSVz1mqm+q2k9VryHsl6W2LfASrQWgWZXPxb X-Forefront-PRVS: 02135EB356 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(4630300001)(6009001)(7916002)(39450400003)(377424004)(189002)(199003)(54534003)(24454002)(5890100001)(568964002)(81166006)(81156014)(76176999)(8676002)(4610100001)(69596002)(101416001)(7736002)(6506006)(305945005)(25786008)(512874002)(5000100001)(92566002)(6512007)(42186005)(53416004)(2476003)(66066001)(38730400002)(6486002)(106356001)(54906002)(105586002)(2906002)(6116002)(33646002)(93886004)(4326007)(189998001)(2950100002)(68736007)(36756003)(97736004)(84326002)(103116003)(5660300001)(6666003)(6246003)(229853002)(50986999)(42882006)(3846002)(53936002)(50226002)(99106002); DIR:OUT; SFP:1101; SCL:1; SRVR:SN2PR0701MB1072; H:sellcey-dt.caveonetworks.com; FPR:; SPF:None; PTR:InfoNoRecords; MX:1; A:1; LANG:en; Received-SPF: None (protection.outlook.com: cavium.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; SN2PR0701MB1072; 23:VH+ciKvVHz5rN3V2cE0Vvec0Pt2xumdwmWCUXfw?= =?us-ascii?Q?RPDgyU9K0nzowHk0+IMvXQG4U6vtAGAMi5aLok75cHFLcXYF29Pxi9ZlAsIz?= =?us-ascii?Q?V/ZGxEaCriVbFo/++uXfPJaFwmN2TVv1AtAY3806eBfKiKGP0Cibe/KKEV7m?= =?us-ascii?Q?+xOCK04flerNTgeG1eKPFTXl8Q1vwSshqcB94soTW4H0MMyfzWPPAIMCJZ8t?= =?us-ascii?Q?NkiTfCqGvj8sppa78SwHtxtF0Kuin3+bqk9cRq/DUwtK0X+XIkKSIe9QwQAh?= =?us-ascii?Q?YJW/pwhfBavM8aAYmclZEg9m+oHnfMrWj2QjNb+mAHHzMe1hqAkGSBFp7b1+?= =?us-ascii?Q?p/o4YLJFnbsuWMNkg+LDUhgL4ipUrRp2LY31SS5u8gQa/KL0Pqz/aeMqhgLv?= =?us-ascii?Q?jOpY6tLtzhn4m8Vs90gXL5XvTsHNteSKy85OYQF0kWrSfQYaWk/TxDpIAEeD?= =?us-ascii?Q?u4UyQnSGCvKfJ+I9PTNK3ujUlDq4ltpDnadK46Qgner6dUJ5tKehk76OY9mS?= =?us-ascii?Q?/XLLL8WPpfGp0DhUiKO8wRrgdEMd+4CjGx19O7kWOUT/K7g1iJDpW+OdsnqA?= =?us-ascii?Q?ZwHDmbvBXCE0M/Mx62AuyxnRVjPfxkLsQGYaBWh7WrzgyTwVJXoTVXaaaXac?= =?us-ascii?Q?F9CGBMZH4NhJuQZrTFC8rqHOptUfeIefrSFu6j0pdN7a27eJ5sug/QuL+VCd?= =?us-ascii?Q?vBwYxf6riEAGr/IWzUnbwARdjRzG64JCDBBC+o/b4hL+KREF8iuNggwnIaQz?= =?us-ascii?Q?YOML6P4ht8Et1iHObNM2MSoL2rGx8jrV+fi4Xn/OBLhyUg1FBb3k+BU+q2Kl?= =?us-ascii?Q?s555/Vf36ga82o5YfLnTtlKd4Wo49p/1JYw5cmCc7MDQ7z7WQOne8S4xGv6i?= =?us-ascii?Q?VHJdlOVeHwN5fRsDnoeFx7/vOJpa+zR+IrOTfEW73rZKUQFLJE/zX1xw6xfq?= =?us-ascii?Q?O6HCJzI1pgKRVHP5mptXALq2LjNGfXLQw0xf762Z65/zMDh8Umd/5llM3G6J?= =?us-ascii?Q?kFf9L7kZ/M8IGlz6eMcVtO1q3w4Ps9bT8ufHVW1InQZ07GxsLjWT1Zvfdc/B?= =?us-ascii?Q?ShdBR3jNu9NSoMAuBsQ7GkRgJHncgYSww3XGvvOmgoHa3Hx47ULuD6HlIHUF?= =?us-ascii?Q?EhJVWnmgOUyavNuuOgxmTFlMNyqnV3VEhQwQ2ZleRkn9X2syNbhbrGRkEA0A?= =?us-ascii?Q?Y4xX+Sns7wnxiKROA0GlYvBZ1SC7kHF67QgX+3VRHI+K+AC3JnuM/RRzApFa?= =?us-ascii?Q?5lMDKTd9Z2rB+TrXRqIsNreT1YtJzklWa+Wbyg/Q/ULCMMxBixxhMcppvXl8?= =?us-ascii?Q?TN6NtMIMDa/XAF9HPosVtEvRXlb9E0LzpOaImkFyBersdUNhux2hNEoOV4JH?= =?us-ascii?Q?ChHlg1w=3D=3D?= X-Microsoft-Exchange-Diagnostics: 1; SN2PR0701MB1072; 6:nNxN3YG8jhJ8NVX/GUm///uQiz7qPUrsbm8jwaAfPXHnxRDFNIZl5H9ZhWwvK0klDRcASZIVHKx6x6DUI0QlCv6jnVfp7It4OFUnQ+AGpbN9rjMJ2ZDpF3wileW6/AokeyyR6Ks/d7cjHe0idwxXg9SVKJktHR+Ye3sqRy21mmA18xdf6W4LDDZY9r70uzexCQ4TUA9g148OHf0CO8CnVC/S6cg9edl6DWvEDooJ4o4qPl5IR/HN7A2jCwJptoKBHMoXP2vj8v7/HDD9BbcI3zyvWjq3BMpfD8LoiUQSDFBpQ60gqnzbu0XB9psUAoRgeTHHA9CyZL4Rux1qVNk+WW/LJoe6WgGYu0vD5QN6yMgpiv24npdkCScWL1t5x8gvk7DidE/aCvpu/0cLbiTjxQ==; 5:kkHTsF5CrnJ3YEd0syfCCn0RSCYbsIFk/QRIR9KSz3LIAWqVniLb64ay977y+jK88nYxkxLdK8ZJ6WY/rLJQKuXwONQJ9TAEojgcyDzMBDp4/7/oylpaH1KIjzcWogMWOx3RnCAHUOYO/opYxZxAcA==; 24:BvQbEmEDKt56ygO5O3nfrFjRIY26Xfwr4fehDxE/8De8CS/zucIOuXzRJsT+wp7reBRvYYvUSwyrDSK5S6noHi07UL90XBPw5a/yHoFnzOs= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; SN2PR0701MB1072; 7:IBdhoPexgM2bsb9TIr8+vQwaw0L0pVbedhq801bnoAKjhmOnr/roQL1o7S3PaciRnUb/wTWZO974KogmoR0Ij7hAThr/W4kbMvVrNMDKcVkZxoQokyJZxZR1ZCfprSgNt06mTc9TyJtPHZ2BPpWKEqXE/Zn/+PD0PvgRvoFDEeRIvLbfZt7UUoyCrMdbdQHfCy+n3vM6b1pgDX6T5ZWXl5LeQr7fNWkJ4MQgjSo2V6wSNApWUaBvwLyez/JxbjUh9/TkaH+2Wc1nE296EYAnk1XWyoLmuYlAkzixpVUJuL6CckEZXwqOLC8SXRR43dAqsieCvvrd8B38aUEEbhQJ04qyMaf9P5VG6pQLVoX1a3wibdK+qitjNtZBCf88WG5AO11dg7YcnbSHpvJo/fu6BJSarjzhfsNloyxW2OEuhjY7DYTJPzF0LQ2BE0ayYPcMREDGSzr3X9gd5DgUHcJ3NCUvM4h/1qN5Bu2QTQ60c5dS9ip0qV1+mz1MrQNL+GbaGKs6fSDWJpqAg4kNjKCtXg== X-OriginatorOrg: caviumnetworks.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 09 Feb 2017 00:02:16.7319 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: SN2PR0701MB1072 On Wed, 2017-02-08 at 11:15 +0530, Siddhesh Poyarekar wrote: > Looks OK with a couple of nits below. Here is a de-nitted version with the ChangeLog using 'Likewise' instead of 'Ditto' and with a one line description at the top of libc-start.c. Steve Ellcey sellcey@caviium.com 2017-02-08  Steve Ellcey       Adhemerval Zanella   * sysdeps/aarch64/dl-machine.h: Include cpu-features.c. (DL_PLATFORM_INIT): New define. (dl_platform_init): New function. * sysdeps/aarch64/ldsodefs.h: Include cpu-features.h. * sysdeps/unix/sysv/linux/aarch64/cpu-features.c: New file. * sysdeps/unix/sysv/linux/aarch64/cpu-features.h: Likewise. * sysdeps/unix/sysv/linux/aarch64/dl-procinfo.c: Likewise. * sysdeps/unix/sysv/linux/aarch64/libc-start.c: Likewise. diff --git a/sysdeps/aarch64/dl-machine.h b/sysdeps/aarch64/dl-machine.h index 84b8aec..15d79a6 100644 --- a/sysdeps/aarch64/dl-machine.h +++ b/sysdeps/aarch64/dl-machine.h @@ -25,6 +25,7 @@ #include #include #include +#include /* Return nonzero iff ELF header is compatible with the running host. */ static inline int __attribute__ ((unused)) @@ -225,6 +226,23 @@ _dl_start_user: \n\ #define ELF_MACHINE_NO_REL 1 #define ELF_MACHINE_NO_RELA 0 +#define DL_PLATFORM_INIT dl_platform_init () + +static inline void __attribute__ ((unused)) +dl_platform_init (void) +{ + if (GLRO(dl_platform) != NULL && *GLRO(dl_platform) == '\0') + /* Avoid an empty string which would disturb us. */ + GLRO(dl_platform) = NULL; + +#ifdef SHARED + /* init_cpu_features has been called early from __libc_start_main in + static executable. */ + init_cpu_features (&GLRO(dl_aarch64_cpu_features)); +#endif +} + + static inline ElfW(Addr) elf_machine_fixup_plt (struct link_map *map, lookup_t t, const ElfW(Rela) *reloc, diff --git a/sysdeps/aarch64/ldsodefs.h b/sysdeps/aarch64/ldsodefs.h index f277074..ba4ada3 100644 --- a/sysdeps/aarch64/ldsodefs.h +++ b/sysdeps/aarch64/ldsodefs.h @@ -20,6 +20,7 @@ #define _AARCH64_LDSODEFS_H 1 #include +#include struct La_aarch64_regs; struct La_aarch64_retval; diff --git a/sysdeps/unix/sysv/linux/aarch64/cpu-features.c b/sysdeps/unix/sysv/linux/aarch64/cpu-features.c index e69de29..8e4b514 100644 --- a/sysdeps/unix/sysv/linux/aarch64/cpu-features.c +++ b/sysdeps/unix/sysv/linux/aarch64/cpu-features.c @@ -0,0 +1,38 @@ +/* Initialize CPU feature data. AArch64 version. + This file is part of the GNU C Library. + Copyright (C) 2017 Free Software Foundation, Inc. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +#include + +#ifndef HWCAP_CPUID +# define HWCAP_CPUID (1 << 11) +#endif + +static inline void +init_cpu_features (struct cpu_features *cpu_features) +{ + if (GLRO(dl_hwcap) & HWCAP_CPUID) + { + register uint64_t id = 0; + asm volatile ("mrs %0, midr_el1" : "=r"(id)); + cpu_features->midr_el1 = id; + } + else + { + cpu_features->midr_el1 = 0; + } +} diff --git a/sysdeps/unix/sysv/linux/aarch64/cpu-features.h b/sysdeps/unix/sysv/linux/aarch64/cpu-features.h index e69de29..c92b650 100644 --- a/sysdeps/unix/sysv/linux/aarch64/cpu-features.h +++ b/sysdeps/unix/sysv/linux/aarch64/cpu-features.h @@ -0,0 +1,49 @@ +/* Initialize CPU feature data. AArch64 version. + This file is part of the GNU C Library. + Copyright (C) 2017 Free Software Foundation, Inc. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +#ifndef _CPU_FEATURES_AARCH64_H +#define _CPU_FEATURES_AARCH64_H + +#include + +#define MIDR_PARTNUM_SHIFT 4 +#define MIDR_PARTNUM_MASK (0xfff << MIDR_PARTNUM_SHIFT) +#define MIDR_PARTNUM(midr) \ + (((midr) & MIDR_PARTNUM_MASK) >> MIDR_PARTNUM_SHIFT) +#define MIDR_ARCHITECTURE_SHIFT 16 +#define MIDR_ARCHITECTURE_MASK (0xf << MIDR_ARCHITECTURE_SHIFT) +#define MIDR_ARCHITECTURE(midr) \ + (((midr) & MIDR_ARCHITECTURE_MASK) >> MIDR_ARCHITECTURE_SHIFT) +#define MIDR_VARIANT_SHIFT 20 +#define MIDR_VARIANT_MASK (0xf << MIDR_VARIANT_SHIFT) +#define MIDR_VARIANT(midr) \ + (((midr) & MIDR_VARIANT_MASK) >> MIDR_VARIANT_SHIFT) +#define MIDR_IMPLEMENTOR_SHIFT 24 +#define MIDR_IMPLEMENTOR_MASK (0xff << MIDR_IMPLEMENTOR_SHIFT) +#define MIDR_IMPLEMENTOR(midr) \ + (((midr) & MIDR_IMPLEMENTOR_MASK) >> MIDR_IMPLEMENTOR_SHIFT) + +#define IS_THUNDERX(midr) (MIDR_IMPLEMENTOR(midr) == 'C' \ + && MIDR_PARTNUM(midr) == 0x0a1) + +struct cpu_features +{ + uint64_t midr_el1; +}; + +#endif /* _CPU_FEATURES_AARCH64_H */ diff --git a/sysdeps/unix/sysv/linux/aarch64/dl-procinfo.c b/sysdeps/unix/sysv/linux/aarch64/dl-procinfo.c index e69de29..438046a 100644 --- a/sysdeps/unix/sysv/linux/aarch64/dl-procinfo.c +++ b/sysdeps/unix/sysv/linux/aarch64/dl-procinfo.c @@ -0,0 +1,60 @@ +/* Data for AArch64 version of processor capability information. + Linux version. + Copyright (C) 2017 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +/* If anything should be added here check whether the size of each string + is still ok with the given array size. + + All the #ifdefs in the definitions are quite irritating but + necessary if we want to avoid duplicating the information. There + are three different modes: + + - PROCINFO_DECL is defined. This means we are only interested in + declarations. + + - PROCINFO_DECL is not defined: + + + if SHARED is defined the file is included in an array + initializer. The .element = { ... } syntax is needed. + + + if SHARED is not defined a normal array initialization is + needed. + */ + +#ifndef PROCINFO_CLASS +# define PROCINFO_CLASS +#endif + +#if !IS_IN (ldconfig) +# if !defined PROCINFO_DECL && defined SHARED + ._dl_aarch64_cpu_features +# else +PROCINFO_CLASS struct cpu_features _dl_aarch64_cpu_features +# endif +# ifndef PROCINFO_DECL += { } +# endif +# if !defined SHARED || defined PROCINFO_DECL +; +# else +, +# endif +#endif + +#undef PROCINFO_DECL +#undef PROCINFO_CLASS diff --git a/sysdeps/unix/sysv/linux/aarch64/libc-start.c b/sysdeps/unix/sysv/linux/aarch64/libc-start.c index e69de29..a5babd4 100644 --- a/sysdeps/unix/sysv/linux/aarch64/libc-start.c +++ b/sysdeps/unix/sysv/linux/aarch64/libc-start.c @@ -0,0 +1,41 @@ +/* Override csu/libc-start.c on AArch64. + Copyright (C) 2017 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +#ifdef SHARED +# include +# else +/* The main work is done in the generic function. */ +# define LIBC_START_DISABLE_INLINE +# define LIBC_START_MAIN generic_start_main +# include +# include + +extern struct cpu_features _dl_aarch64_cpu_features; + +int +__libc_start_main (int (*main) (int, char **, char ** MAIN_AUXVEC_DECL), + int argc, char **argv, + __typeof (main) init, + void (*fini) (void), + void (*rtld_fini) (void), void *stack_end) +{ + init_cpu_features (&_dl_aarch64_cpu_features); + return generic_start_main (main, argc, argv, init, fini, rtld_fini, + stack_end); +} +#endif