From nobody Sun May 14 21:31:09 2023 X-Original-To: dev-commits-src-all@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4QKFzy1xRlz49B3d; Sun, 14 May 2023 21:31:10 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "R3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4QKFzx6907z3x13; Sun, 14 May 2023 21:31:09 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1684099869; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=RUjI6jA9czR9CPXgL2uzcXatTebP9z6RJ71ZuEUC9Sc=; b=u1GWdesSzjpCGJK0k1E9PzkWIJVk5qukXLubIHyWUSxvZASCIqrgZlfep8pBy3KTaLlXRO excnTiSGVmiTwIR9DY7zxBwWvC80iuKs4o7nMDxLvu4BFOfU7c3aIl5OiEfqBZBC6cRw1K gm594IYN0sDOJ4SuSKdrj+YeqI8UYhlsqjEAUpJeaUr6P51ZPRo23wxftJdQIdcuwKc4aA JfUWqJvnHGKeH91mVI7q6lOunecLpRcHnyZkUZ5B/IBQwImm3WQysfaMt6H5NlxPQcF6UW JELgD6uwkMJpdqTDfEzgCQ0F9SvxfCtj8NIss46Kr67gs0l6Su1S7WxUUdEMXQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1684099869; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=RUjI6jA9czR9CPXgL2uzcXatTebP9z6RJ71ZuEUC9Sc=; b=mJl0LiX8nGJXzzFr4zpJDYwEZ2GjR5Z39fHdagcJP87XFLhtQRA3qWaHulriwvs7GPdn+0 J0tK9iXO3bOygcEKruffM1y87+hXw3HoZW07jgTdGxD2bbi91zN6tAn1/o51IsaJ/yVHfK Jk7/tnHHp3se+yFbkhvVC74LYk0/sa9BpdCYrp0vCYiuP6d6CHoH7KWAiYBHNk+u0p5xBu hZ/IAMsZYc55uZva2tCoLxtevtfJFjVo3BoQla4nLK3DGBQNij9iFZlQ1Ch/RGKAzOMSuM WfXFu/E2bA26IeDZ8fHshCmG+qtQ/cPHHPyJnYFaPbR1WDxisTLCKRhBUJyFxA== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1684099869; a=rsa-sha256; cv=none; b=BKA6u8uu4IbyZVVHdye00Jwt3tTdrqLeSmRqTtUzCH9hPvcWECrlHbniBklXk2sxUze/Ns THt63QOt9oJRfAolYoQjWiuznO/sQtN5IAyzkvBWhVSzNykoIfQq866T32rQE5QMs161Es oJXRo5NwOh38Iak5AcFq8zgMoUlweR4cMVDebKhu7pKufShUEXAxAKWeFp0feLllTtrXxW XZdhbZY1zXEz0vITY/lmQHyUmqx0c9WmJv4avU5WhKn1frc7a4qr33ycOLxKG8sgD3RmFf zrxHVpZMJ1HuaA3Q4d7lRUuJbiTgP+YF06LFOwMfoh7iVQn1FI9Tbc9ynSS+1A== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 4QKFzx5HBdzF6h; Sun, 14 May 2023 21:31:09 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 34ELV9GA074102; Sun, 14 May 2023 21:31:09 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 34ELV9OX074101; Sun, 14 May 2023 21:31:09 GMT (envelope-from git) Date: Sun, 14 May 2023 21:31:09 GMT Message-Id: <202305142131.34ELV9OX074101@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Dmitry Chagin Subject: git: d957343f8713 - main - linux(4): Rework signal trampoline on Aarch64 List-Id: Commit messages for all branches of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-all List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-dev-commits-src-all@freebsd.org X-BeenThere: dev-commits-src-all@freebsd.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: dchagin X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: d957343f8713a312442a0140b7a7752ed7b2d870 Auto-Submitted: auto-generated X-ThisMailContainsUnwantedMimeParts: N The branch main has been updated by dchagin: URL: https://cgit.FreeBSD.org/src/commit/?id=d957343f8713a312442a0140b7a7752ed7b2d870 commit d957343f8713a312442a0140b7a7752ed7b2d870 Author: Dmitry Chagin AuthorDate: 2023-05-14 21:27:31 +0000 Commit: Dmitry Chagin CommitDate: 2023-05-14 21:27:31 +0000 linux(4): Rework signal trampoline on Aarch64 To avoid clobbering of any registers by the trampoline code use Linux way to call signal handlers. I.e., we are out from the kernel right into the signal handler, put return address from the signal handler into the link register. The mysterious NOP is required for some unwinders (e.g. libc++) that unconditionally subtract one from the result of _Unwind_GetIP() in order to identify the calling function. MFC after: 1 week --- sys/arm64/linux/linux_locore.asm | 5 +++-- sys/arm64/linux/linux_sysvec.c | 6 +++--- sys/arm64/linux/linux_vdso.lds.s | 1 + 3 files changed, 7 insertions(+), 5 deletions(-) diff --git a/sys/arm64/linux/linux_locore.asm b/sys/arm64/linux/linux_locore.asm index 6ebecef51b39..de3e5dd52a00 100644 --- a/sys/arm64/linux/linux_locore.asm +++ b/sys/arm64/linux/linux_locore.asm @@ -45,10 +45,11 @@ linux_platform: .text - nop /* This is what Linux calls a "Mysterious NOP". */ EENTRY(__kernel_rt_sigreturn) - blr x8 + nop /* This is what Linux calls a "Mysterious NOP". */ + .globl __user_rt_sigreturn +__user_rt_sigreturn: mov x8, #LINUX_SYS_linux_rt_sigreturn svc #0 EEND(__kernel_rt_sigreturn) diff --git a/sys/arm64/linux/linux_sysvec.c b/sys/arm64/linux/linux_sysvec.c index 299586e1c7b6..bb9ff25893eb 100644 --- a/sys/arm64/linux/linux_sysvec.c +++ b/sys/arm64/linux/linux_sysvec.c @@ -118,7 +118,7 @@ LIN_SDT_PROBE_DEFINE0(sysvec, linux_exec_setregs, todo); LINUX_VDSO_SYM_CHAR(linux_platform); LINUX_VDSO_SYM_INTPTR(kern_timekeep_base); -LINUX_VDSO_SYM_INTPTR(__kernel_rt_sigreturn); +LINUX_VDSO_SYM_INTPTR(__user_rt_sigreturn); static int linux_fetch_syscall_args(struct thread *td) @@ -353,9 +353,9 @@ linux_rt_sendsig(sig_t catcher, ksiginfo_t *ksi, sigset_t *mask) tf->tf_x[2] = 0; } tf->tf_x[29] = (register_t)&fp->fp; - tf->tf_x[8] = (register_t)catcher; + tf->tf_elr = (register_t)catcher; tf->tf_sp = (register_t)fp; - tf->tf_elr = (register_t)__kernel_rt_sigreturn; + tf->tf_lr = (register_t)__user_rt_sigreturn; CTR3(KTR_SIG, "sendsig: return td=%p pc=%#x sp=%#x", td, tf->tf_elr, tf->tf_sp); diff --git a/sys/arm64/linux/linux_vdso.lds.s b/sys/arm64/linux/linux_vdso.lds.s index 652b99545069..3f6b70c09176 100644 --- a/sys/arm64/linux/linux_vdso.lds.s +++ b/sys/arm64/linux/linux_vdso.lds.s @@ -70,6 +70,7 @@ VERSION global: linux_platform; kern_timekeep_base; + __user_rt_sigreturn; local: *; }; }