mirror of
https://sourceware.org/git/glibc.git
synced 2025-12-24 17:51:17 +03:00
2.5-18.1
This commit is contained in:
@@ -1,9 +0,0 @@
|
||||
clone.S
|
||||
mremap.S
|
||||
oldgetrlimit64.c
|
||||
setresuid.c
|
||||
setresgid.c
|
||||
setfsuid.c
|
||||
setfsgid.c
|
||||
sys/reg.h
|
||||
sys/procfs.h
|
||||
@@ -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,99 +0,0 @@
|
||||
/* Definitions for POSIX memory map interface. Linux/m68k version.
|
||||
Copyright (C) 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. */
|
||||
|
||||
#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
|
||||
#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. */
|
||||
#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 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 +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/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