summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWaldemar Brodkorb <wbx@openadk.org>2017-05-24 20:49:02 +0200
committerWaldemar Brodkorb <wbx@openadk.org>2017-06-23 23:46:04 +0200
commit041cdc2769407c4d3869b218ad7ee7638e1c306e (patch)
tree1ea25250d74dcb230cf5feee99226fc080dbd678
parent58a5ba12bffad5916d9897c2870fc483f1db8282 (diff)
sparc64: add basic support
No NPTL, no LDSO support. Bootup with Busybox Ash in Qemu working. Testuite shows only two failures, but mksh continue/break support doesn't work.
-rw-r--r--extra/Configs/Config.in8
-rw-r--r--extra/Configs/Config.sparc6418
-rw-r--r--libc/sysdeps/linux/common/bits/kernel_sigaction.h8
-rw-r--r--libc/sysdeps/linux/common/mmap.c2
-rw-r--r--libc/sysdeps/linux/sparc64/Makefile13
-rw-r--r--libc/sysdeps/linux/sparc64/Makefile.arch18
-rw-r--r--libc/sysdeps/linux/sparc64/__longjmp.S40
-rw-r--r--libc/sysdeps/linux/sparc64/__start_context.S35
-rw-r--r--libc/sysdeps/linux/sparc64/__syscall_error.c18
-rw-r--r--libc/sysdeps/linux/sparc64/bits/endian.h12
-rw-r--r--libc/sysdeps/linux/sparc64/bits/epoll.h28
-rw-r--r--libc/sysdeps/linux/sparc64/bits/eventfd.h30
-rw-r--r--libc/sysdeps/linux/sparc64/bits/fcntl.h247
-rw-r--r--libc/sysdeps/linux/sparc64/bits/inotify.h28
-rw-r--r--libc/sysdeps/linux/sparc64/bits/ioctls.h35
-rw-r--r--libc/sysdeps/linux/sparc64/bits/ipc.h53
-rw-r--r--libc/sysdeps/linux/sparc64/bits/kernel_stat.h46
-rw-r--r--libc/sysdeps/linux/sparc64/bits/kernel_types.h43
-rw-r--r--libc/sysdeps/linux/sparc64/bits/mathdef.h40
-rw-r--r--libc/sysdeps/linux/sparc64/bits/mathinline.h197
-rw-r--r--libc/sysdeps/linux/sparc64/bits/mman.h106
-rw-r--r--libc/sysdeps/linux/sparc64/bits/msq.h72
-rw-r--r--libc/sysdeps/linux/sparc64/bits/poll.h48
-rw-r--r--libc/sysdeps/linux/sparc64/bits/resource.h239
-rw-r--r--libc/sysdeps/linux/sparc64/bits/sem.h83
-rw-r--r--libc/sysdeps/linux/sparc64/bits/setjmp.h54
-rw-r--r--libc/sysdeps/linux/sparc64/bits/shm.h99
-rw-r--r--libc/sysdeps/linux/sparc64/bits/sigaction.h77
-rw-r--r--libc/sysdeps/linux/sparc64/bits/sigcontextinfo.h30
-rw-r--r--libc/sysdeps/linux/sparc64/bits/siginfo.h321
-rw-r--r--libc/sysdeps/linux/sparc64/bits/signalfd.h28
-rw-r--r--libc/sysdeps/linux/sparc64/bits/signum.h62
-rw-r--r--libc/sysdeps/linux/sparc64/bits/sigstack.h55
-rw-r--r--libc/sysdeps/linux/sparc64/bits/socket_type.h53
-rw-r--r--libc/sysdeps/linux/sparc64/bits/stackinfo.h26
-rw-r--r--libc/sysdeps/linux/sparc64/bits/stat.h167
-rw-r--r--libc/sysdeps/linux/sparc64/bits/syscalls.h116
-rw-r--r--libc/sysdeps/linux/sparc64/bits/termios.h231
-rw-r--r--libc/sysdeps/linux/sparc64/bits/timerfd.h28
-rw-r--r--libc/sysdeps/linux/sparc64/bits/typesizes.h64
-rw-r--r--libc/sysdeps/linux/sparc64/bits/uClibc_arch_features.h41
-rw-r--r--libc/sysdeps/linux/sparc64/bits/uClibc_page.h17
-rw-r--r--libc/sysdeps/linux/sparc64/bits/wordsize.h4
-rw-r--r--libc/sysdeps/linux/sparc64/brk.S101
-rw-r--r--libc/sysdeps/linux/sparc64/bsd-_setjmp.S1
-rw-r--r--libc/sysdeps/linux/sparc64/bsd-setjmp.S1
-rw-r--r--libc/sysdeps/linux/sparc64/clone.S85
-rw-r--r--libc/sysdeps/linux/sparc64/crt1.S116
-rw-r--r--libc/sysdeps/linux/sparc64/crti.S23
-rw-r--r--libc/sysdeps/linux/sparc64/crtn.S17
-rw-r--r--libc/sysdeps/linux/sparc64/fork.S32
-rw-r--r--libc/sysdeps/linux/sparc64/fpu_control.h72
-rw-r--r--libc/sysdeps/linux/sparc64/getcontext.S63
-rw-r--r--libc/sysdeps/linux/sparc64/jmpbuf-offsets.h20
-rw-r--r--libc/sysdeps/linux/sparc64/jmpbuf-unwind.h28
-rw-r--r--libc/sysdeps/linux/sparc64/makecontext.c56
-rw-r--r--libc/sysdeps/linux/sparc64/pipe.S38
-rw-r--r--libc/sysdeps/linux/sparc64/setcontext.S37
-rw-r--r--libc/sysdeps/linux/sparc64/setjmp.S63
-rw-r--r--libc/sysdeps/linux/sparc64/sigaction.c77
-rw-r--r--libc/sysdeps/linux/sparc64/soft-fp/Makefile33
-rw-r--r--libc/sysdeps/linux/sparc64/soft-fp/Versions8
-rw-r--r--libc/sysdeps/linux/sparc64/soft-fp/double.h323
-rw-r--r--libc/sysdeps/linux/sparc64/soft-fp/e_ilogbl.c79
-rw-r--r--libc/sysdeps/linux/sparc64/soft-fp/longlong.h1773
-rw-r--r--libc/sysdeps/linux/sparc64/soft-fp/op-1.h369
-rw-r--r--libc/sysdeps/linux/sparc64/soft-fp/op-2.h705
-rw-r--r--libc/sysdeps/linux/sparc64/soft-fp/op-4.h875
-rw-r--r--libc/sysdeps/linux/sparc64/soft-fp/op-8.h150
-rw-r--r--libc/sysdeps/linux/sparc64/soft-fp/op-common.h2134
-rw-r--r--libc/sysdeps/linux/sparc64/soft-fp/qp_add.c44
-rw-r--r--libc/sysdeps/linux/sparc64/soft-fp/qp_cmp.c48
-rw-r--r--libc/sysdeps/linux/sparc64/soft-fp/qp_cmpe.c49
-rw-r--r--libc/sysdeps/linux/sparc64/soft-fp/qp_div.c44
-rw-r--r--libc/sysdeps/linux/sparc64/soft-fp/qp_dtoq.c45
-rw-r--r--libc/sysdeps/linux/sparc64/soft-fp/qp_feq.c48
-rw-r--r--libc/sysdeps/linux/sparc64/soft-fp/qp_fge.c48
-rw-r--r--libc/sysdeps/linux/sparc64/soft-fp/qp_fgt.c48
-rw-r--r--libc/sysdeps/linux/sparc64/soft-fp/qp_fle.c48
-rw-r--r--libc/sysdeps/linux/sparc64/soft-fp/qp_flt.c48
-rw-r--r--libc/sysdeps/linux/sparc64/soft-fp/qp_fne.c49
-rw-r--r--libc/sysdeps/linux/sparc64/soft-fp/qp_itoq.c34
-rw-r--r--libc/sysdeps/linux/sparc64/soft-fp/qp_mul.c49
-rw-r--r--libc/sysdeps/linux/sparc64/soft-fp/qp_neg.S30
-rw-r--r--libc/sysdeps/linux/sparc64/soft-fp/qp_qtod.c48
-rw-r--r--libc/sysdeps/linux/sparc64/soft-fp/qp_qtoi.c46
-rw-r--r--libc/sysdeps/linux/sparc64/soft-fp/qp_qtos.c49
-rw-r--r--libc/sysdeps/linux/sparc64/soft-fp/qp_qtoui.c46
-rw-r--r--libc/sysdeps/linux/sparc64/soft-fp/qp_qtoux.c46
-rw-r--r--libc/sysdeps/linux/sparc64/soft-fp/qp_qtox.c46
-rw-r--r--libc/sysdeps/linux/sparc64/soft-fp/qp_sqrt.c41
-rw-r--r--libc/sysdeps/linux/sparc64/soft-fp/qp_stoq.c45
-rw-r--r--libc/sysdeps/linux/sparc64/soft-fp/qp_sub.c44
-rw-r--r--libc/sysdeps/linux/sparc64/soft-fp/qp_uitoq.c34
-rw-r--r--libc/sysdeps/linux/sparc64/soft-fp/qp_util.c60
-rw-r--r--libc/sysdeps/linux/sparc64/soft-fp/qp_uxtoq.c34
-rw-r--r--libc/sysdeps/linux/sparc64/soft-fp/qp_xtoq.c34
-rw-r--r--libc/sysdeps/linux/sparc64/soft-fp/quad.h330
-rw-r--r--libc/sysdeps/linux/sparc64/soft-fp/s_frexpl.c51
-rw-r--r--libc/sysdeps/linux/sparc64/soft-fp/s_scalblnl.c52
-rw-r--r--libc/sysdeps/linux/sparc64/soft-fp/s_scalbnl.c52
-rw-r--r--libc/sysdeps/linux/sparc64/soft-fp/sfp-machine.h147
-rw-r--r--libc/sysdeps/linux/sparc64/soft-fp/single.h199
-rw-r--r--libc/sysdeps/linux/sparc64/soft-fp/soft-fp.h342
-rw-r--r--libc/sysdeps/linux/sparc64/swapcontext.c46
-rw-r--r--libc/sysdeps/linux/sparc64/sys/procfs.h121
-rw-r--r--libc/sysdeps/linux/sparc64/sys/ptrace.h235
-rw-r--r--libc/sysdeps/linux/sparc64/sys/ucontext.h198
-rw-r--r--libc/sysdeps/linux/sparc64/sys/user.h83
-rw-r--r--libc/sysdeps/linux/sparc64/syscall.S38
-rw-r--r--libc/sysdeps/linux/sparc64/sysdep.h139
-rw-r--r--libc/sysdeps/linux/sparc64/ucontext_i.sym6
-rw-r--r--libc/sysdeps/linux/sparc64/vfork.S36
113 files changed, 13498 insertions, 1 deletions
diff --git a/extra/Configs/Config.in b/extra/Configs/Config.in
index 53dff1c82..59ef31c47 100644
--- a/extra/Configs/Config.in
+++ b/extra/Configs/Config.in
@@ -38,6 +38,7 @@ choice
default TARGET_powerpc if DESIRED_TARGET_ARCH = "powerpc"
default TARGET_sh if DESIRED_TARGET_ARCH = "sh"
default TARGET_sparc if DESIRED_TARGET_ARCH = "sparc"
+ default TARGET_sparc64 if DESIRED_TARGET_ARCH = "sparc64"
default TARGET_x86_64 if DESIRED_TARGET_ARCH = "x86_64"
default TARGET_xtensa if DESIRED_TARGET_ARCH = "xtensa"
help
@@ -117,6 +118,9 @@ config TARGET_sh
config TARGET_sparc
bool "sparc"
+config TARGET_sparc64
+ bool "sparc64"
+
config TARGET_x86_64
bool "x86_64"
@@ -216,6 +220,10 @@ if TARGET_sparc
source "extra/Configs/Config.sparc"
endif
+if TARGET_sparc64
+source "extra/Configs/Config.sparc64"
+endif
+
if TARGET_x86_64
source "extra/Configs/Config.x86_64"
endif
diff --git a/extra/Configs/Config.sparc64 b/extra/Configs/Config.sparc64
new file mode 100644
index 000000000..8e162263c
--- /dev/null
+++ b/extra/Configs/Config.sparc64
@@ -0,0 +1,18 @@
+#
+# For a description of the syntax of this configuration file,
+# see extra/config/Kconfig-language.txt
+#
+
+config TARGET_ARCH
+ string
+ default "sparc64"
+
+config FORCE_OPTIONS_FOR_ARCH
+ bool
+ default y
+ select ARCH_BIG_ENDIAN
+ select ARCH_HAS_UCONTEXT
+ select ARCH_HAS_MMU
+ select ARCH_HAS_NO_LDSO
+ select ARCH_HAS_DEPRECATED_SYSCALLS
+
diff --git a/libc/sysdeps/linux/common/bits/kernel_sigaction.h b/libc/sysdeps/linux/common/bits/kernel_sigaction.h
index 5c8726058..21e4c9296 100644
--- a/libc/sysdeps/linux/common/bits/kernel_sigaction.h
+++ b/libc/sysdeps/linux/common/bits/kernel_sigaction.h
@@ -19,6 +19,14 @@ struct old_kernel_sigaction {
unsigned long sa_flags;
void (*sa_restorer)(void);
};
+
+/* This is the sigaction structure from the Linux 2.1.68 kernel. */
+struct kernel_sigaction {
+ __sighandler_t k_sa_handler;
+ unsigned long sa_flags;
+ void (*sa_restorer) (void);
+ sigset_t sa_mask;
+};
#endif
#endif /* _BITS_SIGACTION_STRUCT_H */
diff --git a/libc/sysdeps/linux/common/mmap.c b/libc/sysdeps/linux/common/mmap.c
index cafe756bf..b74fc19ef 100644
--- a/libc/sysdeps/linux/common/mmap.c
+++ b/libc/sysdeps/linux/common/mmap.c
@@ -21,6 +21,7 @@ static _syscall6(void *, _mmap, void *, addr, size_t, len,
#elif defined __NR_mmap2 && defined _syscall6
+
# include <errno.h>
# include <bits/uClibc_page.h>
# ifndef MMAP2_PAGE_SHIFT
@@ -51,7 +52,6 @@ static void *_mmap(void *addr, size_t len, int prot, int flags,
}
#elif defined __NR_mmap
-
# define __NR___syscall_mmap __NR_mmap
static __inline__ _syscall1(void *, __syscall_mmap, unsigned long *, buffer)
diff --git a/libc/sysdeps/linux/sparc64/Makefile b/libc/sysdeps/linux/sparc64/Makefile
new file mode 100644
index 000000000..633c91f3e
--- /dev/null
+++ b/libc/sysdeps/linux/sparc64/Makefile
@@ -0,0 +1,13 @@
+# Makefile for uClibc
+#
+# Copyright (C) 2000-2005 Erik Andersen <andersen@uclibc.org>
+#
+# Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
+#
+
+top_srcdir=../../../../
+top_builddir=../../../../
+all: objs
+include $(top_builddir)Rules.mak
+include Makefile.arch
+include $(top_srcdir)Makerules
diff --git a/libc/sysdeps/linux/sparc64/Makef