]> granicus.if.org Git - strace/commitdiff
Add support for Altera's Nios-II softcore architecture
authorEzequiel Garcia <ezequiel@vanguardiasur.com.ar>
Sat, 18 Apr 2015 20:33:27 +0000 (17:33 -0300)
committerDmitry V. Levin <ldv@altlinux.org>
Tue, 19 May 2015 22:41:49 +0000 (22:41 +0000)
This commit adds strace support for Altera's Nios-II.  The architecture
is supported by Linux since v3.19, and it implements the generic syscall
ABI.

* configure.ac: Add nios2 support.
* cacheflush.c [NIOS2] (sys_cacheflush): New function.
* linux/nios2/*: New Nios-II specific files.
* Makefile.am (EXTRA_DIST): Add them.

Signed-off-by: Ezequiel Garcia <ezequiel@vanguardiasur.com.ar>
Makefile.am
cacheflush.c
configure.ac
linux/nios2/arch_regs.c [new file with mode: 0644]
linux/nios2/get_error.c [new file with mode: 0644]
linux/nios2/get_scno.c [new file with mode: 0644]
linux/nios2/get_syscall_args.c [new file with mode: 0644]
linux/nios2/ioctls_arch0.h [new file with mode: 0644]
linux/nios2/ioctls_inc0.h [new file with mode: 0644]
linux/nios2/print_pc.c [new file with mode: 0644]
linux/nios2/syscallent.h [new file with mode: 0644]

index 549aebc4e3c1a9743060cf8452eda174c9bd2bb8..425df6cb0c8d5bf154bf734d3abe9c952d57bb8f 100644 (file)
@@ -341,6 +341,14 @@ EXTRA_DIST =                               \
        linux/mips/syscallent.h         \
        linux/mips/userent.h            \
        linux/mtd-abi.h                 \
+       linux/nios2/arch_regs.c         \
+       linux/nios2/get_error.c         \
+       linux/nios2/get_scno.c          \
+       linux/nios2/get_syscall_args.c  \
+       linux/nios2/ioctls_arch0.h      \
+       linux/nios2/ioctls_inc0.h       \
+       linux/nios2/print_pc.c          \
+       linux/nios2/syscallent.h        \
        linux/or1k/arch_regs.c          \
        linux/or1k/get_error.c          \
        linux/or1k/get_scno.c           \
index 727d49bc8280073258db69ebce28ff36bac3b169..1ad3a15ff1dceb2a6a14947abd2411dfdfbb4de7 100644 (file)
@@ -89,3 +89,15 @@ SYS_FUNC(cacheflush)
        return 0;
 }
 #endif /* SH */
+
+#ifdef NIOS2
+SYS_FUNC(cacheflush)
+{
+       if (entering(tcp)) {
+               /* addr and len */
+               tprintf("%#lx, %lu", tcp->u_arg[0], tcp->u_arg[3]);
+               /* scope and flags (cache type) are currently ignored */
+       }
+       return 0;
+}
+#endif /* NIOS2 */
index d829e18b45211acece1e1d98743ad5fbf2e73a4f..4713c9a1701cee757043eadf0f8a33a466ca6000 100644 (file)
@@ -125,6 +125,11 @@ microblaze*)
        arch=microblaze
        AC_DEFINE([MICROBLAZE], 1, [Define for the MicroBlaze architecture.])
        ;;
+nios2*)
+       arch=nios2
+       AC_DEFINE([NIOS2], 1, [Define for the Nios-II architecture.])
+       ;;
+
 or1k*)
        arch=or1k
        AC_DEFINE([OR1K], 1, [Define for the OpenRISC 1000 architecture.])
diff --git a/linux/nios2/arch_regs.c b/linux/nios2/arch_regs.c
new file mode 100644 (file)
index 0000000..62827f9
--- /dev/null
@@ -0,0 +1,2 @@
+static struct user_pt_regs nios2_regs;
+# define ARCH_REGS_FOR_GETREGSET nios2_regs
diff --git a/linux/nios2/get_error.c b/linux/nios2/get_error.c
new file mode 100644 (file)
index 0000000..5d7e6db
--- /dev/null
@@ -0,0 +1,13 @@
+/*
+ * The system call convention specifies that r2 contains the return
+ * value on success or a positive error number on failure.  A flag
+ * indicating successful completion is written to r7; r7=0 indicates
+ * the system call success, r7=1 indicates an error.  The positive
+ * errno value written in r2.
+ */
+if (check_errno && nios2_regs.regs[7]) {
+       tcp->u_rval = -1;
+       tcp->u_error = nios2_regs.regs[2];
+} else {
+       tcp->u_rval = nios2_regs.regs[2];
+}
diff --git a/linux/nios2/get_scno.c b/linux/nios2/get_scno.c
new file mode 100644 (file)
index 0000000..c820bce
--- /dev/null
@@ -0,0 +1 @@
+scno = nios2_regs.regs[2];
diff --git a/linux/nios2/get_syscall_args.c b/linux/nios2/get_syscall_args.c
new file mode 100644 (file)
index 0000000..d12c2f7
--- /dev/null
@@ -0,0 +1,6 @@
+tcp->u_arg[0] = nios2_regs.regs[4];
+tcp->u_arg[1] = nios2_regs.regs[5];
+tcp->u_arg[2] = nios2_regs.regs[6];
+tcp->u_arg[3] = nios2_regs.regs[7];
+tcp->u_arg[4] = nios2_regs.regs[8];
+tcp->u_arg[5] = nios2_regs.regs[9];
diff --git a/linux/nios2/ioctls_arch0.h b/linux/nios2/ioctls_arch0.h
new file mode 100644 (file)
index 0000000..f015def
--- /dev/null
@@ -0,0 +1 @@
+/* Generated by ioctls_gen.sh from definitions found in $linux/arch/nios2/include/ tree. */
diff --git a/linux/nios2/ioctls_inc0.h b/linux/nios2/ioctls_inc0.h
new file mode 100644 (file)
index 0000000..4aecf98
--- /dev/null
@@ -0,0 +1 @@
+#include "32/ioctls_inc.h"
diff --git a/linux/nios2/print_pc.c b/linux/nios2/print_pc.c
new file mode 100644 (file)
index 0000000..d22e8f7
--- /dev/null
@@ -0,0 +1 @@
+tprintf(fmt, nios2_regs.regs[PTR_EA]);
diff --git a/linux/nios2/syscallent.h b/linux/nios2/syscallent.h
new file mode 100644 (file)
index 0000000..de208f2
--- /dev/null
@@ -0,0 +1,4 @@
+#define ARCH_sys_mmap sys_mmap_pgoff
+#include "32/syscallent.h"
+[244] = {4,    0,      sys_cacheflush, "cacheflush"},
+[245 ... 259] = { },