Browse Source

A few updates.
-Erik

Eric Andersen 21 years ago
parent
commit
8be74df1ae
3 changed files with 160 additions and 191 deletions
  1. 33 180
      include/sys/syscall.h
  2. 0 11
      include/syscall.h
  3. 127 0
      libc/sysdeps/linux/common/sysdep.h

+ 33 - 180
include/sys/syscall.h

@@ -1,182 +1,35 @@
-#ifndef	_SYS_SYSCALL_H
-#define	_SYS_SYSCALL_H
+/* Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
 
-#define	SYS_setup		0 /* Used only by init, to get system going. */
-#define SYS_exit		1
-#define SYS_fork		2
-#define SYS_read		3
-#define SYS_write		4
-#define SYS_open		5
-#define SYS_close		6
-#define SYS_waitpid		7
-#define SYS_creat		8
-#define SYS_link		9
-#define SYS_unlink		10
-#define SYS_execve		11
-#define SYS_chdir		12
-#define SYS_time		13
-#define SYS_mknod		14
-#define SYS_prev_mknod		14
-#define SYS_chmod		15
-#define SYS_chown		16
-#define SYS_break		17
-#define SYS_oldstat		18
-#define SYS_lseek		19
-#define SYS_getpid		20
-#define SYS_mount		21
-#define SYS_umount		22
-#define SYS_setuid		23
-#define SYS_getuid		24
-#define SYS_stime		25
-#define SYS_ptrace		26
-#define SYS_alarm		27
-#define SYS_oldfstat		28
-#define SYS_pause		29
-#define SYS_utime		30
-#define SYS_stty		31
-#define SYS_gtty		32
-#define SYS_access		33
-#define SYS_nice		34
-#define SYS_ftime		35
-#define SYS_sync		36
-#define SYS_kill		37
-#define SYS_rename		38
-#define SYS_mkdir		39
-#define SYS_rmdir		40
-#define SYS_dup			41
-#define SYS_pipe		42
-#define SYS_times		43
-#define SYS_prof		44
-#define SYS_brk			45
-#define SYS_setgid		46
-#define SYS_getgid		47
-#define SYS_signal		48
-#define SYS_geteuid		49
-#define SYS_getegid		50
-#define SYS_acct		51
-#define SYS_phys		52
-#define SYS_lock		53
-#define SYS_ioctl		54
-#define SYS_fcntl		55
-#define SYS_mpx			56
-#define SYS_setpgid		57
-#define SYS_ulimit		58
-#define SYS_oldolduname		59
-#define SYS_umask		60
-#define SYS_chroot		61
-#define SYS_prev_ustat		62
-#define SYS_dup2		63
-#define SYS_getppid		64
-#define SYS_getpgrp		65
-#define SYS_setsid		66
-#define SYS_sigaction		67
-#define SYS_siggetmask		68
-#define SYS_sigsetmask		69
-#define SYS_setreuid		70
-#define SYS_setregid		71
-#define SYS_sigsuspend		72
-#define SYS_sigpending		73
-#define SYS_sethostname		74
-#define SYS_setrlimit		75
-#define SYS_getrlimit		76
-#define SYS_getrusage		77
-#define SYS_gettimeofday	78
-#define SYS_settimeofday	79
-#define SYS_getgroups		80
-#define SYS_setgroups		81
-#define SYS_select		82
-#define SYS_symlink		83
-#define SYS_oldlstat		84
-#define SYS_readlink		85
-#define SYS_uselib		86
-#define SYS_swapon		87
-#define SYS_reboot		88
-#define SYS_readdir		89
-#define SYS_mmap		90
-#define SYS_munmap		91
-#define SYS_truncate		92
-#define SYS_ftruncate		93
-#define SYS_fchmod		94
-#define SYS_fchown		95
-#define SYS_getpriority		96
-#define SYS_setpriority		97
-#define SYS_profil		98
-#define SYS_statfs		99
-#define SYS_fstatfs		100
-#define SYS_ioperm		101
-#define SYS_socketcall		102
-#define SYS_klog		103
-#define SYS_setitimer		104
-#define SYS_getitimer		105
-#define SYS_prev_stat		106
-#define SYS_prev_lstat		107
-#define SYS_prev_fstat		108
-#define SYS_stat		106
-#define SYS_lstat		107
-#define SYS_fstat		108
-#define SYS_olduname		109
-#define SYS_iopl		110
-#define SYS_vhangup		111
-#define SYS_idle		112
-#define SYS_vm86old		113
-#define SYS_wait4		114
-#define SYS_swapoff		115
-#define SYS_sysinfo		116
-#define SYS_ipc			117
-#define SYS_fsync		118
-#define SYS_sigreturn		119
-#define SYS_clone		120
-#define SYS_setdomainname	121
-#define SYS_uname		122
-#define SYS_modify_ldt		123
-#define SYS_adjtimex		124
-#define SYS_mprotect		125
-#define SYS_sigprocmask		126
-#define SYS_create_module	127
-#define SYS_init_module		128
-#define SYS_delete_module	129
-#define SYS_get_kernel_syms	130
-#define SYS_quotactl		131
-#define SYS_getpgid		132
-#define SYS_fchdir		133
-#define SYS_bdflush		134
-#define SYS_sysfs		135
-#define SYS_personality		136
-#define SYS_afs_syscall		137 /* Syscall for Andrew File System */
-#define	SYS_setfsuid		138
-#define	SYS_setfsgid		139
-#define	SYS__llseek		140
-#define SYS_getdents		141
-#define SYS__newselect		142
-#define SYS_flock		143
-#define SYS_syscall_flock	SYS_flock
-#define SYS_msync		144
-#define SYS_readv		145
-#define SYS_syscall_readv	SYS_readv
-#define SYS_writev		146
-#define SYS_syscall_writev	SYS_writev
-#define SYS_getsid		147
-#define SYS_fdatasync		148
-#define SYS__sysctl		149
-#define SYS_mlock		150
-#define SYS_munlock		151
-#define SYS_mlockall		152
-#define SYS_munlockall		153
-#define SYS_sched_setparam	154
-#define SYS_sched_getparam	155
-#define SYS_sched_setscheduler	156
-#define SYS_sched_getscheduler	157
-#define SYS_sched_yield		158
-#define SYS_sched_get_priority_max	159
-#define SYS_sched_get_priority_min	160
-#define SYS_sched_rr_get_interval	161
-#define SYS_nanosleep		162
-#define SYS_mremap		163
-#define SYS_setresuid		164
-#define SYS_getresuid		165
-#define SYS_vm86		166
-#define SYS_query_module	167
-#define SYS_poll		168
-#define SYS_syscall_poll	SYS_poll
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Library General Public License as
+   published by the Free Software Foundation; either version 2 of the
+   License, or (at your option) any later version.
 
