From patchwork Thu Jun 12 12:01:05 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Cupertino Miranda X-Patchwork-Id: 114361 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 044283844B82 for ; Thu, 12 Jun 2025 12:02:44 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 044283844B82 Authentication-Results: sourceware.org; dkim=pass (2048-bit key, unprotected) header.d=oracle.com header.i=@oracle.com header.a=rsa-sha256 header.s=corp-2025-04-25 header.b=i9Xjvm/+; dkim=pass (1024-bit key, unprotected) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.a=rsa-sha256 header.s=selector2-oracle-onmicrosoft-com header.b=TjM3iHgx X-Original-To: libc-alpha@sourceware.org Delivered-To: libc-alpha@sourceware.org Received: from mx0a-00069f02.pphosted.com (mx0a-00069f02.pphosted.com [205.220.165.32]) by sourceware.org (Postfix) with ESMTPS id 5522A3844B82 for ; Thu, 12 Jun 2025 12:01:32 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 5522A3844B82 Authentication-Results: sourceware.org; dmarc=pass (p=reject dis=none) header.from=oracle.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=oracle.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 5522A3844B82 Authentication-Results: server2.sourceware.org; arc=pass smtp.remote-ip=205.220.165.32 ARC-Seal: i=2; a=rsa-sha256; d=sourceware.org; s=key; t=1749729692; cv=pass; b=EYLHXXAeIddD6jcuXKQ5WEpKJ84b2wDBkSsE7UdQW9BjpllN4nrzXoPisFjxi7TvEbGLkWKJe3cmDDtYcsumwN5fswjC0ySzRieDlcmodtn77f+UrZ+lfN0v6VgSEuw95Ovrh24sM/4iivdE8KuAHO0n2AkB5+WjQoAd9s2Hw3c= ARC-Message-Signature: i=2; a=rsa-sha256; d=sourceware.org; s=key; t=1749729692; c=relaxed/simple; bh=eH7IIg7y1rAE2tETrRgi7VM4iZvvOSITae6LpWFvjZk=; h=DKIM-Signature:DKIM-Signature:From:To:Subject:Date:Message-Id: MIME-Version; b=GpENlomEEBguUqW6cSF/wg0tf3+0cd+gBHqouQfElezdwn2pbleICASdMEYCSGZKkrYG4QFivbLHjCGCanXKJa2+/6j6FerCkPMFSle4fRB0QC6hXoNaVWEt2kkD3GxKXkOAj7P8FqQVt22UIxIuJNulQY6X0Uh2rtfih1Ls0TE= ARC-Authentication-Results: i=2; server2.sourceware.org DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 5522A3844B82 Received: from pps.filterd (m0246629.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 55C7fsOD022624; Thu, 12 Jun 2025 12:01:27 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=cc :content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s= corp-2025-04-25; bh=/OnCVTzzUv1eXJc+jm+2fhjFHAoqrlJ1QktUOl3fTq8=; b= i9Xjvm/+3oPYAAqDVUeuClTwNCwBzjbqVYts7trEAdpPyZ0VOTLWiI/c1EXtfWHw Zjo7nCT82BYlfFteToHFEQPJBc2rZOa3a5chn3KEyub4UkYDfmX6QlA0BpNnRlJT uYqfNk7X3CIswpCzUSDHUS/FlEI8VzPUFVWIsepAUBb9QSqMK+QBeTmceLcldFLk PJjYX20x2pWv988JUr+ozuaw6JIlOdDnrRnxw57MBRpoORIAXuBfvD0QIqq9vLMd uZWvCpWCzOtQaaFbnfYoPONa9pWENRKOCi/QzfLomTOZzZVqyJ/z30xsqzsSbUC+ 6+UsVXZ73gtqJOmF9LxsMQ== Received: from phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta02.appoci.oracle.com [147.154.114.232]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 474dad9dp1-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 12 Jun 2025 12:01:27 +0000 (GMT) Received: from pps.filterd (phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com (8.18.1.2/8.18.1.2) with ESMTP id 55CAK4V2031918; Thu, 12 Jun 2025 12:01:26 GMT Received: from ch1pr05cu001.outbound.protection.outlook.com (mail-northcentralusazon11010056.outbound.protection.outlook.com [52.101.193.56]) by phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTPS id 474bvbg0p4-2 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 12 Jun 2025 12:01:26 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=TPnp1RwT0wzRqkdGuYycbDbMldKHCEeXvyf+b4Tew0Y2O5YvD8MJyciJwL+ATQVL0Y+q3tE1HnNEZImOG1V4W0sDpXU7lI6c3ptzCCepx3YGONErFz6ULkzLiFxmo31iBmq53BMly2YCQDAg6UcH3mJ+k4FVTgyPUKsP1kFxvpZMRg9wx9hN8gcqPjavA73iMtYJXdyQl7G9VBZqQxQMppvF/PeGk5hfWA0ANrs852KW1n4TpcKOb5D4Q7gUwT8RSdRUjpav5spk39sdaiaMpgZlJFbEndqXqjntY0xoOWD1/1Wl5aw9JasiiZ1aaJ1FZkOEBM1lVCftl+7Q4Lw+VA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=/OnCVTzzUv1eXJc+jm+2fhjFHAoqrlJ1QktUOl3fTq8=; b=GZleIABQYH6qNQpE0gntA8CNPeNks8S9gHPBomo3faYWyQRv4NvyP4T882jfxieqK18G9zhOabb4zuDp8hTx1cC4cfL7rsj+6rrROZbaDPjYKy1rC/u/BfyGkeVnK/DxFKr04RfHYbxxlyoP+pNAjyovtkkZ/MLYBraRQ2lg1GS3hruYYbmIE9y8rCkqnfmGH97o9JLzZevbm67krb5rxjXSRUtGvqEdAiWE7O+81k80dhC4j7v1tybvXJ8JqIlqiiO2cWzDWOB9M4kz/0Kra7M/giIbxhbVIcCQcGY42QznS5jJRYlYCN56VV8ClNvfjc1q0VK39a119T82jLTYgA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=oracle.com; dmarc=pass action=none header.from=oracle.com; dkim=pass header.d=oracle.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.onmicrosoft.com; s=selector2-oracle-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=/OnCVTzzUv1eXJc+jm+2fhjFHAoqrlJ1QktUOl3fTq8=; b=TjM3iHgxSeyGv1b6M+UGrgaH90dTSTFyyMM2QWqrLnbhLlxTTMW69upk9TVZ+Uj2Og3PX+laIVvTRL4HVN9daw/x83Wtghrm+Yh8YoqWO2Kxr0lEHyq9DgsXKy3OiqSAo1uYQyuRWw/cpDGkLriOaa2evNTi7KDjVzhvRXgr1Lk= Received: from MN2PR10MB4382.namprd10.prod.outlook.com (2603:10b6:208:1d7::13) by SA1PR10MB7683.namprd10.prod.outlook.com (2603:10b6:806:386::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8835.18; Thu, 12 Jun 2025 12:01:20 +0000 Received: from MN2PR10MB4382.namprd10.prod.outlook.com ([fe80::5033:84a3:f348:fefb]) by MN2PR10MB4382.namprd10.prod.outlook.com ([fe80::5033:84a3:f348:fefb%5]) with mapi id 15.20.8835.018; Thu, 12 Jun 2025 12:01:20 +0000 From: Cupertino Miranda To: libc-alpha@sourceware.org Cc: jose.marchesi@oracle.com, elena.zannoni@oracle.com, Wilco.Dijkstra@arm.com, dj@redhat.com, Cupertino Miranda Subject: [PATCH v11 1/2] malloc: add tcache support for large chunk caching Date: Thu, 12 Jun 2025 13:01:05 +0100 Message-Id: <20250612120106.501455-2-cupertino.miranda@oracle.com> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20250612120106.501455-1-cupertino.miranda@oracle.com> References: <20250612120106.501455-1-cupertino.miranda@oracle.com> X-ClientProxiedBy: AM4PR0302CA0001.eurprd03.prod.outlook.com (2603:10a6:205:2::14) To MN2PR10MB4382.namprd10.prod.outlook.com (2603:10b6:208:1d7::13) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: MN2PR10MB4382:EE_|SA1PR10MB7683:EE_ X-MS-Office365-Filtering-Correlation-Id: abcbf92f-035d-46dd-f8da-08dda9a8d7dc X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|366016|1800799024; X-Microsoft-Antispam-Message-Info: hQ3n0QzgB7fgJNqQbrv8KNiL2wsJ2rmmYcaLcIdeT1xRYmpaP5l5GqhcaqxQp5p4PXEZI1B0xPIQitSdrozw0d9zgWpsymyp311kEgNfNGZY0342fDIPFEGjg6MELsfQQvtw7ifE1cYd8vD91Rgb2YywhLKVKnY8CKYrLvEC1MaBBtIUIQU0wuES9mY/dNGBgp5y99FLlin9Vm/b9IvTfRiyZTAvfZgSEoGZewp3b5NKhyT1qIxzw6JDpF/3H2FeM3dIetp2FFk/bkkJnVAqCFsWmLH7iYm+i1vGQVY9Kkcsl+FFWQWOvwMyFqZ65kOiYeNeO7qhDDFZMCjqC5ZpZV1IB9KbpgemBcYfszJ02bc8Kka23yF4+Z9RBDHYr1nstgA6HwGZZHK5I9Q5Yk0bc7QhcAb6/RNdQnDwkhEyTaUu1iinS6xj+o5Z8yMgWxv3Bd8Ju5/4fuRuxQfp/MhAvjBiljzWSRFdOCv4E4SlQS9H9gF3enHqll/wkgMkhv+MYy/lMnJclnuduYWo0stOiw9lpi3sLLI3lSmu+ofy3DhyXcYY8NUh47GpM8N2/4Mz51/R8IZ5AGwI1H3Qon6gIK1hzmw3X/zxE0JTMamX3PT/NLN8HaMZrGaP2CLBEuuYLb4H+1tcjFSL0mS9nxQPDJvhqDWaxH4UaYVQwStnO9V2NrGcPfvdhrvGLwxs3UgU/oGtEJrsDlDEdCLDPWd9aOeZCZSblfUC+8bUTlRhjWaZuWMCpx0cpiIluQ/dhfNFdQG5KBnmfflJm6iRsbykhPY+PI0SxXaNXhAl8fL9VWNucLSTY1eBB3e/mJjDCnnd9do3EIL70VJtkiNel6hFXbF9j8BfHWFi5pibyipx4tfL+pBRTcPSChizCikKUQJmeUGxOGcO1wYud6RcmTPuyhmgi1mBHEBt2rXv8sS3g/otlfUJGOy3EiUZC6o19coxg/ucB3U/Au0zASW0tFo4ODuyP2o3fBDDaAtCakIxngd8Zogf9HtMMTiKhtnNVkZxTDp1FxyA6Qs4WyyIkkIu20DXTxhBrwK30f/lBcb31sEyCHqc7FSqtg/jWWrskk0aPO4/+mddQVOr064XiBwZp0+/RUzNnKT/44AHIN2HDCBcXZ/kD0ld7okInLcq3HrEfloThT9UuXv370ti/jIVtFPApTi9peVj/Ci8OmCD/gWdAyfBJgO/zat37B/nhI+qvjhfcG6+JIgMenMxp6OSayrE1D9LvXIG0Dy8o7xv6FYzN44z/8Xx64tBbIFpKUL8NIM6pBpUd8rI1q+qRNKyTtH2saYLIkxSrZtyLmED6VeR40lId5Vw3xl84NX8C1S49WNCgO5eayOk4Ze0Tei4nh8WAhFoizZanbFLF+AfL8HiCYl8JtwP0qget45Zon70fIjuJh32HZFUHKOPVfZq8h/Bei5ltR8REimIbXfhhT4= X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:MN2PR10MB4382.namprd10.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230040)(376014)(366016)(1800799024); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: ef6HS8eFiR68OhKnv/B3cI41Oqkp4eX7wAdzqzgAVCRRke3NbOAgdWJtI5QBqYXobJF3BNL3PZqs5TXYm4y82YoGBEnP3yNp/UcccJbYaXYeSOV3zwTBCJOEx/yTW0+cUKVdEaKKPyHvDo32CyeVIrURfcZBffXWRW+Y6OAkM2wavEI1ZWN/Eft/k/ztCk2tfmwjMMEkmOLLrBPUosk7Uw28DdJxHYVFagZ64H3Ui7t3DJsOLQygJHZr6HMJzcq782iZ30+/Rv/Bck85UoCWv4vV3jGYoA2K74ofLgZr1RRK/kgAbXaKKh3zXe6KissR+F9yw3kJQrh02Vc8TlrYr0V2KLMC8oY7bHKOpIJUUtCcmAVFrCRKUFcgMwFCj/cMgLViCRtoORUUMIvYlDrgzitTeAtRJQmEz0CkK2nK58/vdZwEPxrbk8BR1opGdIdL/qXlVaKE7FJL/izR1mLHBSJblRLQlwSDzgnSg5n0MA8bQrKA2yHEHpZQM+xZ82sabqf8blLjwtVIJjHQNJZKLk9rCOcFNc6AJz4s+T5VOHHs5Xr0kfFUrUFFQxI+HPFwrvUnd9QQNMFqP58FmuVCe6DqzTq/h1PAfJP6aTGsR4Rg61OolHbFWnYMd/YrwEay2h1zTFGW1Jy2Jxr1rJVwV366q/O4AxrQ6Gi1xvSDRKBfa6m+bQjZIVo8AN1RCmElXFYDh14SNxemo/BnUx7ZO6Flsv2bTUxWRf0LDV9Z9k0BVeqjyysy6YFBXJ9cYfgmrmZDsUlM/GVwQ8Jzj8M6P20DMc2RlTtmNcanLBeGTkzGbnRUT1H3jkL+7C+SG3hkqJACoKFyFT5vgM80apj9oihZ+IEtAeiRDRGPbj89r7gHJW5FZXNzkLlHXgaf8QdEfsOoWXo4WLIdAws5pREZCxyjdyum5ueblfCmW7i1ZFphUXq6s+OD6Jdhag/hd4LA7pbmYDiNuATu1fKGdFNxSWCJ3sy7zgb4UHJzbFvYUESkwR4gaXtjAavf7QFskZMuS78FwP7xPCJvLE5wXLXLOdruCRr+UYiQFAw6ssjfwu0wXl9GvTzTxPgf4Qs72k0UcbRukGQueZ9ao5mdf1X0atl+worKKv4Xt4IuCCsamliAt2lGzy/xUSzSQZhzkjNKG6ioR6ktonAv9Rseo9UEkEM5JswthnikM6PvjElO6YS2gc5jKPX4Vv3N0i7w4CLuIYJQ/Uwq3tSZl0hbZ0LqrzDeYNPghaXeDrl7T3KyaHnBWSEVEQYHUwxg3MSN2Kv4SPqgZ+Lkb6JpblZSLSUH/+ettXfsYzVJqLd0MzDf6Fd1Pt0tDjBVdCGq/nJeHD4VdtJFvW14yLXGqVmawlCuRx0g69kuYfIUN4IuKiG+Ca1z7ItlEBHBWwSLawM29wblfSibU83bgfNZry+zhVIkp1pEgQtgsm4rJF8Qd8b+PeKGdEvCYx6MYY1zr9uFTNI+fQw7S3a0QGZ82P77asEqi2zGeTAOs4HdDWeQWrkwGsMnbcCAnWiI/yknfh1m6467oPScEcwO/Ooy/KxJcqsxHP+6LrMaYDNMhv1GjYFZOhlIz01iFpoapRU576uUtPOn4ir/3E8TPVo4eM1hW10UYg== X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: uievA0x+5Q4i1oOAR348TBOvXybRNr7hhL1QqM06iFYkQPE5OfyVXPbeSwmtHYUh/4busfsvvE17WNY5ghkThEm3Jom9sIYof7tL7UNVnJoCCRk4CC4caOd6pLHN+uOd0wWPQ+daW/CIJJLXptCu4zgv1NCn8SvghbCyLnWy+m6x6LxR98nIu+ntTYcIUrVrFJb/F6rBWH9L9gsSQR0Ujwo7imq+k94IqZST9H3oQWFV2j2yjs6wRoc64vzs8YkEcnAicuptUGKC+L8pPjwU7+AHRtgY3fnVTyiF0pPgZbEE4iHhogi1B6NZ2mC6qlH4g0Pp5StV93pOkTqz6EHC0YO0HhwljWZkQ9csAbPaK2JgwFOhuKqU7Lp7joonmbF643vCw/oBkXJfN2oZs7GR9RAnm/ecZKt5k3XaicMt7eSs5L5uaZ0iG5kVQWrn0ChtsxdUxAiPx8I8aOJd+i2IyvmK5Z0c5ktCsvtVzZ6Nz6eY6jf8CFZUFw9MXJtms8yGWbtiiEYezyNBDJgcTbM688JT8m7V5LIFHXKXb9K4GaPsqt7/o7LVGvIiWouDKHhZjNMc1APSpe2/DVFnZi19XJSn83McdyshCQC0iiN70jo= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: abcbf92f-035d-46dd-f8da-08dda9a8d7dc X-MS-Exchange-CrossTenant-AuthSource: MN2PR10MB4382.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 12 Jun 2025 12:01:20.1766 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 4e2c6054-71cb-48f1-bd6c-3a9705aca71b X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: OB+/HVfIUpnV6FLiyh8bIirsZzNhRzm/8X+dCmo6CSmtSM1HsAEmyhoHM1sku8AMsuMztatWOVZM2bR8I3z+82EmgBrwUpX7WEtJDkoeUV0= X-MS-Exchange-Transport-CrossTenantHeadersStamped: SA1PR10MB7683 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1099,Hydra:6.0.736,FMLib:17.12.80.40 definitions=2025-06-12_08,2025-06-10_01,2025-03-28_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 bulkscore=0 mlxscore=0 suspectscore=0 phishscore=0 malwarescore=0 mlxlogscore=999 spamscore=0 adultscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2505160000 definitions=main-2506120092 X-Proofpoint-ORIG-GUID: -egIKsS7-QsrGw9hN3g0l6XoO43Yrh2I X-Authority-Analysis: v=2.4 cv=EJwG00ZC c=1 sm=1 tr=0 ts=684ac197 cx=c_pps a=OOZaFjgC48PWsiFpTAqLcw==:117 a=OOZaFjgC48PWsiFpTAqLcw==:17 a=6eWqkTHjU83fiwn7nKZWdM+Sl24=:19 a=lCpzRmAYbLLaTzLvsPZ7Mbvzbb8=:19 a=wKuvFiaSGQ0qltdbU6+NXLB8nM8=:19 a=Ol13hO9ccFRV9qXi2t6ftBPywas=:19 a=xqWC_Br6kY4A:10 a=6IFa9wvqVegA:10 a=GoEa3M9JfhUA:10 a=P5qX2CLHeDGtx4If-FYA:9 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUwNjEyMDA5MiBTYWx0ZWRfXzcXq0o5pabbg JLf97J9XK535l/hWmkQ5pALH90wo096/JLr28vexQnoLu0Qthr9H8SwVCm2VniGEyyMhLSmprD+ 747D6VGOgX45UngKmCjmiXS468n63WBaEw8a8eVs3VxuwLuCbLps4aofHJYKGnGbvcf1T8PADIt qRSFpr8ku7vK+wXTCIfnD3eyJnTmB5UpeKot37zdwtkdlNUCRGuwAsUwJmTfQ7oQxWamdy/sOe4 G+xbywtOqeFTCJa8bJhEOvJ2ddBw9IWjPmlRxoj7p+SF9HoosjJI4napwAPPVldgswdzMSLAMXF +jIYcxDGtlNOxLY4dLXOlCOd2UAkoYOU/H0YPuT6WshkudcJCOrtI1vWRZQP1OZI7X75Kcq3e6m YyQmF2GD85MR1ryg8vvTtC4t8oHQLtc15wkfoLprKr9/qv9VxKV8YC9fgT9bOT3xxy6b8mos X-Proofpoint-GUID: -egIKsS7-QsrGw9hN3g0l6XoO43Yrh2I X-Spam-Status: No, score=-12.3 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, RCVD_IN_DNSWL_LOW, RCVD_IN_MSPIKE_H5, RCVD_IN_MSPIKE_WL, RCVD_IN_VALIDITY_RPBL_BLOCKED, RCVD_IN_VALIDITY_SAFE_BLOCKED, SPF_HELO_NONE, SPF_NONE, TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org X-BeenThere: libc-alpha@sourceware.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Libc-alpha mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: libc-alpha-bounces~patchwork=sourceware.org@sourceware.org Existing tcache implementation in glibc seems to focus in caching smaller data size allocations, limiting the size of the allocation to 1KB. This patch changes tcache implementation to allow to cache any chunk size allocations. The implementation adds extra bins (linked-lists) which store chunks with different ranges of allocation sizes. Bin selection is done in multiples in powers of 2 and chunks are inserted in growing size ordering within the bin. The last bin contains all other sizes of allocations. This patch although by default preserves the same implementation, limitting caches to 1KB chunks, it now allows to increase the max size for the cached chunks with the tunable glibc.malloc.tcache_max. It also now verifies if chunk was mmapped, in which case __libc_free will not add it to tcache. --- malloc/malloc.c | 309 +++++++++++++++++++++++++++++++++++------------- 1 file changed, 227 insertions(+), 82 deletions(-) diff --git a/malloc/malloc.c b/malloc/malloc.c index c40b793f4a..3f91ff44b3 100644 --- a/malloc/malloc.c +++ b/malloc/malloc.c @@ -291,8 +291,10 @@ #if USE_TCACHE /* We want 64 entries. This is an arbitrary limit, which tunables can reduce. */ -# define TCACHE_MAX_BINS 64 -# define MAX_TCACHE_SIZE tidx2usize (TCACHE_MAX_BINS-1) +# define TCACHE_SMALL_BINS 64 +# define TCACHE_LARGE_BINS 12 /* Up to 4M chunks */ +# define TCACHE_MAX_BINS (TCACHE_SMALL_BINS + TCACHE_LARGE_BINS) +# define MAX_TCACHE_SMALL_SIZE tidx2usize (TCACHE_MAX_BINS-1) /* Only used to pre-fill the tunables. */ # define tidx2usize(idx) (((size_t) idx) * MALLOC_ALIGNMENT + MINSIZE - SIZE_SZ) @@ -592,6 +594,7 @@ void* __libc_malloc(size_t); libc_hidden_proto (__libc_malloc) static void *__libc_calloc2 (size_t); +static void *__libc_malloc2 (size_t); /* free(void* p) @@ -1893,8 +1896,8 @@ struct malloc_par char *sbrk_base; #if USE_TCACHE - /* Maximum number of buckets to use. */ - size_t tcache_bins; + /* Maximum number of small buckets to use. */ + size_t tcache_small_bins; size_t tcache_max_bytes; /* Maximum number of chunks in each bucket. */ size_t tcache_count; @@ -1930,8 +1933,8 @@ static struct malloc_par mp_ = #if USE_TCACHE , .tcache_count = TCACHE_FILL_COUNT, - .tcache_bins = TCACHE_MAX_BINS, - .tcache_max_bytes = tidx2usize (TCACHE_MAX_BINS-1), + .tcache_small_bins = TCACHE_SMALL_BINS, + .tcache_max_bytes = MAX_TCACHE_SMALL_SIZE, .tcache_unsorted_limit = 0 /* No limit. */ #endif }; @@ -3159,10 +3162,19 @@ tcache_key_initialize (void) } } +static __always_inline size_t +large_csize2tidx(size_t nb) +{ + size_t idx = TCACHE_SMALL_BINS + + __builtin_clz (MAX_TCACHE_SMALL_SIZE) + - __builtin_clz (nb); + return idx; +} + /* Caller must ensure that we know tc_idx is valid and there's room for more chunks. */ static __always_inline void -tcache_put (mchunkptr chunk, size_t tc_idx) +tcache_put_n (mchunkptr chunk, size_t tc_idx, tcache_entry **ep, bool mangled) { tcache_entry *e = (tcache_entry *) chunk2mem (chunk); @@ -3170,8 +3182,16 @@ tcache_put (mchunkptr chunk, size_t tc_idx) detect a double free. */ e->key = tcache_key; - e->next = PROTECT_PTR (&e->next, tcache->entries[tc_idx]); - tcache->entries[tc_idx] = e; + if (!mangled) + { + e->next = PROTECT_PTR (&e->next, *ep); + *ep = e; + } + else + { + e->next = PROTECT_PTR (&e->next, REVEAL_PTR (*ep)); + *ep = PROTECT_PTR (ep, e); + } --(tcache->num_slots[tc_idx]); } @@ -3179,10 +3199,10 @@ tcache_put (mchunkptr chunk, size_t tc_idx) available chunks to remove. Removes chunk from the middle of the list. */ static __always_inline void * -tcache_get_n (size_t tc_idx, tcache_entry **ep) +tcache_get_n (size_t tc_idx, tcache_entry **ep, bool mangled) { tcache_entry *e; - if (ep == &(tcache->entries[tc_idx])) + if (!mangled) e = *ep; else e = REVEAL_PTR (*ep); @@ -3190,40 +3210,109 @@ tcache_get_n (size_t tc_idx, tcache_entry **ep) if (__glibc_unlikely (!aligned_OK (e))) malloc_printerr ("malloc(): unaligned tcache chunk detected"); - if (ep == &(tcache->entries[tc_idx])) - *ep = REVEAL_PTR (e->next); + void *ne = e == NULL ? NULL : REVEAL_PTR (e->next); + if (!mangled) + *ep = ne; else - *ep = PROTECT_PTR (ep, REVEAL_PTR (e->next)); + *ep = PROTECT_PTR (ep, ne); ++(tcache->num_slots[tc_idx]); e->key = 0; return (void *) e; } +static __always_inline void +tcache_put (mchunkptr chunk, size_t tc_idx) +{ + tcache_put_n (chunk, tc_idx, &tcache->entries[tc_idx], false); +} + /* Like the above, but removes from the head of the list. */ static __always_inline void * tcache_get (size_t tc_idx) { - return tcache_get_n (tc_idx, & tcache->entries[tc_idx]); + return tcache_get_n (tc_idx, & tcache->entries[tc_idx], false); } -/* Iterates through the tcache linked list. */ -static __always_inline tcache_entry * -tcache_next (tcache_entry *e) +static __always_inline tcache_entry ** +tcache_location_large (size_t nb, size_t tc_idx, bool *mangled) { - return (tcache_entry *) REVEAL_PTR (e->next); + tcache_entry **tep = &(tcache->entries[tc_idx]); + tcache_entry *te = *tep; + while (te != NULL + && __glibc_unlikely (chunksize (mem2chunk (te)) < nb)) + { + tep = & (te->next); + te = REVEAL_PTR (te->next); + *mangled = true; + } + + return tep; } -/* Check if tcache is available for alloc by corresponding tc_idx. */ -static __always_inline bool -tcache_available (size_t tc_idx) +static __always_inline void +tcache_put_large (mchunkptr chunk, size_t tc_idx) { - if (tc_idx < mp_.tcache_bins - && tcache != NULL - && tcache->entries[tc_idx] != NULL) - return true; - else - return false; + tcache_entry **entry; + bool mangled = false; + entry = tcache_location_large (chunksize (chunk), tc_idx, &mangled); + + return tcache_put_n (chunk, tc_idx, entry, mangled); +} + +static __always_inline void * +tcache_get_large (size_t tc_idx, size_t nb) +{ + tcache_entry **entry; + bool mangled = false; + entry = tcache_location_large (nb, tc_idx, &mangled); + + if ((mangled && REVEAL_PTR (*entry) == NULL) + || (!mangled && *entry == NULL)) + return NULL; + + return tcache_get_n (tc_idx, entry, mangled); +} + +static void tcache_init (void); + +static __always_inline void * +tcache_get_align (size_t nb, size_t alignment) +{ + if (nb < mp_.tcache_max_bytes) + { + if (__glibc_unlikely (tcache == NULL)) + { + tcache_init (); + return NULL; + } + + size_t tc_idx = csize2tidx (nb); + if (__glibc_unlikely (tc_idx >= TCACHE_SMALL_BINS)) + tc_idx = large_csize2tidx (nb); + + /* The tcache itself isn't encoded, but the chain is. */ + tcache_entry **tep = & tcache->entries[tc_idx]; + tcache_entry *te = *tep; + bool mangled = false; + size_t csize; + + while (te != NULL + && ((csize = chunksize (mem2chunk (te))) < nb + || (csize == nb + && !PTR_IS_ALIGNED (te, alignment)))) + { + tep = & (te->next); + te = REVEAL_PTR (te->next); + mangled = true; + } + + if (te != NULL + && csize == nb + && PTR_IS_ALIGNED (te, alignment)) + return tag_new_usable (tcache_get_n (tc_idx, tep, mangled)); + } + return NULL; } /* Verify if the suspicious tcache_entry is double free. @@ -3299,7 +3388,7 @@ tcache_init(void) /* Check minimum mmap chunk is larger than max tcache size. This means mmap chunks with their different layout are never added to tcache. */ - if (MAX_TCACHE_SIZE >= GLRO (dl_pagesize) / 2) + if (MAX_TCACHE_SMALL_SIZE >= GLRO (dl_pagesize) / 2) malloc_printerr ("max tcache size too large"); arena_get (ar_ptr, bytes); @@ -3336,12 +3425,14 @@ tcache_calloc_init (size_t bytes) return __libc_calloc2 (bytes); } -# define MAYBE_INIT_TCACHE() \ - if (__glibc_unlikely (tcache == NULL)) \ - tcache_init(); +static void * __attribute_noinline__ +tcache_malloc_init (size_t bytes) +{ + tcache_init (); + return __libc_malloc2 (bytes); +} #else /* !USE_TCACHE */ -# define MAYBE_INIT_TCACHE() static void tcache_thread_shutdown (void) @@ -3359,8 +3450,6 @@ __libc_malloc2 (size_t bytes) mstate ar_ptr; void *victim; - MAYBE_INIT_TCACHE (); - if (SINGLE_THREAD_P) { victim = tag_new_usable (_int_malloc (&main_arena, bytes)); @@ -3395,10 +3484,32 @@ void * __libc_malloc (size_t bytes) { #if USE_TCACHE - size_t tc_idx = usize2tidx (bytes); + size_t nb = checked_request2size (bytes); + if (nb == 0) + { + __set_errno (ENOMEM); + return NULL; + } + + if (nb < mp_.tcache_max_bytes) + { + size_t tc_idx = csize2tidx (nb); + if(__glibc_unlikely (tcache == NULL)) + return tcache_malloc_init (bytes); - if (tcache_available (tc_idx)) - return tag_new_usable (tcache_get (tc_idx)); + if (__glibc_likely (tc_idx < TCACHE_SMALL_BINS)) + { + if (tcache->entries[tc_idx] != NULL) + return tag_new_usable (tcache_get (tc_idx)); + } + else + { + tc_idx = large_csize2tidx (nb); + void *victim = tcache_get_large (tc_idx, nb); + if (victim != NULL) + return tag_new_usable (victim); + } + } #endif return __libc_malloc2 (bytes); @@ -3431,9 +3542,7 @@ __libc_free (void *mem) check_inuse_chunk (arena_for_chunk (p), p); #if USE_TCACHE - size_t tc_idx = csize2tidx (size); - - if (__glibc_likely (tcache != NULL && tc_idx < mp_.tcache_bins)) + if (__glibc_likely (size < mp_.tcache_max_bytes && tcache != NULL)) { /* Check to see if it's already in the tcache. */ tcache_entry *e = (tcache_entry *) chunk2mem (p); @@ -3442,8 +3551,20 @@ __libc_free (void *mem) if (__glibc_unlikely (e->key == tcache_key)) return tcache_double_free_verify (e); - if (__glibc_likely (tcache->num_slots[tc_idx] != 0)) - return tcache_put (p, tc_idx); + size_t tc_idx = csize2tidx (size); + if (__glibc_likely (tc_idx < TCACHE_SMALL_BINS)) + { + if (__glibc_likely (tcache->num_slots[tc_idx] != 0)) + return tcache_put (p, tc_idx); + } + else + { + tc_idx = large_csize2tidx (size); + if (size >= MINSIZE + && !chunk_is_mmapped (p) + && __glibc_likely (tcache->num_slots[tc_idx] != 0)) + return tcache_put_large (p, tc_idx); + } } #endif @@ -3646,27 +3767,15 @@ _mid_memalign (size_t alignment, size_t bytes, void *address) } #if USE_TCACHE - { - size_t tc_idx = usize2tidx (bytes); - - if (tcache_available (tc_idx)) - { - /* The tcache itself isn't encoded, but the chain is. */ - tcache_entry **tep = & tcache->entries[tc_idx]; - tcache_entry *te = *tep; - while (te != NULL && !PTR_IS_ALIGNED (te, alignment)) - { - tep = & (te->next); - te = tcache_next (te); - } - if (te != NULL) - { - void *victim = tcache_get_n (tc_idx, tep); - return tag_new_usable (victim); - } - } - MAYBE_INIT_TCACHE (); - } + size_t nb = checked_request2size (bytes); + if (nb == 0) + { + __set_errno (ENOMEM); + return NULL; + } + void *victim = tcache_get_align (nb, alignment); + if (victim != NULL) + return tag_new_usable (victim); #endif if (SINGLE_THREAD_P) @@ -3722,7 +3831,7 @@ __libc_pvalloc (size_t bytes) return _mid_memalign (pagesize, rounded_bytes, address); } -void * +static void * __attribute_noinline__ __libc_calloc2 (size_t sz) { mstate av; @@ -3828,20 +3937,41 @@ __libc_calloc (size_t n, size_t elem_size) } #if USE_TCACHE - size_t tc_idx = usize2tidx (bytes); - if (__glibc_likely (tc_idx < mp_.tcache_bins)) + size_t nb = checked_request2size (bytes); + if (nb == 0) + { + __set_errno (ENOMEM); + return NULL; + } + if (nb < mp_.tcache_max_bytes) { if (__glibc_unlikely (tcache == NULL)) - return tcache_calloc_init (bytes); + return tcache_calloc_init (bytes); - if (__glibc_likely (tcache->entries[tc_idx] != NULL)) - { - void *mem = tcache_get (tc_idx); + size_t tc_idx = csize2tidx (nb); - if (__glibc_unlikely (mtag_enabled)) - return tag_new_zero_region (mem, memsize (mem2chunk (mem))); + if (__glibc_unlikely (tc_idx < TCACHE_SMALL_BINS)) + { + if (tcache->entries[tc_idx] != NULL) + { + void *mem = tcache_get (tc_idx); + if (__glibc_unlikely (mtag_enabled)) + return tag_new_zero_region (mem, memsize (mem2chunk (mem))); - return clear_memory ((INTERNAL_SIZE_T *) mem, tidx2usize (tc_idx)); + return clear_memory ((INTERNAL_SIZE_T *) mem, tidx2usize (tc_idx)); + } + } + else + { + tc_idx = large_csize2tidx (nb); + void *mem = tcache_get_large (tc_idx, nb); + if (mem != NULL) + { + if (__glibc_unlikely (mtag_enabled)) + return tag_new_zero_region (mem, memsize (mem2chunk (mem))); + + return memset (mem, 0, memsize (mem2chunk (mem))); + } } } #endif @@ -3949,7 +4079,7 @@ _int_malloc (mstate av, size_t bytes) /* While we're here, if we see other chunks of the same size, stash them in the tcache. */ size_t tc_idx = csize2tidx (nb); - if (tcache != NULL && tc_idx < mp_.tcache_bins) + if (tcache != NULL && tc_idx < mp_.tcache_small_bins) { mchunkptr tc_victim; @@ -4009,7 +4139,7 @@ _int_malloc (mstate av, size_t bytes) /* While we're here, if we see other chunks of the same size, stash them in the tcache. */ size_t tc_idx = csize2tidx (nb); - if (tcache != NULL && tc_idx < mp_.tcache_bins) + if (tcache != NULL && tc_idx < mp_.tcache_small_bins) { mchunkptr tc_victim; @@ -4071,7 +4201,7 @@ _int_malloc (mstate av, size_t bytes) #if USE_TCACHE INTERNAL_SIZE_T tcache_nb = 0; size_t tc_idx = csize2tidx (nb); - if (tcache != NULL && tc_idx < mp_.tcache_bins) + if (tcache != NULL && tc_idx < mp_.tcache_small_bins) tcache_nb = nb; int return_cached = 0; @@ -4151,7 +4281,8 @@ _int_malloc (mstate av, size_t bytes) #if USE_TCACHE /* Fill cache first, return to user only if cache fills. We may return one of these chunks later. */ - if (tcache_nb > 0 && tcache->num_slots[tc_idx] != 0) + if (tcache_nb > 0 + && tcache->num_slots[tc_idx] != 0) { tcache_put (victim, tc_idx); return_cached = 1; @@ -5483,13 +5614,27 @@ do_set_arena_max (size_t value) static __always_inline int do_set_tcache_max (size_t value) { - if (value <= MAX_TCACHE_SIZE) + size_t nb = request2size (value); + size_t tc_idx = csize2tidx (nb); + + /* To check that value is not too big and request2size does not return an + overflown value. */ + if (value > nb) + return 0; + + if (nb > MAX_TCACHE_SMALL_SIZE) + tc_idx = large_csize2tidx (nb); + + LIBC_PROBE (memory_tunable_tcache_max_bytes, 2, value, mp_.tcache_max_bytes); + + if (tc_idx < TCACHE_MAX_BINS) { - LIBC_PROBE (memory_tunable_tcache_max_bytes, 2, value, mp_.tcache_max_bytes); - mp_.tcache_max_bytes = value; - mp_.tcache_bins = csize2tidx (request2size(value)) + 1; + if (tc_idx < TCACHE_SMALL_BINS) + mp_.tcache_small_bins = tc_idx + 1; + mp_.tcache_max_bytes = nb; return 1; } + return 0; } From patchwork Thu Jun 12 12:01:06 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Cupertino Miranda X-Patchwork-Id: 114362 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id E684D3844BB1 for ; Thu, 12 Jun 2025 12:05:41 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org E684D3844BB1 Authentication-Results: sourceware.org; dkim=pass (2048-bit key, unprotected) header.d=oracle.com header.i=@oracle.com header.a=rsa-sha256 header.s=corp-2025-04-25 header.b=XOr66GWo; dkim=pass (1024-bit key, unprotected) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.a=rsa-sha256 header.s=selector2-oracle-onmicrosoft-com header.b=rvMBCboj X-Original-To: libc-alpha@sourceware.org Delivered-To: libc-alpha@sourceware.org Received: from mx0a-00069f02.pphosted.com (mx0a-00069f02.pphosted.com [205.220.165.32]) by sourceware.org (Postfix) with ESMTPS id 5008D3844B84 for ; Thu, 12 Jun 2025 12:01:41 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 5008D3844B84 Authentication-Results: sourceware.org; dmarc=pass (p=reject dis=none) header.from=oracle.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=oracle.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 5008D3844B84 Authentication-Results: server2.sourceware.org; arc=pass smtp.remote-ip=205.220.165.32 ARC-Seal: i=2; a=rsa-sha256; d=sourceware.org; s=key; t=1749729701; cv=pass; b=BlmhFXT9V/nDWW4zNF9YxtEXAqs7wXesLQBIdQqrnkxfrQ9QMCj3ZL17/v4KHAT6nFjaLpwJM7+zSgVLlBhFGroRDdvhZVxT0nQtXiwrJzLVY1tSJK3SSgadOHayjU+76KpNHhiKaBSwiGcqK/3qwjLkcSTnnBJRiy3vn+y8iYI= ARC-Message-Signature: i=2; a=rsa-sha256; d=sourceware.org; s=key; t=1749729701; c=relaxed/simple; bh=lim4WlNYvLk41qPTALOsgVvlaxd9Hzvur8WzsAFlk6U=; h=DKIM-Signature:DKIM-Signature:From:To:Subject:Date:Message-Id: MIME-Version; b=ideYyCszCd5mUt5pZ0VAT8KesIeXgsSNEnTWuyLdz4rK/Dku7YL8CkVWa7dcOO2hm1HQWeT9HWOFjXKoWrnobCwo0mRA3A4efYllUjZqFrqexmw9eMMl4N/uuNe/cQ165Bxf26/9Mjy6z3gk9FciE/xxuWMT3tQnTFldGDgTWXY= ARC-Authentication-Results: i=2; server2.sourceware.org DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 5008D3844B84 Received: from pps.filterd (m0333521.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 55C7fiW6031805; Thu, 12 Jun 2025 12:01:35 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=cc :content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s= corp-2025-04-25; bh=9US1LY8kN72hARk8kW2e/qS/17z69ARPdhgEQDDqXis=; b= XOr66GWoSqR0qaE2QQi3yhLMyTBv59xxu6JHgEoAGqCHfYw6DtpMCmb9vwXIt1rg i4DT8Kp9Brj0gpcsEvR3zFIl5jiz9yoUNF2Jc7Nkkv2eaXNLNcHOLI8rFKu+u4Gz erzrgKRtltRwS7qF79A1+yj/LZXRhjK9qlyZ4CPAoaGlCs/BSn3BxOa3UwRHGHQo utL8wGoHoYB2ES70maQasaJTJ3PPzY5yIBriBOrhlekN1jKZlyQDG+9D+jHO+5Cg qHvI40tjSX5nYxDObNZCnmSG5rVW2iQ4zJGms0WdrnKyusd8v6tuNAs3S+Zkitnc p5wwMn1rY9ZbBNFXZ1DsSw== Received: from phxpaimrmta01.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta01.appoci.oracle.com [138.1.114.2]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 474cbehhft-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 12 Jun 2025 12:01:35 +0000 (GMT) Received: from pps.filterd (phxpaimrmta01.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by phxpaimrmta01.imrmtpd1.prodappphxaev1.oraclevcn.com (8.18.1.2/8.18.1.2) with ESMTP id 55CAFYMU013249; Thu, 12 Jun 2025 12:01:34 GMT Received: from cy4pr02cu008.outbound.protection.outlook.com (mail-westcentralusazon11011043.outbound.protection.outlook.com [40.93.199.43]) by phxpaimrmta01.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTPS id 474bvb8epx-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 12 Jun 2025 12:01:34 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=WGag63oqCdwWGJOLZpxYHHta67xc7/Osc1PG5zNXNQd2ATLjATF1MdgmWegjgkpa96gMWQ0BnRw6TzuBsLAo4f/qmbRwpd9S8OA4xDEcGYLRiSZJK/cuKSQV7sxFMoOVjxKkuOz9vB3EJptHVPHBWdQYTY0TIkZHPv6MATIPvMMqJcafw87KldOWc+lbPGOYwMjRtJ6eAHTl1K96vktmOsEehYCOxgpu9EBUFVN0N7Am6aZ2dIz5WCq384FsKSchLBrHC1mqnJjSyLl8Z2c3yJ1cwS6bTHJG8t91wD+kM9eNZlNaipTDbaTu0oDT5xSCxJraODyKX82wWUdlHwnp3Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=9US1LY8kN72hARk8kW2e/qS/17z69ARPdhgEQDDqXis=; b=aMigY2UtZhhLPwGNTUpLY6IqFZXKzd/trp844NKRlYoCYEkS3bN/TWEd5Xz4c+BDxGuWL4m5uumUC+bH27hDqPu6udxzQDLlWTtCNL3tz6SsPWsf12Hf8Xi3b2Edax7LUzib/OggdZB1iXRVEIeXDIurHkVaIKqGHduk2LMVnWm88koV6xLQ3f/qlTfOiD6iE7YfqqnOrTyfgNmG+xvuu2kGXZW1vtEwVPT+yqUcEIw1iGNpBlajzS7FJSUGmNshijxmEDkni+eWQb8QiflAGaOraYwwqapKUNrhl1TZjQGJXATMNlaA2flZTK0s9t7S2e1hWo2MuhJ9ylm8YAfDUg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=oracle.com; dmarc=pass action=none header.from=oracle.com; dkim=pass header.d=oracle.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.onmicrosoft.com; s=selector2-oracle-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=9US1LY8kN72hARk8kW2e/qS/17z69ARPdhgEQDDqXis=; b=rvMBCbojlm0tMJFYM98QyUSyd+Y+g2/kmxDgP19TlCBx8ctcwlPOEGhKV4CUPn1KX+hBwmRbIFkNLyII0XQdWHf8M3I34WYH+wFCQqt5TUeR8FTZNLKvATSQ5yaTNDcXdqLnI92FT30K8vRsQauNEm/hduoPwdXe+7NA49YR1f4= Received: from MN2PR10MB4382.namprd10.prod.outlook.com (2603:10b6:208:1d7::13) by SA1PR10MB7683.namprd10.prod.outlook.com (2603:10b6:806:386::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8835.18; Thu, 12 Jun 2025 12:01:30 +0000 Received: from MN2PR10MB4382.namprd10.prod.outlook.com ([fe80::5033:84a3:f348:fefb]) by MN2PR10MB4382.namprd10.prod.outlook.com ([fe80::5033:84a3:f348:fefb%5]) with mapi id 15.20.8835.018; Thu, 12 Jun 2025 12:01:29 +0000 From: Cupertino Miranda To: libc-alpha@sourceware.org Cc: jose.marchesi@oracle.com, elena.zannoni@oracle.com, Wilco.Dijkstra@arm.com, dj@redhat.com, Cupertino Miranda Subject: [PATCH v11 2/2] malloc: add testing for large tcache support. Date: Thu, 12 Jun 2025 13:01:06 +0100 Message-Id: <20250612120106.501455-3-cupertino.miranda@oracle.com> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20250612120106.501455-1-cupertino.miranda@oracle.com> References: <20250612120106.501455-1-cupertino.miranda@oracle.com> X-ClientProxiedBy: SG2PR06CA0191.apcprd06.prod.outlook.com (2603:1096:4:1::23) To MN2PR10MB4382.namprd10.prod.outlook.com (2603:10b6:208:1d7::13) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: MN2PR10MB4382:EE_|SA1PR10MB7683:EE_ X-MS-Office365-Filtering-Correlation-Id: f88b551b-a89e-4a97-8e0a-08dda9a8dd8b X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|366016|1800799024; X-Microsoft-Antispam-Message-Info: tXlfZXz8nXqdNNsnh/VtMwqURKtyFLL0iKxB7d0fBLPk/AYt2myn6jh1D7BaSOhBVVSGSJ6oMhAvM7tGbhIbl4Z63J6v79IEEh7yWC8q6i1I1nsnagOTWhSkWte3jY8Koxnp2E0XFQ5QJg/10Uj+qFoFHap5QpT+KJ9S6vK+g01Sg9NufFiM+XgPZsMR+3peClT/8DNwe+RWp4Zv+Tg8I/apb2d/E0JxcV+n5IY9XAV36mwMqTSSFAmAETwe9+8iqqXnIO8Sx5yM/Av9tMo8EfQ+8GarIjzC2JQbgFQi/Nq66WXQGUyYQdYL1yMMr/WSNOAsjgyyqsSWHkjHjmkWZYv0LT7F5ROdbtyEoNeTRs+7OcOKr2umh8f+juRh+uvWtzANauR8aFgSEYB5nguPSIa5UdQ4i4xJJaTNNQN6bun8gIK+VE4Rj9Sf+CRn0XG4KQad4D3Y67BkzyYJMXcpxU+/pgsQI52jW0sQ5bElVnNuC3VOLunhdQFdrSAUbhWQDUJj4Esp0nc9A8xS0y8x3+L5hPFIkNGxZOURsuFKaRbcGnbIL/2pgQJ5Lj3RHwZzfDpRwpQ0lemNKOL7jj7wodLHOvh7sQsId0KNnWKt0iMNh+ld52kK1pfgtHO2+wfKkPp1Tx5XAfmUQzk1Xb+yZgc43OXtU3+7LJSZMC+k0Ymv7GY5lmgPchz5eLOgmRA1t+6g1z73BzG79W//JsqcoAxAXV4Wxqzs1shqZYqwvpMyE0/T2P7ETR4KmHQlI7SSGlFwMVlHGfgzNYwp3BJdY+2/7d2IrAxPtYieX2DtxQQoe3Q2QDg9jx66x/huVW0rtXDFEYPBW5UohysqUHRBTjhuxwees6JTgNtcKzMHBMbHALzZ2jAahCYwCeV4cz0hCiW54+cTrlc32r875n8TFxZmBFXtVbZEPlgo8+OfLKgVpraSYzts7x/iaLt+A6gTCWqehm78zVSXSgfXYgQ2qoCQtFWayWYW5oglGfqV6uFZfwlpUqI+G082cYSOEwq78Hw8eiWf0bMJSzP6JoKQci98jhDZBPd0gv/gVlC6/R6yRbpfza1sSsX6MPe7vZUDRiOMpiOzF+HBWaQ3QOMFa25uTjRVmh3qv1aLFyZqmQ6UY/S/wBKZo2/qvslX0KGT8Ngggh8bgdK2+hVe9t7ftZLFhTTkgadlpM9GoxUvP5/LuqfPzq4fS49kyv48AWiIuDfDw0wPJMHbQ+U45UsgAlT7oW0+1TyRfya8+KCkTUqm2UBWR2KTyjSS0oKag21VVOgAH+gk0x5UrB7EkVzax/nFDTndRorOaOuN0XS/47hs/1EVN5EfwEFrEGDQyRhZzpa/lXoqPhAYLoJqVP5bHtLzFlQEQAhn6OoEIIaWJt9+HMWbR/+/hZb1iyOvWIiM2wVhe7BDUXUEP7/g6SY/IN0W3BMPYo1rzx9SyKVw6QA= X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:MN2PR10MB4382.namprd10.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230040)(376014)(366016)(1800799024); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: nJyoIkdzNlJrL8SG2v0k9fKirYhgWt5yqMWQQQcC8PCeBzP0GluRW2cTv6UDRIBQ1H9q5mM6LvPn8XRZVJt3uiEHwWyavsEe/IfUMKaH8d0Tl7Oq4WRABC5VLOlzS89syLZ0iCpTvt5mIKqmVUBf5VZwL7t9vq0d8ITTqfQ/t8xN7DS2XFKg4j9Y0LGx5TwY5BlSN1HBi83SL9yol2Mgf3/A8ppXw4mMgmEbttN0oI8CLDDD2cVgwMG0Fnvx0mFZLVlC63Zz5H23XHCrAmaKs9ha92olcLj+jW9Wy7h+hK5FY4i+0Z5X87BOl40iDcYydOkWirzyoWsTfw45OzHGLBaw+10AlMpcUZucKddVTU8Sj5UbUWCZJbgN4Grwk+taBU9Gz61JM5KYq/kZbQssPn/8MuILg4o4aXe2PiSxa6O3ni3ukvjwvepyRv/3ajEvwGeGZAa0KAlwOrRrcN63sfy7OD9WqiF2SgXl7U4mj1lviVsM5OeLKgaImS02e/Q3IvzuVfluLppKz5UbIWEIe9Qp1vHvHSzD5c2N401rt395thMyGsN+8/ofvLLnpc7zymapOPAU3RcVedEIOLPIA/ffXROEBZSkh48cjh+isD6Xcg/1QdYrmOBMmJlz2vpYTVd+6mZJ7B2JSPmHgtHx4CpSnrsdpjdqPoq8Lnh/hw+zyr8L4S099G8aitoDl75jpCsT+QWozdl1i5W+sKgZFeSAiQaW5bfatNNtMFPuBveeeOLMkNrLzoSnOtHb6lXgEfI86kmTziz6EkLCM52Nw+pwndPssK7KN4BdZHaNI3e73dRxBN2J0ch7ysQM70TG001Emqtb6xBJV7g1SzizOEbXf1A33Arc939jSPBD3PfwOFssHnee8hFlFbHCqPEQxjgUpZH/0M/A4foSTqN/9Rb1H/tJ7Y7pkBf3r7HBkWtQFl4VKGhLGLHwbg7Zwliwd9/U6QYvlE7cmbne5YOzhuCj5r5U8ZpdEfc2TbTZ6J22uIAakPkQhJqIdjwgRcm5db72jmabIj5YDliPDG5BEICJOWd+0RsApQj6znEkZP8jR6ITBMwZTpqJ0au4FengSaYeX7r9sTg7xZ8sh9lZGpl1FmZwL0IMVjYKFUS6AMfL32R/aqLN21HGD4Rb1eKHt4pQVmer/epUBglPCgTRN3oxDkAAvOABwBRyuYuyzRAVaE/ouiA7A8pCmTN9NBswcUUjpmpd5aGx1ZiShA45d8citeSYEwd+1J/R+/a9SyYsxyZoA5P87boFD9bC4DGVsu6xBmxhg2dIQBbE/9O/upHxtRFAm77eHh3mTD1VR8230goXcB0KML2Ch77WV3jEvWKyAjIbGorQVx19QOZbLYaj4wgeMJaBwV9t4C1zLkiXad+U4QxT+7fH1rQ/Fq1C0BM8JBYFM/B6Ru7whW296KSM1MEukRdNvXDnxuMIRD7AfIunUxz+z6ui237KDPZIsoUQ8i0Vil1gUZSnh7IQGH8me0hJ3XEFtx935kkga3/4n+OOb1YauqR2Wbsaxq10M06tLtuv11+4dWhta8FZe671MCbCtlveZYqIPmOB55/PQ/4t4ZqPqFsOjR7QFT1nN7VarXL658u4vnN2D4uutA== X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: nxV/ePzrPQAluDo/M6xkEHv6+GcQi5OdwFgpFweivjHL5Jeeyoxn4RkokOL8/u+vjUfdewRCdJl6tmq0fsFlq4qnheJ2+x0oIx/dmXTtnsUlDePQs46PywDHxeSbP9Oz0rienVok1bozx+CHpqzrMzm1vVNpkK1mTYSBQmsZry07y7DYhvh0SRk1fp03vPfhsF8i5byrkg7f4mX5xBDJ4y61stmMshgpIJV+WClL5gnZwJEZuUUskl3B1BtgrioVx0JTx/y13x0PQGDa4Q1MZ2tAcqs4vT+buo4yzA2pw5lXVFratDQMsttheZawdUdZv+IMMes0FbBA5VgFmLzTTvmfcGYVNcIS3IX7Sn6zwGoPKRI0p2rBRgY8OV9flfvandmtVD56R4GtRAtJvFX/RAFSh1V72nSXMtknt5variqJehRnrUx+0qaXa+8WMMTnfbqvfR4vyl9tWh/GP3gGKCRC4MSsl32xqYqPT0gMuQv+UInV2yiGuhNaq2gh7oKwEInGsX5hAb5XOdXtII6bXzo78ic3ENMU3vAWrOX21m6HkKnV0pfHtoTxGMUtb1iQXk3DAxZ4VX1zKKhWlD7xVfwOcnJjvssUbtkpqhya3ng= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: f88b551b-a89e-4a97-8e0a-08dda9a8dd8b X-MS-Exchange-CrossTenant-AuthSource: MN2PR10MB4382.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 12 Jun 2025 12:01:29.6817 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 4e2c6054-71cb-48f1-bd6c-3a9705aca71b X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: ncYKMLULLjgpHOuQ6uUU0d3vJjRZujTO88BV1sjcnY07u38zedaP0w+xb4trBfgU73t6Qt/CyKxBqF/EH6zdmASxUggBiWqKvptRKDt2ucI= X-MS-Exchange-Transport-CrossTenantHeadersStamped: SA1PR10MB7683 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1099,Hydra:6.0.736,FMLib:17.12.80.40 definitions=2025-06-12_08,2025-06-10_01,2025-03-28_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxlogscore=999 phishscore=0 malwarescore=0 suspectscore=0 spamscore=0 mlxscore=0 bulkscore=0 adultscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2505160000 definitions=main-2506120092 X-Proofpoint-GUID: -Y1ksIKJrIO0tp90tMCjI0_xy7N2mBfk X-Authority-Analysis: v=2.4 cv=BffY0qt2 c=1 sm=1 tr=0 ts=684ac19f cx=c_pps a=XiAAW1AwiKB2Y8Wsi+sD2Q==:117 a=XiAAW1AwiKB2Y8Wsi+sD2Q==:17 a=6eWqkTHjU83fiwn7nKZWdM+Sl24=:19 a=lCpzRmAYbLLaTzLvsPZ7Mbvzbb8=:19 a=wKuvFiaSGQ0qltdbU6+NXLB8nM8=:19 a=Ol13hO9ccFRV9qXi2t6ftBPywas=:19 a=xqWC_Br6kY4A:10 a=6IFa9wvqVegA:10 a=GoEa3M9JfhUA:10 a=UNk5y27gxpWc-BwUjBAA:9 X-Proofpoint-ORIG-GUID: -Y1ksIKJrIO0tp90tMCjI0_xy7N2mBfk X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUwNjEyMDA5MiBTYWx0ZWRfX8vzgsbnxBB5B hYGeH/XyTd/6y/I9dnHNwmnk7oLuwuCV3SfNFNELcC9mV2pMNO6I9n9HyzzONxdMX/11j+hosZc WDkZetv5jJEiKK0pGCIq49DlNXd5NIhN6H/Ns2vr3w4WHXBq3+HwyyGkDW1VIRv3WkwtxFlqlAq vtpOqDin1ts0u9zZP401v+mrkrrA/5poCXwMAG5AwrJl53/VXgsOKiRe181GGCZm0b5MTMcJT9h jxsgS76obSgTSgJiJRtSG/h5+jcpf9BWbFNLiDNsFSMsFnP+Dga2Iiv4YTAmJt37le0Dhkm02Cy JQUGkACzDXtEK7MI8EF9UjHeaJrFfWkW6SCLLNzdBrptLCAa2x5sfcOLlRCjldIfscPdzvdJv9e TxWgpSnTdohqW9A+pbjgJa7nWALXgce2Y5Odb9SEWJ9JKZscCc/wRnLRLO/pfuJPcZ6CPwS3 X-Spam-Status: No, score=-12.3 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, RCVD_IN_DNSWL_LOW, RCVD_IN_MSPIKE_H5, RCVD_IN_MSPIKE_WL, RCVD_IN_VALIDITY_RPBL_BLOCKED, RCVD_IN_VALIDITY_SAFE_BLOCKED, SPF_HELO_NONE, SPF_NONE, TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org X-BeenThere: libc-alpha@sourceware.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Libc-alpha mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: libc-alpha-bounces~patchwork=sourceware.org@sourceware.org This patch adds large tcache support tests by re-executing all of the malloc tests, using the tunables: glibc.malloc.tcache_max=1048576 glibc.mallc.tcache_max_large_capacity=4194304 Test names are prefixed with "largetcache". --- Rules | 19 +++++++++++++++++++ malloc/Makefile | 15 +++++++++++++++ 2 files changed, 34 insertions(+) diff --git a/Rules b/Rules index ae23070845..5ba7e59d0e 100644 --- a/Rules +++ b/Rules @@ -153,6 +153,7 @@ tests: $(addprefix $(objpfx),$(filter-out $(tests-unsupported), \ $(tests-malloc-check:%=%-malloc-check) \ $(tests-malloc-hugetlb1:%=%-malloc-hugetlb1) \ $(tests-malloc-hugetlb2:%=%-malloc-hugetlb2)) \ + $(tests-malloc-largetcache:%=%-malloc-largetcache)) \ $(test-srcs)) $(tests-special) \ $(tests-printers-programs) xtests: tests $(xtests-special) @@ -165,6 +166,7 @@ tests: $(tests:%=$(objpfx)%.out) $(tests-internal:%=$(objpfx)%.out) \ $(tests-malloc-check:%=$(objpfx)%-malloc-check.out) \ $(tests-malloc-hugetlb1:%=$(objpfx)%-malloc-hugetlb1.out) \ $(tests-malloc-hugetlb2:%=$(objpfx)%-malloc-hugetlb2.out) \ + $(tests-malloc-largetcache:%=$(objpfx)%-malloc-largetcache.out) \ $(tests-special) $(tests-printers-out) xtests: tests $(xtests:%=$(objpfx)%.out) $(xtests-special) endif # $(run-built-tests) != no @@ -179,6 +181,7 @@ tests-expected = $(tests) $(tests-internal) $(tests-printers) \ $(tests-container) $(tests-malloc-check:%=%-malloc-check) \ $(tests-malloc-hugetlb1:%=%-malloc-hugetlb1) \ $(tests-malloc-hugetlb2:%=%-malloc-hugetlb2) \ + $(tests-malloc-largetcache:%=%-malloc-largetcache) \ $(tests-mcheck:%=%-mcheck) xtests-expected = $(xtests) endif # $(run-built-tests) != no @@ -211,6 +214,7 @@ binaries-mcheck-tests = $(tests-mcheck:%=%-mcheck) binaries-malloc-check-tests = $(tests-malloc-check:%=%-malloc-check) binaries-malloc-hugetlb1-tests = $(tests-malloc-hugetlb1:%=%-malloc-hugetlb1) binaries-malloc-hugetlb2-tests = $(tests-malloc-hugetlb2:%=%-malloc-hugetlb2) +binaries-malloc-largetcache-tests = $(tests-malloc-largetcache:%=%-malloc-largetcache) else binaries-all-notests = binaries-all-tests = $(tests) $(tests-internal) $(xtests) $(test-srcs) @@ -224,6 +228,7 @@ binaries-mcheck-tests = binaries-malloc-check-tests = binaries-malloc-hugetlb1-tests = binaries-malloc-hugetlb2-tests = +binaries-malloc-largetcache-tests = endif binaries-pie = $(binaries-pie-tests) $(binaries-pie-notests) @@ -290,6 +295,14 @@ $(addprefix $(objpfx),$(binaries-malloc-hugetlb2-tests)): %-malloc-hugetlb2: %.o $(+link-tests) endif +ifneq "$(strip $(binaries-malloc-largetcache-tests))" "" +$(addprefix $(objpfx),$(binaries-malloc-largetcache-tests)): %-malloc-largetcache: %.o \ + $(link-extra-libs-tests) \ + $(sort $(filter $(common-objpfx)lib%,$(link-libc))) \ + $(addprefix $(csu-objpfx),start.o) $(+preinit) $(+postinit) + $(+link-tests) +endif + ifneq "$(strip $(binaries-pie-tests))" "" $(addprefix $(objpfx),$(binaries-pie-tests)): %: %.o \ $(link-extra-libs-tests) \ @@ -339,6 +352,12 @@ $(1)-malloc-hugetlb2-ENV += GLIBC_TUNABLES=glibc.malloc.hugetlb=2 endef $(foreach t,$(tests-malloc-hugetlb2),$(eval $(call malloc-hugetlb2-ENVS,$(t)))) +# All malloc-largetcache tests will be run with GLIBC_TUNABLE=glibc.malloc.tcache_max=1048576:glibc.mallc.tcache_max_large_capacity=4194304 +define malloc-largetcache-ENVS +$(1)-malloc-largetcache-ENV += GLIBC_TUNABLES=glibc.malloc.tcache_max=1048576:glibc.mallc.tcache_max_large_capacity=4194303 +endef +$(foreach t,$(tests-malloc-largetcache),$(eval $(call malloc-largetcache-ENVS,$(t)))) + # mcheck tests need the debug DSO to support -lmcheck. define mcheck-ENVS $(1)-mcheck-ENV = LD_PRELOAD=$(common-objpfx)/malloc/libc_malloc_debug.so diff --git a/malloc/Makefile b/malloc/Makefile index 3d3822db31..dd445d492e 100644 --- a/malloc/Makefile +++ b/malloc/Makefile @@ -147,6 +147,21 @@ tests-malloc-hugetlb1 = \ tests-malloc-hugetlb2 = \ $(filter-out $(tests-exclude-hugetlb2), $(tests)) +tests-exclude-largetcache = \ + tst-compathooks-off \ + tst-compathooks-on \ + tst-interpose-thread \ + tst-interpose-nothread \ + tst-interpose-static-nothread \ + tst-interpose-static-thread \ + tst-mallocstate \ + tst-malloc-backtrace \ + tst-malloc-usable \ + tst-malloc-usable-tunables + +tests-malloc-largetcache = \ + $(filter-out $(tests-exclude-largetcache), $(tests)) + # -lmcheck needs __malloc_initialize_hook, which was deprecated in 2.24. ifeq ($(have-GLIBC_2.23)$(build-shared),yesyes) # Tests that don't play well with mcheck. They are either bugs in mcheck or