Skip to content

Conversation

dongjianqiang2
Copy link
Contributor

@dongjianqiang2 dongjianqiang2 commented Aug 29, 2025

In crtbegin.c, __EH_FRAME_LIST__ was previously declared as a writable array of pointers. This caused the linker to place .eh_frame into a segment with read-write permissions, leading to larger virtual memory footprint at runtime (e.g. .eh_frame mapped into both LOAD and RELRO).

Changing it to static void * const __EH_FRAME_LIST__[] ensures that the section is treated as read-only, matching GCC’s behavior with __EH_FRAME_BEGIN__. This prevents unnecessary RW mappings of .eh_frame while preserving the intended semantics.

Fixes: #155764

…ing (llvm#155764)

In crtbegin.c, __EH_FRAME_LIST__ was previously declared as a writable
array of pointers. This caused the linker to place .eh_frame into a
segment with read-write permissions, leading to larger virtual memory
footprint at runtime (e.g. .eh_frame mapped into both LOAD and RELRO).

Changing it to `static void * const __EH_FRAME_LIST__[]` ensures that
the section is treated as read-only, matching GCC’s behavior with
__EH_FRAME_BEGIN__. This prevents unnecessary RW mappings of .eh_frame
while preserving the intended semantics.
Copy link

github-actions bot commented Aug 29, 2025

✅ With the latest revision this PR passed the C/C++ code formatter.

Update crtbegin.c format
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.

[compiler-rt].eh_frame mapped writable in Clang builds (due to __EH_FRAME_LIST__), unlike GCC
2 participants