mirror of
https://sourceware.org/git/glibc.git
synced 2025-07-30 22:43:12 +03:00
* sysdeps/hppa: Directory removed, saved in ports repository.
* sysdeps/mach/hppa: Likewise. * sysdeps/mach/hurd/hppa: Likewise. * sysdeps/unix/sysv/linux/hppa: Likewise. * configure.in (machine): Remove hppa* cases. * configure: Regenerated. * shlib-versions: Remove hppa cases. * sysdeps/m68k: Directory removed, saved in ports repository. * sysdeps/unix/bsd/m68k: Likewise. * sysdeps/unix/sysv/linux/m68k: Likewise. * configure.in (machine): Remove m68* cases. * configure: Regenerated.
This commit is contained in:
@ -1,2 +0,0 @@
|
||||
# linux/hppa does not use -lmilli anymore
|
||||
gnulib := -lgcc
|
@ -1,25 +0,0 @@
|
||||
libc {
|
||||
# The comment lines with "#errlist-compat" are magic; see errlist-compat.awk.
|
||||
# When you get an error from errlist-compat.awk, you need to add a new
|
||||
# version here. Don't do this blindly, since this means changing the ABI
|
||||
# for all GNU/Linux configurations.
|
||||
|
||||
GLIBC_2.1 {
|
||||
#errlist-compat 253
|
||||
_sys_errlist; sys_errlist; _sys_nerr; sys_nerr;
|
||||
}
|
||||
GLIBC_2.2 {
|
||||
# New rlimit interface
|
||||
getrlimit; setrlimit; getrlimit64; setrlimit64;
|
||||
}
|
||||
GLIBC_2.3 {
|
||||
#errlist-compat 254
|
||||
_sys_errlist; sys_errlist; _sys_nerr; sys_nerr;
|
||||
}
|
||||
}
|
||||
librt {
|
||||
GLIBC_2.3 {
|
||||
# AIO functions.
|
||||
aio_cancel; aio_cancel64;
|
||||
}
|
||||
}
|
@ -1,51 +0,0 @@
|
||||
/* Error constants. Linux/HPPA specific version.
|
||||
Copyright (C) 1996,1997,1998,1999,2000,2002 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 Lesser General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 2.1 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
|
||||
Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public
|
||||
License along with the GNU C Library; if not, write to the Free
|
||||
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||
02111-1307 USA. */
|
||||
|
||||
#ifdef _ERRNO_H
|
||||
|
||||
# undef EDOM
|
||||
# undef EILSEQ
|
||||
# undef ERANGE
|
||||
# include <linux/errno.h>
|
||||
|
||||
/* Linux also has no ECANCELED error code. Since it is not used here
|
||||
we define it to an invalid value. */
|
||||
# ifndef ECANCELED
|
||||
# define ECANCELED ECANCELLED
|
||||
# endif
|
||||
|
||||
# ifndef __ASSEMBLER__
|
||||
/* Function to get address of global `errno' variable. */
|
||||
extern int *__errno_location (void) __THROW __attribute__ ((__const__));
|
||||
|
||||
# if !defined _LIBC || defined _LIBC_REENTRANT
|
||||
/* When using threads, errno is a per-thread value. */
|
||||
# define errno (*__errno_location ())
|
||||
# endif
|
||||
# endif /* !__ASSEMBLER__ */
|
||||
#endif /* _ERRNO_H */
|
||||
|
||||
#if !defined _ERRNO_H && defined __need_Emath
|
||||
/* This is ugly but the kernel header is not clean enough. We must
|
||||
define only the values EDOM, EILSEQ and ERANGE in case __need_Emath is
|
||||
defined. */
|
||||
# define EDOM 33 /* Math argument out of domain of function. */
|
||||
# define EILSEQ 47 /* Illegal byte sequence. */
|
||||
# define ERANGE 34 /* Math result not representable. */
|
||||
#endif /* !_ERRNO_H && __need_Emath */
|
@ -1,181 +0,0 @@
|
||||
/* O_*, F_*, FD_* bit values for Linux/HPPA.
|
||||
Copyright (C) 1995,1996,1997,1998,1999,2000,2002,2004
|
||||
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 Lesser General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 2.1 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
|
||||
Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public
|
||||
License along with the GNU C Library; if not, write to the Free
|
||||
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||
02111-1307 USA. */
|
||||
|
||||
#ifndef _FCNTL_H
|
||||
# error "Never use <bits/fcntl.h> directly; include <fcntl.h> instead."
|
||||
#endif
|
||||
|
||||
#include <sys/types.h>
|
||||
|
||||
|
||||
/* open/fcntl - O_SYNC is only implemented on blocks devices and on files
|
||||
located on an ext2 file system */
|
||||
#define O_RDONLY 00000000
|
||||
#define O_WRONLY 00000001
|
||||
#define O_RDWR 00000002
|
||||
#define O_ACCMODE 00000003
|
||||
#define O_APPEND 00000010
|
||||
#define O_BLKSEEK 00000100 /* HPUX only */
|
||||
#define O_CREAT 00000400 /* not fcntl */
|
||||
#define O_TRUNC 00001000 /* not fcntl */
|
||||
#define O_EXCL 00002000 /* not fcntl */
|
||||
#define O_ASYNC 00020000
|
||||
#define O_SYNC 00100000
|
||||
#define O_NONBLOCK 00200004 /* HPUX has separate NDELAY & NONBLOCK */
|
||||
#define O_NDELAY O_NONBLOCK
|
||||
#define O_NOCTTY 00400000 /* not fcntl */
|
||||
|
||||
|
||||
#ifdef __USE_GNU
|
||||
# define O_DIRECT 00040000 /* direct disk access hint - currently ignored */
|
||||
# define O_DIRECTORY 00010000 /* must be a directory */
|
||||
# define O_NOFOLLOW 00000200 /* don't follow links */
|
||||
# define O_NOATIME 04000000 /* Do not set atime. */
|
||||
#endif
|
||||
|
||||
#ifdef __USE_LARGEFILE64
|
||||
# define O_LARGEFILE 00004000
|
||||
#endif
|
||||
|
||||
#if defined __USE_POSIX199309 || defined __USE_UNIX98
|
||||
# define O_DSYNC 01000000 /* HPUX only */
|
||||
# define O_RSYNC 02000000 /* HPUX only */
|
||||
#endif
|
||||
|
||||
/* Values for the second argument to `fcntl'. */
|
||||
#define F_DUPFD 0 /* Duplicate file descriptor. */
|
||||
#define F_GETFD 1 /* Get file descriptor flags. */
|
||||
#define F_SETFD 2 /* Set file descriptor flags. */
|
||||
#define F_GETFL 3 /* Get file status flags. */
|
||||
#define F_SETFL 4 /* Set file status flags. */
|
||||
#ifndef __USE_FILE_OFFSET64
|
||||
# define F_GETLK 5 /* Get record locking info. */
|
||||
# define F_SETLK 6 /* Set record locking info (non-blocking). */
|
||||
# define F_SETLKW 7 /* Set record locking info (blocking). */
|
||||
#else
|
||||
# define F_GETLK F_GETLK64 /* Get record locking info. */
|
||||
# define F_SETLK F_SETLK64 /* Set record locking info (non-blocking). */
|
||||
# define F_SETLKW F_SETLKW64 /* Set record locking info (blocking). */
|
||||
#endif
|
||||
|
||||
#define F_GETLK64 8 /* Get record locking info. */
|
||||
#define F_SETLK64 9 /* Set record locking info (non-blocking). */
|
||||
#define F_SETLKW64 10 /* Set record locking info (blocking). */
|
||||
|
||||
#if defined __USE_BSD || defined __USE_UNIX98
|
||||
# define F_GETOWN 11 /* Get owner of socket (receiver of SIGIO). */
|
||||
# define F_SETOWN 12 /* Set owner of socket (receiver of SIGIO). */
|
||||
#endif
|
||||
|
||||
#ifdef __USE_GNU
|
||||
# define F_SETSIG 13 /* Set number of signal to be sent. */
|
||||
# define F_GETSIG 14 /* Get number of signal to be sent. */
|
||||
#endif
|
||||
|
||||
#ifdef __USE_GNU
|
||||
# define F_SETLEASE 1024 /* Set a lease. */
|
||||
# define F_GETLEASE 1025 /* Enquire what lease is active. */
|
||||
# define F_NOTIFY 1026 /* Request notfications on a directory. */
|
||||
#endif
|
||||
|
||||
/* for F_[GET|SET]FL */
|
||||
#define FD_CLOEXEC 1 /* actually anything with low bit set goes */
|
||||
|
||||
/* For posix fcntl() and `l_type' field of a `struct flock' for lockf(). */
|
||||
#define F_RDLCK 1 /* Read lock. */
|
||||
#define F_WRLCK 2 /* Write lock. */
|
||||
#define F_UNLCK 3 /* Remove lock. */
|
||||
|
||||
/* for old implementation of bsd flock () */
|
||||
#define F_EXLCK 4 /* or 3 */
|
||||
#define F_SHLCK 8 /* or 4 */
|
||||
|
||||
#ifdef __USE_BSD
|
||||
/* operations for bsd flock(), also used by the kernel implementation */
|
||||
# define LOCK_SH 1 /* shared lock */
|
||||
# define LOCK_EX 2 /* exclusive lock */
|
||||
# define LOCK_NB 4 /* or'd with one of the above to prevent
|
||||
blocking */
|
||||
# define LOCK_UN 8 /* remove lock */
|
||||
#endif
|
||||
|
||||
#ifdef __USE_GNU
|
||||
/* Types of directory notifications that may be requested with F_NOTIFY. */
|
||||
# define DN_ACCESS 0x00000001 /* File accessed. */
|
||||
# define DN_MODIFY 0x00000002 /* File modified. */
|
||||
# define DN_CREATE 0x00000004 /* File created. */
|
||||
# define DN_DELETE 0x00000008 /* File removed. */
|
||||
# define DN_RENAME 0x00000010 /* File renamed. */
|
||||
# define DN_ATTRIB 0x00000020 /* File changed attibutes. */
|
||||
# define DN_MULTISHOT 0x80000000 /* Don't remove notifier. */
|
||||
#endif
|
||||
|
||||
struct flock
|
||||
{
|
||||
short int l_type; /* Type of lock: F_RDLCK, F_WRLCK, or F_UNLCK. */
|
||||
short int l_whence; /* Where `l_start' is relative to (like `lseek'). */
|
||||
#ifndef __USE_FILE_OFFSET64
|
||||
__off_t l_start; /* Offset where the lock begins. */
|
||||
__off_t l_len; /* Size of the locked area; zero means until EOF. */
|
||||
#else
|
||||
__off64_t l_start; /* Offset where the lock begins. */
|
||||
__off64_t l_len; /* Size of the locked area; zero means until EOF. */
|
||||
#endif
|
||||
__pid_t l_pid; /* Process holding the lock. */
|
||||
};
|
||||
|
||||
#ifdef __USE_LARGEFILE64
|
||||
struct flock64
|
||||
{
|
||||
short int l_type; /* Type of lock: F_RDLCK, F_WRLCK, or F_UNLCK. */
|
||||
short int l_whence; /* Where `l_start' is relative to (like `lseek'). */
|
||||
__off64_t l_start; /* Offset where the lock begins. */
|
||||
__off64_t l_len; /* Size of the locked area; zero means until EOF. */
|
||||
__pid_t l_pid; /* Process holding the lock. */
|
||||
};
|
||||
#endif
|
||||
|
||||
/* Define some more compatibility macros to be backward compatible with
|
||||
BSD systems which did not managed to hide these kernel macros. */
|
||||
#ifdef __USE_BSD
|
||||
# define FAPPEND O_APPEND
|
||||
# define FFSYNC O_FSYNC
|
||||
# define FASYNC O_ASYNC
|
||||
# define FNONBLOCK O_NONBLOCK
|
||||
# define FNDELAY O_NDELAY
|
||||
#endif /* Use BSD. */
|
||||
|
||||
/* Advise to `posix_fadvise'. */
|
||||
#ifdef __USE_XOPEN2K
|
||||
# define POSIX_FADV_NORMAL 0 /* No further special treatment. */
|
||||
# define POSIX_FADV_RANDOM 1 /* Expect random page references. */
|
||||
# define POSIX_FADV_SEQUENTIAL 2 /* Expect sequential page references. */
|
||||
# define POSIX_FADV_WILLNEED 3 /* Will need these pages. */
|
||||
# define POSIX_FADV_DONTNEED 4 /* Don't need these pages. */
|
||||
# define POSIX_FADV_NOREUSE 5 /* Data will be accessed once. */
|
||||
#endif
|
||||
|
||||
__BEGIN_DECLS
|
||||
|
||||
/* Provide kernel hint to read ahead. */
|
||||
extern ssize_t readahead (int __fd, __off64_t __offset, size_t __count)
|
||||
__THROW;
|
||||
|
||||
__END_DECLS
|
@ -1,37 +0,0 @@
|
||||
/* Copyright (C) 1996, 1997 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 Lesser General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 2.1 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
|
||||
Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public
|
||||
License along with the GNU C Library; if not, write to the Free
|
||||
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||
02111-1307 USA. */
|
||||
|
||||
#ifndef _SYS_IOCTL_H
|
||||
# error "Never use <bits/ioctls.h> directly; include <sys/ioctl.h> instead."
|
||||
#endif
|
||||
|
||||
/* Use the definitions from the kernel header files. */
|
||||
#include <asm/ioctls.h>
|
||||
|
||||
/* Oh well, this is necessary since the kernel data structure is
|
||||
different from the user-level version. */
|
||||
#undef TCGETS
|
||||
#undef TCSETS
|
||||
#undef TCSETSW
|
||||
#undef TCSETSF
|
||||
#define TCGETS _IOR ('T', 16, char[36])
|
||||
#define TCSETS _IOW ('T', 17, char[36])
|
||||
#define TCSETSW _IOW ('T', 18, char[36])
|
||||
#define TCSETSF _IOW ('T', 19, char[36])
|
||||
|
||||
#include <linux/sockios.h>
|
@ -1,63 +0,0 @@
|
||||
/* Copyright (C) 1995-1999, 2000 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 Lesser General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 2.1 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
|
||||
Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public
|
||||
License along with the GNU C Library; if not, write to the Free
|
||||
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||
02111-1307 USA. */
|
||||
|
||||
#ifndef _SYS_IPC_H
|
||||
# error "Never use <bits/ipc.h> directly; include <sys/ipc.h> instead."
|
||||
#endif
|
||||
|
||||
#include <bits/types.h>
|
||||
#include <bits/wordsize.h>
|
||||
|
||||
/* Mode bits for `msgget', `semget', and `shmget'. */
|
||||
#define IPC_CREAT 01000 /* Create key if key does not exist. */
|
||||
#define IPC_EXCL 02000 /* Fail if key exists. */
|
||||
#define IPC_NOWAIT 04000 /* Return error on wait. */
|
||||
|
||||
/* Control commands for `msgctl', `semctl', and `shmctl'. */
|
||||
#define IPC_RMID 0 /* Remove identifier. */
|
||||
#define IPC_SET 1 /* Set `ipc_perm' options. */
|
||||
#define IPC_STAT 2 /* Get `ipc_perm' options. */
|
||||
#ifdef __USE_GNU
|
||||
# define IPC_INFO 3 /* See ipcs. */
|
||||
#endif
|
||||
|
||||
/* Special key values. */
|
||||
#define IPC_PRIVATE ((__key_t) 0) /* Private key. */
|
||||
|
||||
|
||||
/* Data structure used to pass permission information to IPC operations. */
|
||||
struct ipc_perm
|
||||
{
|
||||
__key_t __key; /* Key. */
|
||||
__uid_t uid; /* Owner's user ID. */
|
||||
__gid_t gid; /* Owner's group ID. */
|
||||
__uid_t cuid; /* Creator's user ID. */
|
||||
__gid_t cgid; /* Creator's group ID. */
|
||||
#if __WORDSIZE == 32
|
||||
unsigned short int __pad1;
|
||||
unsigned short int mode; /* Read/write permission. */
|
||||
unsigned short int __pad2;
|
||||
#else
|
||||
__mode_t mode; /* Read/write permission. */
|
||||
unsigned short int __pad2;
|
||||
#endif
|
||||
unsigned short int __seq; /* Sequence number. */
|
||||
unsigned int __pad3;
|
||||
unsigned long long int __unused1;
|
||||
unsigned long long int __unused2;
|
||||
};
|
@ -1,83 +0,0 @@
|
||||
/* Definitions for POSIX memory map interface. Linux/HPPA version.
|
||||
Copyright (C) 1997, 1998, 2000, 2003 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 Lesser General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 2.1 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
|
||||
Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public
|
||||
License along with the GNU C Library; if not, write to the Free
|
||||
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||
02111-1307 USA. */
|
||||
|
||||
#ifndef _SYS_MMAN_H
|
||||
# error "Never use <bits/mman.h> directly; include <sys/mman.h> instead."
|
||||
#endif
|
||||
|
||||
/* these are basically taken from the kernel definitions */
|
||||
|
||||
#define PROT_READ 0x1 /* page can be read */
|
||||
#define PROT_WRITE 0x2 /* page can be written */
|
||||
#define PROT_EXEC 0x4 /* page can be executed */
|
||||
#define PROT_NONE 0x0 /* page can not be accessed */
|
||||
#define PROT_GROWSDOWN 0x01000000 /* Extend change to start of
|
||||
growsdown vma (mprotect only). */
|
||||
#define PROT_GROWSUP 0x02000000 /* Extend change to start of
|
||||
growsup vma (mprotect only). */
|
||||
|
||||
#define MAP_SHARED 0x01 /* Share changes */
|
||||
#define MAP_PRIVATE 0x02 /* Changes are private */
|
||||
#define MAP_TYPE 0x03 /* Mask for type of mapping */
|
||||
#define MAP_FIXED 0x04 /* Interpret addr exactly */
|
||||
#define MAP_ANONYMOUS 0x10 /* don't use a file */
|
||||
|
||||
#define MAP_DENYWRITE 0x0800 /* ETXTBSY */
|
||||
#define MAP_EXECUTABLE 0x1000 /* mark it as an executable */
|
||||
#define MAP_LOCKED 0x2000 /* pages are locked */
|
||||
#define MAP_NORESERVE 0x4000 /* don't check for reservations */
|
||||
#define MAP_GROWSDOWN 0x8000 /* stack-like segment */
|
||||
#define MAP_POPULATE 0x10000 /* populate (prefault) pagetables */
|
||||
#define MAP_NONBLOCK 0x20000 /* do not block on IO */
|
||||
|
||||
#define MS_SYNC 1 /* synchronous memory sync */
|
||||
#define MS_ASYNC 2 /* sync memory asynchronously */
|
||||
#define MS_INVALIDATE 4 /* invalidate the caches */
|
||||
|
||||
#define MCL_CURRENT 1 /* lock all current mappings */
|
||||
#define MCL_FUTURE 2 /* lock all future mappings */
|
||||
|
||||
#define MADV_NORMAL 0 /* no further special treatment */
|
||||
#define MADV_RANDOM 1 /* expect random page references */
|
||||
#define MADV_SEQUENTIAL 2 /* expect sequential page references */
|
||||
#define MADV_WILLNEED 3 /* will need these pages */
|
||||
#define MADV_DONTNEED 4 /* dont need these pages */
|
||||
#define MADV_SPACEAVAIL 5 /* insure that resources are reserved */
|
||||
#define MADV_VPS_PURGE 6 /* Purge pages from VM page cache */
|
||||
#define MADV_VPS_INHERIT 7 /* Inherit parents page size */
|
||||
|
||||
/* The range 12-64 is reserved for page size specification. */
|
||||
#define MADV_4K_PAGES 12 /* Use 4K pages */
|
||||
#define MADV_16K_PAGES 14 /* Use 16K pages */
|
||||
#define MADV_64K_PAGES 16 /* Use 64K pages */
|
||||
#define MADV_256K_PAGES 18 /* Use 256K pages */
|
||||
#define MADV_1M_PAGES 20 /* Use 1 Megabyte pages */
|
||||
#define MADV_4M_PAGES 22 /* Use 4 Megabyte pages */
|
||||
#define MADV_16M_PAGES 24 /* Use 16 Megabyte pages */
|
||||
#define MADV_64M_PAGES 26 /* Use 64 Megabyte pages */
|
||||
|
||||
/* compatibility flags */
|
||||
#define MAP_ANON MAP_ANONYMOUS
|
||||
#define MAP_FILE 0
|
||||
#define MAP_VARIABLE 0
|
||||
|
||||
/* Flags for `mremap'. */
|
||||
#ifdef __USE_GNU
|
||||
# define MREMAP_MAYMOVE 1
|
||||
#endif
|
@ -1,84 +0,0 @@
|
||||
/* Copyright (C) 1995, 1996, 1997, 2000 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 Lesser General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 2.1 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
|
||||
Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public
|
||||
License along with the GNU C Library; if not, write to the Free
|
||||
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||
02111-1307 USA. */
|
||||
|
||||
#ifndef _SYS_MSG_H
|
||||
# error "Never use <bits/msq.h> directly; include <sys/msg.h> instead."
|
||||
#endif
|
||||
|
||||
#include <bits/types.h>
|
||||
#include <bits/wordsize.h>
|
||||
|
||||
/* Define options for message queue functions. */
|
||||
#define MSG_NOERROR 010000 /* no error if message is too big */
|
||||
#ifdef __USE_GNU
|
||||
# define MSG_EXCEPT 020000 /* recv any msg except of specified type */
|
||||
#endif
|
||||
|
||||
/* Types used in the structure definition. */
|
||||
typedef unsigned long int msgqnum_t;
|
||||
typedef unsigned long int msglen_t;
|
||||
|
||||
|
||||
/* Structure of record for one message inside the kernel.
|
||||
The type `struct msg' is opaque. */
|
||||
struct msqid_ds
|
||||
{
|
||||
struct ipc_perm msg_perm; /* structure describing operation permission */
|
||||
#if __WORDSIZE == 32
|
||||
unsigned int __pad1;
|
||||
#endif
|
||||
__time_t msg_stime; /* time of last msgsnd command */
|
||||
#if __WORDSIZE == 32
|
||||
unsigned int __pad2;
|
||||
#endif
|
||||
__time_t msg_rtime; /* time of last msgrcv command */
|
||||
#if __WORDSIZE == 32
|
||||
unsigned int __pad3;
|
||||
#endif
|
||||
__time_t msg_ctime; /* time of last change */
|
||||
unsigned long int __msg_cbytes; /* current number of bytes on queue */
|
||||
msgqnum_t msg_qnum; /* number of messages currently on queue */
|
||||
msglen_t msg_qbytes; /* max number of bytes allowed on queue */
|
||||
__pid_t msg_lspid; /* pid of last msgsnd() */
|
||||
__pid_t msg_lrpid; /* pid of last msgrcv() */
|
||||
unsigned long int __unused1;
|
||||
unsigned long int __unused2;
|
||||
};
|
||||
|
||||
#ifdef __USE_MISC
|
||||
|
||||
# define msg_cbytes __msg_cbytes
|
||||
|
||||
/* ipcs ctl commands */
|
||||
# define MSG_STAT 11
|
||||
# define MSG_INFO 12
|
||||
|
||||
/* buffer for msgctl calls IPC_INFO, MSG_INFO */
|
||||
struct msginfo
|
||||
{
|
||||
int msgpool;
|
||||
int msgmap;
|
||||
int msgmax;
|
||||
int msgmnb;
|
||||
int msgmni;
|
||||
int msgssz;
|
||||
int msgtql;
|
||||
unsigned short int msgseg;
|
||||
};
|
||||
|
||||
#endif /* __USE_MISC */
|
@ -1,92 +0,0 @@
|
||||
/* Copyright (C) 1995, 1996, 1997, 1998, 2000 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 Lesser General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 2.1 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
|
||||
Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public
|
||||
License along with the GNU C Library; if not, write to the Free
|
||||
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||
02111-1307 USA. */
|
||||
|
||||
#ifndef _SYS_SEM_H
|
||||
# error "Never include <bits/sem.h> directly; use <sys/sem.h> instead."
|
||||
#endif
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <bits/wordsize.h>
|
||||
|
||||
/* Flags for `semop'. */
|
||||
#define SEM_UNDO 0x1000 /* undo the operation on exit */
|
||||
|
||||
/* Commands for `semctl'. */
|
||||
#define GETPID 11 /* get sempid */
|
||||
#define GETVAL 12 /* get semval */
|
||||
#define GETALL 13 /* get all semval's */
|
||||
#define GETNCNT 14 /* get semncnt */
|
||||
#define GETZCNT 15 /* get semzcnt */
|
||||
#define SETVAL 16 /* set semval */
|
||||
#define SETALL 17 /* set all semval's */
|
||||
|
||||
|
||||
/* Data structure describing a set of semaphores. */
|
||||
struct semid_ds
|
||||
{
|
||||
struct ipc_perm sem_perm; /* operation permission struct */
|
||||
#if __WORDSIZE == 32
|
||||
unsigned int __pad1;
|
||||
#endif
|
||||
__time_t sem_otime; /* last semop() time */
|
||||
#if __WORDSIZE == 32
|
||||
unsigned int __pad2;
|
||||
#endif
|
||||
__time_t sem_ctime; /* last time changed by semctl() */
|
||||
unsigned long int sem_nsems; /* number of semaphores in set */
|
||||
unsigned long int __unused1;
|
||||
unsigned long int __unused2;
|
||||
};
|
||||
|
||||
/* The user should define a union like the following to use it for arguments
|
||||
for `semctl'.
|
||||
|
||||
union semun
|
||||
{
|
||||
int val; <= value for SETVAL
|
||||
struct semid_ds *buf; <= buffer for IPC_STAT & IPC_SET
|
||||
unsigned short int *array; <= array for GETALL & SETALL
|
||||
struct seminfo *__buf; <= buffer for IPC_INFO
|
||||
};
|
||||
|
||||
Previous versions of this file used to define this union but this is
|
||||
incorrect. One can test the macro _SEM_SEMUN_UNDEFINED to see whether
|
||||
one must define the union or not. */
|
||||
#define _SEM_SEMUN_UNDEFINED 1
|
||||
|
||||
#ifdef __USE_MISC
|
||||
|
||||
/* ipcs ctl cmds */
|
||||
# define SEM_STAT 18
|
||||
# define SEM_INFO 19
|
||||
|
||||
struct seminfo
|
||||
{
|
||||
int semmap;
|
||||
int semmni;
|
||||
int semmns;
|
||||
int semmnu;
|
||||
int semmsl;
|
||||
int semopm;
|
||||
int semume;
|
||||
int semusz;
|
||||
int semvmx;
|
||||
int semaem;
|
||||
};
|
||||
|
||||
#endif /* __USE_MISC */
|
@ -1,107 +0,0 @@
|
||||
/* Copyright (C) 1995, 1996, 1997, 2000, 2002 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 Lesser General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 2.1 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
|
||||
Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public
|
||||
License along with the GNU C Library; if not, write to the Free
|
||||
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||
02111-1307 USA. */
|
||||
|
||||
#ifndef _SYS_SHM_H
|
||||
# error "Never include <bits/shm.h> directly; use <sys/shm.h> instead."
|
||||
#endif
|
||||
|
||||
#include <bits/types.h>
|
||||
#include <bits/wordsize.h>
|
||||
|
||||
/* Permission flag for shmget. */
|
||||
#define SHM_R 0400 /* or S_IRUGO from <linux/stat.h> */
|
||||
#define SHM_W 0200 /* or S_IWUGO from <linux/stat.h> */
|
||||
|
||||
/* Flags for `shmat'. */
|
||||
#define SHM_RDONLY 010000 /* attach read-only else read-write */
|
||||
#define SHM_RND 020000 /* round attach address to SHMLBA */
|
||||
#define SHM_REMAP 040000 /* take-over region on attach */
|
||||
|
||||
/* Commands for `shmctl'. */
|
||||
#define SHM_LOCK 11 /* lock segment (root only) */
|
||||
#define SHM_UNLOCK 12 /* unlock segment (root only) */
|
||||
|
||||
/* Segment low boundary address multiple. */
|
||||
#define SHMLBA 0x00400000 /* address needs to be 4 Mb aligned */
|
||||
|
||||
/* Type to count number of attaches. */
|
||||
typedef unsigned long int shmatt_t;
|
||||
|
||||
/* Data structure describing a set of semaphores. */
|
||||
struct shmid_ds
|
||||
{
|
||||
struct ipc_perm shm_perm; /* operation permission struct */
|
||||
#if __WORDSIZE == 32
|
||||
unsigned int __pad1;
|
||||
#endif
|
||||
__time_t shm_atime; /* time of last shmat() */
|
||||
#if __WORDSIZE == 32
|
||||
unsigned int __pad2;
|
||||
#endif
|
||||
__time_t shm_dtime; /* time of last shmdt() */
|
||||
#if __WORDSIZE == 32
|
||||
unsigned int __pad3;
|
||||
#endif
|
||||
__time_t shm_ctime; /* time of last change by shmctl() */
|
||||
#if __WORDSIZE == 32
|
||||
unsigned int __pad4;
|
||||
#endif
|
||||
size_t shm_segsz; /* size of segment in bytes */
|
||||
__pid_t shm_cpid; /* pid of creator */
|
||||
__pid_t shm_lpid; /* pid of last shmop */
|
||||
shmatt_t shm_nattch; /* number of current attaches */
|
||||
unsigned long int __unused1;
|
||||
unsigned long int __unused2;
|
||||
};
|
||||
|
||||
#ifdef __USE_MISC
|
||||
|
||||
/* ipcs ctl commands */
|
||||
# define SHM_STAT 13
|
||||
# define SHM_INFO 14
|
||||
|
||||
/* shm_mode upper byte flags */
|
||||
# define SHM_DEST 01000 /* segment will be destroyed on last detach */
|
||||
# define SHM_LOCKED 02000 /* segment will not be swapped */
|
||||
# define SHM_HUGETLB 04000 /* segment is mapped via hugetlb */
|
||||
# define SHM_NORESERVE 010000 /* don't check for reservations */
|
||||
|
||||
struct shminfo
|
||||
{
|
||||
unsigned long shmmax;
|
||||
unsigned long shmmin;
|
||||
unsigned long shmmni;
|
||||
unsigned long shmseg;
|
||||
unsigned long shmall;
|
||||
unsigned long __unused1;
|
||||
unsigned long __unused2;
|
||||
unsigned long __unused3;
|
||||
unsigned long __unused4;
|
||||
};
|
||||
|
||||
struct shm_info
|
||||
{
|
||||
int used_ids;
|
||||
unsigned long int shm_tot; /* total allocated shm */
|
||||
unsigned long int shm_rss; /* total resident shm */
|
||||
unsigned long int shm_swp; /* total swapped shm */
|
||||
unsigned long int swap_attempts;
|
||||
unsigned long int swap_successes;
|
||||
};
|
||||
|
||||
#endif /* __USE_MISC */
|
@ -1,75 +0,0 @@
|
||||
/* Definitions for Linux/HPPA sigaction.
|
||||
Copyright (C) 1996, 1997, 2000 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 Lesser General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 2.1 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
|
||||
Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public
|
||||
License along with the GNU C Library; if not, write to the Free
|
||||
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||
02111-1307 USA. */
|
||||
|
||||
#ifndef _SIGNAL_H
|
||||
# error "Never include <bits/sigaction.h> directly; use <signal.h> instead."
|
||||
#endif
|
||||
|
||||
/* Structure describing the action to be taken when a signal arrives. */
|
||||
struct sigaction
|
||||
{
|
||||
/* Signal handler. */
|
||||
#ifdef __USE_POSIX199309
|
||||
union
|
||||
{
|
||||
/* Used if SA_SIGINFO is not set. */
|
||||
__sighandler_t sa_handler;
|
||||
/* Used if SA_SIGINFO is set. */
|
||||
void (*sa_sigaction) (int, siginfo_t *, void *);
|
||||
}
|
||||
__sigaction_handler;
|
||||
# define sa_handler __sigaction_handler.sa_handler
|
||||
# define sa_sigaction __sigaction_handler.sa_sigaction
|
||||
#else
|
||||
__sighandler_t sa_handler;
|
||||
#endif
|
||||
|
||||
/* Special flags. */
|
||||
unsigned long int sa_flags;
|
||||
|
||||
/* Additional set of signals to be blocked. */
|
||||
__sigset_t sa_mask;
|
||||
};
|
||||
|
||||
/* Bits in `sa_flags'. */
|
||||
|
||||
#define SA_NOCLDSTOP 0x00000008 /* Don't send SIGCHLD when children stop. */
|
||||
#define SA_NOCLDWAIT 0x00000080 /* Don't create zombie on child death. */
|
||||
#define SA_SIGINFO 0x00000010 /* Invoke signal-catching function with
|
||||
three arguments instead of one. */
|
||||
#if defined __USE_UNIX98 || defined __USE_MISC
|
||||
# define SA_ONSTACK 0x00000001 /* Use signal stack by using `sa_restorer'. */
|
||||
# define SA_RESETHAND 0x00000004 /* Reset to SIG_DFL on entry to handler. */
|
||||
# define SA_NODEFER 0x00000020 /* Don't automatically block the signal
|
||||
when its handler is being executed. */
|
||||
# define SA_RESTART 0x00000040 /* Restart syscall on signal return. */
|
||||
#endif
|
||||
#ifdef __USE_MISC
|
||||
# define SA_INTERRUPT 0x20000000 /* Historic no-op. */
|
||||
|
||||
/* Some aliases for the SA_ constants. */
|
||||
# define SA_NOMASK SA_NODEFER
|
||||
# define SA_ONESHOT SA_RESETHAND
|
||||
# define SA_STACK SA_ONSTACK
|
||||
#endif
|
||||
|
||||
/* Values for the HOW argument to `sigprocmask'. */
|
||||
#define SIG_BLOCK 0 /* for blocking signals */
|
||||
#define SIG_UNBLOCK 1 /* for unblocking signals */
|
||||
#define SIG_SETMASK 2 /* for setting the signal mask */
|
@ -1,82 +0,0 @@
|
||||
/* Signal number definitions. Linux/HPPA version.
|
||||
Copyright (C) 1995,1996,1997,1998,1999,2003 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 Lesser General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 2.1 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
|
||||
Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public
|
||||
License along with the GNU C Library; if not, write to the Free
|
||||
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||
02111-1307 USA. */
|
||||
|
||||
#ifdef _SIGNAL_H
|
||||
|
||||
/* Fake signal functions. */
|
||||
#define SIG_ERR ((__sighandler_t) -1) /* Error return. */
|
||||
#define SIG_DFL ((__sighandler_t) 0) /* Default action. */
|
||||
#define SIG_IGN ((__sighandler_t) 1) /* Ignore signal. */
|
||||
|
||||
#ifdef __USE_UNIX98
|
||||
# define SIG_HOLD ((__sighandler_t) 2) /* Add signal to hold mask. */
|
||||
#endif
|
||||
|
||||
|
||||
/* Signals. */
|
||||
#define SIGHUP 1 /* Hangup (POSIX). */
|
||||
#define SIGINT 2 /* Interrupt (ANSI). */
|
||||
#define SIGQUIT 3 /* Quit (POSIX). */
|
||||
#define SIGILL 4 /* Illegal instruction (ANSI). */
|
||||
#define SIGTRAP 5 /* Trace trap (POSIX). */
|
||||
#define SIGABRT 6 /* Abort (ANSI). */
|
||||
#define SIGIOT 6 /* IOT trap (4.2 BSD). */
|
||||
#define SIGEMT 7
|
||||
#define SIGFPE 8 /* Floating-point exception (ANSI). */
|
||||
#define SIGKILL 9 /* Kill, unblockable (POSIX). */
|
||||
#define SIGBUS 10 /* BUS error (4.2 BSD). */
|
||||
#define SIGSEGV 11 /* Segmentation violation (ANSI). */
|
||||
#define SIGSYS 12 /* Bad system call. */
|
||||
#define SIGPIPE 13 /* Broken pipe (POSIX). */
|
||||
#define SIGALRM 14 /* Alarm clock (POSIX). */
|
||||
#define SIGTERM 15 /* Termination (ANSI). */
|
||||
#define SIGUSR1 16 /* User-defined signal 1 (POSIX). */
|
||||
#define SIGUSR2 17 /* User-defined signal 2 (POSIX). */
|
||||
#define SIGCLD SIGCHLD /* Same as SIGCHLD (System V). */
|
||||
#define SIGCHLD 18 /* Child status has changed (POSIX). */
|
||||
#define SIGPWR 19 /* Power failure restart (System V). */
|
||||
#define SIGVTALRM 20 /* Virtual alarm clock (4.2 BSD). */
|
||||
#define SIGPROF 21 /* Profiling alarm clock (4.2 BSD). */
|
||||
#define SIGPOLL SIGIO /* Pollable event occurred (System V). */
|
||||
#define SIGIO 22 /* I/O now possible (4.2 BSD). */
|
||||
#define SIGWINCH 23 /* Window size change (4.3 BSD, Sun). */
|
||||
#define SIGSTOP 24 /* Stop, unblockable (POSIX). */
|
||||
#define SIGTSTP 25 /* Keyboard stop (POSIX). */
|
||||
#define SIGCONT 26 /* Continue (POSIX). */
|
||||
#define SIGTTIN 27 /* Background read from tty (POSIX). */
|
||||
#define SIGTTOU 28 /* Background write to tty (POSIX). */
|
||||
#define SIGURG 29 /* Urgent condition on socket (4.2 BSD). */
|
||||
#define SIGLOST 30 /* Operating System Has Lost (HP/UX). */
|
||||
#define SIGUNUSED 31
|
||||
#define SIGXCPU 33 /* CPU limit exceeded (4.2 BSD). */
|
||||
#define SIGXFSZ 34 /* File size limit exceeded (4.2 BSD). */
|
||||
#define SIGSTKFLT 36 /* Stack fault. */
|
||||
|
||||
#define _NSIG 65 /* Biggest signal number + 1
|
||||
(including real-time signals). */
|
||||
|
||||
#define SIGRTMIN (__libc_current_sigrtmin ())
|
||||
#define SIGRTMAX (__libc_current_sigrtmax ())
|
||||
|
||||
/* These are the hard limits of the kernel. These values should not be
|
||||
used directly at user level. */
|
||||
#define __SIGRTMIN 37
|
||||
#define __SIGRTMAX (_NSIG - 1)
|
||||
|
||||
#endif /* <signal.h> included. */
|
@ -1,42 +0,0 @@
|
||||
/* brk system call for Linux/HPPA.
|
||||
Copyright (C) 1995, 1996, 2000, 2001 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 Lesser General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 2.1 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
|
||||
Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public
|
||||
License along with the GNU C Library; if not, write to the Free
|
||||
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||
02111-1307 USA. */
|
||||
|
||||
#include <errno.h>
|
||||
#include <unistd.h>
|
||||
#include <sysdep.h>
|
||||
|
||||
/* This must be initialized data because commons can't have aliases. */
|
||||
void *__curbrk = 0;
|
||||
|
||||
int
|
||||
__brk (void *addr)
|
||||
{
|
||||
void *newbrk;
|
||||
|
||||
__curbrk = newbrk = (void *) INLINE_SYSCALL (brk, 1, addr);
|
||||
|
||||
if (newbrk < addr)
|
||||
{
|
||||
__set_errno (ENOMEM);
|
||||
return -1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
weak_alias (__brk, brk)
|
@ -1,99 +0,0 @@
|
||||
/* Copyright (C) 1996, 1997, 2000 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by David Huggins-Daines <dhd@debian.org>, 2000.
|
||||
Based on the Alpha version by Richard Henderson <rth@tamu.edu>, 1996.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Lesser General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 2.1 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
|
||||
Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public
|
||||
License along with the GNU C Library; if not, write to the Free
|
||||
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||
02111-1307 USA. */
|
||||
|
||||
/* clone() is even more special than fork() as it mucks with stacks
|
||||
and invokes a function in the right context after its all over. */
|
||||
|
||||
#include <asm/unistd.h>
|
||||
#include <sysdep.h>
|
||||
#define _ERRNO_H 1
|
||||
#include <bits/errno.h>
|
||||
|
||||
/* int clone(int (*fn)(void *arg), void *child_stack, int flags, void *arg) */
|
||||
|
||||
.text
|
||||
ENTRY(__clone)
|
||||
/* FIXME: I have no idea how profiling works on hppa. */
|
||||
|
||||
/* Sanity check arguments. */
|
||||
comib,= 0,%arg0,.Lerror /* no NULL function pointers */
|
||||
ldi -EINVAL,%ret0
|
||||
comib,= 0,%arg1,.Lerror /* no NULL stack pointers */
|
||||
nop
|
||||
|
||||
/* Save the fn ptr and arg on the new stack. */
|
||||
stwm %arg0,64(%arg1)
|
||||
stw %arg3,-60(%arg1)
|
||||
|
||||
/* Save the PIC register. */
|
||||
#ifdef PIC
|
||||
stw %r19,-32(%sr0, %sp) /* parent */
|
||||
#endif
|
||||
|
||||
/* Do the system call */
|
||||
copy %arg2,%arg0
|
||||
ble 0x100(%sr2,%r0)
|
||||
ldi __NR_clone,%r20
|
||||
|
||||
ldi -4096,%r1
|
||||
comclr,>>= %r1,%ret0,%r0 /* Note: unsigned compare. */
|
||||
b,n .Lerror
|
||||
|
||||
comib,=,n 0,%ret0,thread_start
|
||||
|
||||
/* Successful return from the parent
|
||||
No need to restore the PIC register,
|
||||
since we return immediately. */
|
||||
|
||||
bv %r0(%rp)
|
||||
nop
|
||||
|
||||
/* Something bad happened -- no child created */
|
||||
.Lerror:
|
||||
|
||||
/* Restore the PIC register on error */
|
||||
#ifdef PIC
|
||||
ldw -32(%sr0, %sp), %r19 /* parent */
|
||||
#endif
|
||||
|
||||
b __syscall_error
|
||||
sub %r0,%ret0,%arg0
|
||||
|
||||
thread_start:
|
||||
|
||||
/* Load up the arguments. */
|
||||
ldw -60(%sr0, %sp),%arg0
|
||||
ldw -64(%sr0, %sp),%r22
|
||||
|
||||
/* $$dyncall fixes childs PIC register */
|
||||
|
||||
/* Call the user's function */
|
||||
bl $$dyncall,%r31
|
||||
copy %r31,%rp
|
||||
|
||||
bl _exit,%rp
|
||||
copy %ret0,%arg0
|
||||
|
||||
/* Die horribly. */
|
||||
iitlbp %r0,(%r0)
|
||||
|
||||
PSEUDO_END(__clone)
|
||||
|
||||
weak_alias (__clone, clone)
|
@ -1 +0,0 @@
|
||||
#include <sysdeps/unix/sysv/linux/i386/fcntl.c>
|
@ -1 +0,0 @@
|
||||
#include <sysdeps/unix/sysv/linux/i386/getdents64.c>
|
@ -1 +0,0 @@
|
||||
#include <sysdeps/unix/sysv/linux/i386/getrlimit64.c>
|
@ -1,18 +0,0 @@
|
||||
/* We have a separate header file here because we do not support
|
||||
SA_RESTORER on hppa. */
|
||||
|
||||
/* This is the sigaction struction from the Linux 2.1.20 kernel. */
|
||||
/* Blah. This is bogus. We don't ever use it. */
|
||||
struct old_kernel_sigaction {
|
||||
__sighandler_t k_sa_handler;
|
||||
unsigned long sa_mask;
|
||||
unsigned long sa_flags;
|
||||
};
|
||||
|
||||
/* This is the sigaction structure from the Linux 2.1.68 kernel. */
|
||||
|
||||
struct kernel_sigaction {
|
||||
__sighandler_t k_sa_handler;
|
||||
unsigned long sa_flags;
|
||||
sigset_t sa_mask;
|
||||
};
|
@ -1,31 +0,0 @@
|
||||
/* definition of "struct stat" from the kernel */
|
||||
struct kernel_stat {
|
||||
unsigned long st_dev; /* dev_t is 32 bits on parisc */
|
||||
unsigned long st_ino; /* 32 bits */
|
||||
unsigned short st_mode; /* 16 bits */
|
||||
unsigned short st_nlink; /* 16 bits */
|
||||
unsigned short st_reserved1; /* old st_uid */
|
||||
unsigned short st_reserved2; /* old st_gid */
|
||||
unsigned long st_rdev;
|
||||
unsigned long st_size;
|
||||
struct timespec st_atim;
|
||||
struct timespec st_mtim;
|
||||
struct timespec st_ctim;
|
||||
long st_blksize;
|
||||
long st_blocks;
|
||||
unsigned long __unused1; /* ACL stuff */
|
||||
unsigned long __unused2; /* network */
|
||||
unsigned long __unused3; /* network */
|
||||
unsigned long __unused4; /* cnodes */
|
||||
unsigned short __unused5; /* netsite */
|
||||
short st_fstype;
|
||||
unsigned long st_realdev;
|
||||
unsigned short st_basemode;
|
||||
unsigned short st_spareshort;
|
||||
unsigned long st_uid;
|
||||
unsigned long st_gid;
|
||||
unsigned long st_spare4[3];
|
||||
};
|
||||
|
||||
#define _HAVE_STAT_NSEC
|
||||
#define _HAVE_STAT64_NSEC
|
@ -1,50 +0,0 @@
|
||||
/* Copyright (C) 1994, 1995, 1996, 1997 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 Lesser General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 2.1 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
|
||||
Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public
|
||||
License along with the GNU C Library; if not, write to the Free
|
||||
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||
02111-1307 USA. */
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <sys/mman.h>
|
||||
#include <errno.h>
|
||||
|
||||
/* Map addresses starting near ADDR and extending for LEN bytes. From
|
||||
OFFSET into the file FD describes according to PROT and FLAGS. If ADDR
|
||||
is nonzero, it is the desired mapping address. If the MAP_FIXED bit is
|
||||
set in FLAGS, the mapping will be at ADDR exactly (which must be
|
||||
page-aligned); otherwise the system chooses a convenient nearby address.
|
||||
The return value is the actual mapping address chosen or MAP_FAILED
|
||||
for errors (in which case `errno' is set). A successful `mmap' call
|
||||
deallocates any previous mapping for the affected region. */
|
||||
|
||||
#include <sysdep.h>
|
||||
|
||||
__ptr_t
|
||||
__mmap (__ptr_t addr, size_t len, int prot, int flags, int fd, off_t offset)
|
||||
{
|
||||
|
||||
__ptr_t ret;
|
||||
|
||||
ret = INLINE_SYSCALL(mmap, 6, addr, len, prot, flags, fd, offset);
|
||||
|
||||
/* check if it's really a negative number */
|
||||
if(((unsigned long)ret & 0xfffff000) == 0xfffff000)
|
||||
return MAP_FAILED;
|
||||
|
||||
return ret;
|
||||
|
||||
}
|
||||
|
||||
strong_alias (__mmap, mmap)
|
@ -1,25 +0,0 @@
|
||||
/* Machine-dependent SIGPROF signal handler. PA-RISC version
|
||||
Copyright (C) 1996, 1997, 2000 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 Lesser General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 2.1 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
|
||||
Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public
|
||||
License along with the GNU C Library; if not, write to the Free
|
||||
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||
02111-1307 USA. */
|
||||
|
||||
static void
|
||||
profil_counter (int signr, siginfo_t *si, struct ucontext *uctx)
|
||||
{
|
||||
unsigned long ip = uctx->uc_mcontext.sc_iaoq[0] & ~0x3;
|
||||
profil_count ((void *) ip);
|
||||
}
|
@ -1,10 +0,0 @@
|
||||
#include <sysdep.h>
|
||||
|
||||
.globl __socket
|
||||
PSEUDO(__socket, socket, 3)
|
||||
|
||||
PSEUDO_END(__socket)
|
||||
|
||||
#ifndef NO_WEAK_ALIAS
|
||||
weak_alias (__socket, socket)
|
||||
#endif
|
@ -1,113 +0,0 @@
|
||||
/* Copyright (C) 1996, 1997, 1999, 2000 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 Lesser General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 2.1 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
|
||||
Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public
|
||||
License along with the GNU C Library; if not, write to the Free
|
||||
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||
02111-1307 USA. */
|
||||
|
||||
#ifndef _SYS_PROCFS_H
|
||||
#define _SYS_PROCFS_H 1
|
||||
|
||||
/* This is somewhat modelled after the file of the same name on SVR4
|
||||
systems. It provides a definition of the core file format for ELF
|
||||
used on Linux. It doesn't have anything to do with the /proc file
|
||||
system, even though Linux has one.
|
||||
|
||||
Anyway, the whole purpose of this file is for GDB and GDB only.
|
||||
Don't read too much into it. Don't use it for anything other than
|
||||
GDB unless you know what you are doing. */
|
||||
|
||||
#include <features.h>
|
||||
#include <signal.h>
|
||||
#include <sys/time.h>
|
||||
#include <sys/types.h>
|
||||
#include <sys/ucontext.h>
|
||||
#include <sys/user.h>
|
||||
#include <asm/elf.h>
|
||||
|
||||
__BEGIN_DECLS
|
||||
|
||||
struct elf_siginfo
|
||||
{
|
||||
int si_signo; /* Signal number. */
|
||||
int si_code; /* Extra code. */
|
||||
int si_errno; /* Errno. */
|
||||
};
|
||||
|
||||
/* Definitions to generate Intel SVR4-like core files. These mostly
|
||||
have the same names as the SVR4 types with "elf_" tacked on the
|
||||
front to prevent clashes with Linux definitions, and the typedef
|
||||
forms have been avoided. This is mostly like the SVR4 structure,
|
||||
but more Linuxy, with things that Linux does not support and which
|
||||
GDB doesn't really use excluded. */
|
||||
|
||||
struct elf_prstatus
|
||||
{
|
||||
struct elf_siginfo pr_info; /* Info associated with signal. */
|
||||
short int pr_cursig; /* Current signal. */
|
||||
unsigned long int pr_sigpend; /* Set of pending signals. */
|
||||
unsigned long int pr_sighold; /* Set of held signals. */
|
||||
__pid_t pr_pid;
|
||||
__pid_t pr_ppid;
|
||||
__pid_t pr_pgrp;
|
||||
__pid_t pr_sid;
|
||||
struct timeval pr_utime; /* User time. */
|
||||
struct timeval pr_stime; /* System time. */
|
||||
struct timeval pr_cutime; /* Cumulative user time. */
|
||||
struct timeval pr_cstime; /* Cumulative system time. */
|
||||
elf_gregset_t pr_reg; /* GP registers. */
|
||||
int pr_fpvalid; /* True if math copro being used. */
|
||||
};
|
||||
|
||||
|
||||
#define ELF_PRARGSZ (80) /* Number of chars for args. */
|
||||
|
||||
struct elf_prpsinfo
|
||||
{
|
||||
char pr_state; /* Numeric process state. */
|
||||
char pr_sname; /* Char for pr_state. */
|
||||
char pr_zomb; /* Zombie. */
|
||||
char pr_nice; /* Nice val. */
|
||||
unsigned long int pr_flag; /* Flags. */
|
||||
unsigned int pr_uid;
|
||||
unsigned int pr_gid;
|
||||
int pr_pid, pr_ppid, pr_pgrp, pr_sid;
|
||||
/* Lots missing */
|
||||
char pr_fname[16]; /* Filename of executable. */
|
||||
char pr_psargs[ELF_PRARGSZ]; /* Initial part of arg list. */
|
||||
};
|
||||
|
||||
|
||||
/* The rest of this file provides the types for emulation of the
|
||||
Solaris <proc_service.h> interfaces that should be implemented by
|
||||
users of libthread_db. */
|
||||
|
||||
/* Addresses. */
|
||||
typedef void *psaddr_t;
|
||||
|
||||
/* Register sets. Linux has different names. */
|
||||
typedef elf_gregset_t prgregset_t;
|
||||
typedef elf_fpregset_t prfpregset_t;
|
||||
|
||||
/* We don't have any differences between processes and threads,
|
||||
therefore have only one PID type. */
|
||||
typedef __pid_t lwpid_t;
|
||||
|
||||
/* Process status and info. In the end we do provide typedefs for them. */
|
||||
typedef struct elf_prstatus prstatus_t;
|
||||
typedef struct elf_prpsinfo prpsinfo_t;
|
||||
|
||||
__END_DECLS
|
||||
|
||||
#endif /* sys/procfs.h */
|
@ -1,67 +0,0 @@
|
||||
/* Copyright (C) 1997, 1998, 2000, 2001 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 Lesser General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 2.1 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
|
||||
Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public
|
||||
License along with the GNU C Library; if not, write to the Free
|
||||
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||
02111-1307 USA. */
|
||||
|
||||
/* Don't rely on this, the interface is currently messed up and may need to
|
||||
be broken to be fixed. */
|
||||
#ifndef _SYS_UCONTEXT_H
|
||||
#define _SYS_UCONTEXT_H 1
|
||||
|
||||
#include <features.h>
|
||||
#include <signal.h>
|
||||
|
||||
/* We need the signal context definitions even if they are not used
|
||||
included in <signal.h>. */
|
||||
#include <bits/sigcontext.h>
|
||||
|
||||
|
||||
/* Type for general register. */
|
||||
typedef unsigned long int greg_t;
|
||||
|
||||
/* Number of general registers. */
|
||||
#define NGREG 80
|
||||
#define NFPREG 32
|
||||
|
||||
/* Container for all general registers. */
|
||||
typedef struct gregset
|
||||
{
|
||||
greg_t g_regs[32];
|
||||
greg_t sr_regs[8];
|
||||
greg_t cr_regs[24];
|
||||
greg_t g_pad[16];
|
||||
} gregset_t;
|
||||
|
||||
/* Container for all FPU registers. */
|
||||
typedef struct fpregset
|
||||
{
|
||||
double fp_dregs[32];
|
||||
} fpregset_t;
|
||||
|
||||
/* Context to describe whole processor state. */
|
||||
typedef struct sigcontext mcontext_t;
|
||||
|
||||
/* Userlevel context. */
|
||||
typedef struct ucontext
|
||||
{
|
||||
unsigned long int uc_flags;
|
||||
struct ucontext *uc_link;
|
||||
stack_t uc_stack;
|
||||
mcontext_t uc_mcontext;
|
||||
__sigset_t uc_sigmask;
|
||||
} ucontext_t;
|
||||
|
||||
#endif /* sys/ucontext.h */
|
@ -1,19 +0,0 @@
|
||||
/* Copyright (C) 1995, 1996, 1998, 2001 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 Lesser General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 2.1 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
|
||||
Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public
|
||||
License along with the GNU C Library; if not, write to the Free
|
||||
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||
02111-1307 USA. */
|
||||
|
||||
/* HPPA implements syscall() in 'C'; see sysdep.c. */
|
@ -1,37 +0,0 @@
|
||||
# File name Caller Syscall name # args Strong name Weak names
|
||||
|
||||
# semaphore and shm system calls
|
||||
msgctl - msgctl i:iip __msgctl msgctl
|
||||
msgget - msgget i:ii __msgget msgget
|
||||
msgrcv - msgrcv Ci:ibnii __msgrcv msgrcv
|
||||
msgsnd - msgsnd Ci:ibni __msgsnd msgsnd
|
||||
shmat - shmat i:ipi __shmat shmat
|
||||
shmctl - shmctl i:iip __shmctl shmctl
|
||||
shmdt - shmdt i:s __shmdt shmdt
|
||||
shmget - shmget i:iii __shmget shmget
|
||||
semop - semop i:ipi __semop semop
|
||||
semtimedop - semtimedop i:ipip semtimedop
|
||||
semget - semget i:iii __semget semget
|
||||
semctl - semctl i:iiii __semctl semctl
|
||||
|
||||
# proper socket implementations:
|
||||
accept - accept Ci:iBN __libc_accept __accept accept
|
||||
bind - bind i:ipi __bind bind
|
||||
connect - connect Ci:ipi __libc_connect __connect_internal __connect connect
|
||||
getpeername - getpeername i:ipp __getpeername getpeername
|
||||
getsockname - getsockname i:ipp __getsockname getsockname
|
||||
getsockopt - getsockopt i:iiiBN __getsockopt getsockopt
|
||||
listen - listen i:ii __listen listen
|
||||
recv - recv Ci:ibni __libc_recv __recv recv
|
||||
recvfrom - recvfrom Ci:ibniBN __libc_recvfrom __recvfrom recvfrom
|
||||
recvmsg - recvmsg Ci:ipi __libc_recvmsg __recvmsg recvmsg
|
||||
send - send Ci:ibni __libc_send __send send
|
||||
sendmsg - sendmsg Ci:ipi __libc_sendmsg __sendmsg sendmsg
|
||||
sendto - sendto Ci:ibnibn __libc_sendto __sendto sendto
|
||||
setsockopt - setsockopt i:iiibn __setsockopt setsockopt
|
||||
shutdown - shutdown i:ii __shutdown shutdown
|
||||
socket - socket i:iii __socket socket
|
||||
socketpair - socketpair i:iiif __socketpair socketpair
|
||||
|
||||
setrlimit - setrlimit i:ip __setrlimit setrlimit
|
||||
getrlimit - getrlimit i:ip __getrlimit getrlimit
|
@ -1,64 +0,0 @@
|
||||
/* Copyright (C) 1997, 1998, 2001, 2003 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 Lesser General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 2.1 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
|
||||
Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public
|
||||
License along with the GNU C Library; if not, write to the Free
|
||||
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||
02111-1307 USA. */
|
||||
|
||||
#include <sysdep.h>
|
||||
#include <errno.h>
|
||||
|
||||
extern int __syscall_error(int err_no);
|
||||
extern int syscall (int sysnum, int arg0, int arg1, int arg2,
|
||||
int arg3, int arg4, int arg5);
|
||||
|
||||
/* This routine is jumped to by all the syscall handlers, to stash
|
||||
an error number into errno. */
|
||||
int
|
||||
__syscall_error (int err_no)
|
||||
{
|
||||
__set_errno (err_no);
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
||||
/* HPPA implements syscall() in 'C'; the assembler version would
|
||||
typically be in syscall.S. Also note that we have INLINE_SYSCALL,
|
||||
INTERNAL_SYSCALL, and all the generated pure assembly syscall wrappers.
|
||||
How often the function is used is unknown. */
|
||||
int
|
||||
syscall (int sysnum, int arg0, int arg1, int arg2, int arg3, int arg4,
|
||||
int arg5)
|
||||
{
|
||||
/* FIXME: Keep this matching INLINE_SYSCALL for hppa */
|
||||
long int __sys_res;
|
||||
{
|
||||
register unsigned long int __res asm("r28");
|
||||
LOAD_ARGS_6 (arg0, arg1, arg2, arg3, arg4, arg5)
|
||||
asm volatile (STW_ASM_PIC
|
||||
" ble 0x100(%%sr2, %%r0) \n"
|
||||
" copy %1, %%r20 \n"
|
||||
LDW_ASM_PIC
|
||||
: "=r" (__res)
|
||||
: "r" (sysnum) ASM_ARGS_6
|
||||
: CALL_CLOB_REGS CLOB_ARGS_6);
|
||||
__sys_res = __res;
|
||||
}
|
||||
if ((unsigned long int) __sys_res >= (unsigned long int) -4095)
|
||||
{
|
||||
__set_errno (-__sys_res);
|
||||
__sys_res = -1;
|
||||
}
|
||||
return __sys_res;
|
||||
}
|
@ -1,419 +0,0 @@
|
||||
/* Assembler macros for PA-RISC.
|
||||
Copyright (C) 1999, 2001, 2002, 2003 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by Ulrich Drepper, <drepper@cygnus.com>, August 1999.
|
||||
Linux/PA-RISC changes by Philipp Rumpf, <prumpf@tux.org>, March 2000.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Lesser General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 2.1 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
|
||||
Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public
|
||||
License along with the GNU C Library; if not, write to the Free
|
||||
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||
02111-1307 USA. */
|
||||
|
||||
#include <asm/unistd.h>
|
||||
#include <sysdeps/generic/sysdep.h>
|
||||
#include <sys/syscall.h>
|
||||
#include "config.h"
|
||||
|
||||
#ifndef ASM_LINE_SEP
|
||||
# define ASM_LINE_SEP ;
|
||||
#endif
|
||||
|
||||
#undef SYS_ify
|
||||
#define SYS_ify(syscall_name) (__NR_##syscall_name)
|
||||
|
||||
#ifdef PIC
|
||||
/* WARNING: CANNOT BE USED IN A NOP! */
|
||||
# define STW_PIC stw %r19, -32(%sr0, %sp) ASM_LINE_SEP
|
||||
# define LDW_PIC ldw -32(%sr0, %sp), %r19 ASM_LINE_SEP
|
||||
# define STW_ASM_PIC " copy %%r19, %%r4\n"
|
||||
# define LDW_ASM_PIC " copy %%r4, %%r19\n"
|
||||
# define USING_GR4 "%r4",
|
||||
#else
|
||||
# define STW_PIC ASM_LINE_SEP
|
||||
# define LDW_PIC ASM_LINE_SEP
|
||||
# define STW_ASM_PIC " \n"
|
||||
# define LDW_ASM_PIC " \n"
|
||||
# define USING_GR4
|
||||
#endif
|
||||
|
||||
#ifdef __ASSEMBLER__
|
||||
|
||||
/* Syntactic details of assembler. */
|
||||
|
||||
#define ALIGNARG(log2) log2
|
||||
|
||||
/* For Linux we can use the system call table in the header file
|
||||
/usr/include/asm/unistd.h
|
||||
of the kernel. But these symbols do not follow the SYS_* syntax
|
||||
so we have to redefine the `SYS_ify' macro here. */
|
||||
#undef SYS_ify
|
||||
#define SYS_ify(syscall_name) __NR_##syscall_name
|
||||
|
||||
/* ELF-like local names start with `.L'. */
|
||||
#undef L
|
||||
#define L(name) .L##name
|
||||
|
||||
/* Linux uses a negative return value to indicate syscall errors,
|
||||
unlike most Unices, which use the condition codes' carry flag.
|
||||
|
||||
Since version 2.1 the return value of a system call might be
|
||||
negative even if the call succeeded. E.g., the `lseek' system call
|
||||
might return a large offset. Therefore we must not anymore test
|
||||
for < 0, but test for a real error by making sure the value in %eax
|
||||
is a real error number. Linus said he will make sure the no syscall
|
||||
returns a value in -1 .. -4095 as a valid result so we can safely
|
||||
test with -4095. */
|
||||
|
||||
/* We don't want the label for the error handle to be global when we define
|
||||
it here. */
|
||||
#ifdef PIC
|
||||
# define SYSCALL_ERROR_LABEL 0f
|
||||
#else
|
||||
# define SYSCALL_ERROR_LABEL syscall_error
|
||||
#endif
|
||||
|
||||
/* Define an entry point visible from C.
|
||||
|
||||
There is currently a bug in gdb which prevents us from specifying
|
||||
incomplete stabs information. Fake some entries here which specify
|
||||
the current source file. */
|
||||
#define ENTRY(name) \
|
||||
.text ASM_LINE_SEP \
|
||||
.export C_SYMBOL_NAME(name) ASM_LINE_SEP \
|
||||
.type C_SYMBOL_NAME(name),@function ASM_LINE_SEP \
|
||||
C_LABEL(name) ASM_LINE_SEP \
|
||||
CALL_MCOUNT ASM_LINE_SEP
|
||||
|
||||
#undef END
|
||||
#define END(name) \
|
||||
1: ASM_LINE_SEP \
|
||||
.size C_SYMBOL_NAME(name),1b-C_SYMBOL_NAME(name) ASM_LINE_SEP
|
||||
|
||||
/* If compiled for profiling, call `mcount' at the start of each function. */
|
||||
/* No, don't bother. gcc will put the call in for us. */
|
||||
#define CALL_MCOUNT /* Do nothing. */
|
||||
|
||||
/* syscall wrappers consist of
|
||||
#include <sysdep.h>
|
||||
PSEUDO(...)
|
||||
ret
|
||||
PSEUDO_END(...)
|
||||
|
||||
which means
|
||||
ENTRY(name)
|
||||
DO_CALL(...)
|
||||
nop
|
||||
bv 0(2)
|
||||
nop
|
||||
*/
|
||||
|
||||
#define PSEUDO(name, syscall_name, args) \
|
||||
ENTRY (name) \
|
||||
DO_CALL(syscall_name, args) ASM_LINE_SEP \
|
||||
nop ASM_LINE_SEP
|
||||
|
||||
#define ret \
|
||||
/* Return value set by ERRNO code */ ASM_LINE_SEP \
|
||||
bv 0(2) ASM_LINE_SEP \
|
||||
nop ASM_LINE_SEP
|
||||
|
||||
#undef PSEUDO_END
|
||||
#define PSEUDO_END(name) \
|
||||
END (name)
|
||||
|
||||
/* We don't set the errno on the return from the syscall */
|
||||
#define PSEUDO_NOERRNO(name, syscall_name, args) \
|
||||
ENTRY (name) \
|
||||
DO_CALL_NOERRNO(syscall_name, args) ASM_LINE_SEP \
|
||||
nop ASM_LINE_SEP
|
||||
|
||||
#define ret_NOERRNO ret
|
||||
|
||||
#undef PSEUDO_END_NOERRNO
|
||||
#define PSEUDO_END_NOERRNO(name) \
|
||||
END (name)
|
||||
|
||||
/* This has to return the error value */
|
||||
#undef PSEUDO_ERRVAL
|
||||
#define PSEUDO_ERRVAL(name, syscall_name, args) \
|
||||
ENTRY(name) \
|
||||
DO_CALL_ERRVAL(syscall_name, args) ASM_LINE_SEP \
|
||||
nop ASM_LINE_SEP
|
||||
|
||||
#define ret_ERRVAL ret
|
||||
|
||||
#undef PSEUDO_END_ERRVAL
|
||||
#define PSEUDO_END_ERRVAL(name) \
|
||||
END(name)
|
||||
|
||||
#undef JUMPTARGET
|
||||
#define JUMPTARGET(name) name
|
||||
#define SYSCALL_PIC_SETUP /* Nothing. */
|
||||
|
||||
|
||||
/* All the syscall assembly macros rely on finding the approriate
|
||||
SYSCALL_ERROR_LABEL or rather HANDLER. */
|
||||
|
||||
/* int * __errno_location(void) so you have to store your value
|
||||
into the return address! */
|
||||
#define DEFAULT_SYSCALL_ERROR_HANDLER \
|
||||
.import __errno_location,code ASM_LINE_SEP \
|
||||
/* branch to errno handler */ ASM_LINE_SEP \
|
||||
bl __errno_location,%rp ASM_LINE_SEP
|
||||
|
||||
/* Here are the myriad of configuration options that the above can
|
||||
work for... what we've done is provide the framework for future
|
||||
changes if required to each section */
|
||||
|
||||
#ifdef PIC
|
||||
# if RTLD_PRIVATE_ERRNO
|
||||
# define SYSCALL_ERROR_HANDLER DEFAULT_SYSCALL_ERROR_HANDLER
|
||||
# else /* !RTLD_PRIVATE_ERRNO */
|
||||
# if defined _LIBC_REENTRANT
|
||||
# define SYSCALL_ERROR_HANDLER DEFAULT_SYSCALL_ERROR_HANDLER
|
||||
# else /* !_LIBC_REENTRANT */
|
||||
# define SYSCALL_ERROR_HANDLER DEFAULT_SYSCALL_ERROR_HANDLER
|
||||
# endif /* _LIBC_REENTRANT */
|
||||
# endif /* RTLD_PRIVATE_ERRNO */
|
||||
#else
|
||||
# ifndef _LIBC_REENTRANT
|
||||
# define SYSCALL_ERROR_HANDLER DEFAULT_SYSCALL_ERROR_HANDLER
|
||||
# else
|
||||
# define SYSCALL_ERROR_HANDLER DEFAULT_SYSCALL_ERROR_HANDLER
|
||||
# endif
|
||||
#endif
|
||||
|
||||
|
||||
/* Linux takes system call arguments in registers:
|
||||
syscall number gr20
|
||||
arg 1 gr26
|
||||
arg 2 gr25
|
||||
arg 3 gr24
|
||||
arg 4 gr23
|
||||
arg 5 gr22
|
||||
arg 6 gr21
|
||||
|
||||
The compiler calls us by the C convention:
|
||||
syscall number in the DO_CALL macro
|
||||
arg 1 gr26
|
||||
arg 2 gr25
|
||||
arg 3 gr24
|
||||
arg 4 gr23
|
||||
arg 5 -52(gr30)
|
||||
arg 6 -56(gr30)
|
||||
|
||||
gr22 and gr21 are caller-saves, so we can just load the arguments
|
||||
there and generally be happy. */
|
||||
|
||||
/* the cmpb...no_error code below inside DO_CALL
|
||||
* is intended to mimic the if (__sys_res...)
|
||||
* code inside INLINE_SYSCALL
|
||||
*/
|
||||
|
||||
#undef DO_CALL
|
||||
#define DO_CALL(syscall_name, args) \
|
||||
DOARGS_##args ASM_LINE_SEP \
|
||||
STW_PIC ASM_LINE_SEP \
|
||||
/* Do syscall, delay loads # */ ASM_LINE_SEP \
|
||||
ble 0x100(%sr2,%r0) ASM_LINE_SEP \
|
||||
ldi SYS_ify (syscall_name), %r20 ASM_LINE_SEP \
|
||||
ldi -0x1000,%r1 ASM_LINE_SEP \
|
||||
cmpb,>>=,n %r1,%ret0,0f ASM_LINE_SEP \
|
||||
/* save rp or we get lost */ ASM_LINE_SEP \
|
||||
stw %rp, -20(%sr0,%sp) ASM_LINE_SEP \
|
||||
/* Restore r19 from frame */ ASM_LINE_SEP \
|
||||
LDW_PIC ASM_LINE_SEP \
|
||||
stw %ret0, -24(%sr0,%sp) ASM_LINE_SEP \
|
||||
SYSCALL_ERROR_HANDLER ASM_LINE_SEP \
|
||||
/* create frame */ ASM_LINE_SEP \
|
||||
ldo 64(%sp), %sp ASM_LINE_SEP \
|
||||
ldo -64(%sp), %sp ASM_LINE_SEP \
|
||||
/* OPTIMIZE: Don't reload r19 */ ASM_LINE_SEP \
|
||||
/* do a -1*syscall_ret0 */ ASM_LINE_SEP \
|
||||
ldw -24(%sr0,%sp), %r26 ASM_LINE_SEP \
|
||||
sub %r0, %r26, %r26 ASM_LINE_SEP \
|
||||
/* Store into errno location */ ASM_LINE_SEP \
|
||||
stw %r26, 0(%sr0,%ret0) ASM_LINE_SEP \
|
||||
/* return -1 as error */ ASM_LINE_SEP \
|
||||
ldo -1(%r0), %ret0 ASM_LINE_SEP \
|
||||
ldw -20(%sr0,%sp), %rp ASM_LINE_SEP \
|
||||
0: ASM_LINE_SEP \
|
||||
UNDOARGS_##args ASM_LINE_SEP
|
||||
|
||||
/* We do nothing with the return, except hand it back to someone else */
|
||||
#undef DO_CALL_NOERRNO
|
||||
#define DO_CALL_NOERRNO(syscall_name, args) \
|
||||
DOARGS_##args \
|
||||
/* No need to store r19 */ ASM_LINE_SEP \
|
||||
ble 0x100(%sr2,%r0) ASM_LINE_SEP \
|
||||
ldi SYS_ify (syscall_name), %r20 ASM_LINE_SEP \
|
||||
/* Caller will restore r19 */ ASM_LINE_SEP \
|
||||
UNDOARGS_##args
|
||||
|
||||
/* Here, we return the ERRVAL in assembly, note we don't call the
|
||||
error handler function, but we do 'negate' the return _IF_
|
||||
it's an error. Not sure if this is the right semantic. */
|
||||
|
||||
#undef DO_CALL_ERRVAL
|
||||
#define DO_CALL_ERRVAL(syscall_name, args) \
|
||||
DOARGS_##args ASM_LINE_SEP \
|
||||
/* No need to store r19 */ ASM_LINE_SEP \
|
||||
ble 0x100(%sr2,%r0) ASM_LINE_SEP \
|
||||
ldi SYS_ify (syscall_name), %r20 ASM_LINE_SEP \
|
||||
/* Caller will restore r19 */ ASM_LINE_SEP \
|
||||
ldi -0x1000,%r1 ASM_LINE_SEP \
|
||||
cmpb,>>=,n %r1,%ret0,0f ASM_LINE_SEP \
|
||||
sub %r0, %ret0, %ret0 ASM_LINE_SEP \
|
||||
0: ASM_LINE_SEP \
|
||||
UNDOARGS_##args ASM_LINE_SEP
|
||||
|
||||
#define DOARGS_0 /* nothing */
|
||||
#define DOARGS_1 /* nothing */
|
||||
#define DOARGS_2 /* nothing */
|
||||
#define DOARGS_3 /* nothing */
|
||||
#define DOARGS_4 /* nothing */
|
||||
#define DOARGS_5 ldw -52(%r30), %r22 ASM_LINE_SEP
|
||||
#define DOARGS_6 ldw -52(%r30), %r22 ASM_LINE_SEP \
|
||||
ldw -56(%r30), %r21 ASM_LINE_SEP
|
||||
|
||||
|
||||
#define UNDOARGS_0 /* nothing */
|
||||
#define UNDOARGS_1 /* nothing */
|
||||
#define UNDOARGS_2 /* nothing */
|
||||
#define UNDOARGS_3 /* nothing */
|
||||
#define UNDOARGS_4 /* nothing */
|
||||
#define UNDOARGS_5 /* nothing */
|
||||
#define UNDOARGS_6 /* nothing */
|
||||
|
||||
#else
|
||||
|
||||
/* GCC has to be warned that a syscall may clobber all the ABI
|
||||
registers listed as "caller-saves", see page 8, Table 2
|
||||
in section 2.2.6 of the PA-RISC RUN-TIME architecture
|
||||
document. However! r28 is the result and will conflict with
|
||||
the clobber list so it is left out. Also the input arguments
|
||||
registers r20 -> r26 will conflict with the list so they
|
||||
are treated specially. Although r19 is clobbered by the syscall
|
||||
we cannot say this because it would violate ABI, thus we say
|
||||
r4 is clobbered and use that register to save/restore r19
|
||||
across the syscall. */
|
||||
|
||||
#define CALL_CLOB_REGS "%r1", "%r2", USING_GR4 \
|
||||
"%r20", "%r29", "%r31"
|
||||
|
||||
#undef INLINE_SYSCALL
|
||||
#define INLINE_SYSCALL(name, nr, args...) ({ \
|
||||
long __sys_res; \
|
||||
{ \
|
||||
register unsigned long __res asm("r28"); \
|
||||
LOAD_ARGS_##nr(args) \
|
||||
/* FIXME: HACK stw/ldw r19 around syscall */ \
|
||||
asm volatile( \
|
||||
STW_ASM_PIC \
|
||||
" ble 0x100(%%sr2, %%r0)\n" \
|
||||
" ldi %1, %%r20\n" \
|
||||
LDW_ASM_PIC \
|
||||
: "=r" (__res) \
|
||||
: "i" (SYS_ify(name)) ASM_ARGS_##nr \
|
||||
: CALL_CLOB_REGS CLOB_ARGS_##nr \
|
||||
); \
|
||||
__sys_res = (long)__res; \
|
||||
} \
|
||||
if ( (unsigned long)__sys_res >= (unsigned long)-4095 ){ \
|
||||
__set_errno(-__sys_res); \
|
||||
__sys_res = -1; \
|
||||
} \
|
||||
__sys_res; \
|
||||
})
|
||||
|
||||
/* INTERNAL_SYSCALL_DECL - Allows us to setup some function static
|
||||
value to use within the context of the syscall
|
||||
INTERNAL_SYSCALL_ERROR_P - Returns 0 if it wasn't an error, 1 otherwise
|
||||
You are allowed to use the syscall result (val) and the DECL error variable
|
||||
to determine what went wrong.
|
||||
INTERLAL_SYSCALL_ERRNO - Munges the val/err pair into the error number.
|
||||
In our case we just flip the sign. */
|
||||
|
||||
#undef INTERNAL_SYSCALL_DECL
|
||||
#define INTERNAL_SYSCALL_DECL(err) do { } while (0)
|
||||
|
||||
/* Equivalent to (val < 0)&&(val > -4095) which is what we want */
|
||||
#undef INTERNAL_SYSCALL_ERROR_P
|
||||
#define INTERNAL_SYSCALL_ERROR_P(val, err) \
|
||||
((unsigned long)val >= (unsigned long)-4095)
|
||||
|
||||
#undef INTERNAL_SYSCALL_ERRNO
|
||||
#define INTERNAL_SYSCALL_ERRNO(val, err) (-(val))
|
||||
|
||||
/* Similar to INLINE_SYSCALL but we don't set errno */
|
||||
#undef INTERNAL_SYSCALL
|
||||
#define INTERNAL_SYSCALL(name, err, nr, args...) \
|
||||
({ \
|
||||
long __sys_res; \
|
||||
{ \
|
||||
register unsigned long __res asm("r28"); \
|
||||
LOAD_ARGS_##nr(args) \
|
||||
/* FIXME: HACK stw/ldw r19 around syscall */ \
|
||||
asm volatile( \
|
||||
STW_ASM_PIC \
|
||||
" ble 0x100(%%sr2, %%r0)\n" \
|
||||
" ldi %1, %%r20\n" \
|
||||
LDW_ASM_PIC \
|
||||
: "=r" (__res) \
|
||||
: "i" (SYS_ify(name)) ASM_ARGS_##nr \
|
||||
: CALL_CLOB_REGS CLOB_ARGS_##nr \
|
||||
); \
|
||||
__sys_res = (long)__res; \
|
||||
} \
|
||||
__sys_res; \
|
||||
})
|
||||
|
||||
#define LOAD_ARGS_0()
|
||||
#define LOAD_ARGS_1(r26) \
|
||||
register unsigned long __r26 __asm__("r26") = (unsigned long)(r26); \
|
||||
LOAD_ARGS_0()
|
||||
#define LOAD_ARGS_2(r26,r25) \
|
||||
register unsigned long __r25 __asm__("r25") = (unsigned long)(r25); \
|
||||
LOAD_ARGS_1(r26)
|
||||
#define LOAD_ARGS_3(r26,r25,r24) \
|
||||
register unsigned long __r24 __asm__("r24") = (unsigned long)(r24); \
|
||||
LOAD_ARGS_2(r26,r25)
|
||||
#define LOAD_ARGS_4(r26,r25,r24,r23) \
|
||||
register unsigned long __r23 __asm__("r23") = (unsigned long)(r23); \
|
||||
LOAD_ARGS_3(r26,r25,r24)
|
||||
#define LOAD_ARGS_5(r26,r25,r24,r23,r22) \
|
||||
register unsigned long __r22 __asm__("r22") = (unsigned long)(r22); \
|
||||
LOAD_ARGS_4(r26,r25,r24,r23)
|
||||
#define LOAD_ARGS_6(r26,r25,r24,r23,r22,r21) \
|
||||
register unsigned long __r21 __asm__("r21") = (unsigned long)(r21); \
|
||||
LOAD_ARGS_5(r26,r25,r24,r23,r22)
|
||||
|
||||
/* Even with zero args we use r20 for the syscall number */
|
||||
#define ASM_ARGS_0
|
||||
#define ASM_ARGS_1 ASM_ARGS_0, "r" (__r26)
|
||||
#define ASM_ARGS_2 ASM_ARGS_1, "r" (__r25)
|
||||
#define ASM_ARGS_3 ASM_ARGS_2, "r" (__r24)
|
||||
#define ASM_ARGS_4 ASM_ARGS_3, "r" (__r23)
|
||||
#define ASM_ARGS_5 ASM_ARGS_4, "r" (__r22)
|
||||
#define ASM_ARGS_6 ASM_ARGS_5, "r" (__r21)
|
||||
|
||||
/* The registers not listed as inputs but clobbered */
|
||||
#define CLOB_ARGS_6
|
||||
#define CLOB_ARGS_5 CLOB_ARGS_6, "%r21"
|
||||
#define CLOB_ARGS_4 CLOB_ARGS_5, "%r22"
|
||||
#define CLOB_ARGS_3 CLOB_ARGS_4, "%r23"
|
||||
#define CLOB_ARGS_2 CLOB_ARGS_3, "%r24"
|
||||
#define CLOB_ARGS_1 CLOB_ARGS_2, "%r25"
|
||||
#define CLOB_ARGS_0 CLOB_ARGS_1, "%r26"
|
||||
|
||||
#endif /* __ASSEMBLER__ */
|
@ -1,31 +0,0 @@
|
||||
/* Copyright (C) 2000, 2001 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by David Huggins-Daines <dhd@debian.org>, 2000.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Lesser General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 2.1 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
|
||||
Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public
|
||||
License along with the GNU C Library; if not, write to the Free
|
||||
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||
02111-1307 USA. */
|
||||
|
||||
/* Since we don't have an oldumount system call, do what the kernel
|
||||
does down here. */
|
||||
|
||||
extern long int __umount2 (const char *name, int flags);
|
||||
|
||||
long int
|
||||
__umount (const char *name)
|
||||
{
|
||||
return __umount2 (name, 0);
|
||||
}
|
||||
|
||||
weak_alias (__umount, umount);
|
@ -1,17 +0,0 @@
|
||||
# Linux/m68k uses Motorola asm syntax and the ELF format.
|
||||
|
||||
m68k-syntax-flag = -DMOTOROLA_SYNTAX
|
||||
|
||||
ifeq ($(subdir),misc)
|
||||
sysdep_routines += mremap
|
||||
sysdep_headers += sys/reg.h
|
||||
endif
|
||||
|
||||
ifeq ($(subdir),elf)
|
||||
sysdep-others += lddlibc4
|
||||
install-bin += lddlibc4
|
||||
endif
|
||||
|
||||
ifeq ($(subdir),resource)
|
||||
sysdep_routines += oldgetrlimit64
|
||||
endif
|
@ -1,32 +0,0 @@
|
||||
libc {
|
||||
GLIBC_2.0 {
|
||||
# Exception handling support functions from libgcc
|
||||
__register_frame; __register_frame_table; __deregister_frame;
|
||||
__frame_state_for; __register_frame_info_table;
|
||||
|
||||
# c*
|
||||
cacheflush;
|
||||
}
|
||||
GLIBC_2.2 {
|
||||
# functions used in other libraries
|
||||
__xstat64; __fxstat64; __lxstat64;
|
||||
|
||||
# a*
|
||||
alphasort64;
|
||||
|
||||
# g*
|
||||
glob64;
|
||||
|
||||
# New rlimit interface
|
||||
getrlimit; setrlimit; getrlimit64;
|
||||
|
||||
# r*
|
||||
readdir64; readdir64_r;
|
||||
|
||||
# s*
|
||||
scandir64;
|
||||
|
||||
# v*
|
||||
versionsort64;
|
||||
}
|
||||
}
|
@ -1 +0,0 @@
|
||||
#include <sysdeps/unix/sysv/linux/i386/alphasort64.c>
|
@ -1,3 +0,0 @@
|
||||
#ifndef __A_OUT_GNU_H__
|
||||
# error "Never use <bits/a.out.h> directly; include <a.out.h> instead."
|
||||
#endif
|
@ -1,188 +0,0 @@
|
||||
/* O_*, F_*, FD_* bit values for Linux.
|
||||
Copyright (C) 2000, 2004 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 Lesser General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 2.1 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
|
||||
Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public
|
||||
License along with the GNU C Library; if not, write to the Free
|
||||
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||
02111-1307 USA. */
|
||||
|
||||
#ifndef _FCNTL_H
|
||||
# error "Never use <bits/fcntl.h> directly; include <fcntl.h> instead."
|
||||
#endif
|
||||
|
||||
|
||||
#include <sys/types.h>
|
||||
|
||||
/* open/fcntl - O_SYNC is only implemented on blocks devices and on files
|
||||
located on an ext2 file system */
|
||||
#define O_ACCMODE 0003
|
||||
#define O_RDONLY 00
|
||||
#define O_WRONLY 01
|
||||
#define O_RDWR 02
|
||||
#define O_CREAT 0100 /* not fcntl */
|
||||
#define O_EXCL 0200 /* not fcntl */
|
||||
#define O_NOCTTY 0400 /* not fcntl */
|
||||
#define O_TRUNC 01000 /* not fcntl */
|
||||
#define O_APPEND 02000
|
||||
#define O_NONBLOCK 04000
|
||||
#define O_NDELAY O_NONBLOCK
|
||||
#define O_SYNC 010000
|
||||
#define O_FSYNC O_SYNC
|
||||
#define O_ASYNC 020000
|
||||
|
||||
#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_NOATIME 01000000 /* Do not set atime. */
|
||||
#endif
|
||||
|
||||
/* For now Linux has synchronisity options for data and read operations.
|
||||
We define the symbols here but let them do the same as O_SYNC since
|
||||
this is a superset. */
|
||||
#if defined __USE_POSIX199309 || defined __USE_UNIX98
|
||||
# define O_DSYNC O_SYNC /* Synchronize data. */
|
||||
# define O_RSYNC O_SYNC /* Synchronize read operations. */
|
||||
#endif
|
||||
|
||||
#ifdef __USE_LARGEFILE64
|
||||
# define O_LARGEFILE 0400000
|
||||
#endif
|
||||
|
||||
/* Values for the second argument to `fcntl'. */
|
||||
#define F_DUPFD 0 /* Duplicate file descriptor. */
|
||||
#define F_GETFD 1 /* Get file descriptor flags. */
|
||||
#define F_SETFD 2 /* Set file descriptor flags. */
|
||||
#define F_GETFL 3 /* Get file status flags. */
|
||||
#define F_SETFL 4 /* Set file status flags. */
|
||||
#ifndef __USE_FILE_OFFSET64
|
||||
# define F_GETLK 5 /* Get record locking info. */
|
||||
# define F_SETLK 6 /* Set record locking info (non-blocking). */
|
||||
# define F_SETLKW 7 /* Set record locking info (blocking). */
|
||||
#else
|
||||
# define F_GETLK F_GETLK64 /* Get record locking info. */
|
||||
# define F_SETLK F_SETLK64 /* Set record locking info (non-blocking).*/
|
||||
# define F_SETLKW F_SETLKW64 /* Set record locking info (blocking). */
|
||||
#endif
|
||||
#define F_GETLK64 12 /* Get record locking info. */
|
||||
#define F_SETLK64 13 /* Set record locking info (non-blocking). */
|
||||
#define F_SETLKW64 14 /* Set record locking info (blocking). */
|
||||
|
||||
#if defined __USE_BSD || defined __USE_UNIX98
|
||||
# define F_SETOWN 8 /* Get owner of socket (receiver of SIGIO). */
|
||||
# define F_GETOWN 9 /* Set owner of socket (receiver of SIGIO). */
|
||||
#endif
|
||||
|
||||
#ifdef __USE_GNU
|
||||
# define F_SETSIG 10 /* Set number of signal to be sent. */
|
||||
# define F_GETSIG 11 /* Get number of signal to be sent. */
|
||||
#endif
|
||||
|
||||
#ifdef __USE_GNU
|
||||
# define F_SETLEASE 1024 /* Set a lease. */
|
||||
# define F_GETLEASE 1025 /* Enquire what lease is active. */
|
||||
# define F_NOTIFY 1026 /* Request notfications on a directory. */
|
||||
#endif
|
||||
|
||||
/* For F_[GET|SET]FL. */
|
||||
#define FD_CLOEXEC 1 /* actually anything with low bit set goes */
|
||||
|
||||
/* For posix fcntl() and `l_type' field of a `struct flock' for lockf(). */
|
||||
#define F_RDLCK 0 /* Read lock. */
|
||||
#define F_WRLCK 1 /* Write lock. */
|
||||
#define F_UNLCK 2 /* Remove lock. */
|
||||
|
||||
/* For old implementation of bsd flock(). */
|
||||
#define F_EXLCK 4 /* or 3 */
|
||||
#define F_SHLCK 8 /* or 4 */
|
||||
|
||||
#ifdef __USE_BSD
|
||||
/* Operations for bsd flock(), also used by the kernel implementation. */
|
||||
# define LOCK_SH 1 /* shared lock */
|
||||
# define LOCK_EX 2 /* exclusive lock */
|
||||
# define LOCK_NB 4 /* or'd with one of the above to prevent
|
||||
blocking */
|
||||
# define LOCK_UN 8 /* remove lock */
|
||||
#endif
|
||||
|
||||
#ifdef __USE_GNU
|
||||
# define LOCK_MAND 32 /* This is a mandatory flock: */
|
||||
# define LOCK_READ 64 /* ... which allows concurrent read operations. */
|
||||
# define LOCK_WRITE 128 /* ... which allows concurrent write operations. */
|
||||
# define LOCK_RW 192 /* ... Which allows concurrent read & write operations. */
|
||||
#endif
|
||||
|
||||
#ifdef __USE_GNU
|
||||
/* Types of directory notifications that may be requested with F_NOTIFY. */
|
||||
# define DN_ACCESS 0x00000001 /* File accessed. */
|
||||
# define DN_MODIFY 0x00000002 /* File modified. */
|
||||
# define DN_CREATE 0x00000004 /* File created. */
|
||||
# define DN_DELETE 0x00000008 /* File removed. */
|
||||
# define DN_RENAME 0x00000010 /* File renamed. */
|
||||
# define DN_ATTRIB 0x00000020 /* File changed attibutes. */
|
||||
# define DN_MULTISHOT 0x80000000 /* Don't remove notifier. */
|
||||
#endif
|
||||
|
||||
struct flock
|
||||
{
|
||||
short int l_type; /* Type of lock: F_RDLCK, F_WRLCK, or F_UNLCK. */
|
||||
short int l_whence; /* Where `l_start' is relative to (like `lseek'). */
|
||||
#ifndef __USE_FILE_OFFSET64
|
||||
__off_t l_start; /* Offset where the lock begins. */
|
||||
__off_t l_len; /* Size of the locked area; zero means until EOF. */
|
||||
#else
|
||||
__off64_t l_start; /* Offset where the lock begins. */
|
||||
__off64_t l_len; /* Size of the locked area; zero means until EOF. */
|
||||
#endif
|
||||
__pid_t l_pid; /* Process holding the lock. */
|
||||
};
|
||||
|
||||
#ifdef __USE_LARGEFILE64
|
||||
struct flock64
|
||||
{
|
||||
short int l_type; /* Type of lock: F_RDLCK, F_WRLCK, or F_UNLCK. */
|
||||
short int l_whence; /* Where `l_start' is relative to (like `lseek'). */
|
||||
__off64_t l_start; /* Offset where the lock begins. */
|
||||
__off64_t l_len; /* Size of the locked area; zero means until EOF. */
|
||||
__pid_t l_pid; /* Process holding the lock. */
|
||||
};
|
||||
#endif
|
||||
|
||||
/* Define some more compatibility macros to be backward compatible with
|
||||
BSD systems which did not managed to hide these kernel macros. */
|
||||
#ifdef __USE_BSD
|
||||
# define FAPPEND O_APPEND
|
||||
# define FFSYNC O_FSYNC
|
||||
# define FASYNC O_ASYNC
|
||||
# define FNONBLOCK O_NONBLOCK
|
||||
# define FNDELAY O_NDELAY
|
||||
#endif /* Use BSD. */
|
||||
|
||||
/* Advise to `posix_fadvise'. */
|
||||
#ifdef __USE_XOPEN2K
|
||||
# define POSIX_FADV_NORMAL 0 /* No further special treatment. */
|
||||
# define POSIX_FADV_RANDOM 1 /* Expect random page references. */
|
||||
# define POSIX_FADV_SEQUENTIAL 2 /* Expect sequential page references. */
|
||||
# define POSIX_FADV_WILLNEED 3 /* Will need these pages. */
|
||||
# define POSIX_FADV_DONTNEED 4 /* Don't need these pages. */
|
||||
# define POSIX_FADV_NOREUSE 5 /* Data will be accessed once. */
|
||||
#endif
|
||||
|
||||
__BEGIN_DECLS
|
||||
|
||||
/* Provide kernel hint to read ahead. */
|
||||
extern ssize_t readahead (int __fd, __off64_t __offset, size_t __count)
|
||||
__THROW;
|
||||
|
||||
__END_DECLS
|
@ -1,102 +0,0 @@
|
||||
/* Definitions for POSIX memory map interface. Linux/m68k version.
|
||||
Copyright (C) 1997, 2000, 2003, 2005 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 Lesser General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 2.1 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
|
||||
Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public
|
||||
License along with the GNU C Library; if not, write to the Free
|
||||
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||
02111-1307 USA. */
|
||||
|
||||
#ifndef _SYS_MMAN_H
|
||||
# error "Never use <bits/mman.h> directly; include <sys/mman.h> instead."
|
||||
#endif
|
||||
|
||||
/* The following definitions basically come from the kernel headers.
|
||||
But the kernel header is not namespace clean. */
|
||||
|
||||
|
||||
/* Protections are chosen from these bits, OR'd together. The
|
||||
implementation does not necessarily support PROT_EXEC or PROT_WRITE
|
||||
without PROT_READ. The only guarantees are that no writing will be
|
||||
allowed without PROT_WRITE and no access will be allowed for PROT_NONE. */
|
||||
|
||||
#define PROT_READ 0x1 /* Page can be read. */
|
||||
#define PROT_WRITE 0x2 /* Page can be written. */
|
||||
#define PROT_EXEC 0x4 /* Page can be executed. */
|
||||
#define PROT_NONE 0x0 /* Page can not be accessed. */
|
||||
#define PROT_GROWSDOWN 0x01000000 /* Extend change to start of
|
||||
growsdown vma (mprotect only). */
|
||||
#define PROT_GROWSUP 0x02000000 /* Extend change to start of
|
||||
growsup vma (mprotect only). */
|
||||
|
||||
/* Sharing types (must choose one and only one of these). */
|
||||
#define MAP_SHARED 0x01 /* Share changes. */
|
||||
#define MAP_PRIVATE 0x02 /* Changes are private. */
|
||||
#ifdef __USE_MISC
|
||||
# define MAP_TYPE 0x0f /* Mask for type of mapping. */
|
||||
#endif
|
||||
|
||||
/* Other flags. */
|
||||
#define MAP_FIXED 0x10 /* Interpret addr exactly. */
|
||||
#ifdef __USE_MISC
|
||||
# define MAP_FILE 0
|
||||
# define MAP_ANONYMOUS 0x20 /* Don't use a file. */
|
||||
# define MAP_ANON MAP_ANONYMOUS
|
||||
#endif
|
||||
|
||||
/* These are Linux-specific. */
|
||||
#ifdef __USE_MISC
|
||||
# define MAP_GROWSDOWN 0x00100 /* Stack-like segment. */
|
||||
# define MAP_DENYWRITE 0x00800 /* ETXTBSY */
|
||||
# define MAP_EXECUTABLE 0x01000 /* Mark it as an executable. */
|
||||
# define MAP_LOCKED 0x02000 /* Lock the mapping. */
|
||||
# define MAP_NORESERVE 0x04000 /* Don't check for reservations. */
|
||||
# define MAP_POPULATE 0x08000 /* Populate (prefault) pagetables. */
|
||||
# define MAP_NONBLOCK 0x10000 /* Do not block on IO. */
|
||||
#endif
|
||||
|
||||
/* Flags to `msync'. */
|
||||
#define MS_ASYNC 1 /* Sync memory asynchronously. */
|
||||
#define MS_SYNC 4 /* Synchronous memory sync. */
|
||||
#define MS_INVALIDATE 2 /* Invalidate the caches. */
|
||||
|
||||
/* Flags for `mlockall'. */
|
||||
#define MCL_CURRENT 1 /* Lock all currently mapped pages. */
|
||||
#define MCL_FUTURE 2 /* Lock all additions to address
|
||||
space. */
|
||||
|
||||
/* Flags for `mremap'. */
|
||||
#ifdef __USE_GNU
|
||||
# define MREMAP_MAYMOVE 1
|
||||
# define MREMAP_FIXED 2
|
||||
#endif
|
||||
|
||||
/* Advice to `madvise'. */
|
||||
#ifdef __USE_BSD
|
||||
# define MADV_NORMAL 0 /* No further special treatment. */
|
||||
# define MADV_RANDOM 1 /* Expect random page references. */
|
||||
# define MADV_SEQUENTIAL 2 /* Expect sequential page references. */
|
||||
# define MADV_WILLNEED 3 /* Will need these pages. */
|
||||
# define MADV_DONTNEED 4 /* Don't need these pages. */
|
||||
# define MADV_DONTFORK 10 /* Do not inherit across fork. */
|
||||
# define MADV_DOFORK 11 /* Do inherit across fork. */
|
||||
#endif
|
||||
|
||||
/* The POSIX people had to invent similar names for the same things. */
|
||||
#ifdef __USE_XOPEN2K
|
||||
# define POSIX_MADV_NORMAL 0 /* No further special treatment. */
|
||||
# define POSIX_MADV_RANDOM 1 /* Expect random page references. */
|
||||
# define POSIX_MADV_SEQUENTIAL 2 /* Expect sequential page references. */
|
||||
# define POSIX_MADV_WILLNEED 3 /* Will need these pages. */
|
||||
# define POSIX_MADV_DONTNEED 4 /* Don't need these pages. */
|
||||
#endif
|
@ -1,43 +0,0 @@
|
||||
/* Copyright (C) 1997, 2001 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 Lesser General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 2.1 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
|
||||
Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public
|
||||
License along with the GNU C Library; if not, write to the Free
|
||||
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||
02111-1307 USA. */
|
||||
|
||||
#ifndef _SYS_POLL_H
|
||||
# error "Never use <bits/poll.h> directly; include <sys/poll.h> instead."
|
||||
#endif
|
||||
|
||||
/* Event types that can be polled for. These bits may be set in `events'
|
||||
to indicate the interesting event types; they will appear in `revents'
|
||||
to indicate the status of the file descriptor. */
|
||||
#define POLLIN 0x001 /* There is data to read. */
|
||||
#define POLLPRI 0x002 /* There is urgent data to read. */
|
||||
#define POLLOUT 0x004 /* Writing now will not block. */
|
||||
|
||||
#ifdef __USE_XOPEN
|
||||
/* These values are defined in XPG4.2. */
|
||||
# define POLLRDNORM 0x040 /* Normal data may be read. */
|
||||
# define POLLRDBAND 0x080 /* Priority data may be read. */
|
||||
# define POLLWRNORM POLLOUT /* Writing now will not block. */
|
||||
# define POLLWRBAND 0x100 /* Priority data may be written. */
|
||||
#endif
|
||||
|
||||
/* Event types always implicitly polled for. These bits need not be set in
|
||||
`events', but they will appear in `revents' to indicate the status of
|
||||
the file descriptor. */
|
||||
#define POLLERR 0x008 /* Error condition. */
|
||||
#define POLLHUP 0x010 /* Hung up. */
|
||||
#define POLLNVAL 0x020 /* Invalid polling request. */
|
@ -1,164 +0,0 @@
|
||||
/* Copyright (C) 1992,95,96,97,98,99,2000,2001,2002
|
||||
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 Lesser General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 2.1 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
|
||||
Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public
|
||||
License along with the GNU C Library; if not, write to the Free
|
||||
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||
02111-1307 USA. */
|
||||
|
||||
#ifndef _SYS_STAT_H
|
||||
# error "Never include <bits/stat.h> directly; use <sys/stat.h> instead."
|
||||
#endif
|
||||
|
||||
/* Versions of the `struct stat' data structure. */
|
||||
#define _STAT_VER_LINUX_OLD 1
|
||||
#define _STAT_VER_KERNEL 1
|
||||
#define _STAT_VER_SVR4 2
|
||||
#define _STAT_VER_LINUX 3
|
||||
#define _STAT_VER _STAT_VER_LINUX /* The one defined below. */
|
||||
|
||||
/* Versions of the `xmknod' interface. */
|
||||
#define _MKNOD_VER_LINUX 1
|
||||
#define _MKNOD_VER_SVR4 2
|
||||
#define _MKNOD_VER _MKNOD_VER_LINUX /* The bits defined below. */
|
||||
|
||||
|
||||
struct stat
|
||||
{
|
||||
__dev_t st_dev; /* Device. */
|
||||
unsigned short int __pad1;
|
||||
#ifndef __USE_FILE_OFFSET64
|
||||
__ino_t st_ino; /* File serial number. */
|
||||
#else
|
||||
__ino_t __st_ino; /* 32bit file serial number. */
|
||||
#endif
|
||||
__mode_t st_mode; /* File mode. */
|
||||
__nlink_t st_nlink; /* Link count. */
|
||||
__uid_t st_uid; /* User ID of the file's owner. */
|
||||
__gid_t st_gid; /* Group ID of the file's group.*/
|
||||
__dev_t st_rdev; /* Device number, if device. */
|
||||
unsigned short int __pad2;
|
||||
#ifndef __USE_FILE_OFFSET64
|
||||
__off_t st_size; /* Size of file, in bytes. */
|
||||
#else
|
||||
__off64_t st_size; /* Size of file, in bytes. */
|
||||
#endif
|
||||
__blksize_t st_blksize; /* Optimal block size for I/O. */
|
||||
|
||||
#ifndef __USE_FILE_OFFSET64
|
||||
__blkcnt_t st_blocks; /* Number 512-byte blocks allocated. */
|
||||
#else
|
||||
__blkcnt64_t st_blocks; /* Number 512-byte blocks allocated. */
|
||||
#endif
|
||||
#ifdef __USE_MISC
|
||||
/* Nanosecond resolution timestamps are stored in a format
|
||||
equivalent to 'struct timespec'. This is the type used
|
||||
whenever possible but the Unix namespace rules do not allow the
|
||||
identifier 'timespec' to appear in the <sys/stat.h> header.
|
||||
Therefore we have to handle the use of this header in strictly
|
||||
standard-compliant sources special. */
|
||||
struct timespec st_atim; /* Time of last access. */
|
||||
struct timespec st_mtim; /* Time of last modification. */
|
||||
struct timespec st_ctim; /* Time of last status change. */
|
||||
# define st_atime st_atim.tv_sec /* Backward compatibility. */
|
||||
# define st_mtime st_mtim.tv_sec
|
||||
# define st_ctime st_ctim.tv_sec
|
||||
#else
|
||||
__time_t st_atime; /* Time of last access. */
|
||||
unsigned long int st_atimensec; /* Nscecs of last access. */
|
||||
__time_t st_mtime; /* Time of last modification. */
|
||||
unsigned long int st_mtimensec; /* Nsecs of last modification. */
|
||||
__time_t st_ctime; /* Time of last status change. */
|
||||
unsigned long int st_ctimensec; /* Nsecs of last status change. */
|
||||
#endif
|
||||
#ifndef __USE_FILE_OFFSET64
|
||||
unsigned long int __unused4;
|
||||
unsigned long int __unused5;
|
||||
#else
|
||||
__ino64_t st_ino; /* File serial number. */
|
||||
#endif
|
||||
};
|
||||
|
||||
#ifdef __USE_LARGEFILE64
|
||||
struct stat64
|
||||
{
|
||||
__dev_t st_dev; /* Device. */
|
||||
unsigned short int __pad1;
|
||||
|
||||
__ino_t __st_ino; /* 32bit file serial number. */
|
||||
__mode_t st_mode; /* File mode. */
|
||||
__nlink_t st_nlink; /* Link count. */
|
||||
__uid_t st_uid; /* User ID of the file's owner. */
|
||||
__gid_t st_gid; /* Group ID of the file's group.*/
|
||||
__dev_t st_rdev; /* Device number, if device. */
|
||||
unsigned short int __pad2;
|
||||
__off64_t st_size; /* Size of file, in bytes. */
|
||||
__blksize_t st_blksize; /* Optimal block size for I/O. */
|
||||
|
||||
__blkcnt64_t st_blocks; /* Number 512-byte blocks allocated. */
|
||||
#ifdef __USE_MISC
|
||||
/* Nanosecond resolution timestamps are stored in a format
|
||||
equivalent to 'struct timespec'. This is the type used
|
||||
whenever possible but the Unix namespace rules do not allow the
|
||||
identifier 'timespec' to appear in the <sys/stat.h> header.
|
||||
Therefore we have to handle the use of this header in strictly
|
||||
standard-compliant sources special. */
|
||||
struct timespec st_atim; /* Time of last access. */
|
||||
struct timespec st_mtim; /* Time of last modification. */
|
||||
struct timespec st_ctim; /* Time of last status change. */
|
||||
#else
|
||||
__time_t st_atime; /* Time of last access. */
|
||||
unsigned long int st_atimensec; /* Nscecs of last access. */
|
||||
__time_t st_mtime; /* Time of last modification. */
|
||||
unsigned long int st_mtimensec; /* Nsecs of last modification. */
|
||||
__time_t st_ctime; /* Time of last status change. */
|
||||
unsigned long int st_ctimensec; /* Nsecs of last status change. */
|
||||
#endif
|
||||
__ino64_t st_ino; /* File serial number. */
|
||||
};
|
||||
#endif
|
||||
|
||||
/* Tell code we have these members. */
|
||||
#define _STATBUF_ST_BLKSIZE
|
||||
#define _STATBUF_ST_RDEV
|
||||
/* Nanosecond resolution time values are supported. */
|
||||
#define _STATBUF_ST_NSEC
|
||||
|
||||
/* Encoding of the file mode. */
|
||||
|
||||
#define __S_IFMT 0170000 /* These bits determine file type. */
|
||||
|
||||
/* File types. */
|
||||
#define __S_IFDIR 0040000 /* Directory. */
|
||||
#define __S_IFCHR 0020000 /* Character device. */
|
||||
#define __S_IFBLK 0060000 /* Block device. */
|
||||
#define __S_IFREG 0100000 /* Regular file. */
|
||||
#define __S_IFIFO 0010000 /* FIFO. */
|
||||
#define __S_IFLNK 0120000 /* Symbolic link. */
|
||||
#define __S_IFSOCK 0140000 /* Socket. */
|
||||
|
||||
/* POSIX.1b objects. Note that these macros always evaluate to zero. But
|
||||
they do it by enforcing the correct use of the macros. */
|
||||
#define __S_TYPEISMQ(buf) ((buf)->st_mode - (buf)->st_mode)
|
||||
#define __S_TYPEISSEM(buf) ((buf)->st_mode - (buf)->st_mode)
|
||||
#define __S_TYPEISSHM(buf) ((buf)->st_mode - (buf)->st_mode)
|
||||
|
||||
/* Protection bits. */
|
||||
|
||||
#define __S_ISUID 04000 /* Set user ID on execution. */
|
||||
#define __S_ISGID 02000 /* Set group ID on execution. */
|
||||
#define __S_ISVTX 01000 /* Save swapped text after use (sticky). */
|
||||
#define __S_IREAD 0400 /* Read by owner. */
|
||||
#define __S_IWRITE 0200 /* Write by owner. */
|
||||
#define __S_IEXEC 0100 /* Execute by owner. */
|
@ -1,48 +0,0 @@
|
||||
/* brk system call for Linux/m68k.
|
||||
Copyright (C) 1996, 1997, 2003 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 Lesser General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 2.1 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
|
||||
Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public
|
||||
License along with the GNU C Library; if not, write to the Free
|
||||
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||
02111-1307 USA. */
|
||||
|
||||
#include <errno.h>
|
||||
#include <unistd.h>
|
||||
#include <sysdep.h>
|
||||
|
||||
void *__curbrk = 0;
|
||||
|
||||
/* Old braindamage in GCC's crtstuff.c requires this symbol in an attempt
|
||||
to work around different old braindamage in the old Linux/x86 ELF
|
||||
dynamic linker. Sigh. */
|
||||
weak_alias (__curbrk, ___brk_addr)
|
||||
|
||||
int
|
||||
__brk (void *addr)
|
||||
{
|
||||
void *newbrk;
|
||||
|
||||
INTERNAL_SYSCALL_DECL (err);
|
||||
newbrk = (void *) INTERNAL_SYSCALL (brk, err, 1, addr);
|
||||
__curbrk = newbrk;
|
||||
|
||||
if (newbrk < addr)
|
||||
{
|
||||
__set_errno (ENOMEM);
|
||||
return -1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
weak_alias (__brk, brk)
|
@ -1,69 +0,0 @@
|
||||
/* Copyright (C) 1998,2000,2002,2003,2006 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 Lesser General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 2.1 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
|
||||
Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public
|
||||
License along with the GNU C Library; if not, write to the Free
|
||||
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||
02111-1307 USA. */
|
||||
|
||||
#include <errno.h>
|
||||
#include <unistd.h>
|
||||
|
||||
#include <sysdep.h>
|
||||
#include <sys/syscall.h>
|
||||
#include <bp-checks.h>
|
||||
|
||||
#include <linux/posix_types.h>
|
||||
#include <kernel-features.h>
|
||||
|
||||
#ifdef __NR_chown32
|
||||
# if __ASSUME_32BITUIDS == 0
|
||||
/* This variable is shared with all files that need to check for 32bit
|
||||
uids. */
|
||||
extern int __libc_missing_32bit_uids;
|
||||
# endif
|
||||
#endif /* __NR_chown32 */
|
||||
|
||||
int
|
||||
__chown (const char *file, uid_t owner, gid_t group)
|
||||
{
|
||||
#if __ASSUME_32BITUIDS > 0
|
||||
return INLINE_SYSCALL (chown32, 3, CHECK_STRING (file), owner, group);
|
||||
#else
|
||||
# ifdef __NR_chown32
|
||||
if (__libc_missing_32bit_uids <= 0)
|
||||
{
|
||||
int result;
|
||||
int saved_errno = errno;
|
||||
|
||||
result = INLINE_SYSCALL (chown32, 3, CHECK_STRING (file), owner, group);
|
||||
if (result == 0 || errno != ENOSYS)
|
||||
return result;
|
||||
|
||||
__set_errno (saved_errno);
|
||||
__libc_missing_32bit_uids = 1;
|
||||
}
|
||||
# endif /* __NR_chown32 */
|
||||
|
||||
if (((owner + 1) > (gid_t) ((__kernel_uid_t) -1U))
|
||||
|| ((group + 1) > (gid_t) ((__kernel_gid_t) -1U)))
|
||||
{
|
||||
__set_errno (EINVAL);
|
||||
return -1;
|
||||
}
|
||||
|
||||
return INLINE_SYSCALL (chown, 3, CHECK_STRING (file), owner, group);
|
||||
#endif
|
||||
}
|
||||
libc_hidden_def (__chown)
|
||||
weak_alias (__chown, chown)
|
@ -1,66 +0,0 @@
|
||||
/* Copyright (C) 1996,97,98,2002 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by Andreas Schwab (schwab@issan.informatik.uni-dortmund.de)
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Lesser General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 2.1 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
|
||||
Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public
|
||||
License along with the GNU C Library; if not, write to the Free
|
||||
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||
02111-1307 USA. */
|
||||
|
||||
/* clone is even more special than fork as it mucks with stacks
|
||||
and invokes a function in the right context after its all over. */
|
||||
|
||||
#include <sysdep.h>
|
||||
#define _ERRNO_H 1
|
||||
#include <bits/errno.h>
|
||||
|
||||
/* int clone(int (*fn)(void *arg), void *child_stack, int flags, void *arg); */
|
||||
|
||||
.text
|
||||
ENTRY (__clone)
|
||||
|
||||
/* Sanity check arguments. */
|
||||
movel #-EINVAL, %d0
|
||||
movel 4(%sp), %a0 /* no NULL function pointers */
|
||||
tstl %a0
|
||||
jeq SYSCALL_ERROR_LABEL
|
||||
movel 8(%sp), %a1 /* no NULL stack pointers */
|
||||
tstl %a1
|
||||
jeq SYSCALL_ERROR_LABEL
|
||||
|
||||
/* Allocate space and copy the argument onto the new stack. */
|
||||
movel 16(%sp), -(%a1)
|
||||
|
||||
/* Do the system call */
|
||||
exg %d2, %a1 /* save %d2 and get stack pointer */
|
||||
movel 12(%sp), %d1 /* get flags */
|
||||
movel #SYS_ify (clone), %d0
|
||||
trap #0
|
||||
exg %d2, %a1 /* restore %d2 */
|
||||
|
||||
tstl %d0
|
||||
jmi SYSCALL_ERROR_LABEL
|
||||
jeq thread_start
|
||||
|
||||
rts
|
||||
|
||||
thread_start:
|
||||
subl %fp, %fp /* terminate the stack frame */
|
||||
jsr (%a0)
|
||||
movel %d0, %d1
|
||||
movel #SYS_ify (exit), %d0
|
||||
trap #0
|
||||
|
||||
PSEUDO_END (__clone)
|
||||
|
||||
weak_alias (__clone, clone)
|
@ -1 +0,0 @@
|
||||
#include <sysdeps/unix/sysv/linux/i386/dl-librecon.h>
|
@ -1 +0,0 @@
|
||||
#include <sysdeps/unix/sysv/linux/i386/fchown.c>
|
@ -1,122 +0,0 @@
|
||||
/* Copyright (C) 2005, 2006 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 Lesser General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 2.1 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
|
||||
Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public
|
||||
License along with the GNU C Library; if not, write to the Free
|
||||
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||
02111-1307 USA. */
|
||||
|
||||
#include <errno.h>
|
||||
#include <fcntl.h>
|
||||
#include <stdio.h>
|
||||
#include <unistd.h>
|
||||
#include <string.h>
|
||||
|
||||
#include <sysdep.h>
|
||||
#include <sys/syscall.h>
|
||||
#include <bp-checks.h>
|
||||
|
||||
#include <linux/posix_types.h>
|
||||
#include <kernel-features.h>
|
||||
|
||||
#ifdef __NR_chown32
|
||||
# if __ASSUME_32BITUIDS == 0
|
||||
/* This variable is shared with all files that need to check for 32bit
|
||||
uids. */
|
||||
extern int __libc_missing_32bit_uids;
|
||||
# endif
|
||||
#endif /* __NR_chown32 */
|
||||
|
||||
int
|
||||
fchownat (int fd, const char *file, uid_t owner, gid_t group, int flag)
|
||||
{
|
||||
if (flag & ~AT_SYMLINK_NOFOLLOW)
|
||||
{
|
||||
__set_errno (EINVAL);
|
||||
return -1;
|
||||
}
|
||||
|
||||
char *buf = NULL;
|
||||
|
||||
if (fd != AT_FDCWD && file[0] != '/')
|
||||
{
|
||||
size_t filelen = strlen (file);
|
||||
static const char procfd[] = "/proc/self/fd/%d/%s";
|
||||
/* Buffer for the path name we are going to use. It consists of
|
||||
- the string /proc/self/fd/
|
||||
- the file descriptor number
|
||||
- the file name provided.
|
||||
The final NUL is included in the sizeof. A bit of overhead
|
||||
due to the format elements compensates for possible negative
|
||||
numbers. */
|
||||
size_t buflen = sizeof (procfd) + sizeof (int) * 3 + filelen;
|
||||
buf = alloca (buflen);
|
||||
|
||||
__snprintf (buf, buflen, procfd, fd, file);
|
||||
file = buf;
|
||||
}
|
||||
|
||||
int result;
|
||||
INTERNAL_SYSCALL_DECL (err);
|
||||
|
||||
#if __ASSUME_32BITUIDS > 0
|
||||
if (flag & AT_SYMLINK_NOFOLLOW)
|
||||
result = INTERNAL_SYSCALL (lchown32, err, 3, CHECK_STRING (file), owner,
|
||||
group);
|
||||
else
|
||||
result = INTERNAL_SYSCALL (chown32, err, 3, CHECK_STRING (file), owner,
|
||||
group);
|
||||
#else
|
||||
# ifdef __NR_chown32
|
||||
if (__libc_missing_32bit_uids <= 0)
|
||||
{
|
||||
if (flag & AT_SYMLINK_NOFOLLOW)
|
||||
result = INTERNAL_SYSCALL (lchown32, err, 3, CHECK_STRING (file),
|
||||
owner, group);
|
||||
else
|
||||
result = INTERNAL_SYSCALL (chown32, err, 3, CHECK_STRING (file), owner,
|
||||
group);
|
||||
|
||||
if (__builtin_expect (!INTERNAL_SYSCALL_ERROR_P (result, err), 1))
|
||||
return result;
|
||||
if (INTERNAL_SYSCALL_ERRNO (result, err) != ENOSYS)
|
||||
goto fail;
|
||||
|
||||
__libc_missing_32bit_uids = 1;
|
||||
}
|
||||
# endif /* __NR_chown32 */
|
||||
|
||||
if (((owner + 1) > (gid_t) ((__kernel_uid_t) -1U))
|
||||
|| ((group + 1) > (gid_t) ((__kernel_gid_t) -1U)))
|
||||
{
|
||||
__set_errno (EINVAL);
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (flag & AT_SYMLINK_NOFOLLOW)
|
||||
result = INTERNAL_SYSCALL (lchown, err, 3, CHECK_STRING (file), owner,
|
||||
group);
|
||||
else
|
||||
result = INTERNAL_SYSCALL (chown, err, 3, CHECK_STRING (file), owner,
|
||||
group);
|
||||
#endif
|
||||
|
||||
if (__builtin_expect (INTERNAL_SYSCALL_ERROR_P (result, err), 0))
|
||||
{
|
||||
fail:
|
||||
__atfct_seterrno (INTERNAL_SYSCALL_ERRNO (result, err), fd, buf);
|
||||
result = -1;
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
@ -1 +0,0 @@
|
||||
#include <sysdeps/unix/sysv/linux/i386/fcntl.c>
|
@ -1 +0,0 @@
|
||||
#include <sysdeps/unix/sysv/linux/i386/fxstat.c>
|
@ -1 +0,0 @@
|
||||
#include <sysdeps/unix/sysv/linux/i386/fxstatat.c>
|
@ -1 +0,0 @@
|
||||
#include <sysdeps/unix/sysv/linux/i386/getdents64.c>
|
@ -1 +0,0 @@
|
||||
#include <sysdeps/unix/sysv/linux/i386/getegid.c>
|
@ -1 +0,0 @@
|
||||
#include <sysdeps/unix/sysv/linux/i386/geteuid.c>
|
@ -1 +0,0 @@
|
||||
#include <sysdeps/unix/sysv/linux/i386/getgid.c>
|
@ -1,2 +0,0 @@
|
||||
/* We also have to rewrite the kernel gid_t to the user land type. */
|
||||
#include <sysdeps/unix/sysv/linux/i386/getgroups.c>
|
@ -1 +0,0 @@
|
||||
#include <sysdeps/unix/sysv/linux/i386/getmsg.c>
|
@ -1,50 +0,0 @@
|
||||
/* Copyright (C) 2000, 2002, 2003, 2004 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by Andreas Schwab <schwab@suse.de>.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Lesser General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 2.1 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
|
||||
Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public
|
||||
License along with the GNU C Library; if not, write to the Free
|
||||
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||
02111-1307 USA. */
|
||||
|
||||
#include <unistd.h>
|
||||
#include <sys/param.h>
|
||||
#include <errno.h>
|
||||
|
||||
#include <ldsodefs.h>
|
||||
#include <sysdep.h>
|
||||
#include <sys/syscall.h>
|
||||
|
||||
/* Return the system page size. */
|
||||
int
|
||||
__getpagesize ()
|
||||
{
|
||||
#ifdef __NR_getpagesize
|
||||
int result;
|
||||
#endif
|
||||
|
||||
if (GLRO(dl_pagesize) != 0)
|
||||
return GLRO(dl_pagesize);
|
||||
|
||||
#ifdef __NR_getpagesize
|
||||
INTERNAL_SYSCALL_DECL (err);
|
||||
result = INTERNAL_SYSCALL (getpagesize, err, 0);
|
||||
/* The only possible error is ENOSYS. */
|
||||
if (!INTERNAL_SYSCALL_ERROR_P (result, err))
|
||||
return result;
|
||||
#endif
|
||||
|
||||
return 4096;
|
||||
}
|
||||
libc_hidden_def (__getpagesize)
|
||||
weak_alias (__getpagesize, getpagesize)
|
@ -1 +0,0 @@
|
||||
#include <sysdeps/unix/sysv/linux/i386/getresgid.c>
|
@ -1 +0,0 @@
|
||||
#include <sysdeps/unix/sysv/linux/i386/getresuid.c>
|
@ -1 +0,0 @@
|
||||
#include <sysdeps/unix/sysv/linux/i386/getrlimit.c>
|
@ -1 +0,0 @@
|
||||
#include <sysdeps/unix/sysv/linux/i386/getrlimit64.c>
|
@ -1,37 +0,0 @@
|
||||
/* Determine various system internal values, Linux/m68k version.
|
||||
Copyright (C) 2003 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by Andreas Schwab <schwab@suse.de>
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Lesser General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 2.1 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
|
||||
Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public
|
||||
License along with the GNU C Library; if not, write to the Free
|
||||
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||
02111-1307 USA. */
|
||||
|
||||
|
||||
/* We need to define a special parser for /proc/cpuinfo. */
|
||||
#define GET_NPROCS_PARSER(FP, BUFFER, RESULT) \
|
||||
do \
|
||||
{ \
|
||||
(RESULT) = 0; \
|
||||
/* Read all lines and count the lines starting with the string \
|
||||
"CPU:". We don't have to fear extremely long lines since \
|
||||
the kernel will not generate them. 8192 bytes are really \
|
||||
enough. */ \
|
||||
while (fgets_unlocked (BUFFER, sizeof (BUFFER), FP) != NULL) \
|
||||
if (strncmp (BUFFER, "CPU:", 4) == 0) \
|
||||
++(RESULT); \
|
||||
} \
|
||||
while (0)
|
||||
|
||||
#include <sysdeps/unix/sysv/linux/getsysstats.c>
|
@ -1 +0,0 @@
|
||||
#include <sysdeps/unix/sysv/linux/i386/getuid.c>
|
@ -1 +0,0 @@
|
||||
#include <sysdeps/unix/sysv/linux/i386/glob64.c>
|
@ -1 +0,0 @@
|
||||
#include <sysdeps/unix/sysv/linux/i386/lchown.c>
|
@ -1 +0,0 @@
|
||||
#include <sysdeps/unix/sysv/linux/i386/ldconfig.h>
|
@ -1 +0,0 @@
|
||||
#include <sysdeps/unix/sysv/linux/i386/lockf64.c>
|
@ -1,2 +0,0 @@
|
||||
#include <sysdeps/unix/sysv/linux/i386/lxstat.c>
|
||||
|
@ -1,43 +0,0 @@
|
||||
/* Copyright (C) 1996, 1997, 1998 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 Lesser General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 2.1 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
|
||||
Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public
|
||||
License along with the GNU C Library; if not, write to the Free
|
||||
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||
02111-1307 USA. */
|
||||
|
||||
#include <sysdep.h>
|
||||
|
||||
.text
|
||||
ENTRY (__mmap)
|
||||
|
||||
move.l #SYS_ify (mmap), %d0 /* System call number in %d0. */
|
||||
|
||||
lea 4(%sp), %a0 /* Address of args is 1st arg. */
|
||||
move.l %a0, %d1
|
||||
|
||||
/* Do the system call trap. */
|
||||
trap #0
|
||||
|
||||
/* Kludge: negative numbers are among the legal return values.
|
||||
If %d0 is between -4096 and 0 then there was an error. */
|
||||
cmp.l #-4096, %d0
|
||||
jhi SYSCALL_ERROR_LABEL
|
||||
|
||||
/* Successful; return the syscall's value. Copy it to %a0 because
|
||||
mmap is declared to return a pointer. */
|
||||
move.l %d0, %a0
|
||||
rts
|
||||
PSEUDO_END (__mmap)
|
||||
|
||||
weak_alias (__mmap, mmap)
|
@ -1,29 +0,0 @@
|
||||
/* Copyright (C) 1996 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 Lesser General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 2.1 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
|
||||
Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public
|
||||
License along with the GNU C Library; if not, write to the Free
|
||||
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||
02111-1307 USA. */
|
||||
|
||||
#include <sysdep.h>
|
||||
|
||||
/* The mremap system call is special because it needs to return
|
||||
its value in register %a0. */
|
||||
|
||||
.text
|
||||
PSEUDO (__mremap, mremap, 4)
|
||||
move.l %d0, %a0
|
||||
rts
|
||||
PSEUDO_END (__mremap)
|
||||
weak_alias (__mremap, mremap)
|
@ -1 +0,0 @@
|
||||
#include <sysdeps/unix/sysv/linux/i386/msgctl.c>
|
@ -1 +0,0 @@
|
||||
#include <sysdeps/unix/sysv/linux/i386/oldgetrlimit64.c>
|
@ -1 +0,0 @@
|
||||
#include <sysdeps/unix/sysv/linux/i386/putmsg.c>
|
@ -1 +0,0 @@
|
||||
#include <sysdeps/unix/sysv/linux/i386/readdir64.c>
|
@ -1 +0,0 @@
|
||||
#include <sysdeps/unix/sysv/linux/i386/readdir64_r.c>
|
@ -1,214 +0,0 @@
|
||||
/* Dump registers.
|
||||
Copyright (C) 1998, 2002, 2004 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by Andreas Schwab <schwab@gnu.org>.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Lesser General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 2.1 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
|
||||
Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public
|
||||
License along with the GNU C Library; if not, write to the Free
|
||||
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||
02111-1307 USA. */
|
||||
|
||||
#include <stddef.h>
|
||||
#include <sys/uio.h>
|
||||
#include <stdio-common/_itoa.h>
|
||||
|
||||
/* We will print the register dump in this format:
|
||||
|
||||
D0: XXXXXXXX D1: XXXXXXXX D2: XXXXXXXX D3: XXXXXXXX
|
||||
D4: XXXXXXXX D5: XXXXXXXX D6: XXXXXXXX D7: XXXXXXXX
|
||||
A0: XXXXXXXX A1: XXXXXXXX A2: XXXXXXXX A3: XXXXXXXX
|
||||
A4: XXXXXXXX A5: XXXXXXXX A6: XXXXXXXX A7: XXXXXXXX
|
||||
PC: XXXXXXXX SR: XXXX
|
||||
|
||||
OldMask: XXXXXXXX Vector: XXXX
|
||||
|
||||
FP0: XXXXXXXXXXXXXXXXXXXXXXXX FP1: XXXXXXXXXXXXXXXXXXXXXXXX
|
||||
FP2: XXXXXXXXXXXXXXXXXXXXXXXX FP3: XXXXXXXXXXXXXXXXXXXXXXXX
|
||||
FP4: XXXXXXXXXXXXXXXXXXXXXXXX FP5: XXXXXXXXXXXXXXXXXXXXXXXX
|
||||
FP6: XXXXXXXXXXXXXXXXXXXXXXXX FP7: XXXXXXXXXXXXXXXXXXXXXXXX
|
||||
FPCR: XXXXXXXX FPSR: XXXXXXXX FPIAR: XXXXXXXX
|
||||
|
||||
*/
|
||||
|
||||
/* Linux saves only the call-clobbered registers in the sigcontext. We
|
||||
need to use a trampoline that saves the rest so that the C code can
|
||||
access them. We use the sc_fpstate field, since the handler is not
|
||||
supposed to return anyway, thus it doesn't matter that it's clobbered. */
|
||||
|
||||
/* static */ void catch_segfault (int, int, struct sigcontext *);
|
||||
|
||||
/* Dummy function so that we can use asm with arguments. */
|
||||
static void __attribute_used__
|
||||
__dummy__ (void)
|
||||
{
|
||||
asm ("\n\
|
||||
catch_segfault:\n\
|
||||
move.l 12(%%sp),%%a0\n\
|
||||
lea %c0(%%a0),%%a0\n\
|
||||
/* Clear the first 4 bytes to make it a null fp state, just\n\
|
||||
in case the handler does return. */\n\
|
||||
clr.l (%%a0)+\n\
|
||||
movem.l %%d2-%%d7/%%a2-%%a6,(%%a0)\n\
|
||||
fmovem.x %%fp2-%%fp7,11*4(%%a0)\n\
|
||||
jra real_catch_segfault"
|
||||
: : "n" (offsetof (struct sigcontext, sc_fpstate)));
|
||||
}
|
||||
#define catch_segfault(a,b) \
|
||||
__attribute_used__ real_catch_segfault(a,b)
|
||||
|
||||
static void
|
||||
hexvalue (unsigned long int value, char *buf, size_t len)
|
||||
{
|
||||
char *cp = _itoa_word (value, buf + len, 16, 0);
|
||||
while (cp > buf)
|
||||
*--cp = '0';
|
||||
}
|
||||
|
||||
static void
|
||||
register_dump (int fd, struct sigcontext *ctx)
|
||||
{
|
||||
char regs[20][8];
|
||||
char fpregs[11][24];
|
||||
struct iovec iov[63], *next_iov = iov;
|
||||
unsigned long *p = (unsigned long *) ctx->sc_fpstate + 1;
|
||||
|
||||
#define ADD_STRING(str) \
|
||||
next_iov->iov_base = (char *) (str); \
|
||||
next_iov->iov_len = strlen (str); \
|
||||
++next_iov
|
||||
#define ADD_MEM(str, len) \
|
||||
next_iov->iov_base = (str); \
|
||||
next_iov->iov_len = (len); \
|
||||
++next_iov
|
||||
|
||||
/* Generate strings of register contents. */
|
||||
hexvalue (ctx->sc_d0, regs[0], 8);
|
||||
hexvalue (ctx->sc_d1, regs[1], 8);
|
||||
hexvalue (*p++, regs[2], 8);
|
||||
hexvalue (*p++, regs[3], 8);
|
||||
hexvalue (*p++, regs[4], 8);
|
||||
hexvalue (*p++, regs[5], 8);
|
||||
hexvalue (*p++, regs[6], 8);
|
||||
hexvalue (*p++, regs[7], 8);
|
||||
hexvalue (ctx->sc_a0, regs[8], 8);
|
||||
hexvalue (ctx->sc_a1, regs[9], 8);
|
||||
hexvalue (*p++, regs[10], 8);
|
||||
hexvalue (*p++, regs[11], 8);
|
||||
hexvalue (*p++, regs[12], 8);
|
||||
hexvalue (*p++, regs[13], 8);
|
||||
hexvalue (*p++, regs[14], 8);
|
||||
hexvalue (ctx->sc_usp, regs[15], 8);
|
||||
hexvalue (ctx->sc_pc, regs[16], 8);
|
||||
hexvalue (ctx->sc_sr, regs[17], 4);
|
||||
hexvalue (ctx->sc_mask, regs[18], 8);
|
||||
hexvalue (ctx->sc_formatvec & 0xfff, regs[19], 4);
|
||||
hexvalue (ctx->sc_fpregs[0], fpregs[0], 8);
|
||||
hexvalue (ctx->sc_fpregs[1], fpregs[0] + 8, 8);
|
||||
hexvalue (ctx->sc_fpregs[2], fpregs[0] + 16, 8);
|
||||
hexvalue (ctx->sc_fpregs[3], fpregs[1], 8);
|
||||
hexvalue (ctx->sc_fpregs[4], fpregs[1] + 8, 8);
|
||||
hexvalue (ctx->sc_fpregs[5], fpregs[1] + 16, 8);
|
||||
hexvalue (*p++, fpregs[2], 8);
|
||||
hexvalue (*p++, fpregs[2] + 8, 8);
|
||||
hexvalue (*p++, fpregs[2] + 16, 8);
|
||||
hexvalue (*p++, fpregs[3], 8);
|
||||
hexvalue (*p++, fpregs[3] + 8, 8);
|
||||
hexvalue (*p++, fpregs[3] + 16, 8);
|
||||
hexvalue (*p++, fpregs[4], 8);
|
||||
hexvalue (*p++, fpregs[4] + 8, 8);
|
||||
hexvalue (*p++, fpregs[4] + 16, 8);
|
||||
hexvalue (*p++, fpregs[5], 8);
|
||||
hexvalue (*p++, fpregs[5] + 8, 8);
|
||||
hexvalue (*p++, fpregs[5] + 16, 8);
|
||||
hexvalue (*p++, fpregs[6], 8);
|
||||
hexvalue (*p++, fpregs[6] + 8, 8);
|
||||
hexvalue (*p++, fpregs[6] + 16, 8);
|
||||
hexvalue (*p++, fpregs[7], 8);
|
||||
hexvalue (*p++, fpregs[7] + 8, 8);
|
||||
hexvalue (*p++, fpregs[7] + 16, 8);
|
||||
hexvalue (ctx->sc_fpcntl[0], fpregs[8], 8);
|
||||
hexvalue (ctx->sc_fpcntl[1], fpregs[9], 8);
|
||||
hexvalue (ctx->sc_fpcntl[2], fpregs[10], 8);
|
||||
|
||||
/* Generate the output. */
|
||||
ADD_STRING ("Register dump:\n\n D0: ");
|
||||
ADD_MEM (regs[0], 8);
|
||||
ADD_STRING (" D1: ");
|
||||
ADD_MEM (regs[1], 8);
|
||||
ADD_STRING (" D2: ");
|
||||
ADD_MEM (regs[2], 8);
|
||||
ADD_STRING (" D3: ");
|
||||
ADD_MEM (regs[3], 8);
|
||||
ADD_STRING ("\n D4: ");
|
||||
ADD_MEM (regs[4], 8);
|
||||
ADD_STRING (" D5: ");
|
||||
ADD_MEM (regs[5], 8);
|
||||
ADD_STRING (" D6: ");
|
||||
ADD_MEM (regs[6], 8);
|
||||
ADD_STRING (" D7: ");
|
||||
ADD_MEM (regs[7], 8);
|
||||
ADD_STRING ("\n A0: ");
|
||||
ADD_MEM (regs[8], 8);
|
||||
ADD_STRING (" A1: ");
|
||||
ADD_MEM (regs[9], 8);
|
||||
ADD_STRING (" A2: ");
|
||||
ADD_MEM (regs[10], 8);
|
||||
ADD_STRING (" A3: ");
|
||||
ADD_MEM (regs[11], 8);
|
||||
ADD_STRING ("\n A4: ");
|
||||
ADD_MEM (regs[12], 8);
|
||||
ADD_STRING (" A5: ");
|
||||
ADD_MEM (regs[13], 8);
|
||||
ADD_STRING (" A6: ");
|
||||
ADD_MEM (regs[14], 8);
|
||||
ADD_STRING (" A7: ");
|
||||
ADD_MEM (regs[15], 8);
|
||||
ADD_STRING ("\n PC: ");
|
||||
ADD_MEM (regs[16], 8);
|
||||
ADD_STRING (" SR: ");
|
||||
ADD_MEM (regs[17], 4);
|
||||
|
||||
ADD_STRING ("\n\n OldMask: ");
|
||||
ADD_MEM (regs[18], 8);
|
||||
ADD_STRING (" Vector: ");
|
||||
ADD_MEM (regs[19], 4);
|
||||
|
||||
ADD_STRING ("\n\n FP0: ");
|
||||
ADD_MEM (fpregs[0], 24);
|
||||
ADD_STRING (" FP1: ");
|
||||
ADD_MEM (fpregs[1], 24);
|
||||
ADD_STRING ("\n FP2: ");
|
||||
ADD_MEM (fpregs[2], 24);
|
||||
ADD_STRING (" FP3: ");
|
||||
ADD_MEM (fpregs[3], 24);
|
||||
ADD_STRING ("\n FP4: ");
|
||||
ADD_MEM (fpregs[4], 24);
|
||||
ADD_STRING (" FP5: ");
|
||||
ADD_MEM (fpregs[5], 24);
|
||||
ADD_STRING ("\n FP6: ");
|
||||
ADD_MEM (fpregs[6], 24);
|
||||
ADD_STRING (" FP7: ");
|
||||
ADD_MEM (fpregs[7], 24);
|
||||
ADD_STRING ("\n FPCR: ");
|
||||
ADD_MEM (fpregs[8], 8);
|
||||
ADD_STRING (" FPSR: ");
|
||||
ADD_MEM (fpregs[9], 8);
|
||||
ADD_STRING (" FPIAR: ");
|
||||
ADD_MEM (fpregs[10], 8);
|
||||
ADD_STRING ("\n");
|
||||
|
||||
/* Write the stuff out. */
|
||||
writev (fd, iov, next_iov - iov);
|
||||
}
|
||||
|
||||
#define REGISTER_DUMP register_dump (fd, ctx)
|
@ -1 +0,0 @@
|
||||
#include <sysdeps/unix/sysv/linux/i386/scandir64.c>
|
@ -1 +0,0 @@
|
||||
#include <sysdeps/unix/sysv/linux/i386/semctl.c>
|
@ -1,60 +0,0 @@
|
||||
/* Copyright (C) 2003 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by Andreas Schwab <schwab@suse.de>, 2003.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Lesser General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 2.1 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
|
||||
Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public
|
||||
License along with the GNU C Library; if not, write to the Free
|
||||
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||
02111-1307 USA. */
|
||||
|
||||
#include <sysdep.h>
|
||||
|
||||
#define SYSOP_semtimedop 4
|
||||
|
||||
#define SVRSP 8 /* saved register space */
|
||||
#define PARMS 4+SVRSP /* space for 3 saved regs */
|
||||
#define SEMID PARMS
|
||||
#define SOPS SEMID+4
|
||||
#define NSOPS SOPS+4
|
||||
#define TIMEOUT NSOPS+4
|
||||
|
||||
.text
|
||||
ENTRY (semtimedop)
|
||||
|
||||
/* Save registers. */
|
||||
move.l %d2, %a1
|
||||
move.l %d3, -(%sp)
|
||||
move.l %d5, -(%sp)
|
||||
|
||||
move.l #SYSOP_semtimedop, %d1
|
||||
move.l SEMID(%sp), %d2
|
||||
move.l NSOPS(%sp), %d3
|
||||
move.l SOPS(%sp), %d5
|
||||
move.l TIMEOUT(%sp), %a0
|
||||
move.l #SYS_ify (ipc), %d0
|
||||
|
||||
trap #0
|
||||
|
||||
/* Restore registers. */
|
||||
move.l (%sp)+, %d5
|
||||
move.l (%sp)+, %d3
|
||||
move.l %a1, %d2
|
||||
|
||||
/* Check for error. */
|
||||
tst.l %d0
|
||||
jmi SYSCALL_ERROR_LABEL
|
||||
|
||||
/* Successful; return the syscall's value. */
|
||||
ret
|
||||
|
||||
PSEUDO_END (semtimedop)
|
@ -1 +0,0 @@
|
||||
#include <sysdeps/unix/sysv/linux/i386/setegid.c>
|
@ -1 +0,0 @@
|
||||
#include <sysdeps/unix/sysv/linux/i386/seteuid.c>
|
@ -1 +0,0 @@
|
||||
#include <sysdeps/unix/sysv/linux/i386/setfsgid.c>
|
@ -1 +0,0 @@
|
||||
#include <sysdeps/unix/sysv/linux/i386/setfsuid.c>
|
@ -1 +0,0 @@
|
||||
#include <sysdeps/unix/sysv/linux/i386/setgid.c>
|
@ -1,2 +0,0 @@
|
||||
/* We also have to rewrite the kernel gid_t to the user land type. */
|
||||
#include <sysdeps/unix/sysv/linux/i386/setgroups.c>
|
@ -1 +0,0 @@
|
||||
#include <sysdeps/unix/sysv/linux/i386/setregid.c>
|
@ -1 +0,0 @@
|
||||
#include <sysdeps/unix/sysv/linux/i386/setresgid.c>
|
@ -1 +0,0 @@
|
||||
#include <sysdeps/unix/sysv/linux/i386/setresuid.c>
|
@ -1 +0,0 @@
|
||||
#include <sysdeps/unix/sysv/linux/i386/setreuid.c>
|
@ -1 +0,0 @@
|
||||
#include <sysdeps/unix/sysv/linux/i386/setrlimit.c>
|
@ -1 +0,0 @@
|
||||
#include <sysdeps/unix/sysv/linux/i386/setuid.c>
|
@ -1 +0,0 @@
|
||||
#include <sysdeps/unix/sysv/linux/i386/shmctl.c>
|
@ -1,26 +0,0 @@
|
||||
/* Copyright (C) 1998, 1999, 2001 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>, 1998.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Lesser General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 2.1 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
|
||||
Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public
|
||||
License along with the GNU C Library; if not, write to the Free
|
||||
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||
02111-1307 USA. */
|
||||
|
||||
#define SIGCONTEXT int _code, struct sigcontext *
|
||||
#define SIGCONTEXT_EXTRA_ARGS _code,
|
||||
#define GET_PC(ctx) ((void *) (ctx)->sc_pc)
|
||||
#define GET_FRAME(ctx) ((void *) __builtin_frame_address (1))
|
||||
#define GET_STACK(ctx) ((void *) (ctx)->sc_usp)
|
||||
#define CALL_SIGHANDLER(handler, signo, ctx) \
|
||||
(handler)((signo), SIGCONTEXT_EXTRA_ARGS (ctx))
|
@ -1,111 +0,0 @@
|
||||
/* Copyright (C) 1996, 1997, 1998 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 Lesser General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 2.1 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
|
||||
Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public
|
||||
License along with the GNU C Library; if not, write to the Free
|
||||
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||
02111-1307 USA. */
|
||||
|
||||
#include <sysdep-cancel.h>
|
||||
#include <socketcall.h>
|
||||
|
||||
#define P(a, b) P2(a, b)
|
||||
#define P2(a, b) a##b
|
||||
|
||||
.text
|
||||
/* The socket-oriented system calls are handled unusally in Linux.
|
||||
They are all gated through the single `socketcall' system call number.
|
||||
`socketcall' takes two arguments: the first is the subcode, specifying
|
||||
which socket function is being called; and the second is a pointer to
|
||||
the arguments to the specific function.
|
||||
|
||||
The .S files for the other calls just #define socket and #include this. */
|
||||
|
||||
#ifndef __socket
|
||||
#ifndef NO_WEAK_ALIAS
|
||||
#define __socket P(__,socket)
|
||||
#else
|
||||
#define __socket socket
|
||||
#endif
|
||||
#endif
|
||||
|
||||
.globl __socket
|
||||
ENTRY (__socket)
|
||||
#if defined NEED_CANCELLATION && defined CENABLE
|
||||
SINGLE_THREAD_P
|
||||
jne 1f
|
||||
#endif
|
||||
|
||||
/* Save registers. */
|
||||
move.l %d2, %a0
|
||||
|
||||
move.l #SYS_ify (socketcall), %d0 /* System call number in %d0. */
|
||||
|
||||
/* Use ## so `socket' is a separate token that might be #define'd. */
|
||||
move.l #P (SOCKOP_,socket), %d1 /* Subcode is first arg to syscall. */
|
||||
lea 4(%sp), %a1 /* Address of args is 2nd arg. */
|
||||
move.l %a1, %d2
|
||||
|
||||
/* Do the system call trap. */
|
||||
trap #0
|
||||
|
||||
/* Restore registers. */
|
||||
move.l %a0, %d2
|
||||
|
||||
/* %d0 is < 0 if there was an error. */
|
||||
tst.l %d0
|
||||
jmi SYSCALL_ERROR_LABEL
|
||||
|
||||
/* Successful; return the syscall's value. */
|
||||
rts
|
||||
|
||||
#if defined NEED_CANCELLATION && defined CENABLE
|
||||
1: /* Enable asynchronous cancellation. */
|
||||
CENABLE
|
||||
|
||||
/* Save registers. */
|
||||
move.l %d2, -(%sp)
|
||||
move.l %d0, -(%sp)
|
||||
|
||||
move.l #SYS_ify (socketcall), %d0 /* System call number in %d0. */
|
||||
|
||||
/* Use ## so `socket' is a separate token that might be #define'd. */
|
||||
move.l #P (SOCKOP_,socket), %d1 /* Subcode is first arg to syscall. */
|
||||
lea 4+8(%sp), %a1 /* Address of args is 2nd arg. */
|
||||
move.l %a1, %d2
|
||||
|
||||
/* Do the system call trap. */
|
||||
trap #0
|
||||
|
||||
/* Restore cancellation. */
|
||||
move.l %d0, %d2
|
||||
CDISABLE
|
||||
addq.l #4, %sp
|
||||
move.l %d2, %d0
|
||||
|
||||
/* Restore registers. */
|
||||
move.l (%sp)+, %d2
|
||||
|
||||
/* %d0 is < 0 if there was an error. */
|
||||
tst.l %d0
|
||||
jmi SYSCALL_ERROR_LABEL
|
||||
|
||||
/* Successful; return the syscall's value. */
|
||||
rts
|
||||
#endif
|
||||
|
||||
PSEUDO_END (__socket)
|
||||
|
||||
#ifndef NO_WEAK_ALIAS
|
||||
weak_alias (__socket, socket)
|
||||
#endif
|
@ -1,126 +0,0 @@
|
||||
/* Copyright (C) 1996, 1997, 1999, 2000, 2001 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 Lesser General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 2.1 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
|
||||
Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public
|
||||
License along with the GNU C Library; if not, write to the Free
|
||||
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||
02111-1307 USA. */
|
||||
|
||||
#ifndef _SYS_PROCFS_H
|
||||
#define _SYS_PROCFS_H 1
|
||||
|
||||
/* This is somewhat modelled after the file of the same name on SVR4
|
||||
systems. It provides a definition of the core file format for ELF
|
||||
used on Linux. It doesn't have anything to do with the /proc file
|
||||
system, even though Linux has one.
|
||||
|
||||
Anyway, the whole purpose of this file is for GDB and GDB only.
|
||||
Don't read too much into it. Don't use it for anything other than
|
||||
GDB unless you know what you are doing. */
|
||||
|
||||
#include <features.h>
|
||||
#include <sys/time.h>
|
||||
#include <sys/types.h>
|
||||
#include <sys/user.h>
|
||||
|
||||
__BEGIN_DECLS
|
||||
|
||||
/* Type for a general-purpose register. */
|
||||
typedef unsigned long elf_greg_t;
|
||||
|
||||
/* And the whole bunch of them. We could have used `struct
|
||||
user_regs_struct' directly in the typedef, but tradition says that
|
||||
the register set is an array, which does have some peculiar
|
||||
semantics, so leave it that way. */
|
||||
#define ELF_NGREG (sizeof (struct user_regs_struct) / sizeof(elf_greg_t))
|
||||
typedef elf_greg_t elf_gregset_t[ELF_NGREG];
|
||||
|
||||
/* Register set for the floating-point registers. */
|
||||
typedef struct user_m68kfp_struct elf_fpregset_t;
|
||||
|
||||
|
||||
/* Signal info. */
|
||||
struct elf_siginfo
|
||||
{
|
||||
int si_signo; /* Signal number. */
|
||||
int si_code; /* Extra code. */
|
||||
int si_errno; /* Errno. */
|
||||
};
|
||||
|
||||
|
||||
/* Definitions to generate Intel SVR4-like core files. These mostly
|
||||
have the same names as the SVR4 types with "elf_" tacked on the
|
||||
front to prevent clashes with Linux definitions, and the typedef
|
||||
forms have been avoided. This is mostly like the SVR4 structure,
|
||||
but more Linuxy, with things that Linux does not support and which
|
||||
GDB doesn't really use excluded. */
|
||||
|
||||
struct elf_prstatus
|
||||
{
|
||||
struct elf_siginfo pr_info; /* Info associated with signal. */
|
||||
short int pr_cursig; /* Current signal. */
|
||||
unsigned long int pr_sigpend; /* Set of pending signals. */
|
||||
unsigned long int pr_sighold; /* Set of held signals. */
|
||||
__pid_t pr_pid;
|
||||
__pid_t pr_ppid;
|
||||
__pid_t pr_pgrp;
|
||||
__pid_t pr_sid;
|
||||
struct timeval pr_utime; /* User time. */
|
||||
struct timeval pr_stime; /* System time. */
|
||||
struct timeval pr_cutime; /* Cumulative user time. */
|
||||
struct timeval pr_cstime; /* Cumulative system time. */
|
||||
elf_gregset_t pr_reg; /* GP registers. */
|
||||
int pr_fpvalid; /* True if math copro being used. */
|
||||
};
|
||||
|
||||
|
||||
#define ELF_PRARGSZ (80) /* Number of chars for args. */
|
||||
|
||||
struct elf_prpsinfo
|
||||
{
|
||||
char pr_state; /* Numeric process state. */
|
||||
char pr_sname; /* Char for pr_state. */
|
||||
char pr_zomb; /* Zombie. */
|
||||
char pr_nice; /* Nice val. */
|
||||
unsigned long int pr_flag; /* Flags. */
|
||||
unsigned short int pr_uid;
|
||||
unsigned short int pr_gid;
|
||||
int pr_pid, pr_ppid, pr_pgrp, pr_sid;
|
||||
/* Lots missing */
|
||||
char pr_fname[16]; /* Filename of executable. */
|
||||
char pr_psargs[ELF_PRARGSZ]; /* Initial part of arg list. */
|
||||
};
|
||||
|
||||
|
||||
/* The rest of this file provides the types for emulation of the
|
||||
Solaris <proc_service.h> interfaces that should be implemented by
|
||||
users of libthread_db. */
|
||||
|
||||
/* Addresses. */
|
||||
typedef void *psaddr_t;
|
||||
|
||||
/* Register sets. Linux has different names. */
|
||||
typedef elf_gregset_t prgregset_t;
|
||||
typedef elf_fpregset_t prfpregset_t;
|
||||
|
||||
/* We don't have any differences between processes and threads,
|
||||
therefore have only one PID type. */
|
||||
typedef __pid_t lwpid_t;
|
||||
|
||||
/* Process status and info. In the end we do provide typedefs for them. */
|
||||
typedef struct elf_prstatus prstatus_t;
|
||||
typedef struct elf_prpsinfo prpsinfo_t;
|
||||
|
||||
__END_DECLS
|
||||
|
||||
#endif /* sys/procfs.h */
|
@ -1,89 +0,0 @@
|
||||
/* Copyright (C) 1998 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 Lesser General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 2.1 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
|
||||
Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public
|
||||
License along with the GNU C Library; if not, write to the Free
|
||||
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||
02111-1307 USA. */
|
||||
|
||||
#ifndef _SYS_REG_H
|
||||
#define _SYS_REG_H 1
|
||||
|
||||
/* Index into an array of 4 byte integers returned from ptrace for
|
||||
location of the users' stored general purpose registers. */
|
||||
|
||||
enum
|
||||
{
|
||||
PT_D1 = 0,
|
||||
#define PT_D1 PT_D1
|
||||
PT_D2 = 1,
|
||||
#define PT_D2 PT_D2
|
||||
PT_D3 = 2,
|
||||
#define PT_D3 PT_D3
|
||||
PT_D4 = 3,
|
||||
#define PT_D4 PT_D4
|
||||
PT_D5 = 4,
|
||||
#define PT_D5 PT_D5
|
||||
PT_D6 = 5,
|
||||
#define PT_D6 PT_D6
|
||||
PT_D7 = 6,
|
||||
#define PT_D7 PT_D7
|
||||
PT_A0 = 7,
|
||||
#define PT_A0 PT_A0
|
||||
PT_A1 = 8,
|
||||
#define PT_A1 PT_A1
|
||||
PT_A2 = 9,
|
||||
#define PT_A2 PT_A2
|
||||
PT_A3 = 10,
|
||||
#define PT_A3 PT_A3
|
||||
PT_A4 = 11,
|
||||
#define PT_A4 PT_A4
|
||||
PT_A5 = 12,
|
||||
#define PT_A5 PT_A5
|
||||
PT_A6 = 13,
|
||||
#define PT_A6 PT_A6
|
||||
PT_D0 = 14,
|
||||
#define PT_D0 PT_D0
|
||||
PT_USP = 15,
|
||||
#define PT_USP PT_USP
|
||||
PT_ORIG_D0 = 16,
|
||||
#define PT_ORIG_D0 PT_ORIG_D0
|
||||
PT_SR = 17,
|
||||
#define PT_SR PT_SR
|
||||
PT_PC = 18,
|
||||
#define PT_PC PT_PC
|
||||
PT_FP0 = 21,
|
||||
#define PT_FP0 PT_FP0
|
||||
PT_FP1 = 24,
|
||||
#define PT_FP1 PT_FP1
|
||||
PT_FP2 = 27,
|
||||
#define PT_FP2 PT_FP2
|
||||
PT_FP3 = 30,
|
||||
#define PT_FP3 PT_FP3
|
||||
PT_FP4 = 33,
|
||||
#define PT_FP4 PT_FP4
|
||||
PT_FP5 = 36,
|
||||
#define PT_FP5 PT_FP5
|
||||
PT_FP6 = 39,
|
||||
#define PT_FP6 PT_FP6
|
||||
PT_FP7 = 42,
|
||||
#define PT_FP7 PT_FP7
|
||||
PT_FPCR = 45,
|
||||
#define PT_FPCR PT_FPCR
|
||||
PT_FPSR = 46,
|
||||
#define PT_FPSR PT_FPSR
|
||||
PT_FPIAR = 47
|
||||
#define PT_FPIAR PT_FPIAR
|
||||
};
|
||||
|
||||
#endif /* _SYS_REG_H */
|
@ -1,109 +0,0 @@
|
||||
/* Copyright (C) 1997, 1999, 2001 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 Lesser General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 2.1 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
|
||||
Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public
|
||||
License along with the GNU C Library; if not, write to the Free
|
||||
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||
02111-1307 USA. */
|
||||
|
||||
/* System V/m68k ABI compliant context switching support. */
|
||||
|
||||
#ifndef _SYS_UCONTEXT_H
|
||||
#define _SYS_UCONTEXT_H 1
|
||||
|
||||
#include <features.h>
|
||||
#include <signal.h>
|
||||
|
||||
/* Type for general register. */
|
||||
typedef int greg_t;
|
||||
|
||||
/* Number of general registers. */
|
||||
#define NGREG 18
|
||||
|
||||
/* Container for all general registers. */
|
||||
typedef greg_t gregset_t[NGREG];
|
||||
|
||||
/* Number of each register is the `gregset_t' array. */
|
||||
enum
|
||||
{
|
||||
R_D0 = 0,
|
||||
#define R_D0 R_D0
|
||||
R_D1 = 1,
|
||||
#define R_D1 R_D1
|
||||
R_D2 = 2,
|
||||
#define R_D2 R_D2
|
||||
R_D3 = 3,
|
||||
#define R_D3 R_D3
|
||||
R_D4 = 4,
|
||||
#define R_D4 R_D4
|
||||
R_D5 = 5,
|
||||
#define R_D5 R_D5
|
||||
R_D6 = 6,
|
||||
#define R_D6 R_D6
|
||||
R_D7 = 7,
|
||||
#define R_D7 R_D7
|
||||
R_A0 = 8,
|
||||
#define R_A0 R_A0
|
||||
R_A1 = 9,
|
||||
#define R_A1 R_A1
|
||||
R_A2 = 10,
|
||||
#define R_A2 R_A2
|
||||
R_A3 = 11,
|
||||
#define R_A3 R_A3
|
||||
R_A4 = 12,
|
||||
#define R_A4 R_A4
|
||||
R_A5 = 13,
|
||||
#define R_A5 R_A5
|
||||
R_A6 = 14,
|
||||
#define R_A6 R_A6
|
||||
R_A7 = 15,
|
||||
#define R_A7 R_A7
|
||||
R_SP = 15,
|
||||
#define R_SP R_SP
|
||||
R_PC = 16,
|
||||
#define R_PC R_PC
|
||||
R_PS = 17
|
||||
#define R_PS R_PS
|
||||
};
|
||||
|
||||
/* Structure to describe FPU registers. */
|
||||
typedef struct fpregset
|
||||
{
|
||||
int f_fpregs[8][3];
|
||||
int f_pcr;
|
||||
int f_psr;
|
||||
int f_fpiaddr;
|
||||
} fpregset_t;
|
||||
|
||||
/* Context to describe whole processor state. */
|
||||
typedef struct
|
||||
{
|
||||
int version;
|
||||
gregset_t gregs;
|
||||
fpregset_t fpregs;
|
||||
} mcontext_t;
|
||||
|
||||
#define MCONTEXT_VERSION 2
|
||||
|
||||
/* Userlevel context. */
|
||||
typedef struct ucontext
|
||||
{
|
||||
unsigned long int uc_flags;
|
||||
struct ucontext *uc_link;
|
||||
__sigset_t uc_sigmask;
|
||||
stack_t uc_stack;
|
||||
mcontext_t uc_mcontext;
|
||||
long int uc_filler[174];
|
||||
} ucontext_t;
|
||||
|
||||
#endif /* sys/ucontext.h */
|
@ -1,33 +0,0 @@
|
||||
/* Copyright (C) 1996, 1998 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 Lesser General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 2.1 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
|
||||
Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public
|
||||
License along with the GNU C Library; if not, write to the Free
|
||||
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||
02111-1307 USA. */
|
||||
|
||||
#include <sysdep.h>
|
||||
|
||||
/* Please consult the file sysdeps/unix/sysv/linux/m68k/sysdep.h for
|
||||
more information about the value -4095 used below.*/
|
||||
|
||||
.text
|
||||
ENTRY (syscall)
|
||||
move.l 4(%sp), %d0 /* Load syscall number. */
|
||||
_DOARGS_5 (24) /* Frob arguments. */
|
||||
trap &0 /* Do the system call. */
|
||||
UNDOARGS_5 /* Unfrob arguments. */
|
||||
cmp.l &-4095, %d0 /* Check %d0 for error. */
|
||||
jcc SYSCALL_ERROR_LABEL /* Jump to error handler if negative. */
|
||||
rts /* Return to caller. */
|
||||
PSEUDO_END (syscall)
|
@ -1,5 +0,0 @@
|
||||
# File name Caller Syscall name Args Strong name Weak names
|
||||
|
||||
cacheflush EXTRA cacheflush i:iiii __cacheflush cacheflush
|
||||
oldgetrlimit EXTRA getrlimit i:ip __old_getrlimit getrlimit@GLIBC_2.0
|
||||
oldsetrlimit EXTRA setrlimit i:ip __old_setrlimit setrlimit@GLIBC_2.0
|
@ -1,49 +0,0 @@
|
||||
/* Copyright (C) 1996, 2002 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 Lesser General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 2.1 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
|
||||
Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public
|
||||
License along with the GNU C Library; if not, write to the Free
|
||||
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||
02111-1307 USA. */
|
||||
|
||||
#include <sysdep.h>
|
||||
|
||||
|
||||
/* The following code is only used in the shared library when we
|
||||
compile the reentrant version. Otherwise each system call defines
|
||||
each own version. */
|
||||
|
||||
#ifndef PIC
|
||||
|
||||
/* The syscall stubs jump here when they detect an error. */
|
||||
|
||||
#undef CALL_MCOUNT
|
||||
#define CALL_MCOUNT /* Don't insert the profiling call, it clobbers %d0. */
|
||||
|
||||
.text
|
||||
ENTRY (__syscall_error)
|
||||
neg.l %d0
|
||||
#ifndef _LIBC_REENTRANT
|
||||
move.l %d0, errno
|
||||
#else
|
||||
move.l %d0, -(%sp)
|
||||
jbsr __errno_location
|
||||
move.l (%sp)+, (%a0)
|
||||
#endif
|
||||
move.l #-1, %d0
|
||||
/* Copy return value to %a0 for syscalls that are declared to
|
||||
return a pointer. */
|
||||
move.l %d0, %a0
|
||||
rts
|
||||
END (__syscall_error)
|
||||
#endif /* PIC */
|
@ -1,295 +0,0 @@
|
||||
/* Copyright (C) 1996, 1997, 1998, 2000, 2003, 2004 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Written by Andreas Schwab, <schwab@issan.informatik.uni-dortmund.de>,
|
||||
December 1995.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Lesser General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 2.1 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
|
||||
Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public
|
||||
License along with the GNU C Library; if not, write to the Free
|
||||
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||
02111-1307 USA. */
|
||||
|
||||
#include <sysdeps/unix/sysdep.h>
|
||||
#include <sysdeps/m68k/sysdep.h>
|
||||
|
||||
/* Defines RTLD_PRIVATE_ERRNO. */
|
||||
#include <dl-sysdep.h>
|
||||
|
||||
/* For Linux we can use the system call table in the header file
|
||||
/usr/include/asm/unistd.h
|
||||
of the kernel. But these symbols do not follow the SYS_* syntax
|
||||
so we have to redefine the `SYS_ify' macro here. */
|
||||
#undef SYS_ify
|
||||
#ifdef __STDC__
|
||||
# define SYS_ify(syscall_name) __NR_##syscall_name
|
||||
#else
|
||||
# define SYS_ify(syscall_name) __NR_/**/syscall_name
|
||||
#endif
|
||||
|
||||
#ifdef __ASSEMBLER__
|
||||
|
||||
/* Linux uses a negative return value to indicate syscall errors, unlike
|
||||
most Unices, which use the condition codes' carry flag.
|
||||
|
||||
Since version 2.1 the return value of a system call might be negative
|
||||
even if the call succeeded. E.g., the `lseek' system call might return
|
||||
a large offset. Therefore we must not anymore test for < 0, but test
|
||||
for a real error by making sure the value in %d0 is a real error
|
||||
number. Linus said he will make sure the no syscall returns a value
|
||||
in -1 .. -4095 as a valid result so we can savely test with -4095. */
|
||||
|
||||
/* We don't want the label for the error handler to be visible in the symbol
|
||||
table when we define it here. */
|
||||
#ifdef PIC
|
||||
#define SYSCALL_ERROR_LABEL .Lsyscall_error
|
||||
#else
|
||||
#define SYSCALL_ERROR_LABEL __syscall_error
|
||||
#endif
|
||||
|
||||
#undef PSEUDO
|
||||
#define PSEUDO(name, syscall_name, args) \
|
||||
.text; \
|
||||
ENTRY (name) \
|
||||
DO_CALL (syscall_name, args); \
|
||||
cmp.l &-4095, %d0; \
|
||||
jcc SYSCALL_ERROR_LABEL
|
||||
|
||||
#undef PSEUDO_END
|
||||
#define PSEUDO_END(name) \
|
||||
SYSCALL_ERROR_HANDLER; \
|
||||
END (name)
|
||||
|
||||
#undef PSEUDO_NOERRNO
|
||||
#define PSEUDO_NOERRNO(name, syscall_name, args) \
|
||||
.text; \
|
||||
ENTRY (name) \
|
||||
DO_CALL (syscall_name, args)
|
||||
|
||||
#undef PSEUDO_END_NOERRNO
|
||||
#define PSEUDO_END_NOERRNO(name) \
|
||||
END (name)
|
||||
|
||||
#define ret_NOERRNO rts
|
||||
|
||||
/* The function has to return the error code. */
|
||||
#undef PSEUDO_ERRVAL
|
||||
#define PSEUDO_ERRVAL(name, syscall_name, args) \
|
||||
.text; \
|
||||
ENTRY (name) \
|
||||
DO_CALL (syscall_name, args); \
|
||||
negl %d0
|
||||
|
||||
#undef PSEUDO_END_ERRVAL
|
||||
#define PSEUDO_END_ERRVAL(name) \
|
||||
END (name)
|
||||
|
||||
#define ret_ERRVAL rts
|
||||
|
||||
#ifdef PIC
|
||||
# if RTLD_PRIVATE_ERRNO
|
||||
# define SYSCALL_ERROR_HANDLER \
|
||||
SYSCALL_ERROR_LABEL: \
|
||||
lea (rtld_errno, %pc), %a0; \
|
||||
neg.l %d0; \
|
||||
move.l %d0, (%a0); \
|
||||
move.l &-1, %d0; \
|
||||
/* Copy return value to %a0 for syscalls that are declared to return \
|
||||
a pointer (e.g., mmap). */ \
|
||||
move.l %d0, %a0; \
|
||||
rts;
|
||||
# else /* !RTLD_PRIVATE_ERRNO */
|
||||
/* Store (- %d0) into errno through the GOT. */
|
||||
# if defined _LIBC_REENTRANT
|
||||
# define SYSCALL_ERROR_HANDLER \
|
||||
SYSCALL_ERROR_LABEL: \
|
||||
neg.l %d0; \
|
||||
move.l %d0, -(%sp); \
|
||||
jbsr __errno_location@PLTPC; \
|
||||
move.l (%sp)+, (%a0); \
|
||||
move.l &-1, %d0; \
|
||||
/* Copy return value to %a0 for syscalls that are declared to return \
|
||||
a pointer (e.g., mmap). */ \
|
||||
move.l %d0, %a0; \
|
||||
rts;
|
||||
# else /* !_LIBC_REENTRANT */
|
||||
# define SYSCALL_ERROR_HANDLER \
|
||||
SYSCALL_ERROR_LABEL: \
|
||||
move.l (errno@GOTPC, %pc), %a0; \
|
||||
neg.l %d0; \
|
||||
move.l %d0, (%a0); \
|
||||
move.l &-1, %d0; \
|
||||
/* Copy return value to %a0 for syscalls that are declared to return \
|
||||
a pointer (e.g., mmap). */ \
|
||||
move.l %d0, %a0; \
|
||||
rts;
|
||||
# endif /* _LIBC_REENTRANT */
|
||||
# endif /* RTLD_PRIVATE_ERRNO */
|
||||
#else
|
||||
# define SYSCALL_ERROR_HANDLER /* Nothing here; code in sysdep.S is used. */
|
||||
#endif /* PIC */
|
||||
|
||||
/* Linux takes system call arguments in registers:
|
||||
|
||||
syscall number %d0 call-clobbered
|
||||
arg 1 %d1 call-clobbered
|
||||
arg 2 %d2 call-saved
|
||||
arg 3 %d3 call-saved
|
||||
arg 4 %d4 call-saved
|
||||
arg 5 %d5 call-saved
|
||||
|
||||
The stack layout upon entering the function is:
|
||||
|
||||
20(%sp) Arg# 5
|
||||
16(%sp) Arg# 4
|
||||
12(%sp) Arg# 3
|
||||
8(%sp) Arg# 2
|
||||
4(%sp) Arg# 1
|
||||
(%sp) Return address
|
||||
|
||||
(Of course a function with say 3 arguments does not have entries for
|
||||
arguments 4 and 5.)
|
||||
|
||||
Separate move's are faster than movem, but need more space. Since
|
||||
speed is more important, we don't use movem. Since %a0 and %a1 are
|
||||
scratch registers, we can use them for saving as well. */
|
||||
|
||||
#define DO_CALL(syscall_name, args) \
|
||||
move.l &SYS_ify(syscall_name), %d0; \
|
||||
DOARGS_##args \
|
||||
trap &0; \
|
||||
UNDOARGS_##args
|
||||
|
||||
#define DOARGS_0 /* No arguments to frob. */
|
||||
#define UNDOARGS_0 /* No arguments to unfrob. */
|
||||
#define _DOARGS_0(n) /* No arguments to frob. */
|
||||
|
||||
#define DOARGS_1 _DOARGS_1 (4)
|
||||
#define _DOARGS_1(n) move.l n(%sp), %d1; _DOARGS_0 (n)
|
||||
#define UNDOARGS_1 UNDOARGS_0
|
||||
|
||||
#define DOARGS_2 _DOARGS_2 (8)
|
||||
#define _DOARGS_2(n) move.l %d2, %a0; move.l n(%sp), %d2; _DOARGS_1 (n-4)
|
||||
#define UNDOARGS_2 UNDOARGS_1; move.l %a0, %d2
|
||||
|
||||
#define DOARGS_3 _DOARGS_3 (12)
|
||||
#define _DOARGS_3(n) move.l %d3, %a1; move.l n(%sp), %d3; _DOARGS_2 (n-4)
|
||||
#define UNDOARGS_3 UNDOARGS_2; move.l %a1, %d3
|
||||
|
||||
#define DOARGS_4 _DOARGS_4 (16)
|
||||
#define _DOARGS_4(n) move.l %d4, -(%sp); move.l n+4(%sp), %d4; _DOARGS_3 (n)
|
||||
#define UNDOARGS_4 UNDOARGS_3; move.l (%sp)+, %d4
|
||||
|
||||
#define DOARGS_5 _DOARGS_5 (20)
|
||||
#define _DOARGS_5(n) move.l %d5, -(%sp); move.l n+4(%sp), %d5; _DOARGS_4 (n)
|
||||
#define UNDOARGS_5 UNDOARGS_4; move.l (%sp)+, %d5
|
||||
|
||||
|
||||
#define ret rts
|
||||
#if 0 /* Not used by Linux */
|
||||
#define r0 %d0
|
||||
#define r1 %d1
|
||||
#define MOVE(x,y) movel x , y
|
||||
#endif
|
||||
|
||||
#else /* not __ASSEMBLER__ */
|
||||
|
||||
/* Define a macro which expands into the inline wrapper code for a system
|
||||
call. */
|
||||
#undef INLINE_SYSCALL
|
||||
#define INLINE_SYSCALL(name, nr, args...) \
|
||||
({ unsigned int _sys_result = INTERNAL_SYSCALL (name, , nr, args); \
|
||||
if (__builtin_expect (INTERNAL_SYSCALL_ERROR_P (_sys_result, ), 0))\
|
||||
{ \
|
||||
__set_errno (INTERNAL_SYSCALL_ERRNO (_sys_result, )); \
|
||||
_sys_result = (unsigned int) -1; \
|
||||
} \
|
||||
(int) _sys_result; })
|
||||
|
||||
#undef INTERNAL_SYSCALL_DECL
|
||||
#define INTERNAL_SYSCALL_DECL(err) do { } while (0)
|
||||
|
||||
/* Define a macro which expands inline into the wrapper code for a system
|
||||
call. This use is for internal calls that do not need to handle errors
|
||||
normally. It will never touch errno. This returns just what the kernel
|
||||
gave back. */
|
||||
#undef INTERNAL_SYSCALL
|
||||
#define INTERNAL_SYSCALL(name, err, nr, args...) \
|
||||
({ unsigned int _sys_result; \
|
||||
{ \
|
||||
/* Load argument values in temporary variables
|
||||
to perform side effects like function calls
|
||||
before the call used registers are set. */ \
|
||||
LOAD_ARGS_##nr (args) \
|
||||
LOAD_REGS_##nr \
|
||||
register int _d0 asm ("%d0") = __NR_##name; \
|
||||
asm volatile ("trap #0" \
|
||||
: "=d" (_d0) \
|
||||
: "0" (_d0) ASM_ARGS_##nr \
|
||||
: "memory"); \
|
||||
_sys_result = _d0; \
|
||||
} \
|
||||
(int) _sys_result; })
|
||||
|
||||
#undef INTERNAL_SYSCALL_ERROR_P
|
||||
#define INTERNAL_SYSCALL_ERROR_P(val, err) \
|
||||
((unsigned int) (val) >= -4095U)
|
||||
|
||||
#undef INTERNAL_SYSCALL_ERRNO
|
||||
#define INTERNAL_SYSCALL_ERRNO(val, err) (-(val))
|
||||
|
||||
#define LOAD_ARGS_0()
|
||||
#define LOAD_REGS_0
|
||||
#define ASM_ARGS_0
|
||||
#define LOAD_ARGS_1(a1) \
|
||||
LOAD_ARGS_0 () \
|
||||
int __arg1 = (int) (a1);
|
||||
#define LOAD_REGS_1 \
|
||||
register int _d1 asm ("d1") = __arg1; \
|
||||
LOAD_REGS_0
|
||||
#define ASM_ARGS_1 ASM_ARGS_0, "d" (_d1)
|
||||
#define LOAD_ARGS_2(a1, a2) \
|
||||
LOAD_ARGS_1 (a1) \
|
||||
int __arg2 = (int) (a2);
|
||||
#define LOAD_REGS_2 \
|
||||
register int _d2 asm ("d2") = __arg2; \
|
||||
LOAD_REGS_1
|
||||
#define ASM_ARGS_2 ASM_ARGS_1, "d" (_d2)
|
||||
#define LOAD_ARGS_3(a1, a2, a3) \
|
||||
LOAD_ARGS_2 (a1, a2) \
|
||||
int __arg3 = (int) (a3);
|
||||
#define LOAD_REGS_3 \
|
||||
register int _d3 asm ("d3") = __arg3; \
|
||||
LOAD_REGS_2
|
||||
#define ASM_ARGS_3 ASM_ARGS_2, "d" (_d3)
|
||||
#define LOAD_ARGS_4(a1, a2, a3, a4) \
|
||||
LOAD_ARGS_3 (a1, a2, a3) \
|
||||
int __arg4 = (int) (a4);
|
||||
#define LOAD_REGS_4 \
|
||||
register int _d4 asm ("d4") = __arg4; \
|
||||
LOAD_REGS_3
|
||||
#define ASM_ARGS_4 ASM_ARGS_3, "d" (_d4)
|
||||
#define LOAD_ARGS_5(a1, a2, a3, a4, a5) \
|
||||
LOAD_ARGS_4 (a1, a2, a3, a4) \
|
||||
int __arg5 = (int) (a5);
|
||||
#define LOAD_REGS_5 \
|
||||
register int _d5 asm ("d5") = __arg5; \
|
||||
LOAD_REGS_4
|
||||
#define ASM_ARGS_5 ASM_ARGS_4, "d" (_d5)
|
||||
#define LOAD_ARGS_6(a1, a2, a3, a4, a5, a6) \
|
||||
LOAD_ARGS_5 (a1, a2, a3, a4, a5) \
|
||||
int __arg6 = (int) (a6);
|
||||
#define LOAD_REGS_6 \
|
||||
register int _a0 asm ("a0") = __arg6; \
|
||||
LOAD_REGS_5
|
||||
#define ASM_ARGS_6 ASM_ARGS_5, "a" (_a0)
|
||||
|
||||
#endif /* not __ASSEMBLER__ */
|
@ -1 +0,0 @@
|
||||
#include <sysdeps/unix/sysv/linux/i386/versionsort64.c>
|
@ -1,76 +0,0 @@
|
||||
/* Copyright (C) 1999, 2002, 2003 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by Andreas Schwab <schwab@gnu.org>.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Lesser General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 2.1 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
|
||||
Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public
|
||||
License along with the GNU C Library; if not, write to the Free
|
||||
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||
02111-1307 USA. */
|
||||
|
||||
#include <sysdep.h>
|
||||
#define _ERRNO_H 1
|
||||
#include <bits/errno.h>
|
||||
#include <kernel-features.h>
|
||||
|
||||
/* Clone the calling process, but without copying the whole address space.
|
||||
The calling process is suspended until the new process exits or is
|
||||
replaced by a call to `execve'. Return -1 for errors, 0 to the new process,
|
||||
and the process ID of the new process to the old process. */
|
||||
|
||||
ENTRY (__vfork)
|
||||
|
||||
#ifdef __NR_vfork
|
||||
|
||||
/* Pop the return PC value into A0. */
|
||||
movel %sp@+, %a0
|
||||
|
||||
/* Stuff the syscall number in D0 and trap into the kernel. */
|
||||
movel #SYS_ify (vfork), %d0
|
||||
trap #0
|
||||
tstl %d0
|
||||
jmi .Lerror /* Branch forward if it failed. */
|
||||
|
||||
/* Jump to the return PC. */
|
||||
jmp %a0@
|
||||
|
||||
.Lerror:
|
||||
/* Push back the return PC. */
|
||||
movel %a0,%sp@-
|
||||
|
||||
# ifdef __ASSUME_VFORK_SYSCALL
|
||||
# ifndef PIC
|
||||
jbra SYSCALL_ERROR_LABEL
|
||||
# endif
|
||||
# else
|
||||
/* Check if vfork syscall is known at all. */
|
||||
movel #-ENOSYS,%d1
|
||||
cmpl %d0,%d1
|
||||
jne SYSCALL_ERROR_LABEL
|
||||
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#ifndef __ASSUME_VFORK_SYSCALL
|
||||
/* If we don't have vfork, fork is close enough. */
|
||||
|
||||
movel #SYS_ify (fork), %d0
|
||||
trap #0
|
||||
tstl %d0
|
||||
jmi SYSCALL_ERROR_LABEL
|
||||
rts
|
||||
#endif
|
||||
|
||||
PSEUDO_END (__vfork)
|
||||
libc_hidden_def (__vfork)
|
||||
|
||||
weak_alias (__vfork, vfork)
|
@ -1 +0,0 @@
|
||||
#include <sysdeps/unix/sysv/linux/i386/xstat.c>
|
Reference in New Issue
Block a user