diff options
Diffstat (limited to 'libc')
| -rw-r--r-- | libc/sysdeps/linux/h8300/bits/byteswap.h | 15 | ||||
| -rw-r--r-- | libc/sysdeps/linux/h8300/bits/fcntl.h | 7 | ||||
| -rw-r--r-- | libc/sysdeps/linux/h8300/bits/kernel_stat.h | 50 | ||||
| -rw-r--r-- | libc/sysdeps/linux/h8300/bits/kernel_types.h | 13 | ||||
| -rw-r--r-- | libc/sysdeps/linux/h8300/bits/syscalls.h | 214 | ||||
| -rw-r--r-- | libc/sysdeps/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 71a66c689..08ca99f83 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 45deec46a..1c653be24 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 5f6c8ae50..000000000 --- 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 4cfd1bf7e..7e7689139 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 5867ed608..b43795f2e 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,@-sp\n\tmov.l %6,er5\n\t" \ +			"mov.l er6,@-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,@-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 b76b861b9..fb430ae9a 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 */ | 
