Changeset 2f7d77c6 in mainline for kernel


Ignore:
Timestamp:
2018-06-14T19:02:26Z (7 years ago)
Author:
Jiří Zárevúcky <jiri.zarevucky@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
587478b
Parents:
abf8bd8
git-author:
Jiří Zárevúcky <jiri.zarevucky@…> (2018-06-14 17:48:39)
git-committer:
Jiří Zárevúcky <jiri.zarevucky@…> (2018-06-14 19:02:26)
Message:

Add rudimentary support for undefined behavior sanitizer.

Location:
kernel
Files:
1 added
4 edited

Legend:

Unmodified
Added
Removed
  • kernel/Makefile

    rabf8bd8 r2f7d77c6  
    106106ifeq ($(CONFIG_DEBUG),y)
    107107        COMMON_CFLAGS += -Werror
     108endif
     109
     110ifeq ($(CONFIG_UBSAN_KERNEL),y)
     111        COMMON_CFLAGS += -fsanitize=undefined
    108112endif
    109113
     
    209213        generic/src/lib/ra.c \
    210214        generic/src/lib/rd.c \
     215        generic/src/lib/ubsan.c \
    211216        generic/src/printf/printf_core.c \
    212217        generic/src/printf/printf.c \
  • kernel/generic/include/lib/memfnc.h

    rabf8bd8 r2f7d77c6  
    5151    __attribute__((nonnull(1, 2)))
    5252    ATTRIBUTE_OPTIMIZE("-fno-tree-loop-distribute-patterns") DO_NOT_DISCARD;
     53extern int memcmp(const void *, const void *, size_t len)
     54    __attribute__((nonnull(1, 2)))
     55    ATTRIBUTE_OPTIMIZE("-fno-tree-loop-distribute-patterns") DO_NOT_DISCARD;
    5356
    5457#define alloca(size) __builtin_alloca((size))
  • kernel/generic/include/mem.h

    rabf8bd8 r2f7d77c6  
    4848#define memset(dst, val, cnt)  __builtin_memset((dst), (val), (cnt))
    4949#define memcpy(dst, src, cnt)  __builtin_memcpy((dst), (src), (cnt))
     50#define memcmp(s1, s2, cnt)    __builtin_memcmp((s1), (s2), (cnt))
    5051
    5152extern void memsetb(void *, size_t, uint8_t)
  • kernel/generic/src/lib/memfnc.c

    rabf8bd8 r2f7d77c6  
    8787}
    8888
     89/** Compare two memory areas.
     90 *
     91 * @param s1  Pointer to the first area to compare.
     92 * @param s2  Pointer to the second area to compare.
     93 * @param len Size of the areas in bytes.
     94 *
     95 * @return Zero if areas have the same contents. If they differ,
     96 *         the sign of the result is the same as the sign of the
     97 *         difference of the first pair of different bytes.
     98 *
     99 */
     100int memcmp(const void *s1, const void *s2, size_t len)
     101{
     102        uint8_t *u1 = (uint8_t *) s1;
     103        uint8_t *u2 = (uint8_t *) s2;
     104        size_t i;
     105
     106        for (i = 0; i < len; i++) {
     107                if (*u1 != *u2)
     108                        return (int)(*u1) - (int)(*u2);
     109                ++u1;
     110                ++u2;
     111        }
     112
     113        return 0;
     114}
     115
    89116/** @}
    90117 */
Note: See TracChangeset for help on using the changeset viewer.