[git commit] h8300: headers update

Bernhard Reutner-Fischer rep.dot.nop at gmail.com
Tue May 26 20:15:35 UTC 2015


commit: http://git.uclibc.org/uClibc/commit/?id=dc19aa547995f92b89449ed9ebb69ea08b2098ca
branch: http://git.uclibc.org/uClibc/commit/?id=refs/heads/master

- wire up new kernel

Signed-off-by: Yoshinori Sato <ysato at users.sourceforge.jp>
Signed-off-by: Bernhard Reutner-Fischer <rep.dot.nop at gmail.com>
---
 libc/sysdeps/linux/h8300/bits/byteswap.h           |   15 +--
 libc/sysdeps/linux/h8300/bits/fcntl.h              |    7 +-
 libc/sysdeps/linux/h8300/bits/kernel_stat.h        |   50 -----
 libc/sysdeps/linux/h8300/bits/kernel_types.h       |   13 ++
 libc/sysdeps/linux/h8300/bits/syscalls.h           |  214 +++++++-------------
 .../linux/h8300/bits/uClibc_arch_features.h        |    2 +-
 6 files changed, 95 insertions(+), 206 deletions(-)

diff --git a/libc/sysdeps/linux/h8300/bits/byteswap.h b/libc/sysdeps/linux/h8300/bits/byteswap.h
index 71a66c6..08ca99f 100644
--- a/libc/sysdeps/linux/h8300/bits/byteswap.h
+++ b/libc/sysdeps/linux/h8300/bits/byteswap.h
@@ -19,20 +19,7 @@
 #ifndef _ASM_BITS_BYTESWAP_H
 #define _ASM_BITS_BYTESWAP_H 1
 
-#define __bswap_non_constant_32(x) \
-  __extension__						\
-  ({ unsigned int __v;					\
-     __asm__ __volatile__ ("mov.l %0,er0\n\t"		\
-			   "mov.b r0l,r1h\n\t"		\
-			   "mov.b r0h,r1l\n\t"		\
-			   "mov.w r1,e1\n\t"		\
-			   "mov.w e0,r0\n\t"		\
-			   "mov.b r0l,r1h\n\t"		\
-			   "mov.b r0h,r1l\n\t"		\
-			   "mov.l er1,%0"		\
-			   : "=d" (__v)			\
-			   : "0" (x): "er0","er1");	\
-     __v; })
+#define __bswap_non_constant_32(x) __builtin_bswap32(x)
 
 #endif
 
diff --git a/libc/sysdeps/linux/h8300/bits/fcntl.h b/libc/sysdeps/linux/h8300/bits/fcntl.h
index 45deec4..1c653be 100644
--- a/libc/sysdeps/linux/h8300/bits/fcntl.h
+++ b/libc/sysdeps/linux/h8300/bits/fcntl.h
@@ -22,6 +22,9 @@
 
 
 #include <sys/types.h>
+#ifdef __USE_GNU
+# include <bits/uio.h>
+#endif
 
 /* open/fcntl - O_SYNC is only implemented on blocks devices and on files
    located on an ext2 file system */
@@ -42,8 +45,10 @@
 
 #ifdef __USE_GNU
 # define O_DIRECTORY	 040000	/* Must be a directory.	 */
-# define O_NOFOLLOW	0100000	/* Do not follow links.	 */
 # define O_DIRECT	0200000	/* Direct disk access.	*/
