Messages in this thread | | | Date | Tue, 5 Jul 2022 08:24:55 +0800 | From | kernel test robot <> | Subject | [esmil:visionfive 3/49] arch/riscv/lib/string.c:48: undefined reference to `_mcount' |
| |
tree: https://github.com/esmil/linux visionfive head: 575362a88f9e6ef14a1a35eb7bd1593745cf019e commit: 163ef6b6c194ae4d1f709053e4677687e6b87a27 [3/49] riscv: optimized memmove config: riscv-buildonly-randconfig-r001-20220703 (https://download.01.org/0day-ci/archive/20220705/202207050825.5E6Jlwd8-lkp@intel.com/config) compiler: riscv64-linux-gcc (GCC) 11.3.0 reproduce (this is a W=1 build): wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross chmod +x ~/bin/make.cross # https://github.com/esmil/linux/commit/163ef6b6c194ae4d1f709053e4677687e6b87a27 git remote add esmil https://github.com/esmil/linux git fetch --no-tags esmil visionfive git checkout 163ef6b6c194ae4d1f709053e4677687e6b87a27 # save the config file mkdir build_dir && cp config build_dir/.config COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-11.3.0 make.cross W=1 O=build_dir ARCH=riscv SHELL=/bin/bash
If you fix the issue, kindly add following tag where applicable Reported-by: kernel test robot <lkp@intel.com>
All errors (new ones prefixed by >>):
riscv64-linux-ld: arch/riscv/purgatory/purgatory.ro: in function `.L355': string.c:(.text+0x20e0): undefined reference to `_mcount' riscv64-linux-ld: arch/riscv/purgatory/purgatory.ro: in function `__memcpy': >> arch/riscv/lib/string.c:48: undefined reference to `_mcount'
vim +48 arch/riscv/lib/string.c
6a48862f530a59 Matteo Croce 2021-09-29 30 6a48862f530a59 Matteo Croce 2021-09-29 31 void *__memcpy(void *dest, const void *src, size_t count) 6a48862f530a59 Matteo Croce 2021-09-29 32 { 6a48862f530a59 Matteo Croce 2021-09-29 33 union const_types s = { .as_u8 = src }; 6a48862f530a59 Matteo Croce 2021-09-29 34 union types d = { .as_u8 = dest }; 6a48862f530a59 Matteo Croce 2021-09-29 35 int distance = 0; 6a48862f530a59 Matteo Croce 2021-09-29 36 6a48862f530a59 Matteo Croce 2021-09-29 37 if (!IS_ENABLED(CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS)) { 6a48862f530a59 Matteo Croce 2021-09-29 38 if (count < MIN_THRESHOLD) 6a48862f530a59 Matteo Croce 2021-09-29 39 goto copy_remainder; 6a48862f530a59 Matteo Croce 2021-09-29 40 6a48862f530a59 Matteo Croce 2021-09-29 41 /* Copy a byte at time until destination is aligned. */ 6a48862f530a59 Matteo Croce 2021-09-29 42 for (; d.as_uptr & WORD_MASK; count--) 6a48862f530a59 Matteo Croce 2021-09-29 43 *d.as_u8++ = *s.as_u8++; 6a48862f530a59 Matteo Croce 2021-09-29 44 6a48862f530a59 Matteo Croce 2021-09-29 45 distance = s.as_uptr & WORD_MASK; 6a48862f530a59 Matteo Croce 2021-09-29 46 } 6a48862f530a59 Matteo Croce 2021-09-29 47 6a48862f530a59 Matteo Croce 2021-09-29 @48 if (distance) { 6a48862f530a59 Matteo Croce 2021-09-29 49 unsigned long last, next; 6a48862f530a59 Matteo Croce 2021-09-29 50 6a48862f530a59 Matteo Croce 2021-09-29 51 /* 6a48862f530a59 Matteo Croce 2021-09-29 52 * s is distance bytes ahead of d, and d just reached 6a48862f530a59 Matteo Croce 2021-09-29 53 * the alignment boundary. Move s backward to word align it 6a48862f530a59 Matteo Croce 2021-09-29 54 * and shift data to compensate for distance, in order to do 6a48862f530a59 Matteo Croce 2021-09-29 55 * word-by-word copy. 6a48862f530a59 Matteo Croce 2021-09-29 56 */ 6a48862f530a59 Matteo Croce 2021-09-29 57 s.as_u8 -= distance; 6a48862f530a59 Matteo Croce 2021-09-29 58 6a48862f530a59 Matteo Croce 2021-09-29 59 next = s.as_ulong[0]; 6a48862f530a59 Matteo Croce 2021-09-29 60 for (; count >= BYTES_LONG; count -= BYTES_LONG) { 6a48862f530a59 Matteo Croce 2021-09-29 61 last = next; 6a48862f530a59 Matteo Croce 2021-09-29 62 next = s.as_ulong[1]; 6a48862f530a59 Matteo Croce 2021-09-29 63 6a48862f530a59 Matteo Croce 2021-09-29 64 d.as_ulong[0] = last >> (distance * 8) | 6a48862f530a59 Matteo Croce 2021-09-29 65 next << ((BYTES_LONG - distance) * 8); 6a48862f530a59 Matteo Croce 2021-09-29 66 6a48862f530a59 Matteo Croce 2021-09-29 67 d.as_ulong++; 6a48862f530a59 Matteo Croce 2021-09-29 68 s.as_ulong++; 6a48862f530a59 Matteo Croce 2021-09-29 69 } 6a48862f530a59 Matteo Croce 2021-09-29 70 6a48862f530a59 Matteo Croce 2021-09-29 71 /* Restore s with the original offset. */ 6a48862f530a59 Matteo Croce 2021-09-29 72 s.as_u8 += distance; 6a48862f530a59 Matteo Croce 2021-09-29 73 } else { 6a48862f530a59 Matteo Croce 2021-09-29 74 /* 6a48862f530a59 Matteo Croce 2021-09-29 75 * If the source and dest lower bits are the same, do a simple 6a48862f530a59 Matteo Croce 2021-09-29 76 * 32/64 bit wide copy. 6a48862f530a59 Matteo Croce 2021-09-29 77 */ 6a48862f530a59 Matteo Croce 2021-09-29 78 for (; count >= BYTES_LONG; count -= BYTES_LONG) 6a48862f530a59 Matteo Croce 2021-09-29 79 *d.as_ulong++ = *s.as_ulong++; 6a48862f530a59 Matteo Croce 2021-09-29 80 } 6a48862f530a59 Matteo Croce 2021-09-29 81 6a48862f530a59 Matteo Croce 2021-09-29 82 copy_remainder: 6a48862f530a59 Matteo Croce 2021-09-29 83 while (count--) 6a48862f530a59 Matteo Croce 2021-09-29 84 *d.as_u8++ = *s.as_u8++; 6a48862f530a59 Matteo Croce 2021-09-29 85 6a48862f530a59 Matteo Croce 2021-09-29 86 return dest; 6a48862f530a59 Matteo Croce 2021-09-29 87 } 6a48862f530a59 Matteo Croce 2021-09-29 88 EXPORT_SYMBOL(__memcpy); 6a48862f530a59 Matteo Croce 2021-09-29 89
:::::: The code at line 48 was first introduced by commit :::::: 6a48862f530a593cadaab50ae4006b3a70a112e6 riscv: optimized memcpy
:::::: TO: Matteo Croce <mcroce@microsoft.com> :::::: CC: Emil Renner Berthing <emil.renner.berthing@canonical.com>
-- 0-DAY CI Kernel Test Service https://01.org/lkp
| |