From patchwork Thu Jan 15 12:44:43 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Siddhesh Poyarekar X-Patchwork-Id: 128125 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from vm01.sourceware.org (localhost [127.0.0.1]) by sourceware.org (Postfix) with ESMTP id 6FC824BA23D6 for ; Thu, 15 Jan 2026 12:45:23 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 6FC824BA23D6 Authentication-Results: sourceware.org; dkim=pass (2048-bit key, unprotected) header.d=gotplt.org header.i=@gotplt.org header.a=rsa-sha256 header.s=dreamhost header.b=eNNAaami X-Original-To: libc-alpha@sourceware.org Delivered-To: libc-alpha@sourceware.org Received: from skyblue.cherry.relay.mailchannels.net (skyblue.cherry.relay.mailchannels.net [23.83.223.167]) by sourceware.org (Postfix) with ESMTPS id E8DB64BA2E3C for ; Thu, 15 Jan 2026 12:44:50 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org E8DB64BA2E3C Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=gotplt.org Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=gotplt.org ARC-Filter: OpenARC Filter v1.0.0 sourceware.org E8DB64BA2E3C Authentication-Results: server2.sourceware.org; arc=pass smtp.remote-ip=23.83.223.167 ARC-Seal: i=2; a=rsa-sha256; d=sourceware.org; s=key; t=1768481091; cv=pass; b=eHY8rAn6Kv7haKZDNczyKB29s8EOAI1PRxJFEX8v2JsQLTrpYqPC1b18mo57pi9aK6MCv2KN7xin8RzrvflTi7sdJ36oJahGW6hq/qmPDGifuSmnkN+DIWXD2eqGRMoOb0SNvkdwHpJiV1/bD4EW9iqwrY36gZugogsGvqGVT0k= ARC-Message-Signature: i=2; a=rsa-sha256; d=sourceware.org; s=key; t=1768481091; c=relaxed/simple; bh=ltF7arOK68LEjiYqo8mvyElaBsMMIt9vTL+DXOIxxDM=; h=DKIM-Signature:From:To:Subject:Date:Message-ID:MIME-Version; b=WNcjtqWAP5+ryHZIzttWYtpA2gEMnXyEz7KhEeI7vAIgxOlWhjVVxUt3GJvA4DSpvLk1b52dKh/CiMqYAHtj08WowuUuZbLLXvlod5UWEYXcTvb7hOvf3elWwceLvu+cYN4CnY8uFUQfWJS8TU8wL3KKGoQLA79oASLPjDYeXE8= ARC-Authentication-Results: i=2; server2.sourceware.org DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org E8DB64BA2E3C X-Sender-Id: dreamhost|x-authsender|siddhesh@gotplt.org Received: from relay.mailchannels.net (localhost [127.0.0.1]) by relay.mailchannels.net (Postfix) with ESMTP id E58B07E2ED1; Thu, 15 Jan 2026 12:44:49 +0000 (UTC) Received: from pdx1-sub0-mail-a251.dreamhost.com (100-116-82-78.trex-nlb.outbound.svc.cluster.local [100.116.82.78]) (Authenticated sender: dreamhost) by relay.mailchannels.net (Postfix) with ESMTPA id 6672D7E2E53; Thu, 15 Jan 2026 12:44:49 +0000 (UTC) ARC-Seal: i=1; a=rsa-sha256; d=mailchannels.net; s=arc-2022; cv=none; t=1768481089; b=hH/fhXJ/SzDIAq02tvad8c/ongB/mJ6UWaCkSboWFsOImEMW/Yu3mSEdWGT7SDvqjwkGSX eo57B4Tefe2xTgURM1AJVvVNEKl8x5WSJE60hBnpfzH52Qd6h/ds/KC5535Sitbbuyf/ba P8mrwIW8oP+HNh0cS2kPjSNordAUpWJwnVxpOTzV1sGmRAqUujaFYBu891Zz/l7UrjJzYz BgI4Bh7jIQMhBaPiqFBopxHVBAEzcb76q4HASzp2MSEakNzW4DiIKZbWG0vtZUYyO0DsJ+ cIfbvZzR+TvpZAx4rwXsBcePrYgRtiT3UxZpyjHSVx50K/Pv5EHD2AQgw7RShg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=mailchannels.net; s=arc-2022; t=1768481089; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding:dkim-signature; bh=mjSvCy2nu5Oa7TnKNQCZUtvx3RDPbaZZWqX8a5UL8js=; b=l3Z6uzzv9JAV4kLeqhWXDBZ5UP07FV8QbZoCJhMZ0+cSLJYrpF6osex5yPt1l0J7qTlC9S 1dkfYf4nJCf48olSRp8/qZc/7gxFBVIlrh+C2geB8GN1K4Wbrnt9JmlQTsxkoNSkKmsKdB Kre9F1U3iwtAS0QTQ5p+OxUmspa2nSPaD+VJJ6eqNJah+H9LIYZdxOTXCw5KpQGmcAAu48 EuswAke8+saJHkIXZvTCgUyviXnAdFrLS1hetUUL0f6KbIwIEaSTKvQcbfyjD6VXaLMT9F doSBqa1GVdBorlDwTbKprrnSrmOCzaMrOXGKGu+/58LzgFrFWEX9G8mFfEp9Qw== ARC-Authentication-Results: i=1; rspamd-84bff5b669-blwlz; auth=pass smtp.auth=dreamhost smtp.mailfrom=siddhesh@gotplt.org X-Sender-Id: dreamhost|x-authsender|siddhesh@gotplt.org X-MC-Relay: Neutral X-MailChannels-SenderId: dreamhost|x-authsender|siddhesh@gotplt.org X-MailChannels-Auth-Id: dreamhost X-Whimsical-Squirrel: 1b04119e0227ef9b_1768481089625_1174327134 X-MC-Loop-Signature: 1768481089625:687581374 X-MC-Ingress-Time: 1768481089625 Received: from pdx1-sub0-mail-a251.dreamhost.com (pop.dreamhost.com [64.90.62.162]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384) by 100.116.82.78 (trex/7.1.3); Thu, 15 Jan 2026 12:44:49 +0000 Received: from fedora.redhat.com (unknown [38.23.181.90]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) (Authenticated sender: siddhesh@gotplt.org) by pdx1-sub0-mail-a251.dreamhost.com (Postfix) with ESMTPSA id 4dsN3h5Yn4z107p; Thu, 15 Jan 2026 04:44:48 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gotplt.org; s=dreamhost; t=1768481089; bh=mjSvCy2nu5Oa7TnKNQCZUtvx3RDPbaZZWqX8a5UL8js=; h=From:To:Cc:Subject:Date:Content-Transfer-Encoding; b=eNNAaamiUSaInwWfNrBdLwXgFcyvWNKYZj3vTlxdW8T6wdO5nbwgjG7JWzYgH6+CG Oc8t1fQ9F9yMnY9yKKfWBpKcNpgaIb+TjsVssLufcrdB6Dx/imR5+7nDShNd7hq2Im RzyAmQ2Fyj8Neh/eVJOg67Buf8U0IPLPHpnFyXU4+xuPNNkNyjlI3kEbyigMXVLDrH SmZrCXJGgeCFAzd1nQ94z7+QN9vsTup4Mi3UgqebKlKqshtYOHFG/IfByWlns9iwfK 5x/DbuyGD4y14UObSXupGHvnVbtuhxcXr0bpElX/atEXEUq8OBGd2NedzoJs4ZxcQX DLP+Gp22vMSug== From: Siddhesh Poyarekar To: libc-alpha@sourceware.org Cc: dilfridge@gentoo.org, Wilco.Dijkstra@arm.com Subject: [PATCH] memalign: move alignment adjustment to __libc_memalign Date: Thu, 15 Jan 2026 07:44:43 -0500 Message-ID: <20260115124443.2384570-1-siddhesh@gotplt.org> X-Mailer: git-send-email 2.52.0 MIME-Version: 1.0 X-Spam-Status: No, score=-3035.0 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, RCVD_IN_DNSWL_BLOCKED, RCVD_IN_MSPIKE_H4, RCVD_IN_MSPIKE_WL, RCVD_IN_VALIDITY_RPBL_BLOCKED, RCVD_IN_VALIDITY_SAFE_BLOCKED, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on 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 Move the power of two computation to __libc_memalign since that's the only case that needs it, and use __builtin_clzl in favour of the loop. Signed-off-by: Siddhesh Poyarekar --- malloc/malloc.c | 37 +++++++++++++++++++------------------ 1 file changed, 19 insertions(+), 18 deletions(-) diff --git a/malloc/malloc.c b/malloc/malloc.c index 2b9faeaa25..ab826c9a3a 100644 --- a/malloc/malloc.c +++ b/malloc/malloc.c @@ -3522,6 +3522,25 @@ libc_hidden_def (__libc_realloc) void * __libc_memalign (size_t alignment, size_t bytes) { + _Static_assert (sizeof (unsigned long) == sizeof (size_t), + "size_t type does not match in size with unsigned long"); + + /* Round the alignment up to a power of 2. Skip over 0 alignment since that + will simply result in a __libc_malloc call in _mid_memalign. This + basically emulates __builtin_stdc_bit_ceil. Start with 2 to avoid + shifting by the word size. */ + if (alignment > 2 && !powerof2 (alignment)) + { + alignment = (size_t) 2 << (__builtin_clzl (1) + - __builtin_clzl (alignment - 1)); + + if (__glibc_unlikely (alignment == 0)) + { + __set_errno (EINVAL); + return NULL; + } + } + return _mid_memalign (alignment, bytes); } libc_hidden_def (__libc_memalign) @@ -3585,24 +3604,6 @@ _mid_memalign (size_t alignment, size_t bytes) if (alignment < MINSIZE) alignment = MINSIZE; - /* If the alignment is greater than SIZE_MAX / 2 + 1 it cannot be a - power of 2 and will cause overflow in the check below. */ - if (alignment > SIZE_MAX / 2 + 1) - { - __set_errno (EINVAL); - return NULL; - } - - - /* Make sure alignment is power of 2. */ - if (!powerof2 (alignment)) - { - size_t a = MALLOC_ALIGNMENT * 2; - while (a < alignment) - a <<= 1; - alignment = a; - } - #if USE_TCACHE void *victim = tcache_get_align (checked_request2size (bytes), alignment); if (victim != NULL)