BaseTools/CommonLib: Guarantee 8-byte alignment for AllocatePool()

This commit is contained in:
Marvin Häuser 2023-04-01 18:48:10 +02:00
parent c382e9c571
commit f3fedad22d

View File

@ -557,6 +557,33 @@ Returns:
} }
static
void *
InternalAlignedAlloc (
size_t Alignment,
size_t Size
)
{
#ifndef _WIN32
return aligned_alloc (Alignment, Size);
#else
return _aligned_malloc (Size, Alignment);
#endif
}
static
void
InternalAlignedFree (
void *Ptr
)
{
#ifndef _WIN32
free (Ptr);
#else
_aligned_free (Ptr);
#endif
}
EFI_STATUS EFI_STATUS
EFIAPI EFIAPI
PhaseAllocatePages ( PhaseAllocatePages (
@ -572,13 +599,7 @@ PhaseAllocatePages (
ASSERT (Type == AllocateAnyPages); ASSERT (Type == AllocateAnyPages);
BufferSize = EFI_PAGES_TO_SIZE (Pages); BufferSize = EFI_PAGES_TO_SIZE (Pages);
Buffer = InternalAlignedAlloc (EFI_PAGE_SIZE, BufferSize);
#ifndef _WIN32
Buffer = aligned_alloc (EFI_PAGE_SIZE, BufferSize);
#else
Buffer = _aligned_malloc (BufferSize, EFI_PAGE_SIZE);
#endif
if (Buffer == NULL) { if (Buffer == NULL) {
return EFI_OUT_OF_RESOURCES; return EFI_OUT_OF_RESOURCES;
} }
@ -598,12 +619,7 @@ PhaseFreePages (
VOID *Buffer; VOID *Buffer;
Buffer = (VOID *)(UINTN)Memory; Buffer = (VOID *)(UINTN)Memory;
InternalAlignedFree (Buffer);
#ifndef _WIN32
free (Buffer);
#else
_aligned_free (Buffer);
#endif
return EFI_SUCCESS; return EFI_SUCCESS;
} }
@ -615,7 +631,7 @@ PhaseAllocatePool (
IN UINTN AllocationSize IN UINTN AllocationSize
) )
{ {
return malloc (AllocationSize); return InternalAlignedAlloc (8, AllocationSize);
} }
VOID VOID
@ -625,7 +641,7 @@ PhaseFreePool (
) )
{ {
ASSERT (Buffer != NULL); ASSERT (Buffer != NULL);
free (Buffer); InternalAlignedFree (Buffer);
} }
VOID VOID