From: vineet.gupta1@synopsys.com (Vineet Gupta)
To: linux-snps-arc@lists.infradead.org
Subject: [PATCH v2 08/15] ARC: Linux ABI
Date: Tue, 29 Jan 2019 17:25:48 -0800 [thread overview]
Message-ID: <1548811555-24373-9-git-send-email-vgupta@synopsys.com> (raw)
In-Reply-To: <1548811555-24373-1-git-send-email-vgupta@synopsys.com>
Signed-off-by: Vineet Gupta <vgupta at synopsys.com>
---
ChangeLog | 15 ++++
sysdeps/arc/nptl/pthread-offsets.h | 5 ++
sysdeps/arc/nptl/pthreaddef.h | 32 ++++++++
sysdeps/unix/sysv/linux/arc/bits/procfs.h | 35 ++++++++
.../unix/sysv/linux/arc/bits/types/__sigset_t.h | 12 +++
sysdeps/unix/sysv/linux/arc/getcontext.S | 63 +++++++++++++++
sysdeps/unix/sysv/linux/arc/ipc_priv.h | 21 +++++
sysdeps/unix/sysv/linux/arc/makecontext.c | 75 ++++++++++++++++++
sysdeps/unix/sysv/linux/arc/setcontext.S | 92 ++++++++++++++++++++++
sysdeps/unix/sysv/linux/arc/sigcontextinfo.h | 23 ++++++
sysdeps/unix/sysv/linux/arc/swapcontext.S | 92 ++++++++++++++++++++++
sysdeps/unix/sysv/linux/arc/sys/cachectl.h | 36 +++++++++
sysdeps/unix/sysv/linux/arc/sys/ucontext.h | 63 +++++++++++++++
sysdeps/unix/sysv/linux/arc/sys/user.h | 31 ++++++++
sysdeps/unix/sysv/linux/arc/ucontext-macros.h | 29 +++++++
sysdeps/unix/sysv/linux/arc/ucontext_i.sym | 20 +++++
16 files changed, 644 insertions(+)
create mode 100644 sysdeps/arc/nptl/pthread-offsets.h
create mode 100644 sysdeps/arc/nptl/pthreaddef.h
create mode 100644 sysdeps/unix/sysv/linux/arc/bits/procfs.h
create mode 100644 sysdeps/unix/sysv/linux/arc/bits/types/__sigset_t.h
create mode 100644 sysdeps/unix/sysv/linux/arc/getcontext.S
create mode 100644 sysdeps/unix/sysv/linux/arc/ipc_priv.h
create mode 100644 sysdeps/unix/sysv/linux/arc/makecontext.c
create mode 100644 sysdeps/unix/sysv/linux/arc/setcontext.S
create mode 100644 sysdeps/unix/sysv/linux/arc/sigcontextinfo.h
create mode 100644 sysdeps/unix/sysv/linux/arc/swapcontext.S
create mode 100644 sysdeps/unix/sysv/linux/arc/sys/cachectl.h
create mode 100644 sysdeps/unix/sysv/linux/arc/sys/ucontext.h
create mode 100644 sysdeps/unix/sysv/linux/arc/sys/user.h
create mode 100644 sysdeps/unix/sysv/linux/arc/ucontext-macros.h
create mode 100644 sysdeps/unix/sysv/linux/arc/ucontext_i.sym
diff --git a/ChangeLog b/ChangeLog
index b5da8c28e64c..e0f2c3372e31 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -52,6 +52,21 @@
* sysdeps/unix/sysv/linux/arc/sysdep.c: New file.
* sysdeps/unix/sysv/linux/arc/sysdep.h: New file.
* sysdeps/unix/sysv/linux/arc/vfork.S: New file.
+ * sysdeps/arc/nptl/pthread-offsets.h: New file.
+ * sysdeps/arc/nptl/pthreaddef.h: New file.
+ * sysdeps/unix/sysv/linux/arc/bits/procfs.h: New file.
+ * sysdeps/unix/sysv/linux/arc/bits/types/__sigset_t.h: New file.
+ * sysdeps/unix/sysv/linux/arc/getcontext.S: New file.
+ * sysdeps/unix/sysv/linux/arc/ipc_priv.h: New file.
+ * sysdeps/unix/sysv/linux/arc/makecontext.c: New file.
+ * sysdeps/unix/sysv/linux/arc/setcontext.S: New file.
+ * sysdeps/unix/sysv/linux/arc/sigcontextinfo.h: New file.
+ * sysdeps/unix/sysv/linux/arc/swapcontext.S: New file.
+ * sysdeps/unix/sysv/linux/arc/sys/cachectl.h: New file.
+ * sysdeps/unix/sysv/linux/arc/sys/ucontext.h: New file.
+ * sysdeps/unix/sysv/linux/arc/sys/user.h: New file.
+ * sysdeps/unix/sysv/linux/arc/ucontext-macros.h: New file.
+ * sysdeps/unix/sysv/linux/arc/ucontext_i.sym: New file.
2019-01-25 Siddhesh Poyarekar <siddhesh at sourceware.org>
diff --git a/sysdeps/arc/nptl/pthread-offsets.h b/sysdeps/arc/nptl/pthread-offsets.h
new file mode 100644
index 000000000000..9617354dc7e3
--- /dev/null
+++ b/sysdeps/arc/nptl/pthread-offsets.h
@@ -0,0 +1,5 @@
+#define __PTHREAD_MUTEX_NUSERS_OFFSET 16
+#define __PTHREAD_MUTEX_KIND_OFFSET 12
+#define __PTHREAD_MUTEX_SPINS_OFFSET 20
+#define __PTHREAD_MUTEX_ELISION_OFFSET 22
+#define __PTHREAD_MUTEX_LIST_OFFSET 20
diff --git a/sysdeps/arc/nptl/pthreaddef.h b/sysdeps/arc/nptl/pthreaddef.h
new file mode 100644
index 000000000000..80a109bbd52a
--- /dev/null
+++ b/sysdeps/arc/nptl/pthreaddef.h
@@ -0,0 +1,32 @@
+/* pthread machine parameter definitions, ARC version.
+ Copyright (C) 2002-2019 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
+ <http://www.gnu.org/licenses/>. */
+
+/* Default stack size. */
+#define ARCH_STACK_DEFAULT_SIZE (2 * 1024 * 1024)
+
+/* Required stack pointer alignment at beginning. */
+#define STACK_ALIGN 4
+
+/* Minimal stack size after allocating thread descriptor and guard size. */
+#define MINIMAL_REST_STACK 2048
+
+/* Alignment requirement for TCB. */
+#define TCB_ALIGNMENT 4
+
+/* Location of current stack frame. */
+#define CURRENT_STACK_FRAME __builtin_frame_address (0)
diff --git a/sysdeps/unix/sysv/linux/arc/bits/procfs.h b/sysdeps/unix/sysv/linux/arc/bits/procfs.h
new file mode 100644
index 000000000000..b37deaee5873
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/arc/bits/procfs.h
@@ -0,0 +1,35 @@
+/* Types for registers for sys/procfs.h. ARC version.
+ Copyright (C) 1996-2019 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
+ <http://www.gnu.org/licenses/>. */
+
+#ifndef _SYS_PROCFS_H
+# error "Never include <bits/procfs.h> directly; use <sys/procfs.h> instead."
+#endif
+
+#include <sys/ucontext.h>
+
+/* And the whole bunch of them. We could have used `struct
+ user_regs' directly in the typedef, but tradition says that
+ the register set is an array, which does have some peculiar
+ semantics, so leave it that way. */
+#define ELF_NGREG (sizeof (struct user_regs_struct) / sizeof(elf_greg_t))
+
+typedef unsigned long int elf_greg_t;
+typedef unsigned long int elf_gregset_t[ELF_NGREG];
+
+/* There's no seperate floating point reg file in ARCv2. */
+typedef struct { } elf_fpregset_t;
diff --git a/sysdeps/unix/sysv/linux/arc/bits/types/__sigset_t.h b/sysdeps/unix/sysv/linux/arc/bits/types/__sigset_t.h
new file mode 100644
index 000000000000..795638a30bd3
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/arc/bits/types/__sigset_t.h
@@ -0,0 +1,12 @@
+/* Architecture-specific __sigset_t definition. ARC version. */
+#ifndef ____sigset_t_defined
+#define ____sigset_t_defined
+
+/* Linux asm-generic syscall ABI expects sigset_t to hold 64 signals. */
+#define _SIGSET_NWORDS (64 / (8 * sizeof (unsigned long int)))
+typedef struct
+{
+ unsigned long int __val[_SIGSET_NWORDS];
+} __sigset_t;
+
+#endif
diff --git a/sysdeps/unix/sysv/linux/arc/getcontext.S b/sysdeps/unix/sysv/linux/arc/getcontext.S
new file mode 100644
index 000000000000..723cc237d87f
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/arc/getcontext.S
@@ -0,0 +1,63 @@
+/* Save current context for ARC.
+ Copyright (C) 2009-2019 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
+ <http://www.gnu.org/licenses/>. */
+
+#include "ucontext-macros.h"
+
+/* int getcontext (ucontext_t *ucp)
+ Save machine context in @ucp and return 0 on success, -1 on error
+ - saves callee saved registers only
+ - layout mandated by uncontext_t:m_context (hence different from setjmp). */
+
+ENTRY (__getcontext)
+
+ /* Callee saved registers. */
+ SAVE_REG (r13, r0, 37)
+ SAVE_REG (r14, r0, 36)
+ SAVE_REG (r15, r0, 35)
+ SAVE_REG (r16, r0, 34)
+ SAVE_REG (r17, r0, 33)
+ SAVE_REG (r18, r0, 32)
+ SAVE_REG (r19, r0, 31)
+ SAVE_REG (r20, r0, 30)
+ SAVE_REG (r21, r0, 29)
+ SAVE_REG (r22, r0, 28)
+ SAVE_REG (r23, r0, 27)
+ SAVE_REG (r24, r0, 26)
+ SAVE_REG (r25, r0, 25)
+
+ SAVE_REG (blink, r0, 7)
+ SAVE_REG (fp, r0, 8)
+ SAVE_REG (sp, r0, 23)
+
+ /* Save 0 in r0 placeholder to return 0 when this @ucp activated. */
+ mov r9, 0
+ SAVE_REG (r9, r0, 22)
+
+ /* rt_sigprocmask (SIG_BLOCK, NULL, &ucp->uc_sigmask, _NSIG8). */
+ mov r3, _NSIG8
+ add r2, r0, UCONTEXT_SIGMASK
+ mov r1, 0
+ mov r0, SIG_BLOCK
+ mov r8, __NR_rt_sigprocmask
+ ARC_TRAP_INSN
+ brhi r0, -1024, .Lcall_syscall_err
+ j.d [blink]
+ mov r0, 0 /* Success, error handled in .Lcall_syscall_err. */
+
+PSEUDO_END (__getcontext)
+weak_alias (__getcontext, getcontext)
diff --git a/sysdeps/unix/sysv/linux/arc/ipc_priv.h b/sysdeps/unix/sysv/linux/arc/ipc_priv.h
new file mode 100644
index 000000000000..309eb3064e9f
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/arc/ipc_priv.h
@@ -0,0 +1,21 @@
+/* Old SysV permission definition for Linux. ARC version.
+ Copyright (C) 2016-2019 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
+ <http://www.gnu.org/licenses/>. */
+
+#include <sys/ipc.h> /* For __key_t */
+
+#define __IPC_64 0x0
diff --git a/sysdeps/unix/sysv/linux/arc/makecontext.c b/sysdeps/unix/sysv/linux/arc/makecontext.c
new file mode 100644
index 000000000000..3d46452e1755
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/arc/makecontext.c
@@ -0,0 +1,75 @@
+/* Create new context for ARC.
+ Copyright (C) 2015-2019 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
+ <http://www.gnu.org/licenses/>. */
+
+#include <sysdep.h>
+#include <stdarg.h>
+#include <stdint.h>
+#include <sys/ucontext.h>
+
+void
+__makecontext (ucontext_t *ucp, void (*func) (void), int argc, ...)
+{
+ extern void __startcontext (void) attribute_hidden;
+ unsigned long int sp, *r;
+ va_list vl;
+ int i, reg_args, stack_args;
+
+ sp = ((unsigned long int) ucp->uc_stack.ss_sp + ucp->uc_stack.ss_size) & ~7;
+
+ ucp->uc_mcontext.__scratch.__sp = sp;
+ ucp->uc_mcontext.__scratch.__fp = 0;
+
+ /* __startcontext is sort of trampoline to invoke @func
+ From setcontext() pov, the resume address is __startcontext,
+ set it up in BLINK place holder. */
+
+ ucp->uc_mcontext.__scratch.__blink = (unsigned long int) &__startcontext;
+
+ /* __startcontext passed 2 types of args
+ - args to @func setup in canonical r0-r7
+ - @func itself in r9, and next function in r10. */
+
+ ucp->uc_mcontext.__callee.__r13 = (unsigned long int) func;
+ ucp->uc_mcontext.__callee.__r14 = (unsigned long int) ucp->uc_link;
+
+ r = &ucp->uc_mcontext.__scratch.__r0;
+
+ va_start (vl, argc);
+
+ reg_args = argc > 8 ? 8 : argc;
+ for (i = 0; i < reg_args; i++) {
+ *r-- = va_arg(vl, unsigned long int);
+ }
+
+ stack_args = argc - reg_args;
+
+ if (__glibc_unlikely (stack_args > 0)) {
+
+ sp -= stack_args * sizeof (unsigned long int);
+ ucp->uc_mcontext.__scratch.__sp = sp;
+ r = (unsigned long int *)sp;
+
+ for (i = 0; i < stack_args; i++) {
+ *r++ = va_arg(vl, unsigned long int);
+ }
+ }
+
+ va_end (vl);
+}
+
+weak_alias (__makecontext, makecontext)
diff --git a/sysdeps/unix/sysv/linux/arc/setcontext.S b/sysdeps/unix/sysv/linux/arc/setcontext.S
new file mode 100644
index 000000000000..8cf4ffcaf5ac
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/arc/setcontext.S
@@ -0,0 +1,92 @@
+/* Set current context for ARC.
+ Copyright (C) 2009-2019 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
+ <http://www.gnu.org/licenses/>. */
+
+#include "ucontext-macros.h"
+
+/* int setcontext (const ucontext_t *ucp)
+ - Restores the machine context in @ucp and resumes execution
+ (doesn't return to caller). */
+
+ENTRY (__setcontext)
+
+ mov r9, r0 /* Stash @ucp across syscall. */
+
+ /* rt_sigprocmask (SIG_SETMASK, &ucp->uc_sigmask, NULL, _NSIG8) */
+ mov r3, _NSIG8
+ mov r2, 0
+ add r1, r0, UCONTEXT_SIGMASK
+ mov r0, SIG_SETMASK
+ mov r8, __NR_rt_sigprocmask
+ ARC_TRAP_INSN
+ brhi r0, -1024, .Lcall_syscall_err
+
+ /* Restore scratch/arg regs for makecontext() case. */
+ LOAD_REG (r0, r9, 22)
+ LOAD_REG (r1, r9, 21)
+ LOAD_REG (r2, r9, 20)
+ LOAD_REG (r3, r9, 19)
+ LOAD_REG (r4, r9, 18)
+ LOAD_REG (r5, r9, 17)
+ LOAD_REG (r6, r9, 16)
+ LOAD_REG (r7, r9, 15)
+
+ /* Restore callee saved registers. */
+ LOAD_REG (r13, r9, 37)
+ LOAD_REG (r14, r9, 36)
+ LOAD_REG (r15, r9, 35)
+ LOAD_REG (r16, r9, 34)
+ LOAD_REG (r17, r9, 33)
+ LOAD_REG (r18, r9, 32)
+ LOAD_REG (r19, r9, 31)
+ LOAD_REG (r20, r9, 30)
+ LOAD_REG (r21, r9, 29)
+ LOAD_REG (r22, r9, 28)
+ LOAD_REG (r23, r9, 27)
+ LOAD_REG (r24, r9, 26)
+ LOAD_REG (r25, r9, 25)
+
+ LOAD_REG (blink, r9, 7)
+ LOAD_REG (fp, r9, 8)
+ LOAD_REG (sp, r9, 23)
+
+ j [blink]
+
+PSEUDO_END (__setcontext)
+weak_alias (__setcontext, setcontext)
+
+
+/* Helper for activating makecontext() created context
+ - r13 has @func, r14 has uc_link. */
+
+ENTRY (__startcontext)
+
+ .cfi_label .Ldummy
+ cfi_undefined (blink)
+
+ /* Call user @func, loaded in r13 by setcontext(). */
+ jl [r13]
+
+ /* If uc_link (r14) call setcontext with that. */
+ mov r0, r14
+ breq r0, 0, 1f
+
+ bl __setcontext
+1:
+ /* Exit with status 0. */
+ b HIDDEN_JUMPTARGET(exit)
+END (__startcontext)
diff --git a/sysdeps/unix/sysv/linux/arc/sigcontextinfo.h b/sysdeps/unix/sysv/linux/arc/sigcontextinfo.h
new file mode 100644
index 000000000000..acf03c6afd97
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/arc/sigcontextinfo.h
@@ -0,0 +1,23 @@
+/* ARC definitions for signal handling calling conventions.
+ Copyright (C) 2017-2019 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
+ <http://www.gnu.org/licenses/>. */
+
+#include <sys/ucontext.h>
+#include "kernel-features.h"
+
+#define SIGCONTEXT int _code, struct ucontext_t *
+#define GET_PC(ctx) ((void *) (ctx)->uc_mcontext.__scratch.__ret)
diff --git a/sysdeps/unix/sysv/linux/arc/swapcontext.S b/sysdeps/unix/sysv/linux/arc/swapcontext.S
new file mode 100644
index 000000000000..853d3805de65
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/arc/swapcontext.S
@@ -0,0 +1,92 @@
+/* Save and set current context for ARC.
+ Copyright (C) 2009-2019 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
+ <http://www.gnu.org/licenses/>. */
+
+#include "ucontext-macros.h"
+
+/* int swapcontext (ucontext_t *oucp, const ucontext_t *ucp). */
+
+ENTRY (__swapcontext)
+
+ /* Save context into @oucp pointed to by r0. */
+
+ SAVE_REG (r13, r0, 37)
+ SAVE_REG (r14, r0, 36)
+ SAVE_REG (r15, r0, 35)
+ SAVE_REG (r16, r0, 34)
+ SAVE_REG (r17, r0, 33)
+ SAVE_REG (r18, r0, 32)
+ SAVE_REG (r19, r0, 31)
+ SAVE_REG (r20, r0, 30)
+ SAVE_REG (r21, r0, 29)
+ SAVE_REG (r22, r0, 28)
+ SAVE_REG (r23, r0, 27)
+ SAVE_REG (r24, r0, 26)
+ SAVE_REG (r25, r0, 25)
+
+ SAVE_REG (blink, r0, 7)
+ SAVE_REG (fp, r0, 8)
+ SAVE_REG (sp, r0, 23)
+
+ /* Save 0 in r0 placeholder to return 0 when @oucp activated. */
+ mov r9, 0
+ SAVE_REG (r9, r0, 22)
+
+ /* Load context from @ucp. */
+
+ mov r9, r1 /* Safekeep @ucp across syscall. */
+
+ /* rt_sigprocmask (SIG_SETMASK, &ucp->uc_sigmask, &oucp->uc_sigmask, _NSIG8) */
+ mov r3, _NSIG8
+ add r2, r0, UCONTEXT_SIGMASK
+ add r1, r1, UCONTEXT_SIGMASK
+ mov r0, SIG_SETMASK
+ mov r8, __NR_rt_sigprocmask
+ ARC_TRAP_INSN
+ brhi r0, -1024, .Lcall_syscall_err
+
+ LOAD_REG (r0, r9, 22)
+ LOAD_REG (r1, r9, 21)
+ LOAD_REG (r2, r9, 20)
+ LOAD_REG (r3, r9, 19)
+ LOAD_REG (r4, r9, 18)
+ LOAD_REG (r5, r9, 17)
+ LOAD_REG (r6, r9, 16)
+ LOAD_REG (r7, r9, 15)
+
+ LOAD_REG (r13, r9, 37)
+ LOAD_REG (r14, r9, 36)
+ LOAD_REG (r15, r9, 35)
+ LOAD_REG (r16, r9, 34)
+ LOAD_REG (r17, r9, 33)
+ LOAD_REG (r18, r9, 32)
+ LOAD_REG (r19, r9, 31)
+ LOAD_REG (r20, r9, 30)
+ LOAD_REG (r21, r9, 29)
+ LOAD_REG (r22, r9, 28)
+ LOAD_REG (r23, r9, 27)
+ LOAD_REG (r24, r9, 26)
+ LOAD_REG (r25, r9, 25)
+
+ LOAD_REG (blink, r9, 7)
+ LOAD_REG (fp, r9, 8)
+ LOAD_REG (sp, r9, 23)
+
+ j [blink]
+
+PSEUDO_END (__swapcontext)
+weak_alias (__swapcontext, swapcontext)
diff --git a/sysdeps/unix/sysv/linux/arc/sys/cachectl.h b/sysdeps/unix/sysv/linux/arc/sys/cachectl.h
new file mode 100644
index 000000000000..2d93e49e6a99
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/arc/sys/cachectl.h
@@ -0,0 +1,36 @@
+/* cacheflush - flush contents of instruction and/or data cache.
+ Copyright (C) 2017-2019 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
+ <http://www.gnu.org/licenses/>. */
+
+#ifndef _SYS_CACHECTL_H
+#define _SYS_CACHECTL_H 1
+
+#include <features.h>
+
+/* Get the kernel definition for the op bits. */
+#include <asm/cachectl.h>
+
+__BEGIN_DECLS
+
+#ifdef __USE_MISC
+extern int cacheflush (void *__addr, const int __nbytes, const int __op) __THROW;
+#endif
+extern int _flush_cache (char *__addr, const int __nbytes, const int __op) __THROW;
+
+__END_DECLS
+
+#endif /* sys/cachectl.h */
diff --git a/sysdeps/unix/sysv/linux/arc/sys/ucontext.h b/sysdeps/unix/sysv/linux/arc/sys/ucontext.h
new file mode 100644
index 000000000000..7e357bcd65e1
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/arc/sys/ucontext.h
@@ -0,0 +1,63 @@
+/* struct ucontext definition, ARC version.
+ Copyright (C) 2017-2019 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
+ <http://www.gnu.org/licenses/>. */
+
+/* System V/ARC ABI compliant context switching support. */
+
+#ifndef _SYS_UCONTEXT_H
+#define _SYS_UCONTEXT_H 1
+
+#include <features.h>
+
+#include <bits/types/sigset_t.h>
+#include <bits/types/stack_t.h>
+
+typedef struct
+ {
+ unsigned long int __pad;
+ struct {
+ unsigned long int __bta;
+ unsigned long int __lp_start, __lp_end, __lp_count;
+ unsigned long int __status32, __ret, __blink;
+ unsigned long int __fp, __gp;
+ unsigned long int __r12, __r11, __r10, __r9, __r8, __r7;
+ unsigned long int __r6, __r5, __r4, __r3, __r2, __r1, __r0;
+ unsigned long int __sp;
+ } __scratch;
+ unsigned long int __pad2;
+ struct {
+ unsigned long int __r25, __r24, __r23, __r22, __r21, __r20;
+ unsigned long int __r19, __r18, __r17, __r16, __r15, __r14, __r13;
+ } __callee;
+ unsigned long int __efa;
+ unsigned long int __stop_pc;
+ unsigned long int __r30, __r58, __r59;
+ } mcontext_t;
+
+/* Userlevel context. */
+typedef struct ucontext_t
+ {
+ unsigned long int __uc_flags;
+ struct ucontext_t *uc_link;
+ stack_t uc_stack;
+ mcontext_t uc_mcontext;
+ sigset_t uc_sigmask;
+ } ucontext_t;
+
+#undef __ctx
+
+#endif /* sys/ucontext.h */
diff --git a/sysdeps/unix/sysv/linux/arc/sys/user.h b/sysdeps/unix/sysv/linux/arc/sys/user.h
new file mode 100644
index 000000000000..50d0dc7827a0
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/arc/sys/user.h
@@ -0,0 +1,31 @@
+/* ptrace register data format definitions.
+ Copyright (C) 1998-2019 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
+ <http://www.gnu.org/licenses/>. */
+
+#ifndef _SYS_USER_H
+#define _SYS_USER_H 1
+
+/* Struct user_regs_struct is exported by kernel header
+ However apps like strace also expect a struct user, so it's better to
+ have a dummy implementation. */
+#include <asm/ptrace.h>
+
+struct user {
+ int dummy;
+};
+
+#endif /* sys/user.h */
diff --git a/sysdeps/unix/sysv/linux/arc/ucontext-macros.h b/sysdeps/unix/sysv/linux/arc/ucontext-macros.h
new file mode 100644
index 000000000000..ed261399c987
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/arc/ucontext-macros.h
@@ -0,0 +1,29 @@
+/* Macros for ucontext routines, ARC version.
+ Copyright (C) 2017-2019 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
+ <http://www.gnu.org/licenses/>. */
+
+#ifndef _LINUX_ARC_UCONTEXT_MACROS_H
+#define _LINUX_ARC_UCONTEXT_MACROS_H
+
+#include <sysdep.h>
+
+#include "ucontext_i.h"
+
+#define SAVE_REG(reg, rbase, off) st reg, [rbase, UCONTEXT_MCONTEXT + off * 4]
+#define LOAD_REG(reg, rbase, off) ld reg, [rbase, UCONTEXT_MCONTEXT + off * 4]
+
+#endif
diff --git a/sysdeps/unix/sysv/linux/arc/ucontext_i.sym b/sysdeps/unix/sysv/linux/arc/ucontext_i.sym
new file mode 100644
index 000000000000..d84e92f9f543
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/arc/ucontext_i.sym
@@ -0,0 +1,20 @@
+#include <inttypes.h>
+#include <signal.h>
+#include <stddef.h>
+#include <sys/ucontext.h>
+
+SIG_BLOCK
+SIG_SETMASK
+
+-- sizeof(sigset_t) expected by kernel: see comment in ARC sigaction.c for details
+_NSIG8 (_NSIG / 8)
+
+-- Offsets of the fields in the ucontext_t structure.
+#define ucontext(member) offsetof (ucontext_t, member)
+
+UCONTEXT_FLAGS ucontext (__uc_flags)
+UCONTEXT_LINK ucontext (uc_link)
+UCONTEXT_STACK ucontext (uc_stack)
+UCONTEXT_MCONTEXT ucontext (uc_mcontext)
+UCONTEXT_SIGMASK ucontext (uc_sigmask)
+UCONTEXT_SIZE sizeof (ucontext_t)
--
2.7.4
next prev parent reply other threads:[~2019-01-30 1:25 UTC|newest]
Thread overview: 36+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-01-30 1:25 [PATCH v2 00/15] glibc port to ARC processors Vineet Gupta
2019-01-30 1:25 ` [PATCH v2 01/15] ARC: add definitions to elf/elf.h Vineet Gupta
2019-01-30 1:25 ` [PATCH v2 02/15] ARC: ABI Implementation Vineet Gupta
2019-01-30 1:25 ` [PATCH v2 03/15] ARC: startup and dynamic linking code Vineet Gupta
2019-01-30 1:25 ` [PATCH v2 04/15] ARC: Thread Local Storage support Vineet Gupta
2019-01-30 1:25 ` [PATCH v2 05/15] ARC: Atomics and Locking primitives Vineet Gupta
2019-01-30 8:28 ` Andreas Schwab
2019-01-30 17:40 ` Vineet Gupta
2019-02-01 1:57 ` Need for arch pthread-offsets.h (was Re: [PATCH v2 05/15] ARC: Atomics and Locking primitives) Vineet Gupta
2019-02-04 10:02 ` Andreas Schwab
2019-01-30 21:04 ` [PATCH v2 05/15] ARC: Atomics and Locking primitives Joseph Myers
2019-01-30 21:35 ` Vineet Gupta
2019-01-30 21:50 ` Joseph Myers
2019-01-30 22:02 ` Vineet Gupta
2019-01-30 22:05 ` Joseph Myers
2019-01-30 1:25 ` [PATCH v2 06/15] ARC: math soft float support Vineet Gupta
2019-01-30 1:25 ` [PATCH v2 07/15] ARC: Linux Syscall Interface Vineet Gupta
2019-01-30 1:25 ` Vineet Gupta [this message]
2019-01-30 1:25 ` [PATCH v2 09/15] ARC: Linux Startup and Dynamic Loading Vineet Gupta
2019-01-30 1:25 ` [PATCH v2 10/15] ARC: ABI lists Vineet Gupta
2019-01-30 1:25 ` [PATCH v2 11/15] ARC: Update syscall-names.list for ARC specific syscalls Vineet Gupta
2019-01-30 1:25 ` [PATCH v2 12/15] ARC: Build Infrastructure Vineet Gupta
2019-01-30 1:25 ` [PATCH v2 13/15] build-many-glibcs.py: Enable ARC builds Vineet Gupta
2019-01-30 1:25 ` [PATCH v2 14/15] NEWS: mention ARC port Vineet Gupta
2019-01-30 1:25 ` [PATCH v2 15/15] make-syscalls.sh: fix comment referencing syscall-template Vineet Gupta
2019-01-30 2:20 ` Joseph Myers
2019-01-30 2:29 ` [PATCH v2 00/15] glibc port to ARC processors Joseph Myers
2019-01-30 18:15 ` Vineet Gupta
2019-01-30 21:19 ` Joseph Myers
2020-01-17 19:34 ` ARCv2 Public PRM (was Re: [PATCH v2 00/15] glibc port to ARC processors) Vineet Gupta
2020-01-17 21:56 ` Joseph Myers
2020-02-06 17:19 ` Vineet Gupta
2020-02-06 21:51 ` Joseph Myers
2020-02-06 22:06 ` Alistair Francis
2020-02-06 22:41 ` Vineet Gupta
2020-02-09 12:27 ` Lukasz Majewski
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=1548811555-24373-9-git-send-email-vgupta@synopsys.com \
--to=vineet.gupta1@synopsys.com \
--cc=linux-snps-arc@lists.infradead.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.