On Mon, Oct 20 2014, Andrey Ryabinin <a.ryabinin@xxxxxxxxxxx> wrote: > UBSan uses compile-time instrumentation to catch undefined behavior (UB). > Compiler inserts code that perform certain kinds of > checks before operations that could cause UB. > If check fails (i.e. UB detected) __ubsan_handle_* function called. > to print error message. > > So the most of the work is done by compiler. > This patch just implements ubsan handlers printing errors. > > GCC supports this since 4.9, however upcoming GCC 5.0 has > more checkers implemented. [...] > + > +#define REPORTED_BIT 31 > +#define COLUMN_MASK (~(1U << REPORTED_BIT)) > + > +static bool is_disabled(struct source_location *location) > +{ > + return test_and_set_bit(REPORTED_BIT, > + (unsigned long *)&location->column); > +} [...] > +struct source_location { > + const char *file_name; > + u32 line; > + u32 column; > +}; AFAICT, this introduces UB and/or memory corruption on big-endian systems with BITS_PER_LONG==64. (Also, on both LE and BE 64 bit systems, there's the issue of the alignment of location->column, which is likely to be 4-but-not-8 byte aligned). Is the layout of struct source_location dictated by gcc? Rasmus -- To unsubscribe from this list: send the line "unsubscribe linux-kbuild" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html