-#endif	/* <sys/syscall.h> */
+   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
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with the GNU C Library; see the file COPYING.LIB.  If not,
+   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.  */
+
+#ifndef _SYSCALL_H
+#define _SYSCALL_H	1
+
+/* This file should list the numbers of the system the system knows.
+   But instead of duplicating this we use the information available
+   from the kernel sources.  */
+#include <asm/unistd.h>
+
+#ifndef _LIBC
+/* The Linux kernel header file defines macros `__NR_<name>', but some
+   programs expect the traditional form `SYS_<name>'.  So in building libc
+   we scan the kernel's list and produce <bits/syscall.h> with macros for
+   all the `SYS_' names.  */
+# include <bits/syscall.h>
+#endif
+
+#endif

+ 0 - 11
include/syscall.h

@@ -1,12 +1 @@
-#if 0
-#include <errno.h>
-#endif
-#define __check_errno(__res)    ((__res) >= 0)
-
-#ifdef __mc68000__
-#include <m68k/syscall.h>
-#else
-#include <i386/syscall.h>
-#endif
-
 #include <sys/syscall.h>

+ 127 - 0
libc/sysdeps/linux/common/sysdep.h

@@ -0,0 +1,127 @@
+/* Copyright (C) 1991, 1992 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 Library General Public License as
+published by the Free Software Foundation; either version 2 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
+Library General Public License for more details.
+
+You should have received a copy of the GNU Library General Public
+License along with the GNU C Library; see the file COPYING.LIB.  If
+not, write to the Free Software Foundation, Inc., 675 Mass Ave,
+Cambridge, MA 02139, USA.  */
+
+#include <sys/syscall.h>
+
+/* Not that using a `PASTE' macro loses.  */
+#ifdef	__STDC__
+
+#ifdef __ELF__
+
+#define SYSCALL_WEAK_ALIAS(alias,orig) \
+	.weak alias; \
+	alias=__libc_##orig
+
+/*
+#ifdef _POSIX_THREADS
+*/
+
+#if 1
+
+#ifdef PTHREAD_KERNEL
+
+/* Use the regular ELF conventions about underscores, and provide the
+   weak symbol, as required */
+#define	SYSCALL__(name,args)	PSEUDO (__machdep_sys_##name, name, args) \
+.weak machdep_sys_##name; \
+  machdep_sys_##name = __machdep_sys_##name; \
+.type __machdep_sys_##name,@function; \
+.type machdep_sys_##name,@function; \
+.L__machdep_sys_##name##end: .size __machdep_sys_##name,.L__machdep_sys_##name##end - __machdep_sys_##name
+
+#define	SYSCALL(name,args)	PSEUDO (__machdep_sys_##name, name, args) \
+.weak machdep_sys_##name; \
+  machdep_sys_##name = __machdep_sys_##name; \
+.type __machdep_sys_##name,@function; \
+.type machdep_sys_##name,@function; \
+.L__machdep_sys_##name##end: .size __machdep_sys_##name,.L__machdep_sys_##name##end - __machdep_sys_##name
+
+#else /* PTHREAD_KERNEL */
+
+/* Use the regular ELF conventions about underscores, and provide the
+   weak symbol, as required */
+#define	SYSCALL__(name,args)	PSEUDO (__libc_##name, name, args) \
+.weak __##name; \
+.weak name;  \
+  __##name = __libc_##name; \
+  name = __libc_##name; \
+.type __libc_##name,@function; \
+.type name,@function; \
+.type __##name,@function; \
+.L__libc_##name##end: .size __libc_##name,.L__libc_##name##end - __libc_##name
+
+#define	SYSCALL(name,args)	PSEUDO (__libc_##name, name, args) \
+.weak name; \
+  name = __libc_##name; \
+.type __libc_##name,@function; \
+.type name,@function; \
+.L__libc_##name##end: .size __libc_##name,.L__libc_##name##end - __libc_##name
+
+#endif /* PTHREAD_KERNEL */
+
+#else /* _POSIX_THREADS */
+
+/* Use the regular ELF conventions about underscores, and provide the
+   weak symbol, as required */
+#define	SYSCALL__(name,args)	PSEUDO (__libc_##name, name, args) \
+.weak name;  \
+  __##name = __libc_##name; \
+  name = __libc_##name; \
+.type __libc_##name,@function; \
+.type name,@function; \
+.type __##name,@function; \
+.L__libc_##name##end: .size __libc_##name,.L__libc_##name##end - __libc_##name
+
+#define	SYSCALL(name,args)	PSEUDO (__libc_##name, name, args) \
+  name = __libc_##name; \
+.type __libc_##name,@function; \
+.type name,@function; \
+.L__libc_##name##end: .size __libc_##name,.L__libc_##name##end - __libc_##name
+
+#endif /* _POSIX_THREADS */
+
+#else /* __ELF__ */
+
+#define SYSCALL_WEAK_ALIAS(alias,orig)
+
+/* Regular a.out definition */
+#define	SYSCALL__(name,args)	PSEUDO (__##name, name, args)
+#define	SYSCALL(name,args)	PSEUDO (name, name, args)
+
+#endif /* __ELF__ */
+
+#else  /* __STDC__ */
+
+#define	SYSCALL__(name,args)	PSEUDO (__/**/name, name, args)
+#define	SYSCALL(name,args)	PSEUDO (name, name, args)
+
+#endif /* __STDC__ */
+
+/* Machine-dependent sysdep.h files are expected to define the macro
+   PSEUDO (function_name, syscall_name) to emit assembly code to define the
+   C-callable function FUNCTION_NAME to do system call SYSCALL_NAME.
+   r0 and r1 are the system call outputs.  movl should be defined as
+   an instruction such that "movl r1, r0" works.  ret should be defined
+   as the return instruction.  */
+
+
+#if !defined(HAVE_GNU_LD) && !defined (__ELF__)
+#define	 ___errno	_errno
+#endif
+
+#define	HAVE_SYSCALLS