summaryrefslogtreecommitdiff
path: root/libunwind
diff options
context:
space:
mode:
authorPaul Kirth <paulkirth@google.com>2025-01-16 13:44:55 -0800
committerGitHub <noreply@github.com>2025-01-16 13:44:55 -0800
commit92f1f99d2ee9ff0f928741fef4fcb58e994302df (patch)
tree4f0e8dd263e0363417571f16064e8301b4e6ff3b /libunwind
parent7ea5f195039ba357285076043ad381ed22e3842e (diff)
[libunwind][cmake] Compile _Unwind* routines with -fexceptions (#121819)
When building libunwind with LTO, we found that routines, like _Unwind_RaiseException were marked `nounwind`. This causes problems when libunwind is then used with exception throwing code, since many of the routines are marked `nounwind` and the compiler infers that something like a try/catch block cannot throw resulting in a miscompile (see #120657). Similarly, in #56825, it was pointed out that marking _Unwind_Resume as `nounwind` causes bad exception table generation. This patch adds the `-fexceptions` flag to the build of the C files that define these routines, as proposed in #56825. Fixes #56825 #120657 --------- Co-authored-by: Petr Hosek <phosek@google.com>
Diffstat (limited to 'libunwind')
-rw-r--r--libunwind/src/CMakeLists.txt7
1 files changed, 6 insertions, 1 deletions
diff --git a/libunwind/src/CMakeLists.txt b/libunwind/src/CMakeLists.txt
index e7ea57734cca..ecbd019bb29e 100644
--- a/libunwind/src/CMakeLists.txt
+++ b/libunwind/src/CMakeLists.txt
@@ -20,7 +20,12 @@ set(LIBUNWIND_C_SOURCES
)
set_source_files_properties(${LIBUNWIND_C_SOURCES}
PROPERTIES
- COMPILE_FLAGS "-std=c99")
+ # We need to set `-fexceptions` here so that key
+ # unwinding functions, like
+ # _UNWIND_RaiseException, are not marked as
+ # `nounwind`, which breaks LTO builds of
+ # libunwind. See #56825 and #120657 for context.
+ COMPILE_FLAGS "-std=c99 -fexceptions")
set(LIBUNWIND_ASM_SOURCES
UnwindRegistersRestore.S