From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on inbox.vuxu.org X-Spam-Level: X-Spam-Status: No, score=-3.1 required=5.0 tests=DKIM_INVALID,DKIM_SIGNED, FREEMAIL_FROM,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED,RCVD_IN_MSPIKE_H3, RCVD_IN_MSPIKE_WL autolearn=ham autolearn_force=no version=3.4.4 Received: (qmail 16395 invoked from network); 3 Sep 2020 11:24:48 -0000 Received: from mother.openwall.net (195.42.179.200) by inbox.vuxu.org with ESMTPUTF8; 3 Sep 2020 11:24:48 -0000 Received: (qmail 18264 invoked by uid 550); 3 Sep 2020 11:24:13 -0000 Mailing-List: contact musl-help@lists.openwall.com; run by ezmlm Precedence: bulk List-Post: List-Help: List-Unsubscribe: List-Subscribe: List-ID: Reply-To: musl@lists.openwall.com Received: (qmail 18123 invoked from network); 3 Sep 2020 11:24:11 -0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=fastmail.com; h= from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; s=fm3; bh=kXB8FXFAtk0d5 6GSfYoa645vxrJeVMKdl21kTWgB740=; b=LUep2nuOTYsJM5MpPrAzjNqnZ1hPZ IOcK2RbDVgePhj4aR3MFT6So6+9lHZcyuHc6XqHQed8HSpZl31BYca+Qp2+K6bSP MaSnHZxTpYrSXYnLwRXBJFqBZZnP6pei4Hf4rUMXPUWxijW64j0Zi7rf4sVqKyp6 FIUK/WjnwWxQV/S8icIVR2z5gbvH+jh04r/Aic0HZeLtCLm6MbyjRfZa5h1I+QtS Mgl49ZtjsEjVF6xzUXh6Iur1nFJfmUFITiZGMtymiNSnfJmso88pmRAOh6CzRY+J NGR3bJKIyUFJ9RLM/Ua0lVuvKOGQGoyPBYwdUL8AThmwYTzuR3KOtV+Pw== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:content-transfer-encoding:date:from :in-reply-to:message-id:mime-version:references:subject:to :x-me-proxy:x-me-proxy:x-me-sender:x-me-sender:x-sasl-enc; s= fm3; bh=kXB8FXFAtk0d56GSfYoa645vxrJeVMKdl21kTWgB740=; b=Gbo8Q0K9 0EYbz23m2xo14X+HONq/lgcyBAwTSWFd69DRURV+ZKxJIftrht2FaZMJHzdA2Zw6 6HFaC+yWEUlPZdvEdUBmM+7wtzLr4ZsU9Pcve9Bm03YfQc3HJweXbwbX87qXH1un ZnsaVJ6YDxdrlRVDqvQJPrO9RBSbk6zVGf/053uCvU8TMa46qY1KsgOvi4qKVff0 wzVH2j77WTbpEcfakuGD1DXZhnQLrj1C4V3AHjZhsomODA8BBkq4m6qcDmyjrljb rAPQsRoq3k8RF2Hs4G4PwlCTvUHtwphuruzfrFjw8FutlrNj7/6H+aVKWj4Do3U2 zC/rCpYL2D9W4Q== X-ME-Sender: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeduiedrudeguddggedtucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfqfgfvpdfurfetoffkrfgpnffqhgen uceurghilhhouhhtmecufedttdenucenucfjughrpefhvffufffkofgjfhgggfestdekre dtredttdenucfhrhhomhepufhtvghfrghnucfqkdftvggrrhcuoehsohhrvggrrhesfhgr shhtmhgrihhlrdgtohhmqeenucggtffrrghtthgvrhhnpefhgeeiieejvdejgedvhefhve evvdffkeetleduffevtdekkeefieeitefghfefffenucffohhmrghinheprghrvggrrdhs sgdpuhhnmhgrphhsvghlfhdrshgspdgtlhhonhgvrdhssgdptghprdhssgenucfkphepvd dtledriedrudehgedrfeegnecuvehluhhsthgvrhfuihiivgeptdenucfrrghrrghmpehm rghilhhfrhhomhepshhorhgvrghrsehfrghsthhmrghilhdrtghomh X-ME-Proxy: From: Stefan O'Rear To: musl@lists.openwall.com Cc: Stefan O'Rear Date: Thu, 3 Sep 2020 07:23:09 -0400 Message-Id: <20200903112309.102601-15-sorear@fastmail.com> X-Mailer: git-send-email 2.25.4 In-Reply-To: <20200903112309.102601-1-sorear@fastmail.com> References: <20200903112309.102601-1-sorear@fastmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Subject: [musl] [PATCH 14/14] riscv32: Add thread support Identical to riscv64 except for stack offsets in clone. --- src/thread/riscv32/__set_thread_area.s | 6 +++++ src/thread/riscv32/__unmapself.s | 7 ++++++ src/thread/riscv32/clone.s | 34 ++++++++++++++++++++++++++ src/thread/riscv32/syscall_cp.s | 29 ++++++++++++++++++++++ 4 files changed, 76 insertions(+) create mode 100644 src/thread/riscv32/__set_thread_area.s create mode 100644 src/thread/riscv32/__unmapself.s create mode 100644 src/thread/riscv32/clone.s create mode 100644 src/thread/riscv32/syscall_cp.s diff --git a/src/thread/riscv32/__set_thread_area.s b/src/thread/riscv32/__set_thread_area.s new file mode 100644 index 00000000..828154d2 --- /dev/null +++ b/src/thread/riscv32/__set_thread_area.s @@ -0,0 +1,6 @@ +.global __set_thread_area +.type __set_thread_area, %function +__set_thread_area: + mv tp, a0 + li a0, 0 + ret diff --git a/src/thread/riscv32/__unmapself.s b/src/thread/riscv32/__unmapself.s new file mode 100644 index 00000000..2849119c --- /dev/null +++ b/src/thread/riscv32/__unmapself.s @@ -0,0 +1,7 @@ +.global __unmapself +.type __unmapself, %function +__unmapself: + li a7, 215 # SYS_munmap + ecall + li a7, 93 # SYS_exit + ecall diff --git a/src/thread/riscv32/clone.s b/src/thread/riscv32/clone.s new file mode 100644 index 00000000..3102239d --- /dev/null +++ b/src/thread/riscv32/clone.s @@ -0,0 +1,34 @@ +# __clone(func, stack, flags, arg, ptid, tls, ctid) +# a0, a1, a2, a3, a4, a5, a6 + +# syscall(SYS_clone, flags, stack, ptid, tls, ctid) +# a7 a0, a1, a2, a3, a4 + +.global __clone +.type __clone, %function +__clone: + # Save func and arg to stack + addi a1, a1, -16 + sw a0, 0(a1) + sw a3, 4(a1) + + # Call SYS_clone + mv a0, a2 + mv a2, a4 + mv a3, a5 + mv a4, a6 + li a7, 220 # SYS_clone + ecall + + beqz a0, 1f + # Parent + ret + + # Child +1: lw a1, 0(sp) + lw a0, 4(sp) + jalr a1 + + # Exit + li a7, 93 # SYS_exit + ecall diff --git a/src/thread/riscv32/syscall_cp.s b/src/thread/riscv32/syscall_cp.s new file mode 100644 index 00000000..079d1ba0 --- /dev/null +++ b/src/thread/riscv32/syscall_cp.s @@ -0,0 +1,29 @@ +.global __cp_begin +.hidden __cp_begin +.global __cp_end +.hidden __cp_end +.global __cp_cancel +.hidden __cp_cancel +.hidden __cancel +.global __syscall_cp_asm +.hidden __syscall_cp_asm +.type __syscall_cp_asm, %function +__syscall_cp_asm: +__cp_begin: + lw t0, 0(a0) + bnez t0, __cp_cancel + + mv t0, a1 + mv a0, a2 + mv a1, a3 + mv a2, a4 + mv a3, a5 + mv a4, a6 + mv a5, a7 + lw a6, 0(sp) + mv a7, t0 + ecall +__cp_end: + ret +__cp_cancel: + tail __cancel -- 2.25.4