lib/ubsan.c: Update error handlers for current toolchain's GCC
Looks like UBSan isn't being build-tested, and the toolchain has been updated several times since UBSan support was added. Unexpectedly, it no longer builds when using GCC from the current toolchain version. To fix this, rename an error handler and add a newly-introduced handler for `__ubsan_handle_pointer_overflow`, which works like the existing handlers. A config file to allow build-testing UBSan is added later. Change-Id: I5980730d8d22fa1d0512846c203004723847cc6d Signed-off-by: Angel Pons <th3fanbus@gmail.com> Reviewed-on: https://review.coreboot.org/c/coreboot/+/43975 Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Tim Wawrzynczak <twawrzynczak@chromium.org>
This commit is contained in:
parent
5f9f77672d
commit
7d6dae6870
|
@ -68,7 +68,7 @@ struct ubsan_type_mismatch_data {
|
|||
unsigned char type_check_kind;
|
||||
};
|
||||
|
||||
void __ubsan_handle_type_mismatch(void *data_raw, void *pointer_raw)
|
||||
void __ubsan_handle_type_mismatch_v1(void *data_raw, void *pointer_raw)
|
||||
{
|
||||
const struct ubsan_type_mismatch_data *data =
|
||||
(struct ubsan_type_mismatch_data *)data_raw;
|
||||
|
@ -81,7 +81,7 @@ void __ubsan_handle_type_mismatch(void *data_raw, void *pointer_raw)
|
|||
ubsan_abort(&data->location, violation);
|
||||
}
|
||||
|
||||
ABORT_VARIANT_VP_VP(type_mismatch);
|
||||
ABORT_VARIANT_VP_VP(type_mismatch_v1);
|
||||
|
||||
struct ubsan_overflow_data {
|
||||
struct ubsan_source_location location;
|
||||
|
@ -156,6 +156,23 @@ void __ubsan_handle_divrem_overflow(void *data_raw, void *lhs_raw,
|
|||
|
||||
ABORT_VARIANT_VP_VP_VP(divrem_overflow);
|
||||
|
||||
struct ubsan_pointer_overflow_data {
|
||||
struct ubsan_source_location location;
|
||||
};
|
||||
|
||||
void __ubsan_handle_pointer_overflow(void *data_raw, void *base_raw, void *result_raw)
|
||||
{
|
||||
const struct ubsan_pointer_overflow_data *data =
|
||||
(struct ubsan_pointer_overflow_data *)data_raw;
|
||||
ubsan_value_handle_t base = (ubsan_value_handle_t)base_raw;
|
||||
ubsan_value_handle_t result = (ubsan_value_handle_t)result_raw;
|
||||
(void)base;
|
||||
(void)result;
|
||||
ubsan_abort(&data->location, "pointer overflow");
|
||||
}
|
||||
|
||||
ABORT_VARIANT_VP_VP_VP(pointer_overflow);
|
||||
|
||||
struct ubsan_shift_out_of_bounds_data {
|
||||
struct ubsan_source_location location;
|
||||
struct ubsan_type_descriptor *lhs_type;
|
||||
|
|
Loading…
Reference in New Issue