Module Name: src
Committed By: kamil
Date: Fri Nov 1 14:54:07 UTC 2019
Modified Files:
src/common/lib/libc/misc: ubsan.c
Log Message:
uubsan: Implement function_type_mismatch_v1
RTTI is not supported by micro-UBSan (by design) and this is now a stub
handler.
To generate a diff of this commit:
cvs rdiff -u -r1.8 -r1.9 src/common/lib/libc/misc/ubsan.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/common/lib/libc/misc/ubsan.c
diff -u src/common/lib/libc/misc/ubsan.c:1.8 src/common/lib/libc/misc/ubsan.c:1.9
--- src/common/lib/libc/misc/ubsan.c:1.8 Wed Oct 30 00:13:46 2019
+++ src/common/lib/libc/misc/ubsan.c Fri Nov 1 14:54:07 2019
@@ -1,4 +1,4 @@
-/* $NetBSD: ubsan.c,v 1.8 2019/10/30 00:13:46 kamil Exp $ */
+/* $NetBSD: ubsan.c,v 1.9 2019/11/01 14:54:07 kamil Exp $ */
/*-
* Copyright (c) 2018 The NetBSD Foundation, Inc.
@@ -38,9 +38,9 @@
#include <sys/cdefs.h>
#if defined(_KERNEL)
-__KERNEL_RCSID(0, "$NetBSD: ubsan.c,v 1.8 2019/10/30 00:13:46 kamil Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ubsan.c,v 1.9 2019/11/01 14:54:07 kamil Exp $");
#else
-__RCSID("$NetBSD: ubsan.c,v 1.8 2019/10/30 00:13:46 kamil Exp $");
+__RCSID("$NetBSD: ubsan.c,v 1.9 2019/11/01 14:54:07 kamil Exp $");
#endif
#if defined(_KERNEL)
@@ -290,6 +290,8 @@ void __ubsan_handle_float_cast_overflow(
void __ubsan_handle_float_cast_overflow_abort(struct CFloatCastOverflowData *pData, unsigned long ulFrom);
void __ubsan_handle_function_type_mismatch(struct CFunctionTypeMismatchData *pData, unsigned long ulFunction);
void __ubsan_handle_function_type_mismatch_abort(struct CFunctionTypeMismatchData *pData, unsigned long ulFunction);
+void __ubsan_handle_function_type_mismatch_v1(struct CFunctionTypeMismatchData *pData, unsigned long ulFunction, unsigned long ulCalleeRTTI, unsigned long ulFnRTTI);
+void __ubsan_handle_function_type_mismatch_v1_abort(struct CFunctionTypeMismatchData *pData, unsigned long ulFunction, unsigned long ulCalleeRTTI, unsigned long ulFnRTTI);
void __ubsan_handle_invalid_builtin(struct CInvalidBuiltinData *pData);
void __ubsan_handle_invalid_builtin_abort(struct CInvalidBuiltinData *pData);
void __ubsan_handle_load_invalid_value(struct CInvalidValueData *pData, unsigned long ulVal);
@@ -838,7 +840,45 @@ __ubsan_handle_function_type_mismatch_ab
ASSERT(pData);
+ HandleFunctionTypeMismatch(true, pData, ulFunction);
+}
+
+void
+__ubsan_handle_function_type_mismatch_v1(struct CFunctionTypeMismatchData *pData, unsigned long ulFunction, unsigned long ulCalleeRTTI, unsigned long ulFnRTTI)
+{
+
+ ASSERT(pData);
+#if 0
+ /*
+ * Unimplemented.
+ *
+ * This UBSan handler is special as the check has to be impelemented
+ * in an implementation. In order to handle it there is need to
+ * introspect into C++ ABI internals (RTTI) and use low-level
+ * C++ runtime interfaces.
+ */
+
HandleFunctionTypeMismatch(false, pData, ulFunction);
+#endif
+}
+
+void
+__ubsan_handle_function_type_mismatch_v1_abort(struct CFunctionTypeMismatchData *pData, unsigned long ulFunction, unsigned long ulCalleeRTTI, unsigned long ulFnRTTI)
+{
+
+ ASSERT(pData);
+#if 0
+ /*
+ * Unimplemented.
+ *
+ * This UBSan handler is special as the check has to be impelemented
+ * in an implementation. In order to handle it there is need to
+ * introspect into C++ ABI internals (RTTI) and use low-level
+ * C++ runtime interfaces.
+ */
+
+ HandleFunctionTypeMismatch(true, pData, ulFunction);
+#endif
}
void