[ubsan] Don't always use NORETURN
Marek Polacek
polacek@redhat.com
Mon Jul 15 10:33:00 GMT 2013
Some libubsan functions aren't really noreturn, so don't mark them as
such. This prevents failures with -O1+, since we don't generate any
code after calling noreturn routines, thus segfault when we actually
get there.
Applying to ubsan branch.
2013-07-15 Marek Polacek <polacek@redhat.com>
* builtin-attrs.def (ATTR_COLD_NOTHROW_LEAF_LIST): Define.
* sanitizer.def (BUILT_IN_UBSAN_HANDLE_DIVREM_OVERFLOW): Don't mark
as NORETURN.
(BUILT_IN_UBSAN_HANDLE_SHIFT_OUT_OF_BOUNDS): Likewise.
* asan.c (ATTR_COLD_NOTHROW_LEAF_LIST): Define.
--- gcc/builtin-attrs.def.mp2 2013-07-15 07:52:25.339442743 +0200
+++ gcc/builtin-attrs.def 2013-07-15 08:16:45.725146824 +0200
@@ -131,6 +131,8 @@ DEF_ATTR_TREE_LIST (ATTR_NORETURN_NOTHRO
ATTR_NULL, ATTR_NOTHROW_LIST)
DEF_ATTR_TREE_LIST (ATTR_NORETURN_NOTHROW_LEAF_LIST, ATTR_NORETURN,\
ATTR_NULL, ATTR_NOTHROW_LEAF_LIST)
+DEF_ATTR_TREE_LIST (ATTR_COLD_NOTHROW_LEAF_LIST, ATTR_COLD,\
+ ATTR_NULL, ATTR_NOTHROW_LEAF_LIST)
DEF_ATTR_TREE_LIST (ATTR_COLD_NORETURN_NOTHROW_LEAF_LIST, ATTR_COLD,\
ATTR_NULL, ATTR_NORETURN_NOTHROW_LEAF_LIST)
DEF_ATTR_TREE_LIST (ATTR_CONST_NORETURN_NOTHROW_LEAF_LIST, ATTR_CONST,\
--- gcc/sanitizer.def.mp2 2013-07-15 07:47:46.080293252 +0200
+++ gcc/sanitizer.def 2013-07-15 08:17:03.830219023 +0200
@@ -288,11 +288,11 @@ DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOM
DEF_SANITIZER_BUILTIN(BUILT_IN_UBSAN_HANDLE_DIVREM_OVERFLOW,
"__ubsan_handle_divrem_overflow",
BT_FN_VOID_PTR_PTR_PTR,
- ATTR_COLD_NORETURN_NOTHROW_LEAF_LIST)
+ ATTR_COLD_NOTHROW_LEAF_LIST)
DEF_SANITIZER_BUILTIN(BUILT_IN_UBSAN_HANDLE_SHIFT_OUT_OF_BOUNDS,
"__ubsan_handle_shift_out_of_bounds",
BT_FN_VOID_PTR_PTR_PTR,
- ATTR_COLD_NORETURN_NOTHROW_LEAF_LIST)
+ ATTR_COLD_NOTHROW_LEAF_LIST)
DEF_SANITIZER_BUILTIN(BUILT_IN_UBSAN_HANDLE_BUILTIN_UNREACHABLE,
"__ubsan_handle_builtin_unreachable",
BT_FN_VOID_PTR,
--- gcc/asan.c.mp2 2013-07-15 07:46:29.786987718 +0200
+++ gcc/asan.c 2013-07-15 08:21:21.224095627 +0200
@@ -2102,6 +2102,9 @@ initialize_sanitizer_builtins (void)
#undef ATTR_TMPURE_NORETURN_NOTHROW_LEAF_LIST
#define ATTR_TMPURE_NORETURN_NOTHROW_LEAF_LIST \
ECF_TM_PURE | ATTR_NORETURN_NOTHROW_LEAF_LIST
+#undef ATTR_COLD_NOTHROW_LEAF_LIST
+#define ATTR_COLD_NOTHROW_LEAF_LIST \
+ /* ECF_COLD missing */ ATTR_NOTHROW_LEAF_LIST
#undef ATTR_COLD_NORETURN_NOTHROW_LEAF_LIST
#define ATTR_COLD_NORETURN_NOTHROW_LEAF_LIST \
/* ECF_COLD missing */ ATTR_NORETURN_NOTHROW_LEAF_LIST
Marek
More information about the Gcc-patches
mailing list