On Sunday 06 April 2025 14:10:35 Pali Rohár wrote:
> It mimics msvc _aligned_msize() function.
> ---
>  mingw-w64-crt/misc/mingw-aligned-malloc.c | 23 +++++++++++++++++++++++
>  mingw-w64-headers/crt/malloc.h            |  1 +
>  2 files changed, 24 insertions(+)
> 
> diff --git a/mingw-w64-crt/misc/mingw-aligned-malloc.c 
> b/mingw-w64-crt/misc/mingw-aligned-malloc.c
> index 5029b6007842..d376a103a55f 100644
> --- a/mingw-w64-crt/misc/mingw-aligned-malloc.c
> +++ b/mingw-w64-crt/misc/mingw-aligned-malloc.c
> @@ -118,3 +118,26 @@ __mingw_aligned_realloc (void *memblock, size_t size, 
> size_t alignment)
>  {
>    return __mingw_aligned_offset_realloc (memblock, size, alignment, 0);
>  }
> +
> +size_t
> +__mingw_aligned_msize (void *memblock, size_t alignment, size_t offset)
> +{
> +  void *p0;
> +
> +  if (!memblock || NOT_POWER_OF_TWO (alignment))
> +    {
> +      errno = EINVAL;
> +      return (size_t)-1;
> +    }
> +
> +  p0 = ORIG_PTR (memblock);
> +
> +  /* It is an error if the alignment or offset does not match. */
> +  if (memblock != PTR_ALIGN (p0, alignment, offset))
> +    {
> +      errno = EINVAL;
> +      return (size_t)-1;
> +    }
> +
> +  return _msize (p0) - (alignment + sizeof (void *));
> +}
> diff --git a/mingw-w64-headers/crt/malloc.h b/mingw-w64-headers/crt/malloc.h
> index 78d67dd2eeb4..52918782bf8c 100644
> --- a/mingw-w64-headers/crt/malloc.h
> +++ b/mingw-w64-headers/crt/malloc.h
> @@ -133,6 +133,7 @@ void __mingw_aligned_free (void *_Memory);
>  void * __mingw_aligned_offset_realloc (void *_Memory, size_t _Size, size_t 
> _Alignment, size_t _Offset);
>  void * __mingw_aligned_offset_malloc (size_t, size_t, size_t);
>  void * __mingw_aligned_realloc (void *_Memory, size_t _Size, size_t _Offset);
> +size_t __mingw_aligned_msize (void *memblock, size_t alignment, size_t 
> offset);
>  
>  #if defined(__x86_64__) || defined(__i386__)
>  /* Get the compiler's definition of _mm_malloc and _mm_free. */
> -- 
> 2.20.1
> 

I was doing another round of testing and I have figured out that this
__mingw_aligned_msize is not compatible with msvcrt.dll. There are two
problems: off-by-one error and incorrect handling of alignment less than
pointer size.

One I fix these problems, I will send a new version.

Sorry for troubles.


_______________________________________________
Mingw-w64-public mailing list
Mingw-w64-public@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mingw-w64-public

Reply via email to