Skip to content

Commit

Permalink
[libunwind][cmake] Compile _Unwind* routines with -fexceptions (#121819)
Browse files Browse the repository at this point in the history
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 <[email protected]>
  • Loading branch information
ilovepi and petrhosek authored Jan 16, 2025
1 parent 7ea5f19 commit 92f1f99
Showing 1 changed file with 6 additions and 1 deletion.
7 changes: 6 additions & 1 deletion libunwind/src/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down

0 comments on commit 92f1f99

Please sign in to comment.