+# define O_NOFOLLOW	0400000	/* Do not follow links.	 */
+# define O_NOATIME     01000000 /* Do not set atime.  */
+# define O_CLOEXEC     02000000 /* Set close_on_exec.  */
 #endif
 
 /* For now Linux has synchronisity options for data and read operations.
diff --git a/libc/sysdeps/linux/h8300/bits/kernel_stat.h b/libc/sysdeps/linux/h8300/bits/kernel_stat.h
deleted file mode 100644
index 5f6c8ae..0000000
--- a/libc/sysdeps/linux/h8300/bits/kernel_stat.h
+++ /dev/null
@@ -1,50 +0,0 @@
-#ifndef _BITS_STAT_STRUCT_H
-#define _BITS_STAT_STRUCT_H
-
-/* This file provides whatever this particular arch's kernel thinks
- * struct kernel_stat should look like...  It turns out each arch has a
- * different opinion on the subject... */
-
-struct kernel_stat {
-	unsigned short st_dev;
-	unsigned short __pad1;
-	unsigned long st_ino;
-	unsigned short st_mode;
-	unsigned short st_nlink;
-	unsigned short st_uid;
-	unsigned short st_gid;
-	unsigned short st_rdev;
-	unsigned short __pad2;
-	unsigned long  st_size;
-	unsigned long  st_blksize;
-	unsigned long  st_blocks;
-	struct timespec st_atim;
-	struct timespec st_mtim;
-	struct timespec st_ctim;
-	unsigned long  __unused4;
-	unsigned long  __unused5;
-};
-
-struct kernel_stat64 {
-	unsigned long long st_dev;
-	unsigned char	__pad1[2];
-#define _HAVE_STAT64___ST_INO
-	unsigned long	__st_ino;
-	unsigned int	st_mode;
-	unsigned int	st_nlink;
-	unsigned long	st_uid;
-	unsigned long	st_gid;
-	unsigned short	st_rdev;
-	unsigned char	__pad3[10];
-	long long	st_size;
-	unsigned long	st_blksize;
-	unsigned long	st_blocks;	/* Number 512-byte blocks allocated. */
-	unsigned long	__pad4;		/* future possible st_blocks high bits */
-	struct timespec	st_atim;
-	struct timespec	st_mtim;
-	struct timespec	st_ctim;
-	unsigned long long	st_ino;
-};
-
-#endif	/*  _BITS_STAT_STRUCT_H */
-
diff --git a/libc/sysdeps/linux/h8300/bits/kernel_types.h b/libc/sysdeps/linux/h8300/bits/kernel_types.h
index 4cfd1bf..7e76891 100644
--- a/libc/sysdeps/linux/h8300/bits/kernel_types.h
+++ b/libc/sysdeps/linux/h8300/bits/kernel_types.h
@@ -35,6 +35,18 @@ typedef __kernel_dev_t	__kernel_old_dev_t;
 typedef long		__kernel_long_t;
 typedef unsigned long	__kernel_ulong_t;
 
