gcc discovered that the memcpy() arguments in kdbnearsym() overlap, so we should really use memmove(), which is defined to handle that correctly: In function 'memcpy', inlined from 'kdbnearsym' at /git/arm-soc/kernel/debug/kdb/kdb_support.c:132:4: /git/arm-soc/include/linux/string.h:353:9: error: '__builtin_memcpy' accessing 792 bytes at offsets 0 and 8 overlaps 784 bytes at offset 8 [-Werror=restrict] return __builtin_memcpy(p, q, size);
Showing the changes to kernel/debug (1 of 1 file). Show all
Unified · Split
| @@ -129,13 +129,13 @@ int kdbnearsym(unsigned long addr, kdb_symtab_t *symtab) · 128 unmodified lines | |||
| 129 | } | 129 | } |
| 130 | if (i >= ARRAY_SIZE(kdb_name_table)) { | 130 | if (i >= ARRAY_SIZE(kdb_name_table)) { |
| 131 | debug_kfree(kdb_name_table[0]); | 131 | debug_kfree(kdb_name_table[0]); |
| 132 | memcpy(kdb_name_table, kdb_name_table+1, | 132 | memmove(kdb_name_table, kdb_name_table+1, |
| 133 | sizeof(kdb_name_table[0]) * | 133 | sizeof(kdb_name_table[0]) * |
| 134 | (ARRAY_SIZE(kdb_name_table)-1)); | 134 | (ARRAY_SIZE(kdb_name_table)-1)); |
| 135 | } else { | 135 | } else { |
| 136 | debug_kfree(knt1); | 136 | debug_kfree(knt1); |
| 137 | knt1 = kdb_name_table[i]; | 137 | knt1 = kdb_name_table[i]; |
| 138 | memcpy(kdb_name_table+i, kdb_name_table+i+1, | 138 | memmove(kdb_name_table+i, kdb_name_table+i+1, |
| 139 | sizeof(kdb_name_table[0]) * | 139 | sizeof(kdb_name_table[0]) * |
| 140 | (ARRAY_SIZE(kdb_name_table)-i-1)); | 140 | (ARRAY_SIZE(kdb_name_table)-i-1)); |
| 141 | } | 141 | } |