about summary refs log tree commit diff
path: root/sysdeps/unix/sysv/linux
diff options
context:
space:
mode:
authorAlistair Francis <alistair.francis@wdc.com>2020-02-10 10:36:21 -0800
committerAlistair Francis <alistair.francis@wdc.com>2020-08-27 08:17:42 -0700
commit5b6113d62efabb123db433b14adddd4a5fb6b7ec (patch)
tree1959bde3e74c6e491bbce89f0f8e1806647c9225 /sysdeps/unix/sysv/linux
parent07598d76006faec6c60a9d86bda44dcb81b3a743 (diff)
downloadglibc-5b6113d62efabb123db433b14adddd4a5fb6b7ec.tar.gz
glibc-5b6113d62efabb123db433b14adddd4a5fb6b7ec.tar.xz
glibc-5b6113d62efabb123db433b14adddd4a5fb6b7ec.zip
RISC-V: Support the 32-bit ABI implementation
This patch adds the ABI implementation for 32-bit RISC-V.  It contains
the Linux-specific and RISC-V architecture code.

Reviewed-by: Maciej W. Rozycki <macro@wdc.com>
Diffstat (limited to 'sysdeps/unix/sysv/linux')
-rw-r--r--sysdeps/unix/sysv/linux/riscv/jmp_buf-macros.h55
1 files changed, 55 insertions, 0 deletions
diff --git a/sysdeps/unix/sysv/linux/riscv/jmp_buf-macros.h b/sysdeps/unix/sysv/linux/riscv/jmp_buf-macros.h
new file mode 100644
index 0000000000..234b979a8c
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/riscv/jmp_buf-macros.h
@@ -0,0 +1,55 @@
+/* The jump buffer constants for RISC-V.
+   Copyright (C) 2020 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
+   <https://www.gnu.org/licenses/>.  */
+
+/* Produced by this program:
+
+  #include <stdio.h>
+  #include <unistd.h>
+  #include <setjmp.h>
+  #include <stddef.h>
+
+  int main (int argc, char **argv)
+    {
+      printf ("#define JMP_BUF_SIZE %d\n", sizeof (jmp_buf));
+      printf ("#define JMP_BUF_ALIGN %d\n", __alignof__ (jmp_buf));
+      printf ("#define SIGJMP_BUF_SIZE %d\n", sizeof (sigjmp_buf));
+      printf ("#define SIGJMP_BUF_ALIGN %d\n", __alignof__ (sigjmp_buf));
+      printf ("#define MASK_WAS_SAVED_OFFSET %d\n",
+              offsetof (struct __jmp_buf_tag, __mask_was_saved));
+      printf ("#define SAVED_MASK_OFFSET %d\n",
+              offsetof (struct __jmp_buf_tag, __saved_mask));
+    } */
+
+#if defined __riscv_float_abi_soft
+# define JMP_BUF_SIZE 188
+# define JMP_BUF_ALIGN 4
+# define SIGJMP_BUF_SIZE 188
+# define SIGJMP_BUF_ALIGN 4
+# define MASK_WAS_SAVED_OFFSET 56
+# define SAVED_MASK_OFFSET 60
+#elif defined __riscv_float_abi_double
+# define JMP_BUF_SIZE 288
+# define JMP_BUF_ALIGN 8
+# define SIGJMP_BUF_SIZE 288
+# define SIGJMP_BUF_ALIGN 8
+# define MASK_WAS_SAVED_OFFSET 152
+# define SAVED_MASK_OFFSET 156
+#else
+# error "Unknown RISC-V floating-point ABI"
+#endif