[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>
This commit is contained in:
parent
7ea5f19503
commit
92f1f99d2e
@ -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
|
||||
|
Loading…
x
Reference in New Issue
Block a user