From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 1792) id 982D83858401; Sun, 2 Apr 2023 23:29:00 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 982D83858401 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1680478140; bh=+34WRGWYxaQbopHXY++5YGgAa0nJOvg8DFlnR8QjVVU=; h=From:To:Subject:Date:From; b=F47Y/yxT1xrph3+DgQQn8M+vjHcXrL0IowXfG70SY3ErpaQ3ieUCtN/9PQgTS1o6Z ZmBf1NOyKuRYxkXuA2/2avAhtJwutakF6y4qNYYHRi6Hewnp1XIfNL2RleS/KnV0I2 DbfB7NhdbqoNANp3huntpWJBqh3Ix3qDNWQq3PT8= Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: Samuel Thibault To: glibc-cvs@sourceware.org Subject: [glibc] hurd: Implement _hurd_longjmp_thread_state for x86_64 X-Act-Checkin: glibc X-Git-Author: Sergey Bugaev X-Git-Refname: refs/heads/master X-Git-Oldrev: e0bbae0062cfe64a59d8316e84ca2ac957cd5e07 X-Git-Newrev: 20427b8f231edfa786cbf2672f8d00199ea7c6c6 Message-Id: <20230402232900.982D83858401@sourceware.org> Date: Sun, 2 Apr 2023 23:29:00 +0000 (GMT) List-Id: https://sourceware.org/git/gitweb.cgi?p=glibc.git;h=20427b8f231edfa786cbf2672f8d00199ea7c6c6 commit 20427b8f231edfa786cbf2672f8d00199ea7c6c6 Author: Sergey Bugaev Date: Sun Mar 19 18:10:11 2023 +0300 hurd: Implement _hurd_longjmp_thread_state for x86_64 Signed-off-by: Sergey Bugaev Message-Id: <20230319151017.531737-29-bugaevc@gmail.com> Diff: --- sysdeps/mach/hurd/x86_64/longjmp-ts.c | 41 +++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) diff --git a/sysdeps/mach/hurd/x86_64/longjmp-ts.c b/sysdeps/mach/hurd/x86_64/longjmp-ts.c new file mode 100644 index 0000000000..2c57d26aab --- /dev/null +++ b/sysdeps/mach/hurd/x86_64/longjmp-ts.c @@ -0,0 +1,41 @@ +/* Perform a `longjmp' on a Mach thread_state. x86_64 version. + Copyright (C) 1991-2023 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +#include +#include +#include +#include + + +/* Set up STATE to do the equivalent of `longjmp (ENV, VAL);'. */ + +void +_hurd_longjmp_thread_state (void *state, jmp_buf env, int val) +{ + struct i386_thread_state *ts = state; + + ts->rbx = env[0].__jmpbuf[JB_RBX]; + ts->rbp = env[0].__jmpbuf[JB_RBP]; + ts->r12 = env[0].__jmpbuf[JB_R12]; + ts->r13 = env[0].__jmpbuf[JB_R13]; + ts->r14 = env[0].__jmpbuf[JB_R14]; + ts->r15 = env[0].__jmpbuf[JB_R15]; + ts->ursp = env[0].__jmpbuf[JB_RSP]; + ts->rip = env[0].__jmpbuf[JB_PC]; + ts->rax = val ?: 1; +}