[PATCH] Fixed: Misaligned memory access. Fixed pointer comparison.

kernel test robot lkp at intel.com
Sat Jan 22 12:15:33 PST 2022


Hi "Michael,

Thank you for the patch! Yet something to improve:

[auto build test ERROR on linus/master]
[also build test ERROR on v5.16 next-20220121]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch]

url:    https://github.com/0day-ci/linux/commits/Michael-T-Kloos/Fixed-Misaligned-memory-access-Fixed-pointer-comparison/20220121-074148
base:   https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git 2c271fe77d52a0555161926c232cd5bc07178b39
config: riscv-randconfig-r021-20220120 (https://download.01.org/0day-ci/archive/20220123/202201230123.GN7Kvrlq-lkp@intel.com/config)
compiler: clang version 14.0.0 (https://github.com/llvm/llvm-project 7b3d30728816403d1fd73cc5082e9fb761262bce)
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
        # install riscv cross compiling tool for clang build
        # apt-get install binutils-riscv64-linux-gnu
        # https://github.com/0day-ci/linux/commit/c1930afcc76babc4e2313f67d0fe103a26f07712
        git remote add linux-review https://github.com/0day-ci/linux
        git fetch --no-tags linux-review Michael-T-Kloos/Fixed-Misaligned-memory-access-Fixed-pointer-comparison/20220121-074148
        git checkout c1930afcc76babc4e2313f67d0fe103a26f07712
        # save the config file to linux build tree
        mkdir build_dir
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross W=1 O=build_dir ARCH=riscv SHELL=/bin/bash

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp at intel.com>

All errors (new ones prefixed by >>):

>> arch/riscv/lib/memmove.S:113:16: error: operand must be a symbol with %lo/%pcrel_lo/%tprel_lo modifier or an integer in the range [-2048, 2047]
    1: jalr zero, (t0)
                  ^


vim +113 arch/riscv/lib/memmove.S

     8	
     9	SYM_FUNC_START(__memmove)
    10	SYM_FUNC_START_ALIAS(memmove)
    11		/*
    12		 * Returns
    13		 *   a0 - dest
    14		 *
    15		 * Parameters
    16		 *   a0 - Inclusive first byte of dest
    17		 *   a1 - Inclusive first byte of src
    18		 *   a2 - Length of copy
    19		 *
    20		 * Because the return matches the parameter register a0,
    21		 * we will not clobber or modify that register.
    22		 */
    23	
    24		/* Return if nothing to do */
    25		beq a0, a1, exit_memmove
    26		beqz a2, exit_memmove
    27	
    28		/*
    29		 * Register Uses
    30		 *   a3 - Inclusive first multibyte of src
    31		 *   a4 - Non-inclusive last multibyte of src
    32		 *   a5 - Non-inclusive last byte of src
    33		 *
    34		 * During the copy
    35		 *      Forward Copy: a1 - Index counter of src
    36		 *      Reverse Copy: a5 - Index counter of src
    37		 *   Both Copy Modes: t2 - Index counter of dest
    38		 *   Both Copy Modes: t1 - Temporary for load-store
    39		 *   Both Copy Modes: t0 - Link
    40		 */
    41	
    42		/*
    43		 * Solve for last byte now.  We will solve the rest when
    44		 * they are needed for the copy because either byte copy
    45		 * does not require any of the others (Wasted effort if
    46		 * byte copy gets used) or we do not yet have enough
    47		 * information to solve them.
    48		 */
    49		add  a5, a1, a2
    50	
    51		/*
    52		 * Byte copy if copying less than SZREG bytes.
    53		 * This can cause problems with the bulk copy
    54		 * implementation below and is small enough not
    55		 * to bother.
    56		 */
    57		andi t0, a2, -SZREG
    58		beqz t0, byte_copy
    59	
    60		/* Determine the maximum granularity of co-alignment. */
    61		xor  t0, a0, a1
    62	#if   SZREG >= 8
    63		andi t1, t0, 0x7
    64		beqz t1, doubleword_copy
    65	#endif
    66		andi t1, t0, 0x3
    67		beqz t1, word_copy
    68		andi t1, t0, 0x1
    69		beqz t1, halfword_copy
    70		/* Fall through to byte copy if nothing larger is found. */
    71	
    72	byte_copy:
    73		bltu a1, a0, byte_copy_reverse
    74	
    75	byte_copy_forward:
    76		add  t2, a0, zero
    77	byte_copy_fw_callin:
    78		beq  a1, a5, exit_memmove
    79		lb   t1, (a1)
    80		sb   t1, (t2)
    81		addi a1, a1, 1
    82		addi t2, t2, 1
    83		j byte_copy_fw_callin
    84	
    85	byte_copy_reverse:
    86		add  t2, a0, a2
    87	byte_copy_rv_callin:
    88		beq  a1, a5, exit_memmove
    89		addi a5, a5, -1
    90		addi t2, t2, -1
    91		lb   t1, (a5)
    92		sb   t1, (t2)
    93		j byte_copy_rv_callin
    94	
    95	exit_memmove:
    96		ret
    97	
    98	copy_bytes_until_aligned_fw:
    99		beq  a1, a3, 1f /* Reuse the return from the other copy loop */
   100		lb   t1, (a1)
   101		sb   t1, (t2)
   102		addi a1, a1, 1
   103		addi t2, t2, 1
   104		j copy_bytes_until_aligned_fw
   105	
   106	copy_bytes_until_aligned_rv:
   107		beq  a4, a5, 1f
   108		addi a5, a5, -1
   109		addi t2, t2, -1
   110		lb   t1, (a5)
   111		sb   t1, (t2)
   112		j copy_bytes_until_aligned_rv
 > 113		1: jalr zero, (t0) /* Return */
   114	

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org



More information about the linux-riscv mailing list