+#define __kernel_long_t		__kernel_long_t
+#define __kernel_ino_t 		__kernel_ino_t
+#define __kernel_mode_t 	__kernel_mode_t
+#define __kernel_pid_t 		__kernel_pid_t
+#define __kernel_ipc_pid_t 	__kernel_ipc_pid_t
+#define __kernel_uid_t 		__kernel_uid_t
+#define __kernel_susecond_t 	__kernel_susecond_t
+#define __kernel_daddr_t 	__kernel_daddr_t
+#define __kernel_uid32_t 	__kernel_uid32_t
+#define __kernel_old_uid_t 	__kernel_old_uid_t
+#define __kernel_old_dev_t 	__kernel_old_dev_t
+
 typedef struct {
 #ifdef __USE_ALL
 	int val[2];
@@ -42,5 +54,6 @@ typedef struct {
 	int __val[2];
 #endif
 } __kernel_fsid_t;
+#define __kernel_fsid_t __kernel_fsid_t
 
 #endif /* _BITS_KERNEL_TYPES_H */
diff --git a/libc/sysdeps/linux/h8300/bits/syscalls.h b/libc/sysdeps/linux/h8300/bits/syscalls.h
index 5867ed6..b43795f 100644
--- a/libc/sysdeps/linux/h8300/bits/syscalls.h
+++ b/libc/sysdeps/linux/h8300/bits/syscalls.h
@@ -1,151 +1,85 @@
-/* Unlike the asm/unistd.h kernel header file (which this is partly based on),
- * this file must be able to cope with PIC and non-PIC code.  For some arches
- * there is no difference.  For x86 (which has far too few registers) there is
- * a difference.   Regardless, including asm/unistd.h is hereby officially
- * forbidden.  Don't do it.  It is bad for you.
- */
+#ifndef _BITS_SYSCALLS_H
+#define _BITS_SYSCALLS_H
 #ifndef _SYSCALL_H
 # error "Never use <bits/syscalls.h> directly; include <sys/syscall.h> instead."
 #endif
 
-#define __syscall_return(type, res) \
-do { \
-	if ((unsigned long)(res) >= (unsigned long)(-125)) { \
-	/* avoid using res which is declared to be in register d0; \
-	   errno might expand to a function call and clobber it.  */ \
-		int __err = -(res); \
-		errno = __err; \
-		res = -1; \
-	} \
-	return (type) (res); \
-} while (0)
+#ifndef __ASSEMBLER__
 
-#define _syscall0(type, name)							\
-type name(void)									\
-{										\
-  register long __res __asm__("er0");						\
-  __asm__ __volatile__ ("mov.l	%1,er0\n\t"					\
-  			"trapa	#0\n\t"						\
-			: "=r" (__res)						\
-			: "ir" (__NR_##name)					\
-			: "cc");						\
-  if ((unsigned long)(__res) >= (unsigned long)(-125)) {			\
-    errno = -__res;								\
-    __res = -1;									\
-  }										\
-  return (type)__res;								\
-}
+#include <errno.h>
 
-#define _syscall1(type, name, atype, a)						\
-type name(atype a)								\
-{										\
-  register long __res __asm__("er0");						\
-  __asm__ __volatile__ ("mov.l	%2, er1\n\t"					\
-  			"mov.l	%1, er0\n\t"					\
-  			"trapa	#0\n\t"						\
-			: "=r" (__res)						\
-			: "ir" (__NR_##name),					\
-			  "g" ((long)a)						\
-			: "cc", "er1");					\
-  if ((unsigned long)(__res) >= (unsigned long)(-125)) {			\
-    errno = -__res;								\
-    __res = -1;									\
-  }										\
-  return (type)__res;								\
-}
+#define ASMFMT_0
+#define ASMFMT_1 , "g"(er1)
+#define ASMFMT_2 , "g"(er1), "g"(er2)
+#define ASMFMT_3 , "g"(er1), "g"(er2), "g"(er3)
+#define ASMFMT_4 , "g"(er1), "g"(er2), "g"(er3), "g"(er4)
+#define ASMFMT_5 , "g"(er1), "g"(er2), "g"(er3), "g"(er4), "g"(er5)
+#define ASMFMT_6 , "g"(er1), "g"(er2), "g"(er3), "g"(er4), "m"(er5), "m"(er6)
 
-#define _syscall2(type, name, atype, a, btype, b)				\
-type name(atype a, btype b)							\
-{										\
-  register long __res __asm__("er0");						\
-  __asm__ __volatile__ ("mov.l	%3, er2\n\t"					\
-  			"mov.l	%2, er1\n\t"					\
-			"mov.l	%1, er0\n\t"					\
-  			"trapa	#0\n\t"						\
-			: "=r" (__res)						\
-			: "ir" (__NR_##name),					\
-			  "g" ((long)a),					\
-			  "g" ((long)b)						\
-			: "cc", "er1", "er2"); 				\
-  if ((unsigned long)(__res) >= (unsigned long)(-125)) {			\
-    errno = -__res;								\
-    __res = -1;									\
-  }										\
-  return (type)__res;								\
-}
+#define SUBSTITUTE_ARGS_0() do {} while(0);
+#define SUBSTITUTE_ARGS_1(arg1)			\
+	register long int er1 __asm__("er1") = (long int)arg1;
+#define SUBSTITUTE_ARGS_2(arg1, arg2)		\
+	register long int er1 __asm__("er1") = (long int)arg1; \
+	register long int er2 __asm__("er2") = (long int)arg2;
+#define SUBSTITUTE_ARGS_3(arg1, arg2, arg3)	\
+	register long int er1 __asm__("er1") = (long int)arg1; \
+	register long int er2 __asm__("er2") = (long int)arg2; \
+	register long int er3 __asm__("er3") = (long int)arg3;
+#define SUBSTITUTE_ARGS_4(arg1, arg2, arg3, arg4)	     \
+	register long int er1 __asm__("er1") = (long int)arg1; \
+	register long int er2 __asm__("er2") = (long int)arg2; \
+	register long int er3 __asm__("er3") = (long int)arg3; \
+	register long int er4 __asm__("er4") = (long int)arg4;
+#define SUBSTITUTE_ARGS_5(arg1, arg2, arg3, arg4, arg5)   \
+	register long int er1 __asm__("er1") = (long int)arg1; \
+	register long int er2 __asm__("er2") = (long int)arg2; \
+	register long int er3 __asm__("er3") = (long int)arg3; \
+	register long int er4 __asm__("er4") = (long int)arg4; \
+	register long int er5 __asm__("er5") = (long int)arg5;
+#define SUBSTITUTE_ARGS_6(arg1, arg2, arg3, arg4, arg5, arg6)	\
+	register long int er1 __asm__("er1") = (long int)arg1; \
+	register long int er2 __asm__("er2") = (long int)arg2; \
+	register long int er3 __asm__("er3") = (long int)arg3; \
+	register long int er4 __asm__("er4") = (long int)arg4; \
+	long int er5 = (long int)arg5; \
+	long int er6 = (long int)arg6;
 
-#define _syscall3(type, name, atype, a, btype, b, ctype, c)			\
-type name(atype a, btype b, ctype c)						\
-{										\
-  register long __res __asm__("er0");						\
-  __asm__ __volatile__ ("mov.l	%4, er3\n\t"					\
-			"mov.l	%3, er2\n\t"					\
-  			"mov.l	%2, er1\n\t"					\
-			"mov.l	%1, er0\n\t"					\
-  			"trapa	#0\n\t"						\
-			: "=r" (__res)						\
-			: "ir" (__NR_##name),					\
-			  "g" ((long)a),					\
-			  "g" ((long)b),					\
-			  "g" ((long)c)						\
-			: "cc", "er1", "er2", "er3");  			\
-  if ((unsigned long)(__res) >= (unsigned long)(-125)) {			\
-    errno = -__res;								\
-    __res = -1;									\
-  }										\
-  return (type)__res;								\
-}
+#define LOAD_ARGS_0
+#define LOAD_ARGS_1
+#define LOAD_ARGS_2
+#define LOAD_ARGS_3
+#define LOAD_ARGS_4
+#define LOAD_ARGS_5
+#define LOAD_ARGS_6	"mov.l er5, at -sp\n\tmov.l %6,er5\n\t" \
+			"mov.l er6, at -sp\n\tmov.l %7,er6\n\t"
 
-#define _syscall4(type, name, atype, a, btype, b, ctype, c, dtype, d)		\
-type name(atype a, btype b, ctype c, dtype d)					\
-{										\
-  register long __res __asm__("er0");						\
-  __asm__ __volatile__ ("mov.l	%5, er4\n\t"					\
-			"mov.l	%4, er3\n\t"					\
-			"mov.l	%3, er2\n\t"					\
-  			"mov.l	%2, er1\n\t"					\
-			"mov.l	%1, er0\n\t"					\
-  			"trapa	#0\n\t"						\
-			: "=r" (__res)						\
-			: "ir" (__NR_##name),					\
-			  "g" ((long)a),					\
-			  "g" ((long)b),					\
-			  "g" ((long)c),					\
-			  "g" ((long)d)						\
-			: "cc", "er1", "er2", "er3", "er4");			\
-  if ((unsigned long)(__res) >= (unsigned long)(-125)) {			\
-    errno = -__res;								\
-    __res = -1;									\
-  }										\
-  return (type)__res;								\
-}
+#define RESTORE_ARGS_0
+#define RESTORE_ARGS_1
+#define RESTORE_ARGS_2
+#define RESTORE_ARGS_3
+#define RESTORE_ARGS_4
+#define RESTORE_ARGS_5
+#define RESTORE_ARGS_6	"mov.l @sp+,er6\n\tmov.l @sp+,er5"
 
-#define _syscall5(type, name, atype, a, btype, b, ctype, c, dtype, d, etype, e)	\
-type name(atype a, btype b, ctype c, dtype d, etype e)				\
-{										\
-  register long __res __asm__("er0");						\
-  __asm__ __volatile__ ( \
-                        "mov.l  er5, at -sp\n\t"                                   \
-			"mov.l	%5, er4\n\t"					\
-			"mov.l	%4, er3\n\t"					\
-			"mov.l	%3, er2\n\t"					\
-  			"mov.l	%2, er1\n\t"					\
-			"mov.l	%1, er0\n\t"					\
-			"mov.l	%6, er5\n\t"					\
-  			"trapa	#0\n\t"						\
-                       "mov.l  @sp+,er5\n\t"                                   \
-			: "=r" (__res)						\
-			: "ir" (__NR_##name),					\
-			  "g" ((long)a),					\
-			  "g" ((long)b),					\
-			  "g" ((long)c),					\
-			  "g" ((long)d),					\
-			  "m" ((long)e)						\
-			: "cc", "er1", "er2", "er3", "er4");		        \
-  if ((unsigned long)(__res) >= (unsigned long)(-125)) {		       	\
-    errno = -__res;								\
-    __res = -1;									\
-  }										\
-  return (type)__res;								\
-}
+/* The _NCS variant allows non-constant syscall numbers.  */
+#define INTERNAL_SYSCALL_NCS(name, err, nr, args...) \
+(__extension__ \
+  ({							\
+    register long int er0 __asm__ ("er0");		\
+    SUBSTITUTE_ARGS_##nr(args)				\
+    __asm__ __volatile__ ( 				\
+		LOAD_ARGS_##nr				\
+		"mov.l %1,er0\n\t"			\
+		"trapa #0\n\t"				\
+		RESTORE_ARGS_##nr			\
+		: "=r" (er0)				\
+		: "ir" (name) ASMFMT_##nr		\
+		: "memory"				\
+    );							\
+    (int) er0;						\
+   }) \
+)
 
+#endif /* __ASSEMBLER__ */
+#endif /* _BITS_SYSCALLS_H */
diff --git a/libc/sysdeps/linux/h8300/bits/uClibc_arch_features.h b/libc/sysdeps/linux/h8300/bits/uClibc_arch_features.h
index b76b861..fb430ae 100644
--- a/libc/sysdeps/linux/h8300/bits/uClibc_arch_features.h
+++ b/libc/sysdeps/linux/h8300/bits/uClibc_arch_features.h
@@ -43,6 +43,6 @@
 #define __UCLIBC_HAVE_SIGNED_ZERO__
 
 /* only weird assemblers generally need this */
-#undef __UCLIBC_ASM_LINE_SEP__
+#define __UCLIBC_ASM_LINE_SEP__ !
 
 #endif /* _BITS_UCLIBC_ARCH_FEATURES_H */


More information about the uClibc-cvs mailing list