All of lore.kernel.org
 help / color / mirror / Atom feed
From: kernel test robot <lkp@intel.com>
To: kbuild-all@lists.01.org
Subject: [sashal-linux-stable:pending-5.13 38/39] arch/s390/kernel/signal.c:340:14: error: implicit declaration of function 'VDSO64_SYMBOL'
Date: Sat, 07 Aug 2021 04:13:31 +0800	[thread overview]
Message-ID: <202108070426.n2EZ53ad-lkp@intel.com> (raw)

[-- Attachment #1: Type: text/plain, Size: 19555 bytes --]

tree:   https://git.kernel.org/pub/scm/linux/kernel/git/sashal/linux-stable.git pending-5.13
head:   af94cbab01cc23139bdf25372f8e33895a5650e8
commit: b7ad0b2295c98d8ea603c7e916745bd55c645f2f [38/39] s390/signal: switch to using vdso for sigreturn and syscall restart
config: s390-randconfig-r006-20210806 (attached as .config)
compiler: clang version 14.0.0 (https://github.com/llvm/llvm-project 42b9c2a17a0b63cccf3ac197a82f91b28e53e643)
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 s390 cross compiling tool for clang build
        # apt-get install binutils-s390x-linux-gnu
        # https://git.kernel.org/pub/scm/linux/kernel/git/sashal/linux-stable.git/commit/?id=b7ad0b2295c98d8ea603c7e916745bd55c645f2f
        git remote add sashal-linux-stable https://git.kernel.org/pub/scm/linux/kernel/git/sashal/linux-stable.git
        git fetch --no-tags sashal-linux-stable pending-5.13
        git checkout b7ad0b2295c98d8ea603c7e916745bd55c645f2f
        # save the attached .config to linux build tree
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross ARCH=s390 

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

All errors (new ones prefixed by >>):

   In file included from arch/s390/kernel/signal.c:19:
   In file included from include/linux/entry-common.h:6:
   In file included from include/linux/tracehook.h:50:
   In file included from include/linux/memcontrol.h:22:
   In file included from include/linux/writeback.h:14:
   In file included from include/linux/blk-cgroup.h:23:
   In file included from include/linux/blkdev.h:25:
   In file included from include/linux/scatterlist.h:9:
   In file included from arch/s390/include/asm/io.h:75:
   include/asm-generic/io.h:464:31: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
           val = __raw_readb(PCI_IOBASE + addr);
                             ~~~~~~~~~~ ^
   include/asm-generic/io.h:477:61: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
           val = __le16_to_cpu((__le16 __force)__raw_readw(PCI_IOBASE + addr));
                                                           ~~~~~~~~~~ ^
   include/uapi/linux/byteorder/big_endian.h:36:59: note: expanded from macro '__le16_to_cpu'
   #define __le16_to_cpu(x) __swab16((__force __u16)(__le16)(x))
                                                             ^
   include/uapi/linux/swab.h:102:54: note: expanded from macro '__swab16'
   #define __swab16(x) (__u16)__builtin_bswap16((__u16)(x))
                                                        ^
   In file included from arch/s390/kernel/signal.c:19:
   In file included from include/linux/entry-common.h:6:
   In file included from include/linux/tracehook.h:50:
   In file included from include/linux/memcontrol.h:22:
   In file included from include/linux/writeback.h:14:
   In file included from include/linux/blk-cgroup.h:23:
   In file included from include/linux/blkdev.h:25:
   In file included from include/linux/scatterlist.h:9:
   In file included from arch/s390/include/asm/io.h:75:
   include/asm-generic/io.h:490:61: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
           val = __le32_to_cpu((__le32 __force)__raw_readl(PCI_IOBASE + addr));
                                                           ~~~~~~~~~~ ^
   include/uapi/linux/byteorder/big_endian.h:34:59: note: expanded from macro '__le32_to_cpu'
   #define __le32_to_cpu(x) __swab32((__force __u32)(__le32)(x))
                                                             ^
   include/uapi/linux/swab.h:115:54: note: expanded from macro '__swab32'
   #define __swab32(x) (__u32)__builtin_bswap32((__u32)(x))
                                                        ^
   In file included from arch/s390/kernel/signal.c:19:
   In file included from include/linux/entry-common.h:6:
   In file included from include/linux/tracehook.h:50:
   In file included from include/linux/memcontrol.h:22:
   In file included from include/linux/writeback.h:14:
   In file included from include/linux/blk-cgroup.h:23:
   In file included from include/linux/blkdev.h:25:
   In file included from include/linux/scatterlist.h:9:
   In file included from arch/s390/include/asm/io.h:75:
   include/asm-generic/io.h:501:33: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
           __raw_writeb(value, PCI_IOBASE + addr);
                               ~~~~~~~~~~ ^
   include/asm-generic/io.h:511:59: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
           __raw_writew((u16 __force)cpu_to_le16(value), PCI_IOBASE + addr);
                                                         ~~~~~~~~~~ ^
   include/asm-generic/io.h:521:59: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
           __raw_writel((u32 __force)cpu_to_le32(value), PCI_IOBASE + addr);
                                                         ~~~~~~~~~~ ^
   include/asm-generic/io.h:609:20: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
           readsb(PCI_IOBASE + addr, buffer, count);
                  ~~~~~~~~~~ ^
   include/asm-generic/io.h:617:20: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
           readsw(PCI_IOBASE + addr, buffer, count);
                  ~~~~~~~~~~ ^
   include/asm-generic/io.h:625:20: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
           readsl(PCI_IOBASE + addr, buffer, count);
                  ~~~~~~~~~~ ^
   include/asm-generic/io.h:634:21: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
           writesb(PCI_IOBASE + addr, buffer, count);
                   ~~~~~~~~~~ ^
   include/asm-generic/io.h:643:21: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
           writesw(PCI_IOBASE + addr, buffer, count);
                   ~~~~~~~~~~ ^
   include/asm-generic/io.h:652:21: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
           writesl(PCI_IOBASE + addr, buffer, count);
                   ~~~~~~~~~~ ^
>> arch/s390/kernel/signal.c:340:14: error: implicit declaration of function 'VDSO64_SYMBOL' [-Werror,-Wimplicit-function-declaration]
                   restorer = VDSO64_SYMBOL(current, sigreturn);
                              ^
>> arch/s390/kernel/signal.c:340:37: error: use of undeclared identifier 'sigreturn'
                   restorer = VDSO64_SYMBOL(current, sigreturn);
                                                     ^
   arch/s390/kernel/signal.c:398:14: error: implicit declaration of function 'VDSO64_SYMBOL' [-Werror,-Wimplicit-function-declaration]
                   restorer = VDSO64_SYMBOL(current, rt_sigreturn);
                              ^
>> arch/s390/kernel/signal.c:398:37: error: use of undeclared identifier 'rt_sigreturn'; did you mean 'sys_sigreturn'?
                   restorer = VDSO64_SYMBOL(current, rt_sigreturn);
                                                     ^~~~~~~~~~~~
                                                     sys_sigreturn
   arch/s390/kernel/entry.h:51:6: note: 'sys_sigreturn' declared here
   long sys_sigreturn(void);
        ^
>> arch/s390/kernel/signal.c:514:22: error: implicit declaration of function 'VDSO32_SYMBOL' [-Werror,-Wimplicit-function-declaration]
                                   regs->psw.addr = VDSO32_SYMBOL(current, restart_syscall);
                                                    ^
   arch/s390/kernel/signal.c:516:22: error: implicit declaration of function 'VDSO64_SYMBOL' [-Werror,-Wimplicit-function-declaration]
                                   regs->psw.addr = VDSO64_SYMBOL(current, restart_syscall);
                                                    ^
   12 warnings and 6 errors generated.
--
>> arch/s390/kernel/compat_signal.c:307:14: error: implicit declaration of function 'VDSO32_SYMBOL' [-Werror,-Wimplicit-function-declaration]
                   restorer = VDSO32_SYMBOL(current, sigreturn);
                              ^
>> arch/s390/kernel/compat_signal.c:307:37: error: use of undeclared identifier 'sigreturn'
                   restorer = VDSO32_SYMBOL(current, sigreturn);
                                                     ^
   arch/s390/kernel/compat_signal.c:370:14: error: implicit declaration of function 'VDSO32_SYMBOL' [-Werror,-Wimplicit-function-declaration]
                   restorer = VDSO32_SYMBOL(current, rt_sigreturn);
                              ^
>> arch/s390/kernel/compat_signal.c:370:37: error: use of undeclared identifier 'rt_sigreturn'; did you mean 'sys_sigreturn'?
                   restorer = VDSO32_SYMBOL(current, rt_sigreturn);
                                                     ^~~~~~~~~~~~
                                                     sys_sigreturn
   arch/s390/kernel/entry.h:51:6: note: 'sys_sigreturn' declared here
   long sys_sigreturn(void);
        ^
   4 errors generated.


vim +/VDSO64_SYMBOL +340 arch/s390/kernel/signal.c

   288	
   289	static int setup_frame(int sig, struct k_sigaction *ka,
   290			       sigset_t *set, struct pt_regs * regs)
   291	{
   292		struct sigframe __user *frame;
   293		struct sigcontext sc;
   294		unsigned long restorer;
   295		size_t frame_size;
   296	
   297		/*
   298		 * gprs_high are only present for a 31-bit task running on
   299		 * a 64-bit kernel (see compat_signal.c) but the space for
   300		 * gprs_high need to be allocated if vector registers are
   301		 * included in the signal frame on a 31-bit system.
   302		 */
   303		frame_size = sizeof(*frame) - sizeof(frame->sregs_ext);
   304		if (MACHINE_HAS_VX)
   305			frame_size += sizeof(frame->sregs_ext);
   306		frame = get_sigframe(ka, regs, frame_size);
   307		if (frame == (void __user *) -1UL)
   308			return -EFAULT;
   309	
   310		/* Set up backchain. */
   311		if (__put_user(regs->gprs[15], (addr_t __user *) frame))
   312			return -EFAULT;
   313	
   314		/* Create struct sigcontext on the signal stack */
   315		memcpy(&sc.oldmask, &set->sig, _SIGMASK_COPY_SIZE);
   316		sc.sregs = (_sigregs __user __force *) &frame->sregs;
   317		if (__copy_to_user(&frame->sc, &sc, sizeof(frame->sc)))
   318			return -EFAULT;
   319	
   320		/* Store registers needed to create the signal frame */
   321		store_sigregs();
   322	
   323		/* Create _sigregs on the signal stack */
   324		if (save_sigregs(regs, &frame->sregs))
   325			return -EFAULT;
   326	
   327		/* Place signal number on stack to allow backtrace from handler.  */
   328		if (__put_user(regs->gprs[2], (int __user *) &frame->signo))
   329			return -EFAULT;
   330	
   331		/* Create _sigregs_ext on the signal stack */
   332		if (save_sigregs_ext(regs, &frame->sregs_ext))
   333			return -EFAULT;
   334	
   335		/* Set up to return from userspace.  If provided, use a stub
   336		   already in userspace.  */
   337		if (ka->sa.sa_flags & SA_RESTORER)
   338			restorer = (unsigned long) ka->sa.sa_restorer;
   339		else
 > 340			restorer = VDSO64_SYMBOL(current, sigreturn);
   341	
   342		/* Set up registers for signal handler */
   343		regs->gprs[14] = restorer;
   344		regs->gprs[15] = (unsigned long) frame;
   345		/* Force default amode and default user address space control. */
   346		regs->psw.mask = PSW_MASK_EA | PSW_MASK_BA |
   347			(PSW_USER_BITS & PSW_MASK_ASC) |
   348			(regs->psw.mask & ~PSW_MASK_ASC);
   349		regs->psw.addr = (unsigned long) ka->sa.sa_handler;
   350	
   351		regs->gprs[2] = sig;
   352		regs->gprs[3] = (unsigned long) &frame->sc;
   353	
   354		/* We forgot to include these in the sigcontext.
   355		   To avoid breaking binary compatibility, they are passed as args. */
   356		if (sig == SIGSEGV || sig == SIGBUS || sig == SIGILL ||
   357		    sig == SIGTRAP || sig == SIGFPE) {
   358			/* set extra registers only for synchronous signals */
   359			regs->gprs[4] = regs->int_code & 127;
   360			regs->gprs[5] = regs->int_parm_long;
   361			regs->gprs[6] = current->thread.last_break;
   362		}
   363		return 0;
   364	}
   365	
   366	static int setup_rt_frame(struct ksignal *ksig, sigset_t *set,
   367				  struct pt_regs *regs)
   368	{
   369		struct rt_sigframe __user *frame;
   370		unsigned long uc_flags, restorer;
   371		size_t frame_size;
   372	
   373		frame_size = sizeof(struct rt_sigframe) - sizeof(_sigregs_ext);
   374		/*
   375		 * gprs_high are only present for a 31-bit task running on
   376		 * a 64-bit kernel (see compat_signal.c) but the space for
   377		 * gprs_high need to be allocated if vector registers are
   378		 * included in the signal frame on a 31-bit system.
   379		 */
   380		uc_flags = 0;
   381		if (MACHINE_HAS_VX) {
   382			frame_size += sizeof(_sigregs_ext);
   383			uc_flags |= UC_VXRS;
   384		}
   385		frame = get_sigframe(&ksig->ka, regs, frame_size);
   386		if (frame == (void __user *) -1UL)
   387			return -EFAULT;
   388	
   389		/* Set up backchain. */
   390		if (__put_user(regs->gprs[15], (addr_t __user *) frame))
   391			return -EFAULT;
   392	
   393		/* Set up to return from userspace.  If provided, use a stub
   394		   already in userspace.  */
   395		if (ksig->ka.sa.sa_flags & SA_RESTORER)
   396			restorer = (unsigned long) ksig->ka.sa.sa_restorer;
   397		else
 > 398			restorer = VDSO64_SYMBOL(current, rt_sigreturn);
   399	
   400		/* Create siginfo on the signal stack */
   401		if (copy_siginfo_to_user(&frame->info, &ksig->info))
   402			return -EFAULT;
   403	
   404		/* Store registers needed to create the signal frame */
   405		store_sigregs();
   406	
   407		/* Create ucontext on the signal stack. */
   408		if (__put_user(uc_flags, &frame->uc.uc_flags) ||
   409		    __put_user(NULL, &frame->uc.uc_link) ||
   410		    __save_altstack(&frame->uc.uc_stack, regs->gprs[15]) ||
   411		    save_sigregs(regs, &frame->uc.uc_mcontext) ||
   412		    __copy_to_user(&frame->uc.uc_sigmask, set, sizeof(*set)) ||
   413		    save_sigregs_ext(regs, &frame->uc.uc_mcontext_ext))
   414			return -EFAULT;
   415	
   416		/* Set up registers for signal handler */
   417		regs->gprs[14] = restorer;
   418		regs->gprs[15] = (unsigned long) frame;
   419		/* Force default amode and default user address space control. */
   420		regs->psw.mask = PSW_MASK_EA | PSW_MASK_BA |
   421			(PSW_USER_BITS & PSW_MASK_ASC) |
   422			(regs->psw.mask & ~PSW_MASK_ASC);
   423		regs->psw.addr = (unsigned long) ksig->ka.sa.sa_handler;
   424	
   425		regs->gprs[2] = ksig->sig;
   426		regs->gprs[3] = (unsigned long) &frame->info;
   427		regs->gprs[4] = (unsigned long) &frame->uc;
   428		regs->gprs[5] = current->thread.last_break;
   429		return 0;
   430	}
   431	
   432	static void handle_signal(struct ksignal *ksig, sigset_t *oldset,
   433				  struct pt_regs *regs)
   434	{
   435		int ret;
   436	
   437		/* Set up the stack frame */
   438		if (ksig->ka.sa.sa_flags & SA_SIGINFO)
   439			ret = setup_rt_frame(ksig, oldset, regs);
   440		else
   441			ret = setup_frame(ksig->sig, &ksig->ka, oldset, regs);
   442	
   443		signal_setup_done(ret, ksig, test_thread_flag(TIF_SINGLE_STEP));
   444	}
   445	
   446	/*
   447	 * Note that 'init' is a special process: it doesn't get signals it doesn't
   448	 * want to handle. Thus you cannot kill init even with a SIGKILL even by
   449	 * mistake.
   450	 *
   451	 * Note that we go through the signals twice: once to check the signals that
   452	 * the kernel can handle, and then we build all the user-level signal handling
   453	 * stack-frames in one go after that.
   454	 */
   455	
   456	void arch_do_signal_or_restart(struct pt_regs *regs, bool has_signal)
   457	{
   458		struct ksignal ksig;
   459		sigset_t *oldset = sigmask_to_save();
   460	
   461		/*
   462		 * Get signal to deliver. When running under ptrace, at this point
   463		 * the debugger may change all our registers, including the system
   464		 * call information.
   465		 */
   466		current->thread.system_call =
   467			test_pt_regs_flag(regs, PIF_SYSCALL) ? regs->int_code : 0;
   468	
   469		if (has_signal && get_signal(&ksig)) {
   470			/* Whee!  Actually deliver the signal.  */
   471			if (current->thread.system_call) {
   472				regs->int_code = current->thread.system_call;
   473				/* Check for system call restarting. */
   474				switch (regs->gprs[2]) {
   475				case -ERESTART_RESTARTBLOCK:
   476				case -ERESTARTNOHAND:
   477					regs->gprs[2] = -EINTR;
   478					break;
   479				case -ERESTARTSYS:
   480					if (!(ksig.ka.sa.sa_flags & SA_RESTART)) {
   481						regs->gprs[2] = -EINTR;
   482						break;
   483					}
   484					fallthrough;
   485				case -ERESTARTNOINTR:
   486					regs->gprs[2] = regs->orig_gpr2;
   487					regs->psw.addr =
   488						__rewind_psw(regs->psw,
   489							     regs->int_code >> 16);
   490					break;
   491				}
   492			}
   493			/* No longer in a system call */
   494			clear_pt_regs_flag(regs, PIF_SYSCALL);
   495	
   496			rseq_signal_deliver(&ksig, regs);
   497			if (is_compat_task())
   498				handle_signal32(&ksig, oldset, regs);
   499			else
   500				handle_signal(&ksig, oldset, regs);
   501			return;
   502		}
   503	
   504		/* No handlers present - check for system call restart */
   505		clear_pt_regs_flag(regs, PIF_SYSCALL);
   506		if (current->thread.system_call) {
   507			regs->int_code = current->thread.system_call;
   508			switch (regs->gprs[2]) {
   509			case -ERESTART_RESTARTBLOCK:
   510				/* Restart with sys_restart_syscall */
   511				regs->gprs[2] = regs->orig_gpr2;
   512				current->restart_block.arch_data = regs->psw.addr;
   513				if (is_compat_task())
 > 514					regs->psw.addr = VDSO32_SYMBOL(current, restart_syscall);
   515				else
   516					regs->psw.addr = VDSO64_SYMBOL(current, restart_syscall);
   517				if (test_thread_flag(TIF_SINGLE_STEP))
   518					clear_thread_flag(TIF_PER_TRAP);
   519				break;
   520			case -ERESTARTNOHAND:
   521			case -ERESTARTSYS:
   522			case -ERESTARTNOINTR:
   523				regs->gprs[2] = regs->orig_gpr2;
   524				regs->psw.addr = __rewind_psw(regs->psw, regs->int_code >> 16);
   525				if (test_thread_flag(TIF_SINGLE_STEP))
   526					clear_thread_flag(TIF_PER_TRAP);
   527				break;
   528			}
   529		}
   530	
   531		/*
   532		 * If there's no signal to deliver, we just put the saved sigmask back.
   533		 */
   534		restore_saved_sigmask();
   535	}
   536	

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

[-- Attachment #2: config.gz --]
[-- Type: application/gzip, Size: 25582 bytes --]

                 reply	other threads:[~2021-08-06 20:13 UTC|newest]

Thread overview: [no followups] expand[flat|nested]  mbox.gz  Atom feed

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=202108070426.n2EZ53ad-lkp@intel.com \
    --to=lkp@intel.com \
    --cc=kbuild-all@lists.01.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.