[PATCH 1/3] arm64: selftests: Generate all the possible logical immediates as a header

kernel test robot lkp at intel.com
Thu Jan 27 18:47:07 PST 2022


Hi James,

I love your patch! Perhaps something to improve:

[auto build test WARNING on arm64/for-next/core]
[also build test WARNING on arm/for-next xilinx-xlnx/master soc/for-next kvmarm/next v5.17-rc1 next-20220127]
[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/James-Morse/arm64-insn-Generate-64-bit-mask-immediates-correctly/20220128-002213
base:   https://git.kernel.org/pub/scm/linux/kernel/git/arm64/linux.git for-next/core
config: arm64-randconfig-p001-20220128 (https://download.01.org/0day-ci/archive/20220128/202201281052.Nzl9wJM4-lkp@intel.com/config)
compiler: aarch64-linux-gcc (GCC) 11.2.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/0day-ci/linux/commit/1ead98d2c8c4c28ea27964dbf7b5b89a83b8e7ec
        git remote add linux-review https://github.com/0day-ci/linux
        git fetch --no-tags linux-review James-Morse/arm64-insn-Generate-64-bit-mask-immediates-correctly/20220128-002213
        git checkout 1ead98d2c8c4c28ea27964dbf7b5b89a83b8e7ec
        # save the config file to linux build tree
        mkdir build_dir
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-11.2.0 make.cross O=build_dir ARCH=arm64 prepare

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

All warnings (new ones prefixed by >>):

   arch/arm64/tools/gen_logic_imm.c: In function 'validate':
>> arch/arm64/tools/gen_logic_imm.c:81:2: warning: ignoring return value of 'write' declared with attribute 'warn_unused_result' [-Wunused-result]
      81 |  write(fd, &insn, sizeof(insn));
         |  ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
--
   arch/arm64/tools/gen_logic_imm.c: In function 'validate':
>> arch/arm64/tools/gen_logic_imm.c:81:2: warning: ignoring return value of 'write' declared with attribute 'warn_unused_result' [-Wunused-result]
      81 |  write(fd, &insn, sizeof(insn));
         |  ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   arch/arm64/kernel/vdso/vgettimeofday.c:9:5: warning: no previous prototype for '__kernel_clock_gettime' [-Wmissing-prototypes]
       9 | int __kernel_clock_gettime(clockid_t clock,
         |     ^~~~~~~~~~~~~~~~~~~~~~
   arch/arm64/kernel/vdso/vgettimeofday.c:15:5: warning: no previous prototype for '__kernel_gettimeofday' [-Wmissing-prototypes]
      15 | int __kernel_gettimeofday(struct __kernel_old_timeval *tv,
         |     ^~~~~~~~~~~~~~~~~~~~~
   arch/arm64/kernel/vdso/vgettimeofday.c:21:5: warning: no previous prototype for '__kernel_clock_getres' [-Wmissing-prototypes]
      21 | int __kernel_clock_getres(clockid_t clock_id,
         |     ^~~~~~~~~~~~~~~~~~~~~


vim +81 arch/arm64/tools/gen_logic_imm.c

    55	
    56	#define PIPE_READ	0
    57	#define PIPE_WRITE	1
    58	/*
    59	 * Use objdump to decode the encoded instruction, and compare the immediate.
    60	 * On error, returns the bad instruction, otherwise returns 0.
    61	 */
    62	static int validate(u64 val, u32 immN, u32 imms, u32 immr, char *objdump)
    63	{
    64		pid_t child;
    65		char *immediate;
    66		char val_str[32];
    67		u32 insn = 0x12000000;
    68		char output[1024] = {0};
    69		int fd, pipefd[2], bytes;
    70		char filename[] = "validate_gen_logic_imm.XXXXXX";
    71	
    72		insn |= 1 << 31;
    73		insn |= (immN & 0x1)<<22;
    74		insn |= (immr & 0x3f)<<16;
    75		insn |= (imms & 0x3f)<<10;
    76	
    77		fd = mkstemp(filename);
    78		if (fd < 0)
    79			abort();
    80	
  > 81		write(fd, &insn, sizeof(insn));
    82		close(fd);
    83	
    84		if (pipe(pipefd))
    85			return 0;
    86	
    87		child = vfork();
    88		if (child) {
    89			close(pipefd[PIPE_WRITE]);
    90			waitpid(child, NULL, 0);
    91	
    92			bytes = read(pipefd[PIPE_READ], output, sizeof(output));
    93			close(pipefd[PIPE_READ]);
    94			if (!bytes || bytes == sizeof(output))
    95				return insn;
    96	
    97			immediate = strstr(output, "x0, x0, #");
    98			if (!immediate)
    99				return insn;
   100			immediate += strlen("x0, x0, #");
   101	
   102			/*
   103			 * strtoll() has its own ideas about overflow and underflow.
   104			 * Do a string comparison. immediate ends in a newline.
   105			 */
   106			snprintf(val_str, sizeof(val_str), "0x%lx", val);
   107			if (strncmp(val_str, immediate, strlen(val_str))) {
   108				fprintf(stderr, "Unexpected decode from objdump: %s\n",
   109					immediate);
   110				return insn;
   111			}
   112		} else {
   113			close(pipefd[PIPE_READ]);
   114			close(1);
   115			dup2(pipefd[PIPE_WRITE], 1);
   116			execl(objdump, objdump, "-b", "binary", "-m", "aarch64", "-D",
   117			      filename, (char *) NULL);
   118			abort();
   119		}
   120	
   121		unlink(filename);
   122		return 0;
   123	}
   124	

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



More information about the linux-arm-kernel mailing list