aboutsummaryrefslogtreecommitdiff
path: root/sysdeps/unix/sysv/linux/nios2/bits
diff options
context:
space:
mode:
authorChung-Lin Tang <cltang@codesourcery.com>2015-01-17 22:29:12 -0800
committerChung-Lin Tang <cltang@codesourcery.com>2015-01-17 22:29:12 -0800
commit522e6ee3b45808ea845ec0ac11d5fffcd737baba (patch)
tree3d107705431599279416406a487cd8a905a372af /sysdeps/unix/sysv/linux/nios2/bits
parent026eb207eda8cc93f6f7f0980f0a8e51587d8011 (diff)
downloadglibc-522e6ee3b45808ea845ec0ac11d5fffcd737baba.tar
glibc-522e6ee3b45808ea845ec0ac11d5fffcd737baba.tar.gz
glibc-522e6ee3b45808ea845ec0ac11d5fffcd737baba.tar.bz2
glibc-522e6ee3b45808ea845ec0ac11d5fffcd737baba.zip
Commit nios2 port to master.
Diffstat (limited to 'sysdeps/unix/sysv/linux/nios2/bits')
-rw-r--r--sysdeps/unix/sysv/linux/nios2/bits/atomic.h92
-rw-r--r--sysdeps/unix/sysv/linux/nios2/bits/mman.h42
2 files changed, 134 insertions, 0 deletions
diff --git a/sysdeps/unix/sysv/linux/nios2/bits/atomic.h b/sysdeps/unix/sysv/linux/nios2/bits/atomic.h
new file mode 100644
index 0000000000..2329f7463d
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/nios2/bits/atomic.h
@@ -0,0 +1,92 @@
+/* Low-level functions for atomic operations. Nios II version.
+ Copyright (C) 2012-2015 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 _NIOS2_BITS_ATOMIC_H
+#define _NIOS2_BITS_ATOMIC_H 1
+
+#include <stdint.h>
+
+typedef int32_t atomic32_t;
+typedef uint32_t uatomic32_t;
+typedef int_fast32_t atomic_fast32_t;
+typedef uint_fast32_t uatomic_fast32_t;
+
+typedef intptr_t atomicptr_t;
+typedef uintptr_t uatomicptr_t;
+typedef intmax_t atomic_max_t;
+typedef uintmax_t uatomic_max_t;
+
+#define __HAVE_64B_ATOMICS 0
+#define USE_ATOMIC_COMPILER_BUILTINS 0
+
+#define __arch_compare_and_exchange_val_8_acq(mem, newval, oldval) \
+ (abort (), (__typeof (*mem)) 0)
+#define __arch_compare_and_exchange_val_16_acq(mem, newval, oldval) \
+ (abort (), (__typeof (*mem)) 0)
+#define __arch_compare_and_exchange_val_64_acq(mem, newval, oldval) \
+ (abort (), (__typeof (*mem)) 0)
+
+#define __arch_compare_and_exchange_bool_8_acq(mem, newval, oldval) \
+ (abort (), 0)
+#define __arch_compare_and_exchange_bool_16_acq(mem, newval, oldval) \
+ (abort (), 0)
+#define __arch_compare_and_exchange_bool_64_acq(mem, newval, oldval) \
+ (abort (), 0)
+
+#define __arch_compare_and_exchange_val_32_acq(mem, newval, oldval) \
+ ({ \
+ register int r2 asm ("r2"); \
+ register int* r4 asm ("r4") = (int*)(mem); \
+ register int r5 asm ("r5"); \
+ register int r6 asm ("r6") = (int)(newval); \
+ int retval, orig_oldval = (int)(oldval); \
+ long kernel_cmpxchg = 0x1004; \
+ while (1) \
+ { \
+ r5 = *r4; \
+ if (r5 != orig_oldval) \
+ { \
+ retval = r5; \
+ break; \
+ } \
+ asm volatile ("callr %1\n" \
+ : "=r" (r2) \
+ : "r" (kernel_cmpxchg), "r" (r4), "r" (r5), "r" (r6) \
+ : "ra", "memory"); \
+ if (!r2) { retval = orig_oldval; break; } \
+ } \
+ (__typeof (*(mem))) retval; \
+ })
+
+#define __arch_compare_and_exchange_bool_32_acq(mem, newval, oldval) \
+ ({ \
+ register int r2 asm ("r2"); \
+ register int *r4 asm ("r4") = (int*)(mem); \
+ register int r5 asm ("r5") = (int)(oldval); \
+ register int r6 asm ("r6") = (int)(newval); \
+ long kernel_cmpxchg = 0x1004; \
+ asm volatile ("callr %1\n" \
+ : "=r" (r2) \
+ : "r" (kernel_cmpxchg), "r" (r4), "r" (r5), "r" (r6) \
+ : "ra", "memory"); \
+ r2; \
+ })
+
+#define atomic_full_barrier() ({ asm volatile ("sync"); })
+
+#endif /* _NIOS2_BITS_ATOMIC_H */
diff --git a/sysdeps/unix/sysv/linux/nios2/bits/mman.h b/sysdeps/unix/sysv/linux/nios2/bits/mman.h
new file mode 100644
index 0000000000..23e92abd71
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/nios2/bits/mman.h
@@ -0,0 +1,42 @@
+/* Definitions for POSIX memory map interface. Linux/Nios II version.
+
+ Copyright (C) 1997-2015 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_MMAN_H
+# error "Never use <bits/mman.h> directly; include <sys/mman.h> instead."
+#endif
+
+/* The following definitions basically come from the kernel headers.
+ But the kernel header is not namespace clean. */
+
+/* These are Linux-specific. */
+#ifdef __USE_MISC
+# define MAP_GROWSDOWN 0x00100 /* Stack-like segment. */
+# define MAP_DENYWRITE 0x00800 /* ETXTBSY */
+# define MAP_EXECUTABLE 0x01000 /* Mark it as an executable. */
+# define MAP_LOCKED 0x02000 /* Lock the mapping. */
+# define MAP_NORESERVE 0x04000 /* Don't check for reservations. */
+# define MAP_POPULATE 0x08000 /* Populate (prefault) pagetables. */
+# define MAP_NONBLOCK 0x10000 /* Do not block on IO. */
+# define MAP_STACK 0x20000 /* Allocation is for a stack. */
+# define MAP_HUGETLB 0x40000 /* Create huge page mapping. */
+#endif
+
+/* Include generic Linux declarations. */
+#include <bits/mman-linux.h>