mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-29 14:30:10 +01:00
ralloc: Make sure ralloc() allocations match malloc()'s alignment.
The header of ralloc needs to be aligned, because the compiler assumes
that malloc returns will be aligned to 8/16 bytes depending on the
platform, leading to degraded performance or alignment faults with ralloc.
Fixes SIGBUS on Raspberry Pi at high optimization levels.
This patch is not perfect for MSVC, as maybe in the future the alignment
for the most demanding data type might change to more than 8.
v2: Commit message reword/typo fix, and add a bigger explanation in the
code (by anholt)
Signed-off-by: Jonas Pfeil <pfeiljonas@gmx.de>
Reviewed-by: Matt Turner <mattst88@gmail.com>
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
Cc: mesa-stable@lists.freedesktop.org
This commit is contained in:
parent
a7b8d50bcb
commit
cd2b55e536
1 changed files with 12 additions and 1 deletions
|
|
@ -51,7 +51,18 @@ _CRTIMP int _vscprintf(const char *format, va_list argptr);
|
|||
|
||||
#define CANARY 0x5A1106
|
||||
|
||||
struct ralloc_header
|
||||
/* Align the header's size so that ralloc() allocations will return with the
|
||||
* same alignment as a libc malloc would have (8 on 32-bit GLIBC, 16 on
|
||||
* 64-bit), avoiding performance penalities on x86 and alignment faults on
|
||||
* ARM.
|
||||
*/
|
||||
struct
|
||||
#ifdef _MSC_VER
|
||||
__declspec(align(8))
|
||||
#else
|
||||
__attribute__((aligned))
|
||||
#endif
|
||||
ralloc_header
|
||||
{
|
||||
#ifdef DEBUG
|
||||
/* A canary value used to determine whether a pointer is ralloc'd. */
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue