From patchwork Thu Aug 3 15:34:52 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Steve Ellcey X-Patchwork-Id: 21907 Received: (qmail 45003 invoked by alias); 3 Aug 2017 15:35:17 -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 39783 invoked by uid 89); 3 Aug 2017 15:35:14 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-24.9 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 autolearn=ham version=3.3.2 spammy=Username, logins X-HELO: NAM02-SN1-obe.outbound.protection.outlook.com Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=Steve.Ellcey@cavium.com; Message-ID: <1501774492.3962.52.camel@cavium.com> Subject: [PATCH 2/4] Add ILP32 support to aarch64 From: Steve Ellcey Reply-To: sellcey@cavium.com To: libc-alpha Date: Thu, 03 Aug 2017 08:34:52 -0700 Mime-Version: 1.0 X-ClientProxiedBy: CY4PR18CA0063.namprd18.prod.outlook.com (10.173.57.153) To MWHPR07MB3470.namprd07.prod.outlook.com (10.164.192.21) X-MS-Office365-Filtering-Correlation-Id: 09e47452-35ea-4d46-db13-08d4da853233 X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(300000500095)(300135000095)(300000501095)(300135300095)(22001)(300000502095)(300135100095)(2017030254152)(300000503095)(300135400095)(49563074)(201703131423075)(201703031133081)(201702281549075)(300000504095)(300135200095)(300000505095)(300135600095)(300000506095)(300135500095); SRVR:MWHPR07MB3470; X-Microsoft-Exchange-Diagnostics: 1; MWHPR07MB3470; 3:groKMOZr+J44qahcQUdvKADrRdzMhXOAbSixIe6qVS3x/O5WUVApuA6HpS3oVfceqEOKJM4OX2/uE8CrxJQ8ZG2dkRdugcBzcGOIXbo3oe/b7xG7Z52ueSvtpJFFFEalGTaG6Dhw7lj4q6eLUsJh8p+GCTUx/gfT5U3oZaOkluLTHkB78AqMt5ODQafZtg1r6MO/LPujZECbJ4MaEl72XMTgNNg87AqhwHFcR9/oUmCtzyR4GxJGqH7iKlDeSf1C; 25:whoi2aeG2QmVTqLbYPJuNi4qVtkDdpNe/64dHCodxsMP07HnKhj3G/x+I6VLnoQ/uZIE2XDEfgfsKU45MVUNRuXplTzO0RCxav7PBSnv+SMVk7nRtxgd/Fr/Q4cjjAVtiQjO+03eiB9yi2Uft98PJmmlupvjOraNQ3ON6mnvrj1mFpofEEhdSSOBHXMJIlOxRoc8jm1rGdexe9R/D4h/Aa3DwgE987nJFu0NeFVHgRSnHNPX5vWteqkz0+Xy79Pe6JRzxUXYE+MsxmaRpWZGMdpCds0xhZUiwbmcykU1oQO3uPGKaMR2u+smnwNHKo1mqvhd1Pc7glQrAkkNAC7QKg==; 31:81rpqp095JZHHa1VP6b9VR6lyYwpCNaF+CN02gynA+IikLSZxltxp1LZpVUC+52H053/tveiVP6kBcxPeISl1HTFVursInfJj+KgkCHr3fWrRCowVlw8ZpMpZPZjjEHAQzRIxsn1Y47vDrDxgx9+ORlQpCAc0uZsKLHcIa71K1Rm5QWDNhpOu1fkiRcqhAxZwOIzmxIxqSiR7ZlsqI8UWLwxw2uMsLM7i/yk25HUASQ= X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: MWHPR07MB3470: X-Microsoft-Exchange-Diagnostics: 1; MWHPR07MB3470; 20:FAA0hVtbTbn3L49y1vsW3ebBHndwTGtFfWE6OYZtg3DiOJdOCOae+3Ch0xwY137pPKUw6qlo/fyUDm3xW4h0S+iA+yQn7sJITGjMXP1jKmRIXm6d/6GnXwqfVwMLJ+Y/gEyvvvreR8Ql9XzmW02wHKKsQMmapxOj7yf3d9Z5ocrcsy4D9f6LJ1NoKxmfNDCVnCLruNQh/RLEL5rqYL3sBv8Ii6MMS/Z8vS5rZOh1/MgZC3s+QeAdRHBwqUDXu+H8Jq9aGc2kTzR4mYwdttwoNgWIgbHTxTyMQlZpZ6LrMfgcBuLYX2I6PRgDpE3k5DgFYf171uHc7hPn95UsD0XIkobggtkbunji2wokh0TByydOU3Rio3eRRs418QHfHRQcATMqXB35ODHg1mwYjBtn9EqPJOoubP6DREGnqq/9rR5Wm+x/RCqHSnQlkPj+65aP+7oat3tugmNele5QntwFhDHSTQ2bFhjLtUlQsJHutx44JvkToFiYR7A1WRvEAgOe; 4:W23BcqGYZlPiefPiRmL5+3Zj2PAJwWqduTsDQw20jk+uR7blzXfRAeaw0GaIuaqDzpIL6vjD33Hf4+BRGB0zK/d3B3uD1ds3rGd7K+Cw8NT9jNeZcDRtViaFf7nAvVJGnpgXeM8nhTxIqjKqsa7To2yCqYF73IA1yDE7JRtMATnLIpOveXNA0ukx8df8Lc4xFsEqmDKBomgrAVAvawV+PJYmKw516QIOM3r5BX3dKQnYof2XpjAVrkxzWUUcOd54 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)(102415395)(6040450)(601004)(2401047)(5005006)(8121501046)(93006095)(93001095)(100000703101)(100105400095)(3002001)(10201501046)(6041248)(20161123562025)(20161123560025)(20161123555025)(20161123558100)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(20161123564025)(6072148)(100000704101)(100105200095)(100000705101)(100105500095); SRVR:MWHPR07MB3470; BCL:0; PCL:0; RULEID:(100000800101)(100110000095)(100000801101)(100110300095)(100000802101)(100110100095)(100000803101)(100110400095)(100000804101)(100110200095)(100000805101)(100110500095); SRVR:MWHPR07MB3470; X-Forefront-PRVS: 03883BD916 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(4630300001)(7370300001)(6009001)(39410400002)(39400400002)(39840400002)(39850400002)(39450400003)(199003)(377424004)(189002)(69596002)(36756003)(42186005)(3450700001)(33646002)(53416004)(25786009)(103116003)(7736002)(68736007)(2906002)(53936002)(4610100001)(43066003)(6512007)(105586002)(7350300001)(50986999)(50226002)(97736004)(189998001)(8676002)(81156014)(81166006)(110136004)(101416001)(38730400002)(512874002)(106356001)(66066001)(5660300001)(6666003)(5890100001)(6116002)(72206003)(3846002)(6916009)(2476003)(6486002)(478600001)(6506006)(568964002)(305945005)(84326002)(99106002); DIR:OUT; SFP:1101; SCL:1; SRVR:MWHPR07MB3470; H:sellcey-dt.caveonetworks.com; FPR:; SPF:None; PTR:InfoNoRecords; A:1; MX: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; MWHPR07MB3470; 23:ydWGvSgvdXLuyp9hAEMaK72sa8pcktJjFdIYItcrH?= =?us-ascii?Q?dSioEjiQ3GmZicFE/49KPsrMWtm2QGlwvR2qWOpNjeE93iPvllmv/uKLHN2M?= =?us-ascii?Q?GWOuUCG/y27Fxr71NLqZYVB3LBRnTyPUoyp4qqzdOBmDDCrFHNrqgGs7iWDt?= =?us-ascii?Q?pDsaEKZkLd6Mwf3bybJ3sN4B+3wLghDFyYVNHGR9LMHfvOLVHOeR8JxovTBA?= =?us-ascii?Q?8qoqdR2vOOb9nPEVP4YLhd7tLoA46fBmS1gu/Z/mWWpvL8lUfhk8C70qjMTx?= =?us-ascii?Q?3E8qYCfF9xlZycre55T56DvWk9uZwsShwJjeIQlcGNsOx11K4K59mqxuEhVF?= =?us-ascii?Q?vOZkDBgHHRzG9MunJW7hOAzP2SXDj+ffFyjEsMkL/oG6x2TmgLIx06GCuPRq?= =?us-ascii?Q?NI48X3ByRpy3sl3f+qhR4mVQZ3YZ8D0CGbUAhbfcF1xvP9hZc15uv8Gbo25L?= =?us-ascii?Q?sMokEg7hhMy415EtkdYrb4in1XDDfJ5ebZTRSo/i2bE8yhGydDWkzo03ixZO?= =?us-ascii?Q?uizTLevDjK1f/SAaGS6JVGbX+G8CRudZHvkLeqK9tZgYUAETy671JJVbmAaA?= =?us-ascii?Q?D/QS9FLz+ykIMNWDBj91rpRr55y2lnmoa45gLYrThPtz743UakTM1ca1lr6u?= =?us-ascii?Q?+91RZk0uWCP/wSWTVJPUjjs3ZrkM3Vew0g645U2oifbKYHUMb3rKStp1aIPQ?= =?us-ascii?Q?rwD2nBn9PoHTpSazByaJTcDSzor63C2oBfMsn/W00JXpkTJThvR+E9RTRper?= =?us-ascii?Q?IRolB9NnuVJfFW4lG3ZUv5dkNYzjmD/AFRYJ+mD0O4MpQ+mFuwgICSZi7hSM?= =?us-ascii?Q?W2Wjh2FzpZH7S4PdoGH9J5xcz5jmKbWdm3SHcdSHaA31XEcOOWptBIZdjfUn?= =?us-ascii?Q?Or1Spye7iN/SHghGyV7ahCA3TkmfqXEVto8RRYbxyINCLO+fPeQ9DCpx132h?= =?us-ascii?Q?aUoYjFgO7YXSi6SH8rWdUEDUsx+BW8tJKDvcQdVqfqm4JEN2EZz8d3pg6MD8?= =?us-ascii?Q?rSmw2mQ1HT293v72dpRMEqLPyuk4oqQtkTJpHjdAauWFykZSAqdVmCZvgOMS?= =?us-ascii?Q?TuT3b23S0n/wewrTvl/XrOGO4XzcCxcz/PH1vznuClJ+2TYR+btC54Ixj5sC?= =?us-ascii?Q?sgkuZTmJYBfrE9hrnLAyShoL1dKnENNItTtwNwXvCDeI4Dxarqd8FsDBVLCZ?= =?us-ascii?Q?diqSm95c4exZYBj/6sGQ1Zauu4WXQpWYIOlh7xap5jAbNNPC7jvZfQQ7jHEN?= =?us-ascii?Q?DoMwcWiHj4WgbFap1ygDkulC3rj6MuqpwvzCVA1j+Oj2o0Ve9b83Xc4Mei2A?= =?us-ascii?Q?OmVy7KkxHnFS9B/aqwN/mxqLFTkFdIajYdw7r1J3dsu7Z9faCSjky3sQpuyR?= =?us-ascii?Q?O1djPeykIABArR2ViqZppFcfa8=3D?= X-Microsoft-Exchange-Diagnostics: 1; MWHPR07MB3470; 6:ne8TJeNgyJMmI+TVMCPK0chE+O41kdWf95XpdJw/dr+IaLRGnY3m3M9YZ8/t1yNsOExBBqsDBsKMJ3984XVoZWCHIU3+TrYUn4cbqwZc77XBANbQpnWlqsSVIsTpP1r9ajiUfE9zXj7X3vsEzvQxHNC2JvCkC+tGrFq3MsSSB4Xke79eJwC96kFvWVIv89qU4Ev/vWdvpi//ui2+n2rVKL2eiS9YGEuwtl8VHly4XhGYTXoAyD5H3KWQH6i++1De685o1VSVc3F2ToV0yDAsPc6QRRTuk/O9vbr8nR+BoTaQNC4/AZ/aJzge27TE34pFXpbBeG8Upf/lLb+H/mWzLw==; 5:pb8vVymAW4XKkOTz/G81wUvn4wY4sgZ90lj5XH790k0f1L1SWE0lETtqiCgLASe0KreuIxkn3bG832Q8qPH85xHctm8ZNqf/wFiMu2FSLkoTpMu0FcF12V7e6oYAM5lSyoDxNZXY0sK6Sex1am9rpA==; 24:zClnBFhuE8Wx0aEMskQNJi/OhC4+pZsMmIYOf71xdhX80U9EsrIwG8qQ55KRF5kCPz1GvrGKXSJZNggjo5nXJjqiTG51IYJriIX4vRJ9R8Q=; 7:yZNl7BcP4dkqxg6g7mvaSn5bmdrnQz+ccXKgtP+xZJMOu7i8Ma6ir5qa6quKuUD0Y2JTBDGsDzDjVXDSemLVSfX+LotOGrO5vhC+zTvkGUlz0gGw1AhOSL6flZcxfe/6/QcgCBfecKzVUvGUOWWveZkOTykSoXqUPs6RQHbEzkQL8JhzsuGEIUam7EbO7kPYXpefr79JEKKLIuSp8NM1o7gxzVwZkZnGtNvkY22njkA= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: cavium.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 03 Aug 2017 15:34:57.0409 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: MWHPR07MB3470 Here are the marjority of the ILP32 changes. Steve Ellcey sellcey@cavium.com 2017-08-03  Andrew Pinski       Yury Norov       Steve Ellcey   * elf/cache.c (print_entry): Add FLAG_AARCH64_LIB32. * sysdeps/aarch64/configure.ac (HAVE_AARCH64_ILP32): New define. (default-abi): Allow for ilp32 ABI. * sysdeps/aarch64/configure: Regenerate. * sysdeps/aarch64/Implies: Deleted. * sysdeps/aarch64/ilp32/Implies: New file. * sysdeps/aarch64/ilp32/Implies-after: New file. * sysdeps/aarch64/lp64/Implies: New file. * sysdeps/aarch64/lp64/Implies-after: New file. * sysdeps/aarch64/nptl/bits/pthreadtypes-arch.h (__PTHREAD_RWLOCK_INT_FLAGS_SHARED): Set to 1. * sysdeps/aarch64/preconfigure (machine): Check for ilp32/lp64. * sysdeps/aarch64/tls-macros.h (TLS_IE): Remove register specification for __result and ifdef for ILP32. * sysdeps/generic/ldconfig.h (FLAG_AARCH64_LIB32): New define. * sysdeps/unix/sysv/linux/aarch64/Implies: Remove generic and wordsize-64 entries. * sysdeps/unix/sysv/linux/aarch64/Makefile (abi-variants): Add new variants for ilp32 and ilp32_be. (abi-lp64-options, abi-lp64_be-options): define __LP64__ and undefine __ILP32__. (abi-lp64-condition, abi-lp64_be-condition): Check for __WORDSIZE equal to 64. (abi-ilp32-options, abi-ilp32-condition, abi-ilp32_be-options, abi-ilp32_be-condition): New. * sysdeps/unix/sysv/linux/aarch64/configure.ac (arch_minimum_kernel): Use different value for ILP32. (LIBC_SLIBDIR_RTLDDIR): Modify for ILP32. * sysdeps/unix/sysv/linux/aarch64/configure: Regenerate. * sysdeps/unix/sysv/linux/aarch64/ilp32/Implies: New file. * sysdeps/unix/sysv/linux/aarch64/ilp32/c++-types.data: Likewise. * sysdeps/unix/sysv/linux/aarch64/ilp32/kernel_stat.h: Likewise. * sysdeps/unix/sysv/linux/aarch64/ilp32/shlib-versions: Likewise. * sysdeps/unix/sysv/linux/aarch64/bits/stat.h: Likewise. * sysdeps/unix/sysv/linux/aarch64/bits/statfs.h: Likewise. * sysdeps/unix/sysv/linux/aarch64/bits/typesizes.h: Likewise. * sysdeps/unix/sysv/linux/aarch64/bits/utmp.h: Likewise. * sysdeps/unix/sysv/linux/aarch64/bits/utmpx.h: Likewise. * sysdeps/unix/sysv/linux/aarch64/kernel-features.h: Likewise. * sysdeps/unix/sysv/linux/aarch64/Implies: Add unix/sysv/linux/aarch64. * sysdeps/unix/sysv/linux/aarch64/ioctl.S: Move to lp64 directory. * sysdeps/unix/sysv/linux/aarch64/mmap.c: Likewise. * sysdeps/unix/sysv/linux/aarch64/shlib-versions: Likewise. * sysdeps/unix/sysv/linux/aarch64/c++-types.data: Likewise. * sysdeps/unix/sysv/linux/aarch64/ldd-rewrite.sed: Likewise. * sysdeps/unix/sysv/linux/aarch64/ipc_priv.h (__IPC_64): Check __ILP32 when setting. * sysdeps/unix/sysv/linux/arm/readelflib.c (process_elf_file): Check for EM_AARCH64 when processing ELFCLASS32 object. * sysdeps/unix/sysv/linux/bits/fcntl-linux.h (F_GETLK, F_SETLCK, F_SETLKW): Check for __OFF_T_MATCHES_OFF64_T when defining. diff --git a/elf/cache.c b/elf/cache.c index a76f892..765917f 100644 --- a/elf/cache.c +++ b/elf/cache.c @@ -101,6 +101,9 @@ print_entry (const char *lib, int flag, unsigned int osversion, case FLAG_AARCH64_LIB64: fputs (",AArch64", stdout); break; + case FLAG_AARCH64_LIB32: + fputs (",ILP32", stdout); + break; /* Uses the ARM soft-float ABI. */ case FLAG_ARM_LIBSF: fputs (",soft-float", stdout); diff --git a/sysdeps/aarch64/configure.ac b/sysdeps/aarch64/configure.ac index 7851dd4..9069325 100644 --- a/sysdeps/aarch64/configure.ac +++ b/sysdeps/aarch64/configure.ac @@ -14,9 +14,16 @@ AC_CACHE_CHECK([for big endian], yes #endif ], libc_cv_aarch64_be=yes, libc_cv_aarch64_be=no)]) + +if test $aarch64_config_abi = ilp32; then + AC_DEFINE(HAVE_AARCH64_ILP32) +fi + if test $libc_cv_aarch64_be = yes; then AC_DEFINE(HAVE_AARCH64_BE) - LIBC_CONFIG_VAR([default-abi], [lp64_be]) + libc_aarch64_be=_be else - LIBC_CONFIG_VAR([default-abi], [lp64]) + libc_aarch64_be= fi + +LIBC_CONFIG_VAR([default-abi], [${aarch64_config_abi}${libc_aarch64_be}]) diff --git a/sysdeps/aarch64/Implies b/sysdeps/aarch64/ilp32/Implies similarity index 88% copy from sysdeps/aarch64/Implies copy to sysdeps/aarch64/ilp32/Implies index e5adf4d..a9e5910 100644 --- a/sysdeps/aarch64/Implies +++ b/sysdeps/aarch64/ilp32/Implies @@ -1,4 +1,4 @@ -wordsize-64 +aarch64/fpu ieee754/ldbl-128 ieee754/dbl-64/wordsize-64 ieee754/dbl-64 diff --git a/sysdeps/aarch64/ilp32/Implies-after b/sysdeps/aarch64/ilp32/Implies-after new file mode 100644 index 0000000..39a34c5 --- /dev/null +++ b/sysdeps/aarch64/ilp32/Implies-after @@ -0,0 +1 @@ +wordsize-32 diff --git a/sysdeps/aarch64/Implies b/sysdeps/aarch64/lp64/Implies similarity index 88% rename from sysdeps/aarch64/Implies rename to sysdeps/aarch64/lp64/Implies index e5adf4d..a9e5910 100644 --- a/sysdeps/aarch64/Implies +++ b/sysdeps/aarch64/lp64/Implies @@ -1,4 +1,4 @@ -wordsize-64 +aarch64/fpu ieee754/ldbl-128 ieee754/dbl-64/wordsize-64 ieee754/dbl-64 diff --git a/sysdeps/aarch64/lp64/Implies-after b/sysdeps/aarch64/lp64/Implies-after new file mode 100644 index 0000000..a8cae95 --- /dev/null +++ b/sysdeps/aarch64/lp64/Implies-after @@ -0,0 +1 @@ +wordsize-64 diff --git a/sysdeps/aarch64/nptl/bits/pthreadtypes-arch.h b/sysdeps/aarch64/nptl/bits/pthreadtypes-arch.h index d13a75d..9aa9f04 100644 --- a/sysdeps/aarch64/nptl/bits/pthreadtypes-arch.h +++ b/sysdeps/aarch64/nptl/bits/pthreadtypes-arch.h @@ -65,5 +65,6 @@ struct __pthread_rwlock_arch_t }; #define __PTHREAD_RWLOCK_ELISION_EXTRA 0 +#define __PTHREAD_RWLOCK_INT_FLAGS_SHARED 1 #endif /* bits/pthreadtypes.h */ diff --git a/sysdeps/aarch64/preconfigure b/sysdeps/aarch64/preconfigure index d9bd1f8..b56d0aa 100644 --- a/sysdeps/aarch64/preconfigure +++ b/sysdeps/aarch64/preconfigure @@ -1,6 +1,14 @@ case "$machine" in aarch64*) + abiflag=`$CC $CFLAGS $CPPFLAGS -E -dM -xc /dev/null` base_machine=aarch64 - machine=aarch64 + case "$abiflag" in + *"#define __ILP32__ 1"*) aarch64_config_abi=ilp32 ;; + *) aarch64_config_abi=lp64 ;; + esac + case $aarch64_config_abi in + ilp32) machine=aarch64/ilp32 ;; + lp64) machine=aarch64/lp64 ;; + esac ;; esac diff --git a/sysdeps/aarch64/tls-macros.h b/sysdeps/aarch64/tls-macros.h index 358ccbc..fa27dc0 100644 --- a/sysdeps/aarch64/tls-macros.h +++ b/sysdeps/aarch64/tls-macros.h @@ -32,8 +32,9 @@ "x30", "memory", "cc"); \ (int *) (__result); }) -#define TLS_IE(x) \ - ({ register unsigned long __result asm ("x0"); \ +#ifdef __LP64__ +# define TLS_IE(x) \ + ({ register unsigned long __result; \ register unsigned long __t; \ asm ("mrs %1, tpidr_el0; " \ "adrp %0, :gottprel:" #x "; " \ @@ -41,6 +42,17 @@ "add %0, %0, %1" \ : "=r" (__result), "=r" (__t)); \ (int *) (__result); }) +#else +# define TLS_IE(x) \ + ({ register unsigned long __result; \ + register unsigned long __t; \ + asm ("mrs %1, tpidr_el0; " \ + "adrp %0, :gottprel:" #x "; " \ + "ldr %w0, [%0, #:gottprel_lo12:" #x "]; " \ + "add %0, %0, %1" \ + : "=r" (__result), "=r" (__t)); \ + (int *) (__result); }) +#endif #define TLS_LE(x) \ ({ register unsigned long __result asm ("x0"); \ diff --git a/sysdeps/generic/ldconfig.h b/sysdeps/generic/ldconfig.h index a61ce5c..be6b70c 100644 --- a/sysdeps/generic/ldconfig.h +++ b/sysdeps/generic/ldconfig.h @@ -42,6 +42,7 @@ #define FLAG_MIPS_LIB32_NAN2008 0x0c00 #define FLAG_MIPS64_LIBN32_NAN2008 0x0d00 #define FLAG_MIPS64_LIBN64_NAN2008 0x0e00 +#define FLAG_AARCH64_LIB32 0x0f00 /* Name of auxiliary cache. */ #define _PATH_LDCONFIG_AUX_CACHE "/var/cache/ldconfig/aux-cache" diff --git a/sysdeps/unix/sysv/linux/aarch64/Implies b/sysdeps/unix/sysv/linux/aarch64/Implies index 4409e19..c508f2e 100644 --- a/sysdeps/unix/sysv/linux/aarch64/Implies +++ b/sysdeps/unix/sysv/linux/aarch64/Implies @@ -1,3 +1 @@ aarch64/nptl -unix/sysv/linux/generic -unix/sysv/linux/wordsize-64 diff --git a/sysdeps/unix/sysv/linux/aarch64/Makefile b/sysdeps/unix/sysv/linux/aarch64/Makefile index 6b4e620..67619f5 100644 --- a/sysdeps/unix/sysv/linux/aarch64/Makefile +++ b/sysdeps/unix/sysv/linux/aarch64/Makefile @@ -23,13 +23,21 @@ endif abi-variants := lp64 abi-variants += lp64_be +abi-variants += ilp32 +abi-variants += ilp32_be ifeq (,$(filter $(default-abi),$(abi-variants))) Unknown ABI, must be one of $(abi-variants) endif -abi-lp64-options := -U__AARCH64EB__ -abi-lp64-condition := !defined __AARCH64EB__ +abi-lp64-options := -U__AARCH64EB__ -D__LP64__ -U__ILP32__ +abi-lp64-condition := __WORDSIZE == 64 && !defined __AARCH64EB__ -abi-lp64_be-options := -D__AARCH64EB__ -abi-lp64_be-condition := defined __AARCH64EB__ +abi-lp64_be-options := -D__AARCH64EB__ -D__LP64__ -U__ILP32__ +abi-lp64_be-condition := __WORDSIZE == 64 && defined __AARCH64EB__ + +abi-ilp32-options := -U__AARCH64EB__ -U__LP64__ -D__ILP32__ +abi-ilp32-condition := __WORDSIZE == 32 && !defined __AARCH64EB__ + +abi-ilp32_be-options := -D__AARCH64EB__ -U__LP64__ -D__ILP32__ +abi-ilp32_be-condition := __WORDSIZE == 32 && defined __AARCH64EB__ diff --git a/sysdeps/unix/sysv/linux/aarch64/bits/stat.h b/sysdeps/unix/sysv/linux/aarch64/bits/stat.h new file mode 100644 index 0000000..4472fb1 --- /dev/null +++ b/sysdeps/unix/sysv/linux/aarch64/bits/stat.h @@ -0,0 +1,178 @@ +/* Definition of `struct stat' used in the kernel. + 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 !defined _SYS_STAT_H && !defined _FCNTL_H +# error "Never include directly; use instead." +#endif + +#ifndef _BITS_STAT_H +#define _BITS_STAT_H 1 + +#include + +/* 64-bit libc uses the kernel's 'struct stat', accessed via the + stat() syscall; 32-bit libc uses the kernel's 'struct stat64' + and accesses it via the stat64() syscall. All the various + APIs offered by libc use the kernel shape for their struct stat + structure; the only difference is that 32-bit programs not + using __USE_FILE_OFFSET64 only see the low 32 bits of some + of the fields (specifically st_ino, st_size, and st_blocks). */ +#define _STAT_VER_KERNEL 0 +#define _STAT_VER_LINUX 0 +#define _STAT_VER _STAT_VER_KERNEL + +/* Versions of the `xmknod' interface. */ +#define _MKNOD_VER_LINUX 0 + +struct stat + { + __dev_t st_dev; /* Device. */ +#ifdef __LP64__ + __ino_t st_ino; /* File serial number. */ +#else + unsigned int __pad0; + unsigned int __st_ino; /* 32bit file serial number. */ +#endif + __mode_t st_mode; /* File mode. */ + __nlink_t st_nlink; /* Link count. */ + __uid_t st_uid; /* User ID of the file's owner. */ + __gid_t st_gid; /* Group ID of the file's group.*/ + __dev_t st_rdev; /* Device number, if device. */ + __dev_t __pad1; + __off_t st_size; /* Size of file, in bytes. */ + __blksize_t st_blksize; /* Optimal block size for I/O. */ +#ifdef __LP64__ + int __pad2; +#endif + __blkcnt_t st_blocks; /* 512-byte blocks */ +#ifdef __USE_XOPEN2K8 + /* Nanosecond resolution timestamps are stored in a format + equivalent to 'struct timespec'. This is the type used + whenever possible but the Unix namespace rules do not allow the + identifier 'timespec' to appear in the header. + Therefore we have to handle the use of this header in strictly + standard-compliant sources special. */ + struct timespec st_atim; /* Time of last access. */ + struct timespec st_mtim; /* Time of last modification. */ + struct timespec st_ctim; /* Time of last status change. */ +# define st_atime st_atim.tv_sec /* Backward compatibility. */ +# define st_mtime st_mtim.tv_sec +# define st_ctime st_ctim.tv_sec +#else + __time_t st_atime; /* Time of last access. */ + unsigned long int st_atimensec; /* Nscecs of last access. */ + __time_t st_mtime; /* Time of last modification. */ + unsigned long int st_mtimensec; /* Nsecs of last modification. */ + __time_t st_ctime; /* Time of last status change. */ + unsigned long int st_ctimensec; /* Nsecs of last status change. */ +#endif +#ifdef __LP64__ + int __glibc_reserved[2]; +#else + __ino_t st_ino; /* File serial number. */ +#endif + }; + +#ifdef __USE_LARGEFILE64 +struct stat64 + { + __dev_t st_dev; /* Device. */ +# ifdef __LP64__ + __ino64_t st_ino; /* File serial number. */ +# else + unsigned int __pad0; + unsigned int __st_ino; /* 32bit file serial number. */ +# endif + __mode_t st_mode; /* File mode. */ + __nlink_t st_nlink; /* Link count. */ + __uid_t st_uid; /* User ID of the file's owner. */ + __gid_t st_gid; /* Group ID of the file's group.*/ + __dev_t st_rdev; /* Device number, if device. */ + __dev_t __pad1; + __off64_t st_size; /* Size of file, in bytes. */ + __blksize_t st_blksize; /* Optimal block size for I/O. */ +# ifdef __LP64__ + int __pad2; +# endif + __blkcnt64_t st_blocks; /* Nr. 512-byte blocks allocated. */ +# ifdef __USE_XOPEN2K8 + /* Nanosecond resolution timestamps are stored in a format + equivalent to 'struct timespec'. This is the type used + whenever possible but the Unix namespace rules do not allow the + identifier 'timespec' to appear in the header. + Therefore we have to handle the use of this header in strictly + standard-compliant sources special. */ + struct timespec st_atim; /* Time of last access. */ + struct timespec st_mtim; /* Time of last modification. */ + struct timespec st_ctim; /* Time of last status change. */ +# else + __time_t st_atime; /* Time of last access. */ + unsigned long int st_atimensec; /* Nscecs of last access. */ + __time_t st_mtime; /* Time of last modification. */ + unsigned long int st_mtimensec; /* Nsecs of last modification. */ + __time_t st_ctime; /* Time of last status change. */ + unsigned long int st_ctimensec; /* Nsecs of last status change. */ +# endif +# ifdef __LP64__ + int __glibc_reserved[2]; +# else + __ino_t st_ino; /* File serial number. */ +# endif + }; +#endif + +/* Tell code we have these members. */ +#define _STATBUF_ST_BLKSIZE +#define _STATBUF_ST_RDEV +/* Nanosecond resolution time values are supported. */ +#define _STATBUF_ST_NSEC + +/* Encoding of the file mode. */ + +#define __S_IFMT 0170000 /* These bits determine file type. */ + +/* File types. */ +#define __S_IFDIR 0040000 /* Directory. */ +#define __S_IFCHR 0020000 /* Character device. */ +#define __S_IFBLK 0060000 /* Block device. */ +#define __S_IFREG 0100000 /* Regular file. */ +#define __S_IFIFO 0010000 /* FIFO. */ +#define __S_IFLNK 0120000 /* Symbolic link. */ +#define __S_IFSOCK 0140000 /* Socket. */ + +/* POSIX.1b objects. Note that these macros always evaluate to zero. But + they do it by enforcing the correct use of the macros. */ +#define __S_TYPEISMQ(buf) ((buf)->st_mode - (buf)->st_mode) +#define __S_TYPEISSEM(buf) ((buf)->st_mode - (buf)->st_mode) +#define __S_TYPEISSHM(buf) ((buf)->st_mode - (buf)->st_mode) + +/* Protection bits. */ + +#define __S_ISUID 04000 /* Set user ID on execution. */ +#define __S_ISGID 02000 /* Set group ID on execution. */ +#define __S_ISVTX 01000 /* Save swapped text after use (sticky). */ +#define __S_IREAD 0400 /* Read by owner. */ +#define __S_IWRITE 0200 /* Write by owner. */ +#define __S_IEXEC 0100 /* Execute by owner. */ + +#ifdef __USE_ATFILE +# define UTIME_NOW ((1l << 30) - 1l) +# define UTIME_OMIT ((1l << 30) - 2l) +#endif + +#endif /* bits/stat.h */ diff --git a/sysdeps/unix/sysv/linux/aarch64/bits/statfs.h b/sysdeps/unix/sysv/linux/aarch64/bits/statfs.h new file mode 100644 index 0000000..23953b9 --- /dev/null +++ b/sysdeps/unix/sysv/linux/aarch64/bits/statfs.h @@ -0,0 +1,68 @@ +/* Definition of `struct statfs', information about a filesystem. + Copyright (C) 2017 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Chris Metcalf , 2011. + + 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 _SYS_STATFS_H +# error "Never include directly; use instead." +#endif + +#include +#include +#include + +/* On AArch64 both the 32-bit and 64-bit libc's use the kernels + 'struct statfs' with 64 bit f_blocks/f_bfree/f_bavail/f_files/f_ffree + fields. This means the statfs and statfs64 structs are identical + and the statfs and statfs64 calls can be aliases. */ + +struct statfs + { + __SWORD_TYPE f_type; + __SWORD_TYPE f_bsize; + __fsblkcnt_t f_blocks; + __fsblkcnt_t f_bfree; + __fsblkcnt_t f_bavail; + __fsfilcnt_t f_files; + __fsfilcnt_t f_ffree; + __fsid_t f_fsid; + __SWORD_TYPE f_namelen; + __SWORD_TYPE f_frsize; + __SWORD_TYPE f_flags; + __SWORD_TYPE f_spare[4]; + }; + +struct statfs64 + { + __SWORD_TYPE f_type; + __SWORD_TYPE f_bsize; + __fsblkcnt64_t f_blocks; + __fsblkcnt64_t f_bfree; + __fsblkcnt64_t f_bavail; + __fsfilcnt64_t f_files; + __fsfilcnt64_t f_ffree; + __fsid_t f_fsid; + __SWORD_TYPE f_namelen; + __SWORD_TYPE f_frsize; + __SWORD_TYPE f_flags; + __SWORD_TYPE f_spare[4]; + }; + +/* Tell code we have these members. */ +#define _STATFS_F_NAMELEN +#define _STATFS_F_FRSIZE +#define _STATFS_F_FLAGS diff --git a/sysdeps/unix/sysv/linux/aarch64/bits/typesizes.h b/sysdeps/unix/sysv/linux/aarch64/bits/typesizes.h new file mode 100644 index 0000000..e3975c7 --- /dev/null +++ b/sysdeps/unix/sysv/linux/aarch64/bits/typesizes.h @@ -0,0 +1,88 @@ +/* bits/typesizes.h -- underlying types for *_t. Linux/AArch64 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 + . */ + +#ifndef _BITS_TYPES_H +# error "Never include directly; use instead." +#endif + +#ifndef _BITS_TYPESIZES_H +#define _BITS_TYPESIZES_H 1 + +/* See for the meaning of these macros. This file exists so + that need not vary across different GNU platforms. */ + +#define __DEV_T_TYPE __UQUAD_TYPE +#define __UID_T_TYPE __U32_TYPE +#define __GID_T_TYPE __U32_TYPE +#define __INO_T_TYPE __UQUAD_TYPE +#define __INO64_T_TYPE __UQUAD_TYPE +#define __MODE_T_TYPE __U32_TYPE +#define __NLINK_T_TYPE __U32_TYPE +#define __OFF_T_TYPE __SQUAD_TYPE +#define __OFF64_T_TYPE __SQUAD_TYPE +#define __PID_T_TYPE __S32_TYPE +#define __RLIM_T_TYPE __UQUAD_TYPE +#define __RLIM64_T_TYPE __UQUAD_TYPE +#define __BLKCNT_T_TYPE __SQUAD_TYPE +#define __BLKCNT64_T_TYPE __SQUAD_TYPE +#define __FSBLKCNT_T_TYPE __UQUAD_TYPE +#define __FSBLKCNT64_T_TYPE __UQUAD_TYPE +#define __FSFILCNT_T_TYPE __UQUAD_TYPE +#define __FSFILCNT64_T_TYPE __UQUAD_TYPE +#define __FSWORD_T_TYPE __SWORD_TYPE +#define __ID_T_TYPE __U32_TYPE +#define __CLOCK_T_TYPE __SLONGWORD_TYPE +#define __TIME_T_TYPE __SLONGWORD_TYPE +#define __USECONDS_T_TYPE __U32_TYPE +#define __SUSECONDS_T_TYPE __SLONGWORD_TYPE +#define __DADDR_T_TYPE __S32_TYPE +#define __KEY_T_TYPE __S32_TYPE +#define __CLOCKID_T_TYPE __S32_TYPE +#define __TIMER_T_TYPE void * +#define __BLKSIZE_T_TYPE __S32_TYPE +#define __FSID_T_TYPE struct { int __val[2]; } +/* ssize_t is always singed long in both ABIs. */ +#define __SSIZE_T_TYPE __SLONGWORD_TYPE +#define __SYSCALL_SLONG_TYPE __SLONGWORD_TYPE +#define __SYSCALL_ULONG_TYPE __ULONGWORD_TYPE +#define __CPU_MASK_TYPE __ULONGWORD_TYPE + +/* Tell the libc code that off_t and off64_t are actually the same type + for all ABI purposes, even if possibly expressed as different base types + for C type-checking purposes. */ +#define __OFF_T_MATCHES_OFF64_T 1 + +/* Same for ino_t and ino64_t. */ +#define __INO_T_MATCHES_INO64_T 1 + +/* And for rlim_t and rlim64_t. */ +#define __RLIM_T_MATCHES_RLIM64_T 1 + +/* And for __blkcnt_t and __blkcnt64_t. */ +#define __BLKCNT_T_TYPE_MATCHES_BLKCNT64_T_TYPE 1 + +/* And for __fsblkcnt_t and __fsblkcnt64_t. */ +#define __FSBLKCNT_T_TYPE_MATCHES_FSBLKCNT64_T_TYPE 1 + +/* And for __fsbilcnt_t and __fsbilcnt64_t. */ +#define __FSFILCNT_T_TYPE_MATCHES_FSFILCNT64_T_TYPE 1 + +/* Number of descriptors that can fit in an `fd_set'. */ +#define __FD_SETSIZE 1024 + +#endif /* bits/typesizes.h */ diff --git a/sysdeps/unix/sysv/linux/aarch64/bits/utmp.h b/sysdeps/unix/sysv/linux/aarch64/bits/utmp.h new file mode 100644 index 0000000..8505175 --- /dev/null +++ b/sysdeps/unix/sysv/linux/aarch64/bits/utmp.h @@ -0,0 +1,125 @@ +/* The `struct utmp' type, describing entries in the utmp file. + Linux/AArch64 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 + . */ + +#ifndef _UTMP_H +# error "Never include directly; use instead." +#endif + +#include +#include +#include +#include + + +#define UT_LINESIZE 32 +#define UT_NAMESIZE 32 +#define UT_HOSTSIZE 256 + + +/* The structure describing an entry in the database of + previous logins. */ +struct lastlog + { +#if __WORDSIZE == 32 + int64_t ll_time; +#else + __time_t ll_time; +#endif + char ll_line[UT_LINESIZE]; + char ll_host[UT_HOSTSIZE]; + }; + + +/* The structure describing the status of a terminated process. This + type is used in `struct utmp' below. */ +struct exit_status + { + short int e_termination; /* Process termination status. */ + short int e_exit; /* Process exit status. */ + }; + + +/* The structure describing an entry in the user accounting database. */ +struct utmp +{ + short int ut_type; /* Type of login. */ + pid_t ut_pid; /* Process ID of login process. */ + char ut_line[UT_LINESIZE]; /* Devicename. */ + char ut_id[4]; /* Inittab ID. */ + char ut_user[UT_NAMESIZE]; /* Username. */ + char ut_host[UT_HOSTSIZE]; /* Hostname for remote login. */ + struct exit_status ut_exit; /* Exit status of a process marked + as DEAD_PROCESS. */ +/* The ut_session and ut_tv fields must be the same size when compiled + 32- and 64-bit. This allows data files and shared memory to be + shared between 32- and 64-bit applications. */ +#if __WORDSIZE == 32 + int64_t ut_session; /* Session ID, used for windowing. */ + struct + { + int64_t tv_sec; /* Seconds. */ + int64_t tv_usec; /* Microseconds. */ + } ut_tv; /* Time entry was made. */ +#else + long int ut_session; /* Session ID, used for windowing. */ + struct timeval ut_tv; /* Time entry was made. */ +#endif + + int32_t ut_addr_v6[4]; /* Internet address of remote host. */ + char __glibc_reserved[20]; /* Reserved for future use. */ +}; + +/* Backwards compatibility hacks. */ +#define ut_name ut_user +#ifndef _NO_UT_TIME +/* We have a problem here: `ut_time' is also used otherwise. Define + _NO_UT_TIME if the compiler complains. */ +# define ut_time ut_tv.tv_sec +#endif +#define ut_xtime ut_tv.tv_sec +#define ut_addr ut_addr_v6[0] + + +/* Values for the `ut_type' field of a `struct utmp'. */ +#define EMPTY 0 /* No valid user accounting information. */ + +#define RUN_LVL 1 /* The system's runlevel. */ +#define BOOT_TIME 2 /* Time of system boot. */ +#define NEW_TIME 3 /* Time after system clock changed. */ +#define OLD_TIME 4 /* Time when system clock changed. */ + +#define INIT_PROCESS 5 /* Process spawned by the init process. */ +#define LOGIN_PROCESS 6 /* Session leader of a logged in user. */ +#define USER_PROCESS 7 /* Normal process. */ +#define DEAD_PROCESS 8 /* Terminated process. */ + +#define ACCOUNTING 9 + +/* Old Linux name for the EMPTY type. */ +#define UT_UNKNOWN EMPTY + + +/* Tell the user that we have a modern system with UT_HOST, UT_PID, + UT_TYPE, UT_ID and UT_TV fields. */ +#define _HAVE_UT_TYPE 1 +#define _HAVE_UT_PID 1 +#define _HAVE_UT_ID 1 +#define _HAVE_UT_TV 1 +#define _HAVE_UT_HOST 1 diff --git a/sysdeps/unix/sysv/linux/aarch64/bits/utmpx.h b/sysdeps/unix/sysv/linux/aarch64/bits/utmpx.h new file mode 100644 index 0000000..bffd45c --- /dev/null +++ b/sysdeps/unix/sysv/linux/aarch64/bits/utmpx.h @@ -0,0 +1,104 @@ +/* Structures and definitions for the user accounting database. + Linux/AArch64 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 + . */ + +#ifndef _UTMPX_H +# error "Never include directly; use instead." +#endif + +#include +#include +#include + + +#ifdef __USE_GNU +# include +# define _PATH_UTMPX _PATH_UTMP +# define _PATH_WTMPX _PATH_WTMP +#endif + + +#define __UT_LINESIZE 32 +#define __UT_NAMESIZE 32 +#define __UT_HOSTSIZE 256 + + +/* The structure describing the status of a terminated process. This + type is used in `struct utmpx' below. */ +struct __exit_status + { +#ifdef __USE_GNU + short int e_termination; /* Process termination status. */ + short int e_exit; /* Process exit status. */ +#else + short int __e_termination; /* Process termination status. */ + short int __e_exit; /* Process exit status. */ +#endif + }; + + +/* The structure describing an entry in the user accounting database. */ +struct utmpx +{ + short int ut_type; /* Type of login. */ + __pid_t ut_pid; /* Process ID of login process. */ + char ut_line[__UT_LINESIZE]; /* Devicename. */ + char ut_id[4]; /* Inittab ID. */ + char ut_user[__UT_NAMESIZE]; /* Username. */ + char ut_host[__UT_HOSTSIZE]; /* Hostname for remote login. */ + struct __exit_status ut_exit; /* Exit status of a process marked + as DEAD_PROCESS. */ + +/* The fields ut_session and ut_tv must be the same size when compiled + 32- and 64-bit. This allows files and shared memory to be shared + between 32- and 64-bit applications. */ +#if __WORDSIZE == 32 + __int64_t ut_session; /* Session ID, used for windowing. */ + struct + { + __int64_t tv_sec; /* Seconds. */ + __int64_t tv_usec; /* Microseconds. */ + } ut_tv; /* Time entry was made. */ +#else + long int ut_session; /* Session ID, used for windowing. */ + struct timeval ut_tv; /* Time entry was made. */ +#endif + __int32_t ut_addr_v6[4]; /* Internet address of remote host. */ + char __glibc_reserved[20]; /* Reserved for future use. */ +}; + + +/* Values for the `ut_type' field of a `struct utmpx'. */ +#define EMPTY 0 /* No valid user accounting information. */ + +#ifdef __USE_GNU +# define RUN_LVL 1 /* The system's runlevel. */ +#endif +#define BOOT_TIME 2 /* Time of system boot. */ +#define NEW_TIME 3 /* Time after system clock changed. */ +#define OLD_TIME 4 /* Time when system clock changed. */ + +#define INIT_PROCESS 5 /* Process spawned by the init process. */ +#define LOGIN_PROCESS 6 /* Session leader of a logged in user. */ +#define USER_PROCESS 7 /* Normal process. */ +#define DEAD_PROCESS 8 /* Terminated process. */ + +#ifdef __USE_GNU +# define ACCOUNTING 9 /* System accounting. */ +#endif diff --git a/sysdeps/unix/sysv/linux/aarch64/configure.ac b/sysdeps/unix/sysv/linux/aarch64/configure.ac index 211fa9c..8cc97ef 100644 --- a/sysdeps/unix/sysv/linux/aarch64/configure.ac +++ b/sysdeps/unix/sysv/linux/aarch64/configure.ac @@ -1,6 +1,12 @@ GLIBC_PROVIDES dnl See aclocal.m4 in the top level source directory. # Local configure fragment for sysdeps/unix/sysv/linux/aarch64. -arch_minimum_kernel=3.7.0 +if test $aarch64_config_abi = ilp32; then + arch_minimum_kernel=10.0.0 + LIBC_SLIBDIR_RTLDDIR([libilp32], [lib]) +else + arch_minimum_kernel=3.7.0 + LIBC_SLIBDIR_RTLDDIR([lib64], [lib]) +fi -LIBC_SLIBDIR_RTLDDIR([lib64], [lib]) +ldd_rewrite_script=$dir/ldd-rewrite.sed diff --git a/sysdeps/unix/sysv/linux/aarch64/ilp32/Implies b/sysdeps/unix/sysv/linux/aarch64/ilp32/Implies new file mode 100644 index 0000000..7dd239e --- /dev/null +++ b/sysdeps/unix/sysv/linux/aarch64/ilp32/Implies @@ -0,0 +1,4 @@ +aarch64/nptl +unix/sysv/linux/aarch64 +unix/sysv/linux/generic/wordsize-32 +unix/sysv/linux/generic diff --git a/sysdeps/unix/sysv/linux/aarch64/c++-types.data b/sysdeps/unix/sysv/linux/aarch64/ilp32/c++-types.data similarity index 77% copy from sysdeps/unix/sysv/linux/aarch64/c++-types.data copy to sysdeps/unix/sysv/linux/aarch64/ilp32/c++-types.data index ac925cc..3fe2e2b 100644 --- a/sysdeps/unix/sysv/linux/aarch64/c++-types.data +++ b/sysdeps/unix/sysv/linux/aarch64/ilp32/c++-types.data @@ -1,32 +1,32 @@ -blkcnt64_t:l -blkcnt_t:l +blkcnt64_t:x +blkcnt_t:x blksize_t:i caddr_t:Pc clockid_t:i clock_t:l daddr_t:i -dev_t:m +dev_t:y fd_mask:l -fsblkcnt64_t:m -fsblkcnt_t:m -fsfilcnt64_t:m -fsfilcnt_t:m +fsblkcnt64_t:y +fsblkcnt_t:y +fsfilcnt64_t:y +fsfilcnt_t:y fsid_t:8__fsid_t gid_t:j id_t:j -ino64_t:m -ino_t:m +ino64_t:y +ino_t:y int16_t:s int32_t:i -int64_t:l +int64_t:x int8_t:a -intptr_t:l +intptr_t:i key_t:i -loff_t:l +loff_t:x mode_t:j nlink_t:j -off64_t:l -off_t:l +off64_t:x +off_t:x pid_t:i pthread_attr_t:14pthread_attr_t pthread_barrier_t:17pthread_barrier_t @@ -41,10 +41,10 @@ pthread_rwlock_t:16pthread_rwlock_t pthread_rwlockattr_t:20pthread_rwlockattr_t pthread_spinlock_t:i pthread_t:m -quad_t:l -register_t:l -rlim64_t:m -rlim_t:m +quad_t:x +register_t:x +rlim64_t:y +rlim_t:y sigset_t:10__sigset_t size_t:m socklen_t:j @@ -57,11 +57,11 @@ uint:j u_int:j u_int16_t:t u_int32_t:j -u_int64_t:m +u_int64_t:y u_int8_t:h ulong:m u_long:m -u_quad_t:m +u_quad_t:y useconds_t:j ushort:t u_short:t diff --git a/sysdeps/unix/sysv/linux/aarch64/ilp32/kernel_stat.h b/sysdeps/unix/sysv/linux/aarch64/ilp32/kernel_stat.h new file mode 100644 index 0000000..ac50f0e --- /dev/null +++ b/sysdeps/unix/sysv/linux/aarch64/ilp32/kernel_stat.h @@ -0,0 +1,3 @@ +#define XSTAT_IS_XSTAT64 1 +#define STATFS_IS_STATFS64 1 +#define STAT_IS_KERNEL_STAT diff --git a/sysdeps/unix/sysv/linux/aarch64/ilp32/shlib-versions b/sysdeps/unix/sysv/linux/aarch64/ilp32/shlib-versions new file mode 100644 index 0000000..cd913f4 --- /dev/null +++ b/sysdeps/unix/sysv/linux/aarch64/ilp32/shlib-versions @@ -0,0 +1,7 @@ +DEFAULT GLIBC_2.27 + +%ifdef HAVE_AARCH64_BE +ld=ld-linux-aarch64_be_ilp32.so.1 +%else +ld=ld-linux-aarch64_ilp32.so.1 +%endif diff --git a/sysdeps/unix/sysv/linux/aarch64/ipc_priv.h b/sysdeps/unix/sysv/linux/aarch64/ipc_priv.h index 8d12f31..40a4d04 100644 --- a/sysdeps/unix/sysv/linux/aarch64/ipc_priv.h +++ b/sysdeps/unix/sysv/linux/aarch64/ipc_priv.h @@ -18,4 +18,8 @@ #include /* For __key_t */ -#define __IPC_64 0x0 +#ifdef __LP64__ +# define __IPC_64 0x0 +#else /* __ILP32 */ +# define __IPC_64 0x100 +#endif diff --git a/sysdeps/unix/sysv/linux/aarch64/ipc_priv.h b/sysdeps/unix/sysv/linux/aarch64/kernel-features.h similarity index 55% copy from sysdeps/unix/sysv/linux/aarch64/ipc_priv.h copy to sysdeps/unix/sysv/linux/aarch64/kernel-features.h index 8d12f31..37e563a 100644 --- a/sysdeps/unix/sysv/linux/aarch64/ipc_priv.h +++ b/sysdeps/unix/sysv/linux/aarch64/kernel-features.h @@ -1,5 +1,7 @@ -/* Old SysV permission definition for Linux. AArch64 version. - Copyright (C) 2016-2017 Free Software Foundation, Inc. +/* Set flags signalling availability of kernel features based on given + kernel version number. + + 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 @@ -13,9 +15,16 @@ 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 + License along with the GNU C Library. If not, see . */ -#include /* For __key_t */ +#include_next + +#ifdef __ILP32__ +/* ARM fadvise64_64 reorganize the syscall arguments. */ +# define __ASSUME_FADVISE64_64_6ARG 1 -#define __IPC_64 0x0 +/* Define this if your 32-bit syscall API requires 64-bit register + pairs to start with an even-number register. */ +# define __ASSUME_ALIGNED_REGISTER_PAIRS 1 +#endif /* __ILP32__ */ diff --git a/sysdeps/unix/sysv/linux/aarch64/ldd-rewrite.sed b/sysdeps/unix/sysv/linux/aarch64/ldd-rewrite.sed new file mode 100644 index 0000000..2f3bbb9 --- /dev/null +++ b/sysdeps/unix/sysv/linux/aarch64/ldd-rewrite.sed @@ -0,0 +1 @@ +s_^\(RTLDLIST=\)\(.*lib/\)\([^/]*\)\(-aarch64\)\(\|\_be\)\(\|\_ilp32\)\(.so\.[0-9.]*\)$_\1"\2\3-aarch64\5\7 \2\3-aarch64\5\_ilp32\7"_ diff --git a/sysdeps/unix/sysv/linux/aarch64/Implies b/sysdeps/unix/sysv/linux/aarch64/lp64/Implies similarity index 73% copy from sysdeps/unix/sysv/linux/aarch64/Implies copy to sysdeps/unix/sysv/linux/aarch64/lp64/Implies index 4409e19..6418211 100644 --- a/sysdeps/unix/sysv/linux/aarch64/Implies +++ b/sysdeps/unix/sysv/linux/aarch64/lp64/Implies @@ -1,3 +1,4 @@ aarch64/nptl +unix/sysv/linux/aarch64 unix/sysv/linux/generic unix/sysv/linux/wordsize-64 diff --git a/sysdeps/unix/sysv/linux/aarch64/c++-types.data b/sysdeps/unix/sysv/linux/aarch64/lp64/c++-types.data similarity index 100% rename from sysdeps/unix/sysv/linux/aarch64/c++-types.data rename to sysdeps/unix/sysv/linux/aarch64/lp64/c++-types.data diff --git a/sysdeps/unix/sysv/linux/aarch64/ioctl.S b/sysdeps/unix/sysv/linux/aarch64/lp64/ioctl.S similarity index 100% rename from sysdeps/unix/sysv/linux/aarch64/ioctl.S rename to sysdeps/unix/sysv/linux/aarch64/lp64/ioctl.S diff --git a/sysdeps/unix/sysv/linux/aarch64/shlib-versions b/sysdeps/unix/sysv/linux/aarch64/lp64/shlib-versions similarity index 100% rename from sysdeps/unix/sysv/linux/aarch64/shlib-versions rename to sysdeps/unix/sysv/linux/aarch64/lp64/shlib-versions diff --git a/sysdeps/unix/sysv/linux/arm/readelflib.c b/sysdeps/unix/sysv/linux/arm/readelflib.c index 65273bc..dfb8fd4 100644 --- a/sysdeps/unix/sysv/linux/arm/readelflib.c +++ b/sysdeps/unix/sysv/linux/arm/readelflib.c @@ -41,7 +41,11 @@ process_elf_file (const char *file_name, const char *lib, int *flag, ret = process_elf32_file (file_name, lib, flag, osversion, soname, file_contents, file_length); - if (!ret && EF_ARM_EABI_VERSION (elf32_header->e_flags) == EF_ARM_EABI_VER5) + if (!ret && elf_header->e_machine == EM_AARCH64) + *flag = FLAG_AARCH64_LIB32|FLAG_ELF_LIBC6; + else if (!ret + && EF_ARM_EABI_VERSION (elf32_header->e_flags) + == EF_ARM_EABI_VER5) { if (elf32_header->e_flags & EF_ARM_ABI_FLOAT_HARD) *flag = FLAG_ARM_LIBHF|FLAG_ELF_LIBC6; diff --git a/sysdeps/unix/sysv/linux/bits/fcntl-linux.h b/sysdeps/unix/sysv/linux/bits/fcntl-linux.h index 0cd0a5d..fd90598 100644 --- a/sysdeps/unix/sysv/linux/bits/fcntl-linux.h +++ b/sysdeps/unix/sysv/linux/bits/fcntl-linux.h @@ -101,7 +101,7 @@ #endif #ifndef F_GETLK -# ifndef __USE_FILE_OFFSET64 +# if !defined (__USE_FILE_OFFSET64) && !defined (__OFF_T_MATCHES_OFF64_T) # define F_GETLK 5 /* Get record locking info. */ # define F_SETLK 6 /* Set record locking info (non-blocking). */ # define F_SETLKW 7 /* Set record locking info (blocking). */