Skip to content

Use alignment builtins for ZEND_MM_ALIGNED macros#21913

Open
tobil4sk wants to merge 2 commits intophp:masterfrom
tobil4sk:fix/zend-mm-aligned-builtins
Open

Use alignment builtins for ZEND_MM_ALIGNED macros#21913
tobil4sk wants to merge 2 commits intophp:masterfrom
tobil4sk:fix/zend-mm-aligned-builtins

Conversation

@tobil4sk
Copy link
Copy Markdown
Contributor

@tobil4sk tobil4sk commented Apr 30, 2026

Where available, these provide a more descriptive way of aligning pointers than direct bitwise manipulation. The additional abstraction they provide also makes them more compatible with platforms like CHERI.

Also, the non-builtin ZEND_MM_ALIGNED_BASE implementation now casts to uintptr_t instead of size_t, since the returned value tends to be used as a pointer, not a size. This makes intent clearer and also improves compatibility.

These patches are from a port of PHP to pure-capability CHERI (where pointers are wider than size_t and narrowing invalidates the pointer). Using these builtins improves compatibility generally and they seem preferable due to the abstraction. I thought I would send this patch upstream in case it is of interest.

See: https://clang.llvm.org/docs/LanguageExtensions.html#alignment-builtins

On some architectures, e.g. CHERI, pointers are wider than size_t so
converting to size_t causes part of the pointer to be lost, which means
it cannot be cast back into a pointer. It can be preserved by casting to
uintptr_t instead.
Where available, these provide a more descriptive way of aligning
pointers than direct bitwise manipulation. They are also more compatible
with platforms like CHERI.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant