From patchwork Thu Mar 25 07:31:49 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Heinrich Schuchardt X-Patchwork-Id: 1458203 X-Patchwork-Delegate: uboot@andestech.com Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=lists.denx.de (client-ip=2a01:238:438b:c500:173d:9f52:ddab:ee01; helo=phobos.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=) Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; secure) header.d=gmx.net header.i=@gmx.net header.a=rsa-sha256 header.s=badeba3b8450 header.b=UhGYHe2v; dkim-atps=neutral Received: from phobos.denx.de (phobos.denx.de [IPv6:2a01:238:438b:c500:173d:9f52:ddab:ee01]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 4F5cJS1q0Tz9sRR for ; Thu, 25 Mar 2021 18:32:40 +1100 (AEDT) Received: from h2850616.stratoserver.net (localhost [IPv6:::1]) by phobos.denx.de (Postfix) with ESMTP id 51BAA827BC; Thu, 25 Mar 2021 08:32:23 +0100 (CET) Authentication-Results: phobos.denx.de; dmarc=fail (p=none dis=none) header.from=gmx.de Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=u-boot-bounces@lists.denx.de Authentication-Results: phobos.denx.de; dkim=pass (1024-bit key; secure) header.d=gmx.net header.i=@gmx.net header.b="UhGYHe2v"; dkim-atps=neutral Received: by phobos.denx.de (Postfix, from userid 109) id 1F70C805BF; Thu, 25 Mar 2021 08:32:17 +0100 (CET) X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on phobos.denx.de X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,FREEMAIL_FROM,SPF_HELO_NONE autolearn=ham autolearn_force=no version=3.4.2 Received: from mout.gmx.net (mout.gmx.net [212.227.15.19]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) (No client certificate requested) by phobos.denx.de (Postfix) with ESMTPS id 9A51F805BF for ; Thu, 25 Mar 2021 08:32:12 +0100 (CET) Authentication-Results: phobos.denx.de; dmarc=pass (p=none dis=none) header.from=gmx.de Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=xypron.glpk@gmx.de DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gmx.net; s=badeba3b8450; t=1616657519; bh=3oGcfGSdef4J60NubQLiOY/PP3tq5IHSuEfY1TIOqlM=; h=X-UI-Sender-Class:From:To:Cc:Subject:Date:In-Reply-To:References; b=UhGYHe2v1oQDerDCqhQgETEvI1HBdVabGUTY6hskYMRfbDcz2dUnJ648gd2jNtbny xy23QgSf6fVgeh4q4mDNs9G+2+KA+8gqBTyZzsaVveWehSIoXSKRYY61ex1SkNcYB+ MZU8Tfxk+g/v6PhbwbAt2qWrGPXMODN3Z8uA/yX8= X-UI-Sender-Class: 01bb95c1-4bf8-414a-932a-4f6e2808ef9c Received: from LT02.fritz.box ([62.143.247.63]) by mail.gmx.net (mrgmx005 [212.227.17.184]) with ESMTPSA (Nemesis) id 1N63Vi-1ljH3n16rI-016P9F; Thu, 25 Mar 2021 08:31:59 +0100 From: Heinrich Schuchardt To: Rick Chen Cc: Sean Anderson , Leo Yu-Chi Liang , u-boot@lists.denx.de, Alexander Graf , Andreas Schwab , Heinrich Schuchardt Subject: [PATCH v4 1/2] riscv: simplify longjmp Date: Thu, 25 Mar 2021 08:31:49 +0100 Message-Id: <20210325073150.12934-2-xypron.glpk@gmx.de> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20210325073150.12934-1-xypron.glpk@gmx.de> References: <20210325073150.12934-1-xypron.glpk@gmx.de> MIME-Version: 1.0 X-Provags-ID: V03:K1:iSUf6TV0Rjuc65kvkqSNAdaw69flq3EaSTi/bao060px7z5CTqQ wq3VqLn2U7VXk+IHmZynocszT9Yqf8HH9gQu5h0h5gDqwWFUvh7yk0OUwnH2nyrbYhSVUUi s9pXiTWsQaP3ypR5ouelGKTtzRPS90QrTXeq1VUVFSmcM55UBCjjnCPh6CzJeywYqj7GI45 hb30r2A7TWf9n1vOwEstg== X-UI-Out-Filterresults: notjunk:1;V03:K0:qWjaAMfO0hQ=:wfaV3jj1/NTAu9N/4S3z3o agk15EytisCrZ+2DqMlAU5kQtFUYNnuwL3FjF/WeNU7QZIvSyhuoiHFdpPW1Ops7jvyGKlPD7 Jo3a8DeTImnIVY4mi+M/U64SnM0KU5Cnzn7ootTjJ3uZBDR7o6/z+ABAAh6tR5a1jgTLBIVIz gGo2XE1LLFKSps5MsanL7AP6aUGUqfuiFpAlkL+ux+boKJocCv4X896qxPt94CPXty4OvLF30 caf5vKclDLpLW2H32jJINbOyjiDz+S0N08ADBCZiZ8HtpQDC/eVLsrFXry8uTwWAxgh+xHj0q amrp+VmzKYQpHLDsXESpKoUoozq811vK9YDqBlQYaUL6o88nZIWTU2nQ514kMjmflp57JicbW Yzd4Hs7O1bpcBl4GvaDFtM0VoWbdNpUEqti46xCdxRxJA9bEFzET3NLZmrdF9hYwe7MeBb84i e7DMpapFFpUAYM5wThJZN3KwjRJYATsBWTS+j0UvKcUQR5+245+i/+TwVdgT2AGHnRE7N9WS2 3rq2MXulDdIu5dkCMcF+Y/KKCT540H1yHHwso8H4oZWu35BZm7+x0O1mVAS+LixHIfF4n5NU/ uV/1sbADnnP/q89vqS9hTf8l6NeQFsd6Pm2PWYxgI75I3GU8vKj28tE9bpaduGLIGzEQLMGsP nCA+RmmJe/9T+pDuF3+oOGsejA7rcN5vDAQhG6keELSkndCmJZb5qOOnkQmbaVkghJb7JzCbU gST/CYIeivR7S1Wvj9zWoXd//Cq1lYMme6Sku+IkYOfmsFHG6d6RkPgNKnfTg0y6G1fWVsLSW j1jmlch57BM1qzhIk/n5f0EfLq8FrqP+bQq5IvszzsemSDzZAHR5TyNE0UpazvrYJT4ce+st0 3o863EJvtNzXMvgzOXdw== X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.34 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: u-boot-bounces@lists.denx.de Sender: "U-Boot" X-Virus-Scanned: clamav-milter 0.102.4 at phobos.denx.de X-Virus-Status: Clean The value returned by setjmp must be nonzero. If zero is passed as parameter it must be replaced by 1. This patch reduces the code size a bit. Signed-off-by: Heinrich Schuchardt Reviewed-by: Sean Anderson Reviewed-by: Leo Yu-Chi Liang --- v4: no change v3: no change v2: correct typo in title --- arch/riscv/lib/setjmp.S | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) -- 2.30.2 diff --git a/arch/riscv/lib/setjmp.S b/arch/riscv/lib/setjmp.S index 72bc9241f6..99d6195827 100644 --- a/arch/riscv/lib/setjmp.S +++ b/arch/riscv/lib/setjmp.S @@ -54,12 +54,8 @@ ENTRY(longjmp) LOAD_IDX(sp, 13) /* Move the return value in place, but return 1 if passed 0. */ - beq a1, zero, longjmp_1 - mv a0, a1 - ret - - longjmp_1: - li a0, 1 + seqz a0, a1 + add a0, a0, a1 ret ENDPROC(longjmp) .popsection From patchwork Thu Mar 25 07:31:50 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Heinrich Schuchardt X-Patchwork-Id: 1458202 X-Patchwork-Delegate: uboot@andestech.com Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=lists.denx.de (client-ip=2a01:238:438b:c500:173d:9f52:ddab:ee01; helo=phobos.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=) Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; secure) header.d=gmx.net header.i=@gmx.net header.a=rsa-sha256 header.s=badeba3b8450 header.b=KXE3HUrT; dkim-atps=neutral Received: from phobos.denx.de (phobos.denx.de [IPv6:2a01:238:438b:c500:173d:9f52:ddab:ee01]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 4F5cJF6gVPz9sRR for ; Thu, 25 Mar 2021 18:32:29 +1100 (AEDT) Received: from h2850616.stratoserver.net (localhost [IPv6:::1]) by phobos.denx.de (Postfix) with ESMTP id 57C8E8276D; Thu, 25 Mar 2021 08:32:21 +0100 (CET) Authentication-Results: phobos.denx.de; dmarc=fail (p=none dis=none) header.from=gmx.de Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=u-boot-bounces@lists.denx.de Authentication-Results: phobos.denx.de; dkim=pass (1024-bit key; secure) header.d=gmx.net header.i=@gmx.net header.b="KXE3HUrT"; dkim-atps=neutral Received: by phobos.denx.de (Postfix, from userid 109) id 24B498219C; Thu, 25 Mar 2021 08:32:15 +0100 (CET) X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on phobos.denx.de X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,FREEMAIL_FROM,SPF_HELO_NONE autolearn=ham autolearn_force=no version=3.4.2 Received: from mout.gmx.net (mout.gmx.net [212.227.15.15]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) (No client certificate requested) by phobos.denx.de (Postfix) with ESMTPS id 6F2478006D for ; Thu, 25 Mar 2021 08:32:12 +0100 (CET) Authentication-Results: phobos.denx.de; dmarc=pass (p=none dis=none) header.from=gmx.de Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=xypron.glpk@gmx.de DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gmx.net; s=badeba3b8450; t=1616657519; bh=NJp1PddWBruMwz7HOsXnTTE2te78zp7sV3yCNGtQOvY=; h=X-UI-Sender-Class:From:To:Cc:Subject:Date:In-Reply-To:References; b=KXE3HUrTFYXq5zAkGvS03J8Cs1rtvx/oC4Py3ZGQhY/zyF9VrMDyWCWbPmjJBc6VZ 3qJKfPHWomleyzkL6h6W2iOWKsjsvDIKnZehcXH3JejAMcdhWN0dOQX/JmvjQdQYMF GeyaPeNLClO8nlLxeR0tIejC8C8aeASDMtF8MNxA= X-UI-Sender-Class: 01bb95c1-4bf8-414a-932a-4f6e2808ef9c Received: from LT02.fritz.box ([62.143.247.63]) by mail.gmx.net (mrgmx005 [212.227.17.184]) with ESMTPSA (Nemesis) id 1N5VHM-1ljpI52PAw-016x75; Thu, 25 Mar 2021 08:31:59 +0100 From: Heinrich Schuchardt To: Rick Chen Cc: Sean Anderson , Leo Yu-Chi Liang , u-boot@lists.denx.de, Alexander Graf , Andreas Schwab , Heinrich Schuchardt Subject: [PATCH v4 2/2] test: unit test for longjmp Date: Thu, 25 Mar 2021 08:31:50 +0100 Message-Id: <20210325073150.12934-3-xypron.glpk@gmx.de> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20210325073150.12934-1-xypron.glpk@gmx.de> References: <20210325073150.12934-1-xypron.glpk@gmx.de> MIME-Version: 1.0 X-Provags-ID: V03:K1:uinyPhXYrXfntcD4f+r4LsFtAC+bhitECIe1PBtKMX+bT0RLkH5 2TB5S+c1Bkr62ol3wORu2ubd5HN+h3kqhSG8UP/CJinVVgr0CejYPHUQiwwapJchP8RJYgP aT1KT0Fa+8ltTLxz3KRCf33TZrRzHZt0D1dMLhiLzVU2RbiEVnVsoUw4+YwnxkTYS7owoQg IqeEKBkEBhEvY8WP3mcmw== X-UI-Out-Filterresults: notjunk:1;V03:K0:rj3aO6NQ44Y=:zlYIjeX/d+NduIB87upN7A RNpna5Zp5hONfjAQcOCWtst5HeixyPecGWy15EGzEyVS+nEzDiynjfKDGp3gQrq8F2TO8ptS5 cSOPiezhut1Vns2UPNdp3BDz1h7FsA1h76CMm2p28ChYM08bm7ByoG8/uTTLHDZskVW3yGyfE hxlgE9CtoXztRXE7zUcWgm8hTe9dgWBbojlZ9O6ujwtCPPkgAoEWZdRC4S9pfeMdpa4GFOCmN RWqFHrQxmkI02qNA668Ne8ZALy7qnGsTNUEPg36cdlcqxabuM/XKLWZcBgzKCXk7b3nivhp4S e73f1U2MZQO48dEz9dM8LkcshPF+AIB/3pv73B4qGvozQG7c08MrsSDFYEzHkm5DcsKOvs0sn o4rWDOtIGG3W51cjEmwEkTipaS+7hLtcantSyNyzEFJRq4M78oKj+jwn2FQ9MVUbeyNE14Rqt 8IdKB8iFw/pp250H2HvKkJe20FN7x+vZO8gJyPR4G1e8m2WHVXjDP0YgVW8rjfukDlbp7Hxss dE1F12q5dZIy357Z0TaaJ5KX8wDbbcbWHng3Sp+6OJ003m4FaT3/xVd8SQK5kFok0TrfTAc0C Ds9Xcus52HPDQSLCCDRK1Unhbd2/Feb+lMWfugtReELHAh+R0RtVi/2uB0TgOwBtXOOoXHTNT b1L7f71eyuShUh2yK6MPBWRXLL0DlFqn8p/TE+ik0qbUlXwllxzQ7Ig2mWmhG7tqUdD7JhnS9 SAehTlDMXIIb8uYJiMKBu8qIeyFdkQdQfyfKSPu7qpq4U43PSY1OuMkBal5eQmPM24Qtv3RjQ /8/SPhYSo99XI1Y38L3rnsuy0V58HqNs5nUNIokc66H5VzKAG1Je1D+pGzpqGQAWrebJcp6ud Z5kOyVWSFq6fCEL6ns6Q== X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.34 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: u-boot-bounces@lists.denx.de Sender: "U-Boot" X-Virus-Scanned: clamav-milter 0.102.4 at phobos.denx.de X-Virus-Status: Clean Provide a unit test for the longjmp() library function Signed-off-by: Heinrich Schuchardt ---- v4: use volatile for variable changed between setjmp and longjmp v3: check variable on stack v2: no change Reviewed-by: Leo Yu-Chi Liang --- test/lib/Makefile | 1 + test/lib/longjmp.c | 77 ++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 78 insertions(+) create mode 100644 test/lib/longjmp.c -- 2.30.2 diff --git a/test/lib/Makefile b/test/lib/Makefile index 97c11e35a8..a30f615aa9 100644 --- a/test/lib/Makefile +++ b/test/lib/Makefile @@ -7,6 +7,7 @@ obj-$(CONFIG_EFI_LOADER) += efi_device_path.o obj-$(CONFIG_EFI_SECURE_BOOT) += efi_image_region.o obj-y += hexdump.o obj-y += lmb.o +obj-y += longjmp.o obj-$(CONFIG_CONSOLE_RECORD) += test_print.o obj-$(CONFIG_SSCANF) += sscanf.o obj-y += string.o diff --git a/test/lib/longjmp.c b/test/lib/longjmp.c new file mode 100644 index 0000000000..bd1fe1aff6 --- /dev/null +++ b/test/lib/longjmp.c @@ -0,0 +1,77 @@ +// SPDX-License-Identifier: GPL-2.0+ +/* + * Test setjmp(), longjmp() + * + * Copyright (c) 2021, Heinrich Schuchardt + */ + +#include +#include +#include +#include +#include + +struct test_jmp_buf { + jmp_buf env; + /* + * Auto-variables changed between setjmp() and longjmp() must be + * static or volatile. Otherwise the result is undefined. + */ + volatile int val; +}; + +/** + * test_longjmp() - test longjmp function + * + * @i is passed to longjmp. + * @i << 8 is set in the environment structure. + * + * @env: environment + * @i: value passed to longjmp() + */ +static void noinline test_longjmp(struct test_jmp_buf *env, int i) +{ + env->val = i << 8; + longjmp(env->env, i); +} + +/** + * test_setjmp() - test setjmp function + * + * setjmp() will return the value @i passed to longjmp() if @i is non-zero. + * For @i == 0 we expect return value 1. + * + * @i << 8 will be set by test_longjmp in the environment structure. + * This value can be used to check that the stack frame is restored. + * + * We return the XORed values to allow simply check both at once. + * + * @i: value passed to longjmp() + * Return: values return by longjmp() + */ +static int test_setjmp(int i) +{ + struct test_jmp_buf env; + int ret; + + env.val = -1; + ret = setjmp(env.env); + if (ret) + return ret ^ env.val; + test_longjmp(&env, i); + /* We should not arrive here */ + return 0x1000; +} + +static int lib_test_longjmp(struct unit_test_state *uts) +{ + int i; + + for (i = -3; i < 0; ++i) + ut_asserteq(i ^ (i << 8) , test_setjmp(i)); + ut_asserteq(1, test_setjmp(0)); + for (i = 1; i < 4; ++i) + ut_asserteq(i ^ (i << 8), test_setjmp(i)); + return 0; +} +LIB_TEST(lib_test_longjmp, 0);