[compiler-rt] e68d66a - [compiler-rt] Make __EH_FRAME_LIST__ const to avoid RW .eh_frame mapping (#155764) (#155955)

via llvm-commits llvm-commits at lists.llvm.org
Fri Aug 29 23:56:50 PDT 2025


Author: dong jianqiang
Date: 2025-08-30T14:56:44+08:00
New Revision: e68d66a1afea79d19f8b3f9b8bea6b4ff38685b7

URL: https://github.com/llvm/llvm-project/commit/e68d66a1afea79d19f8b3f9b8bea6b4ff38685b7
DIFF: https://github.com/llvm/llvm-project/commit/e68d66a1afea79d19f8b3f9b8bea6b4ff38685b7.diff

LOG: [compiler-rt] Make __EH_FRAME_LIST__ const to avoid RW .eh_frame mapping (#155764) (#155955)

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

Added: 
    

Modified: 
    compiler-rt/lib/builtins/crtbegin.c

Removed: 
    


################################################################################
diff  --git a/compiler-rt/lib/builtins/crtbegin.c b/compiler-rt/lib/builtins/crtbegin.c
index 447474bd0b692..8b5f98fdd04ed 100644
--- a/compiler-rt/lib/builtins/crtbegin.c
+++ b/compiler-rt/lib/builtins/crtbegin.c
@@ -19,7 +19,7 @@
 __attribute__((visibility("hidden"))) void *__dso_handle = &__dso_handle;
 
 #ifdef EH_USE_FRAME_REGISTRY
-__extension__ static void *__EH_FRAME_LIST__[]
+__extension__ static void *const __EH_FRAME_LIST__[]
     __attribute__((section(".eh_frame"), aligned(sizeof(void *)))) = {};
 
 extern void __register_frame_info(const void *, void *) __attribute__((weak));


        


More information about the llvm-commits mailing list