From 0d86151b82981b95fbec6d861b0364235b2acd71 Mon Sep 17 00:00:00 2001 From: Anton Maklakov Date: Wed, 2 Mar 2022 09:53:53 +0700 Subject: [PATCH] esp_system: fix ubsan builtins' prototypes to suppress Wbuiltin-declaration-mismatch --- components/esp_system/ubsan.c | 121 ++++++++++++++++++++-------------- 1 file changed, 70 insertions(+), 51 deletions(-) diff --git a/components/esp_system/ubsan.c b/components/esp_system/ubsan.c index 8f5e123cc7..315b8c2267 100644 --- a/components/esp_system/ubsan.c +++ b/components/esp_system/ubsan.c @@ -118,23 +118,23 @@ static void __ubsan_default_handler(struct source_location *loc, const char *fun * with the following signatures. The functions are never called directly, * only when undefined behavior is detected in instrumented code. */ -void __ubsan_handle_type_mismatch(struct type_mismatch_data *data, unsigned long ptr); -void __ubsan_handle_type_mismatch_v1(struct type_mismatch_data_v1 *data, unsigned long ptr); -void __ubsan_handle_add_overflow(struct overflow_data *data, unsigned long lhs, unsigned long rhs); -void __ubsan_handle_sub_overflow(struct overflow_data *data, unsigned long lhs, unsigned long rhs); -void __ubsan_handle_mul_overflow(struct overflow_data *data, unsigned long lhs, unsigned long rhs); -void __ubsan_handle_negate_overflow(struct overflow_data *data, unsigned long old_val); -void __ubsan_handle_divrem_overflow(struct overflow_data *data, unsigned long lhs, unsigned long rhs); -void __ubsan_handle_shift_out_of_bounds(struct shift_out_of_bounds_data *data, unsigned long lhs, unsigned long rhs); -void __ubsan_handle_out_of_bounds(struct out_of_bounds_data *data, unsigned long idx); -void __ubsan_handle_missing_return(struct unreachable_data *data); -void __ubsan_handle_vla_bound_not_positive(struct vla_bound_data *data, unsigned long bound); -void __ubsan_handle_load_invalid_value(struct invalid_value_data *data, unsigned long val); -void __ubsan_handle_nonnull_arg(struct nonnull_arg_data *data); -void __ubsan_handle_nonnull_return(struct nonnull_return_data *data); -void __ubsan_handle_builtin_unreachable(struct unreachable_data *data); -void __ubsan_handle_pointer_overflow(struct pointer_overflow_data *data, - unsigned long base, unsigned long result); +void __ubsan_handle_type_mismatch(void *data_, void *ptr_); +void __ubsan_handle_type_mismatch_v1(void *data_, void *ptr_); +void __ubsan_handle_add_overflow(void *data_, void *lhs_, void *rhs_); +void __ubsan_handle_sub_overflow(void *data_, void *lhs_, void *rhs_); +void __ubsan_handle_mul_overflow(void *data_, void *lhs_, void *rhs_); +void __ubsan_handle_negate_overflow(void *data_, void *old_val_); +void __ubsan_handle_divrem_overflow(void *data_, void *lhs_, void *rhs_); +void __ubsan_handle_shift_out_of_bounds(void *data_, void *lhs_, void *rhs_); +void __ubsan_handle_out_of_bounds(void *data_, void *idx_); +void __ubsan_handle_missing_return(void *data_); +void __ubsan_handle_vla_bound_not_positive(void *data_, void *bound_); +void __ubsan_handle_load_invalid_value(void *data_, void *val_); +void __ubsan_handle_nonnull_arg(void *data_); +void __ubsan_handle_nonnull_return(void *data_); +void __ubsan_handle_builtin_unreachable(void *data_); +void __ubsan_handle_pointer_overflow(void *data_, void *base_, void *result_); +void __ubsan_handle_invalid_builtin(void *data_); static void __ubsan_maybe_debugbreak(void) { @@ -166,63 +166,72 @@ static void __ubsan_default_handler(struct source_location *loc, const char *fun esp_system_abort(msg); } -void __ubsan_handle_type_mismatch(struct type_mismatch_data *data, - unsigned long ptr) +void __ubsan_handle_type_mismatch(void *data_, + void *ptr_) { + struct type_mismatch_data *data = data_; __ubsan_maybe_debugbreak(); __ubsan_default_handler(&data->loc, __func__); } -void __ubsan_handle_type_mismatch_v1(struct type_mismatch_data_v1 *data, - unsigned long ptr) +void __ubsan_handle_type_mismatch_v1(void *data_, + void *ptr) { + struct type_mismatch_data_v1 *data = data_; __ubsan_maybe_debugbreak(); __ubsan_default_handler(&data->loc, __func__); } -void __ubsan_handle_add_overflow(struct overflow_data *data, - unsigned long lhs, - unsigned long rhs) +void __ubsan_handle_add_overflow(void *data_, + void *lhs_, + void *rhs_) { + struct overflow_data *data = data_; __ubsan_maybe_debugbreak(); __ubsan_default_handler(&data->loc, __func__); } -void __ubsan_handle_sub_overflow(struct overflow_data *data, - unsigned long lhs, - unsigned long rhs) +void __ubsan_handle_sub_overflow(void *data_, + void *lhs_, + void *rhs_) { + struct overflow_data *data = data_; __ubsan_maybe_debugbreak(); __ubsan_default_handler(&data->loc, __func__); } -void __ubsan_handle_mul_overflow(struct overflow_data *data, - unsigned long lhs, - unsigned long rhs) +void __ubsan_handle_mul_overflow(void *data_, + void *lhs_, + void *rhs_) { + struct overflow_data *data = data_; __ubsan_maybe_debugbreak(); __ubsan_default_handler(&data->loc, __func__); } -void __ubsan_handle_negate_overflow(struct overflow_data *data, - unsigned long old_val) +void __ubsan_handle_negate_overflow(void *data_, + void *old_val_) { + struct overflow_data *data = data_; __ubsan_maybe_debugbreak(); __ubsan_default_handler(&data->loc, __func__); } -void __ubsan_handle_divrem_overflow(struct overflow_data *data, - unsigned long lhs, - unsigned long rhs) +void __ubsan_handle_divrem_overflow(void *data_, + void *lhs_, + void *rhs_) { + struct overflow_data *data = data_; __ubsan_maybe_debugbreak(); __ubsan_default_handler(&data->loc, __func__); } -void __ubsan_handle_shift_out_of_bounds(struct shift_out_of_bounds_data *data, - unsigned long lhs, - unsigned long rhs) +void __ubsan_handle_shift_out_of_bounds(void *data_, + void *lhs_, + void *rhs_) { + struct shift_out_of_bounds_data *data = data_; + unsigned int rhs = (unsigned int)rhs_; if (rhs == 32) { return; } @@ -230,60 +239,70 @@ void __ubsan_handle_shift_out_of_bounds(struct shift_out_of_bounds_data *data, __ubsan_default_handler(&data->loc, __func__); } -void __ubsan_handle_out_of_bounds(struct out_of_bounds_data *data, - unsigned long idx) +void __ubsan_handle_out_of_bounds(void *data_, + void *idx_) { + struct out_of_bounds_data *data = data_; __ubsan_maybe_debugbreak(); __ubsan_default_handler(&data->loc, __func__); } -void __ubsan_handle_missing_return(struct unreachable_data *data) +void __ubsan_handle_missing_return(void *data_) { + struct unreachable_data *data = data_; __ubsan_maybe_debugbreak(); __ubsan_default_handler(&data->loc, __func__); } -void __ubsan_handle_vla_bound_not_positive(struct vla_bound_data *data, - unsigned long bound) +void __ubsan_handle_vla_bound_not_positive(void *data_, + void *bound_) { + struct vla_bound_data *data = data_; __ubsan_maybe_debugbreak(); __ubsan_default_handler(&data->loc, __func__); } -void __ubsan_handle_load_invalid_value(struct invalid_value_data *data, - unsigned long val) +void __ubsan_handle_load_invalid_value(void *data_, + void *val_) { + struct invalid_value_data *data = data_; __ubsan_maybe_debugbreak(); __ubsan_default_handler(&data->loc, __func__); } -void __ubsan_handle_nonnull_arg(struct nonnull_arg_data *data) +void __ubsan_handle_nonnull_arg(void *data_) { + struct nonnull_arg_data *data = data_; __ubsan_maybe_debugbreak(); __ubsan_default_handler(&data->loc, __func__); } -void __ubsan_handle_nonnull_return(struct nonnull_return_data *data) +void __ubsan_handle_nonnull_return(void *data_) { + struct nonnull_return_data *data = data_; __ubsan_maybe_debugbreak(); __ubsan_default_handler(&data->loc, __func__); } -void __ubsan_handle_builtin_unreachable(struct unreachable_data *data) +void __ubsan_handle_builtin_unreachable(void *data_) { + struct unreachable_data *data = data_; __ubsan_maybe_debugbreak(); __ubsan_default_handler(&data->loc, __func__); } -void __ubsan_handle_pointer_overflow(struct pointer_overflow_data *data, - unsigned long base, unsigned long result) +void __ubsan_handle_pointer_overflow(void *data_, + void *base_, + void *result_) { + struct pointer_overflow_data *data = data_; __ubsan_maybe_debugbreak(); __ubsan_default_handler(&data->loc, __func__); } -void __ubsan_handle_invalid_builtin(struct invalid_builtin_data *data) +void __ubsan_handle_invalid_builtin(void *data_) { + struct invalid_builtin_data *data = data_; __ubsan_maybe_debugbreak(); __ubsan_default_handler(&data->loc, __func__); }