From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-oa1-x31.google.com (mail-oa1-x31.google.com [IPv6:2001:4860:4864:20::31]) by sourceware.org (Postfix) with ESMTPS id 136483858D35 for ; Thu, 16 Mar 2023 21:00:34 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 136483858D35 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=linaro.org Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=linaro.org Received: by mail-oa1-x31.google.com with SMTP id 586e51a60fabf-17683b570b8so3554143fac.13 for ; Thu, 16 Mar 2023 14:00:34 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1679000433; h=content-transfer-encoding:in-reply-to:organization:from:references :to:content-language:subject:user-agent:mime-version:date:message-id :from:to:cc:subject:date:message-id:reply-to; bh=utSYNVpmyebMNn4u2CxqpDEip3Jh7TtH3DxvJ0v2ZAo=; b=iOsjZIC0xaj0ZKV//3dRjkXpaO0IbgCsLyoLVLW4EW85KcWlxTLc5SnvixU7NsFXL6 cUI383KXzYBX7qigSSZnsN/LXviZRhn0QYUqs5nTFCH1aieH4pkkY1Edg6q8HBHjyoK7 zwMdfpLVJXvOo7J8ki5DdJuisxDGOmHaAO7x6pNx01BsH+vFQtp2ahWvQ99H34HfPv+f g6KKsmkRCl4bRVfeYTupzq8Y1YCMhyeQ888d4jWLQMQF3YjwluUfsfzZABqngtUVzko8 3u/oyRfMR7LTNh5HfwieRMYBniLk+ALkhmMBgyR+GtitXAihKbid5DvOv9Zvx8KlpLkR vcag== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; t=1679000433; h=content-transfer-encoding:in-reply-to:organization:from:references :to:content-language:subject:user-agent:mime-version:date:message-id :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=utSYNVpmyebMNn4u2CxqpDEip3Jh7TtH3DxvJ0v2ZAo=; b=TgG6XU43c+v01hOsa0j8sqsfH9KnOyzAjCFP5LtasdGCyFoR4P37VwaSl47gN3rong khm0ISLtFF9634nW78pYDw56FN0V6+8V9bYvDT59L/FYDMFacPwli6F2aTy5lKn3kktB RIdObpGo9nJ0gEatsq2e5dxZN8J8I5ejfsn66WnoxCF2QYNCeLwJBoGWYSHDmp3VMG9B IgtLt+Bf2wI2Eb5C1wNvHFIjWNk/y1twFqXirQhlMdfkBcQOktexms6FKue+hkbYq8JC Mklzadsh565swVZ4PjTZLTws7kYrSiMYEhVoK2o3gie+/JUgPOgENHY6oMx8dpgg9H+j iHVQ== X-Gm-Message-State: AO0yUKU6v6HmRzJaJK2RragwO2M0bG7zFLI60MtGTODlnlNEu3+aZbT6 Aa2SVSvSXnjuDpALSKe9BWKYIwclj+lC94VB4pKwGQ== X-Google-Smtp-Source: AK7set8PG75jMWgJY7n+6fgRJgKzd8qsPup5KPPiCPw5zqyLm8hZgWYMWupWEV/A52oKU0LlZ1pyBA== X-Received: by 2002:a05:6870:e60f:b0:177:83cc:7c1f with SMTP id q15-20020a056870e60f00b0017783cc7c1fmr406103oag.15.1679000432770; Thu, 16 Mar 2023 14:00:32 -0700 (PDT) Received: from ?IPV6:2804:1b3:a7c0:c260:9a4:3847:50c3:a2f0? ([2804:1b3:a7c0:c260:9a4:3847:50c3:a2f0]) by smtp.gmail.com with ESMTPSA id zj22-20020a0568716c9600b0017ae6741157sm254421oab.4.2023.03.16.14.00.31 for (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Thu, 16 Mar 2023 14:00:32 -0700 (PDT) Message-ID: <3d314630-5ba2-65eb-06c1-50a4966516ca@linaro.org> Date: Thu, 16 Mar 2023 18:00:30 -0300 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:102.0) Gecko/20100101 Thunderbird/102.8.0 Subject: Re: [patch] aligned_alloc: conform to C17 Content-Language: en-US To: libc-alpha@sourceware.org References: From: Adhemerval Zanella Netto Organization: Linaro In-Reply-To: Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit X-Spam-Status: No, score=-11.4 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,GIT_PATCH_0,KAM_NUMSUBJECT,NICE_REPLY_A,RCVD_IN_DNSWL_NONE,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 server2.sourceware.org List-Id: On 16/03/23 17:48, DJ Delorie via Libc-alpha wrote: > References: > https://patchwork.sourceware.org/project/glibc/patch/33ec9e0c1e587813b90e8aa771c2c8e6e379dd48.camel@posteo.net/ > https://sourceware.org/bugzilla/show_bug.cgi?id=20137 > https://sourceware.org/pipermail/libc-alpha/2023-February/145858.html > > The memory.texi portion matches Martin's proposed patch. > > man page portion, quoted to avoid CI/CD issues (I can send an official > patch separately after the glibc patch is applied): > >> diff --git a/man3/posix_memalign.3 b/man3/posix_memalign.3 >> index f5d6618b7..a73ff0421 100644 >> --- a/man3/posix_memalign.3 >> +++ b/man3/posix_memalign.3 >> @@ -91,9 +91,8 @@ The function >> is the same as >> .BR memalign (), >> except for the added restriction that >> -.I size >> -should be a multiple of >> -.IR alignment . >> +.I alignment >> +must be a power of two. >> .PP >> The obsolete function >> .BR valloc () > > > From 4767e0e764e1a7a5ef01e303f503036379dd42c5 Mon Sep 17 00:00:00 2001 > From: DJ Delorie > Date: Thu, 16 Mar 2023 01:33:41 -0400 > Subject: aligned_alloc: conform to C17 > > This patch adds the strict checking for power-of-two alignments > in aligned_alloc(), and updates the manual accordingly. Hi D.J, this patch does not build correctly [1]. Maybe you send it too soon? [1] https://patchwork.sourceware.org/project/glibc/patch/xnv8j02zji.fsf@greed.delorie.com/ > > diff --git a/malloc/Versions b/malloc/Versions > index c763395c6d..28f41a94f3 100644 > --- a/malloc/Versions > +++ b/malloc/Versions > @@ -67,6 +67,9 @@ libc { > GLIBC_2.33 { > mallinfo2; > } > + GLIBC_2.38 { > + __libc_aligned_alloc; > + } > GLIBC_PRIVATE { > # Internal startup hook for libpthread. > __libc_malloc_pthread_startup; How is is actually used? There is no redirection in the header if -std=c17 is used, nor any abilist update. > diff --git a/malloc/malloc-debug.c b/malloc/malloc-debug.c > index 3867d15698..4d2ec04a1a 100644 > --- a/malloc/malloc-debug.c > +++ b/malloc/malloc-debug.c > @@ -268,7 +268,8 @@ __debug_realloc (void *oldmem, size_t bytes) > strong_alias (__debug_realloc, realloc) > > static void * > -_debug_mid_memalign (size_t alignment, size_t bytes, const void *address) > +_debug_mid_memalign (size_t alignment, size_t bytes, const void *address, > + int check_alignment) > { > void *(*hook) (size_t, size_t, const void *) = > atomic_forced_read (__memalign_hook); > @@ -281,9 +282,15 @@ _debug_mid_memalign (size_t alignment, size_t bytes, const void *address) > if ((!__is_malloc_debug_enabled (MALLOC_MCHECK_HOOK) > || !memalign_mcheck_before (alignment, &bytes, &victim))) > { > - victim = (__is_malloc_debug_enabled (MALLOC_CHECK_HOOK) > - ? memalign_check (alignment, bytes) > - : __libc_memalign (alignment, bytes)); > + if (check_alignment && !powerof2 (alignment)) > + { > + __set_errno (EINVAL); > + victim = NULL; > + } > + else > + victim = (__is_malloc_debug_enabled (MALLOC_CHECK_HOOK) > + ? memalign_check (alignment, bytes) > + : __libc_memalign (alignment, bytes)); > } > if (__is_malloc_debug_enabled (MALLOC_MCHECK_HOOK) && victim != NULL) > victim = memalign_mcheck_after (victim, alignment, orig_bytes); > @@ -296,10 +303,15 @@ _debug_mid_memalign (size_t alignment, size_t bytes, const void *address) > static void * > __debug_memalign (size_t alignment, size_t bytes) > { > - return _debug_mid_memalign (alignment, bytes, RETURN_ADDRESS (0)); > + return _debug_mid_memalign (alignment, bytes, RETURN_ADDRESS (0), 0); > } > strong_alias (__debug_memalign, memalign) > -strong_alias (__debug_memalign, aligned_alloc) > +static void * > +__debug_aligned_alloc (size_t alignment, size_t bytes) > +{ > + return _debug_mid_memalign (alignment, bytes, RETURN_ADDRESS (0), 1); > +} > +strong_alias (__debug_aligned_alloc, aligned_alloc) > > static void * > __debug_pvalloc (size_t bytes) > diff --git a/malloc/malloc.c b/malloc/malloc.c > index 76c50e3f58..09619ed168 100644 > --- a/malloc/malloc.c > +++ b/malloc/malloc.c > @@ -656,6 +656,9 @@ libc_hidden_proto (__libc_realloc) > void* __libc_memalign(size_t, size_t); > libc_hidden_proto (__libc_memalign) > > +void * __libc_aligned_alloc (size_t alignment, size_t bytes); > +libc_hidden_proto (__libc_aligned_alloc) > + > /* > valloc(size_t n); > Equivalent to memalign(pagesize, n), where pagesize is the page > @@ -3509,6 +3512,27 @@ __libc_memalign (size_t alignment, size_t bytes) > void *address = RETURN_ADDRESS (0); > return _mid_memalign (alignment, bytes, address); > } > +libc_hidden_def (__libc_memalign) > + > +/* For ISO C11. */ > +void * > +__libc_aligned_alloc (size_t alignment, size_t bytes) > +{ > + if (!__malloc_initialized) > + ptmalloc_init (); > + > + /* Similar to memalign, but ISO C17 requires an error for invalid > + alignments. Valid alignments are non-negative powers of two. */ > + if (!powerof2 (alignment)) > + { > + __set_errno (EINVAL); > + return 0; > + } > + > + void *address = RETURN_ADDRESS (0); > + return _mid_memalign (alignment, bytes, address); > +} > +libc_hidden_def (__libc_aligned_alloc) > > static void * > _mid_memalign (size_t alignment, size_t bytes, void *address) > @@ -3567,9 +3591,6 @@ _mid_memalign (size_t alignment, size_t bytes, void *address) > ar_ptr == arena_for_chunk (mem2chunk (p))); > return tag_new_usable (p); > } > -/* For ISO C11. */ > -weak_alias (__libc_memalign, aligned_alloc) > -libc_hidden_def (__libc_memalign) > > void * > __libc_valloc (size_t bytes) > @@ -5903,6 +5924,7 @@ weak_alias (__libc_mallinfo, mallinfo) > strong_alias (__libc_mallinfo2, __mallinfo2) > weak_alias (__libc_mallinfo2, mallinfo2) > strong_alias (__libc_mallopt, __mallopt) weak_alias (__libc_mallopt, mallopt) > +weak_alias (__libc_aligned_alloc, aligned_alloc) > > weak_alias (__malloc_stats, malloc_stats) > weak_alias (__malloc_usable_size, malloc_usable_size) > diff --git a/manual/memory.texi b/manual/memory.texi > index 9d3398a326..8952ff2bfa 100644 > --- a/manual/memory.texi > +++ b/manual/memory.texi > @@ -995,7 +995,7 @@ power of two than that, use @code{aligned_alloc} or @code{posix_memalign}. > @c Alias to memalign. > The @code{aligned_alloc} function allocates a block of @var{size} bytes whose > address is a multiple of @var{alignment}. The @var{alignment} must be a > -power of two and @var{size} must be a multiple of @var{alignment}. > +power of two. > > The @code{aligned_alloc} function returns a null pointer on error and sets > @code{errno} to one of the following values: >