1
0
mirror of https://sourceware.org/git/glibc.git synced 2025-08-01 10:06:57 +03:00
This commit is contained in:
Jakub Jelinek
2007-07-12 18:26:36 +00:00
parent 7d58530341
commit 0ecb606cb6
6215 changed files with 494638 additions and 305010 deletions

View File

@ -1,14 +0,0 @@
clone.S
dl-procinfo.h
ioperm.c
setresuid.c
setresgid.c
setfsuid.c
setfsgid.c
sigrestorer.S
bits/armsigctx.h
sys/elf.h
sys/io.h
sys/procfs.h
sys/user.h
oldgetrlimit64.c

View File

@ -1,12 +0,0 @@
ifeq ($(subdir),misc)
sysdep_routines += ioperm
sysdep_headers += sys/elf.h sys/io.h
endif
ifeq ($(subdir),signal)
sysdep_routines += sigrestorer
endif
ifeq ($(subdir),resource)
sysdep_routines += oldgetrlimit64
endif

View File

@ -1,37 +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;
}
GLIBC_2.1 {
ioperm; iopl;
inb; inw; inl;
outb; outw; outl;
}
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;
}
GLIBC_2.3.3 {
posix_fadvise64; posix_fallocate64;
}
}

View File

@ -1 +0,0 @@
#include <sysdeps/unix/sysv/linux/i386/alphasort64.c>

View File

@ -1,73 +0,0 @@
/* Definition of `struct sigcontext' for Linux/ARM
Copyright (C) 1996, 1997, 1998, 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. */
/* The format of struct sigcontext changed between 2.0 and 2.1 kernels.
Fortunately 2.0 puts a magic number in the first word and this is not
a legal value for `trap_no', so we can tell them apart. */
/* Early 2.2 and 2.3 kernels do not have the `fault_address' member in
the sigcontext structure. Unfortunately there is no reliable way
to test for its presence and this word will contain garbage for too-old
kernels. Versions 2.2.14 and 2.3.35 (plus later versions) are known to
include this element. */
#ifndef __ARMSIGCTX_H
#define __ARMSIGCTX_H 1
#include <asm/ptrace.h>
union k_sigcontext
{
struct
{
unsigned long int trap_no;
unsigned long int error_code;
unsigned long int oldmask;
unsigned long int arm_r0;
unsigned long int arm_r1;
unsigned long int arm_r2;
unsigned long int arm_r3;
unsigned long int arm_r4;
unsigned long int arm_r5;
unsigned long int arm_r6;
unsigned long int arm_r7;
unsigned long int arm_r8;
unsigned long int arm_r9;
unsigned long int arm_r10;
unsigned long int arm_fp;
unsigned long int arm_ip;
unsigned long int arm_sp;
unsigned long int arm_lr;
unsigned long int arm_pc;
unsigned long int arm_cpsr;
unsigned long fault_address;
} v21;
struct
{
unsigned long int magic;
struct pt_regs reg;
unsigned long int trap_no;
unsigned long int error_code;
unsigned long int oldmask;
} v20;
};
#define SIGCONTEXT_2_0_MAGIC 0x4B534154
#endif /* bits/armsigctx.h */

View File

@ -1,189 +0,0 @@
/* O_*, F_*, FD_* bit values for Linux.
Copyright (C) 1995-1998, 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
#ifdef __USE_LARGEFILE64
# define O_LARGEFILE 0400000
#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
/* 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

View File

@ -1,99 +0,0 @@
/* Definitions for POSIX memory map interface. Linux/ARM version.
Copyright (C) 1997, 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 include this file directly. Use <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

View File

@ -1,49 +0,0 @@
/* brk system call for Linux/ARM.
Copyright (C) 1995, 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 <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;
asm ("mov a1, %1\n" /* save the argment in r0 */
"swi %2\n" /* do the system call */
"mov %0, a1;" /* keep the return value */
: "=r"(newbrk)
: "r"(addr), "i" (SYS_ify (brk))
: "a1");
__curbrk = newbrk;
if (newbrk < addr)
{
__set_errno (ENOMEM);
return -1;
}
return 0;
}
weak_alias (__brk, brk)

View File

@ -1 +0,0 @@
#include <sysdeps/unix/sysv/linux/m68k/chown.c>

View File

@ -1,60 +0,0 @@
/* Copyright (C) 1996, 1997, 1998, 1999, 2002 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Pat Beirne <patb@corelcomputer.com>
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 args
cmp r0, #0
cmpne r1, #0
moveq r0, #-EINVAL
beq PLTJMP(syscall_error)
@ insert the args onto the new stack
str r3, [r1, #-4]!
str r0, [r1, #-4]!
@ do the system call
@ get flags
mov r0, r2
@ new sp is already in r1
swi SYS_ify(clone)
movs a1, a1
blt PLTJMP(C_SYMBOL_NAME(__syscall_error))
RETINSTR(ne, lr)
@ pick the function arg and call address off the stack and execute
ldr r0, [sp, #4]
mov lr, pc
ldr pc, [sp]
@ and we are done, passing the return value through r0
b PLTJMP(_exit)
PSEUDO_END (__clone)
weak_alias (__clone, clone)

View File

@ -1,64 +0,0 @@
/* Data for Linux/ARM version of processor capability information.
Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Philip Blundell <philb@gnu.org>, 2001.
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. */
/* This information must be kept in sync with the _DL_HWCAP_COUNT and
_DL_PLATFORM_COUNT definitions in procinfo.h.
If anything should be added here check whether the size of each string
is still ok with the given array size.
All the #ifdefs in the definitions ar equite irritating but
necessary if we want to avoid duplicating the information. There
are three different modes:
- PROCINFO_DECL is defined. This means we are only interested in
declarations.
- PROCINFO_DECL is not defined:
+ if SHARED is defined the file is included in an array
initializer. The .element = { ... } syntax is needed.
+ if SHARED is not defined a normal array initialization is
needed.
*/
#ifndef PROCINFO_CLASS
#define PROCINFO_CLASS
#endif
#if !defined PROCINFO_DECL && defined SHARED
._dl_arm_cap_flags
#else
PROCINFO_CLASS const char _dl_arm_cap_flags[8][10]
#endif
#ifndef PROCINFO_DECL
= {
"swp", "half", "thumb", "26bit", "fast-mult", "fpa", "vfp", "edsp",
}
#endif
#if !defined SHARED || defined PROCINFO_DECL
;
#else
,
#endif
#undef PROCINFO_DECL
#undef PROCINFO_CLASS

View File

@ -1,86 +0,0 @@
/* Linux/ARM version of processor capability information handling macros.
Copyright (C) 2001, 2002, 2004 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Philip Blundell <philb@gnu.org>, 2001.
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 _DL_PROCINFO_H
#define _DL_PROCINFO_H 1
#include <ldsodefs.h>
#define _DL_HWCAP_COUNT 8
/* The kernel provides platform data but it is not interesting. */
#define _DL_HWCAP_PLATFORM 0
static inline int
__attribute__ ((unused))
_dl_procinfo (int word)
{
int i;
_dl_printf ("AT_HWCAP: ");
for (i = 0; i < _DL_HWCAP_COUNT; ++i)
if (word & (1 << i))
_dl_printf (" %s", GLRO(dl_arm_cap_flags)[i]);
_dl_printf ("\n");
return 0;
}
static inline const char *
__attribute__ ((unused))
_dl_hwcap_string (int idx)
{
return GLRO(dl_arm_cap_flags)[idx];
};
enum
{
HWCAP_ARM_SWP = 1 << 0,
HWCAP_ARM_HALF = 1 << 1,
HWCAP_ARM_THUMB = 1 << 2,
HWCAP_ARM_26BIT = 1 << 3,
HWCAP_ARM_FAST_MULT = 1 << 4,
HWCAP_ARM_FPA = 1 << 5,
HWCAP_ARM_VFP = 1 << 6,
HWCAP_ARM_EDSP = 1 << 7,
HWCAP_IMPORTANT = (HWCAP_ARM_HALF | HWCAP_ARM_FAST_MULT)
};
static inline int
__attribute__ ((unused))
_dl_string_hwcap (const char *str)
{
int i;
for (i = 0; i < _DL_HWCAP_COUNT; i++)
{
if (strcmp (str, GLRO(dl_arm_cap_flags)[i]) == 0)
return i;
}
return -1;
};
#define _dl_string_platform(str) (-1)
#endif /* dl-procinfo.h */

View File

@ -1 +0,0 @@
#include <sysdeps/unix/sysv/linux/i386/fchown.c>

View File

@ -1 +0,0 @@
#include <sysdeps/unix/sysv/linux/i386/fcntl.c>

View File

@ -1 +0,0 @@
#include <sysdeps/unix/sysv/linux/i386/fxstat.c>

View File

@ -1 +0,0 @@
#include <sysdeps/unix/sysv/linux/i386/getdents64.c>

View File

@ -1 +0,0 @@
#include <sysdeps/unix/sysv/linux/i386/getegid.c>

View File

@ -1 +0,0 @@
#include <sysdeps/unix/sysv/linux/i386/geteuid.c>

View File

@ -1 +0,0 @@
#include <sysdeps/unix/sysv/linux/i386/getgid.c>

View File

@ -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>

View File

@ -1 +0,0 @@
#include <sysdeps/unix/sysv/linux/i386/getresgid.c>

View File

@ -1 +0,0 @@
#include <sysdeps/unix/sysv/linux/i386/getresuid.c>

View File

@ -1 +0,0 @@
#include <sysdeps/unix/sysv/linux/i386/getrlimit.c>

View File

@ -1 +0,0 @@
#include <sysdeps/unix/sysv/linux/i386/getrlimit64.c>

View File

@ -1 +0,0 @@
#include <sysdeps/unix/sysv/linux/i386/getuid.c>

View File

@ -1 +0,0 @@
#include <sysdeps/unix/sysv/linux/i386/glob64.c>

View File

@ -1,274 +0,0 @@
/* Copyright (C) 1998, 1999, 2003 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Phil Blundell, based on the Alpha version by
David Mosberger.
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. */
/* I/O port access on the ARM is something of a fiction. What we do is to
map an appropriate area of /dev/mem into user space so that a program
can blast away at the hardware in such a way as to generate I/O cycles
on the bus. To insulate user code from dependencies on particular
hardware we don't allow calls to inb() and friends to be inlined, but
force them to come through code in here every time. Performance-critical
registers tend to be memory mapped these days so this should be no big
problem. */
/* Once upon a time this file used mprotect to enable and disable
access to particular areas of I/O space. Unfortunately the
mprotect syscall also has the side effect of enabling caching for
the area affected (this is a kernel limitation). So we now just
enable all the ports all of the time. */
#include <errno.h>
#include <fcntl.h>
#include <stdio.h>
#include <ctype.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/mman.h>
#include <asm/page.h>
#include <sys/sysctl.h>
#define PATH_ARM_SYSTYPE "/etc/arm_systype"
#define PATH_CPUINFO "/proc/cpuinfo"
#define MAX_PORT 0x10000
static struct {
unsigned long int base;
unsigned long int io_base;
unsigned int shift;
unsigned int initdone; /* since all the above could be 0 */
} io;
#define IO_BASE_FOOTBRIDGE 0x7c000000
#define IO_SHIFT_FOOTBRIDGE 0
static struct platform {
const char *name;
unsigned long int io_base;
unsigned int shift;
} platform[] = {
/* All currently supported platforms are in fact the same. :-) */
{"Chalice-CATS", IO_BASE_FOOTBRIDGE, IO_SHIFT_FOOTBRIDGE},
{"DEC-EBSA285", IO_BASE_FOOTBRIDGE, IO_SHIFT_FOOTBRIDGE},
{"Corel-NetWinder", IO_BASE_FOOTBRIDGE, IO_SHIFT_FOOTBRIDGE},
{"Rebel-NetWinder", IO_BASE_FOOTBRIDGE, IO_SHIFT_FOOTBRIDGE},
};
#define IO_ADDR(port) (io.base + ((port) << io.shift))
/*
* Initialize I/O system. There are several ways to get the information
* we need. Each is tried in turn until one succeeds.
*
* 1. Sysctl (CTL_BUS, BUS_ISA, ISA_*). This is the preferred method
* but not all kernels support it.
*
* 2. Read the value (not the contents) of symlink PATH_ARM_SYSTYPE.
* - If it matches one of the entries in the table above, use the
* corresponding values.
* - If it begins with a number, assume this is a previously
* unsupported system and the values encode, in order,
* "<io_base>,<port_shift>".
*
* 3. Lookup the "system type" field in /proc/cpuinfo. Again, if it
* matches an entry in the platform[] table, use the corresponding
* values.
*/
static int
init_iosys (void)
{
char systype[256];
int i, n;
static int iobase_name[] = { CTL_BUS, BUS_ISA, BUS_ISA_PORT_BASE };
static int ioshift_name[] = { CTL_BUS, BUS_ISA, BUS_ISA_PORT_SHIFT };
size_t len = sizeof(io.base);
if (! sysctl (iobase_name, 3, &io.io_base, &len, NULL, 0)
&& ! sysctl (ioshift_name, 3, &io.shift, &len, NULL, 0))
{
io.initdone = 1;
return 0;
}
n = readlink (PATH_ARM_SYSTYPE, systype, sizeof (systype) - 1);
if (n > 0)
{
systype[n] = '\0';
if (isdigit (systype[0]))
{
if (sscanf (systype, "%li,%i", &io.io_base, &io.shift) == 2)
{
io.initdone = 1;
return 0;
}
/* else we're likely going to fail with the system match below */
}
}
else
{
FILE * fp;
fp = fopen (PATH_CPUINFO, "r");
if (! fp)
return -1;
while ((n = fscanf (fp, "Hardware\t: %256[^\n]\n", systype))
!= EOF)
{
if (n == 1)
break;
else
fgets (systype, 256, fp);
}
fclose (fp);
if (n == EOF)
{
/* this can happen if the format of /proc/cpuinfo changes... */
fprintf (stderr,
"ioperm: Unable to determine system type.\n"
"\t(May need " PATH_ARM_SYSTYPE " symlink?)\n");
__set_errno (ENODEV);
return -1;
}
}
/* translate systype name into i/o system: */
for (i = 0; i < sizeof (platform) / sizeof (platform[0]); ++i)
{
if (strcmp (platform[i].name, systype) == 0)
{
io.shift = platform[i].shift;
io.io_base = platform[i].io_base;
io.initdone = 1;
return 0;
}
}
/* systype is not a known platform name... */
__set_errno (ENODEV);
return -1;
}
int
_ioperm (unsigned long int from, unsigned long int num, int turn_on)
{
if (! io.initdone && init_iosys () < 0)
return -1;
/* this test isn't as silly as it may look like; consider overflows! */
if (from >= MAX_PORT || from + num > MAX_PORT)
{
__set_errno (EINVAL);
return -1;
}
if (turn_on)
{
if (! io.base)
{
int fd;
fd = open ("/dev/mem", O_RDWR);
if (fd < 0)
return -1;
io.base =
(unsigned long int) __mmap (0, MAX_PORT << io.shift,
PROT_READ | PROT_WRITE,
MAP_SHARED, fd, io.io_base);
close (fd);
if ((long) io.base == -1)
return -1;
}
}
return 0;
}
int
_iopl (unsigned int level)
{
if (level > 3)
{
__set_errno (EINVAL);
return -1;
}
if (level)
{
return _ioperm (0, MAX_PORT, 1);
}
return 0;
}
void
_outb (unsigned char b, unsigned long int port)
{
*((volatile unsigned char *)(IO_ADDR (port))) = b;
}
void
_outw (unsigned short b, unsigned long int port)
{
*((volatile unsigned short *)(IO_ADDR (port))) = b;
}
void
_outl (unsigned int b, unsigned long int port)
{
*((volatile unsigned long *)(IO_ADDR (port))) = b;
}
unsigned int
_inb (unsigned long int port)
{
return *((volatile unsigned char *)(IO_ADDR (port)));
}
unsigned int
_inw (unsigned long int port)
{
return *((volatile unsigned short *)(IO_ADDR (port)));
}
unsigned int
_inl (unsigned long int port)
{
return *((volatile unsigned long *)(IO_ADDR (port)));
}
weak_alias (_ioperm, ioperm);
weak_alias (_iopl, iopl);
weak_alias (_inb, inb);
weak_alias (_inw, inw);
weak_alias (_inl, inl);
weak_alias (_outb, outb);
weak_alias (_outw, outw);
weak_alias (_outl, outl);

View File

@ -1 +0,0 @@
#include <sysdeps/unix/sysv/linux/i386/lchown.c>

View File

@ -1 +0,0 @@
#include <sysdeps/unix/sysv/linux/i386/lockf64.c>

View File

@ -1,2 +0,0 @@
#include <sysdeps/unix/sysv/linux/i386/lxstat.c>

View File

@ -1,92 +0,0 @@
/* Copyright (C) 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. */
#include <sysdep.h>
#include <kernel-features.h>
#define EINVAL 22
.text
ENTRY (__mmap)
# ifdef __ASSUME_MMAP2_SYSCALL
/* This code is actually a couple of cycles slower than the
sys_mmap version below, so it might seem like a loss. But the
code path inside the kernel is sufficiently much shorter to
make it a net gain to use mmap2 when it's known to be
available. */
/* shuffle args */
str r5, [sp, #-4]!
ldr r5, [sp, #8]
str r4, [sp, #-4]!
ldr r4, [sp, #8]
/* convert offset to pages */
movs ip, r5, lsl #20
bne .Linval
mov r5, r5, lsr #12
/* do the syscall */
swi SYS_ify (mmap2)
/* restore registers */
2:
ldr r4, [sp], #4
ldr r5, [sp], #4
cmn r0, $4096
RETINSTR(cc, lr)
b PLTJMP(syscall_error)
.Linval:
mov r0, #-EINVAL
b 2b
# else
/* Because we can only get five args through the syscall interface, and
mmap() takes six, we need to build a parameter block and pass its
address instead. The 386 port does a similar trick. */
/* This code previously moved sp into ip and stored the args using
stmdb ip!, {a1-a4}. It did not modify sp, so the stack never had
to be restored after the syscall completed. It saved an
instruction and meant no stack cleanup work was required.
This will not work in the case of a mmap call being interrupted
by a signal. If the signal handler uses any stack the arguments
to mmap will be trashed. The results of a restart of mmap are
then unpredictable. */
/* store args on the stack */
stmdb sp!, {a1-a4}
/* do the syscall */
mov a1, sp
swi SYS_ify (mmap)
/* pop args off the stack. */
add sp, sp, #16
cmn r0, $4096
RETINSTR(cc, lr)
b PLTJMP(syscall_error);
#endif
PSEUDO_END (__mmap)
weak_alias (__mmap, mmap)

View File

@ -1,80 +0,0 @@
/* Copyright (C) 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. */
#include <sysdep.h>
#define EINVAL 22
#define ENOSYS 38
#include "kernel-features.h"
/* The mmap2 system call takes six arguments, all in registers. */
.text
ENTRY (__mmap64)
#ifdef __NR_mmap2
ldr ip, [sp, $4] @ offset low part
str r5, [sp, #-4]!
ldr r5, [sp, $12] @ offset high part
str r4, [sp, #-4]!
movs r4, ip, lsl $20 @ check that offset is page-aligned
mov ip, ip, lsr $12
moveqs r4, r5, lsr $12 @ check for overflow
bne .Linval
ldr r4, [sp, $8] @ load fd
orr r5, ip, r5, lsl $20 @ compose page offset
mov ip, r0
swi SYS_ify (mmap2)
cmn r0, $4096
# ifdef __ASSUME_MMAP2_SYSCALL
ldr r4, [sp], #4
ldr r5, [sp], #4
RETINSTR(cc, lr)
b PLTJMP(syscall_error)
# else
ldrcc r4, [sp], #4
ldrcc r5, [sp], #4
RETINSTR(cc, lr)
cmn r0, $ENOSYS
bne .Lerror
/* The current kernel does not support mmap2. Fall back to plain
mmap if the offset is small enough. */
ldr r5, [sp, $16]
mov r0, ip @ first arg was clobbered
teq r5, $0
ldreq r4, [sp], #4
ldreq r5, [sp], #4
beq PLTJMP(__mmap)
# endif
.Linval:
mov r0, $-EINVAL
.Lerror:
ldr r4, [sp], #4
ldr r5, [sp], #4
b PLTJMP(syscall_error)
#else
/* The kernel headers do not support mmap2. Fall back to plain
mmap if the offset is small enough. */
ldr ip, [sp, $8]
teq ip, $0
beq PLTJMP(__mmap)
mov r0, $-EINVAL
b PLTJMP(syscall_error)
#endif
PSEUDO_END (__mmap64)
weak_alias (__mmap64, mmap64)

View File

@ -1 +0,0 @@
#include <sysdeps/unix/sysv/linux/i386/msgctl.c>

View File

@ -1 +0,0 @@
#include <sysdeps/unix/sysv/linux/i386/oldgetrlimit64.c>

View File

@ -1,37 +0,0 @@
/* Low-level statistical profiling support function. Linux/ARM version.
Copyright (C) 1996, 1997, 1998, 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 <signal.h>
#include <bits/armsigctx.h>
void
profil_counter (int signo, int _a2, int _a3, int _a4, union k_sigcontext sc)
{
void *pc;
if (sc.v20.magic == SIGCONTEXT_2_0_MAGIC)
pc = (void *) sc.v20.reg.ARM_pc;
else
pc = (void *) sc.v21.arm_pc;
profil_count (pc);
/* This is a hack to prevent the compiler from implementing the
above function call as a sibcall. The sibcall would overwrite
the signal context. */
asm volatile ("");
}

View File

@ -1 +0,0 @@
#include <sysdeps/unix/sysv/linux/i386/readdir64.c>

View File

@ -1 +0,0 @@
#include <sysdeps/unix/sysv/linux/i386/readdir64_r.c>

View File

@ -1,166 +0,0 @@
/* Dump registers.
Copyright (C) 1998, 1999, 2001 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Philip Blundell <pb@nexus.co.uk>, 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. */
#include <sys/uio.h>
#include <stdio-common/_itoa.h>
#include <bits/armsigctx.h>
/* We will print the register dump in this format:
R0: XXXXXXXX R1: XXXXXXXX R2: XXXXXXXX R3: XXXXXXXX
R4: XXXXXXXX R5: XXXXXXXX R6: XXXXXXXX R7: XXXXXXXX
R8: XXXXXXXX R9: XXXXXXXX SL: XXXXXXXX FP: XXXXXXXX
IP: XXXXXXXX SP: XXXXXXXX LR: XXXXXXXX PC: XXXXXXXX
CPSR: XXXXXXXX
Trap: XXXXXXXX Error: XXXXXXXX OldMask: XXXXXXXX
Addr: XXXXXXXX
*/
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, union k_sigcontext *ctx)
{
char regs[21][8];
struct iovec iov[97];
size_t nr = 0;
#define ADD_STRING(str) \
iov[nr].iov_base = (char *) str; \
iov[nr].iov_len = strlen (str); \
++nr
#define ADD_MEM(str, len) \
iov[nr].iov_base = str; \
iov[nr].iov_len = len; \
++nr
/* Generate strings of register contents. */
if (ctx->v20.magic == SIGCONTEXT_2_0_MAGIC)
{
hexvalue (ctx->v20.reg.ARM_r0, regs[0], 8);
hexvalue (ctx->v20.reg.ARM_r1, regs[1], 8);
hexvalue (ctx->v20.reg.ARM_r2, regs[2], 8);
hexvalue (ctx->v20.reg.ARM_r3, regs[3], 8);
hexvalue (ctx->v20.reg.ARM_r4, regs[4], 8);
hexvalue (ctx->v20.reg.ARM_r5, regs[5], 8);
hexvalue (ctx->v20.reg.ARM_r6, regs[6], 8);
hexvalue (ctx->v20.reg.ARM_r7, regs[7], 8);
hexvalue (ctx->v20.reg.ARM_r8, regs[8], 8);
hexvalue (ctx->v20.reg.ARM_r9, regs[9], 8);
hexvalue (ctx->v20.reg.ARM_r10, regs[10], 8);
hexvalue (ctx->v20.reg.ARM_fp, regs[11], 8);
hexvalue (ctx->v20.reg.ARM_ip, regs[12], 8);
hexvalue (ctx->v20.reg.ARM_sp, regs[13], 8);
hexvalue (ctx->v20.reg.ARM_lr, regs[14], 8);
hexvalue (ctx->v20.reg.ARM_pc, regs[15], 8);
hexvalue (ctx->v20.reg.ARM_cpsr, regs[16], 8);
hexvalue (ctx->v20.trap_no, regs[17], 8);
hexvalue (ctx->v20.error_code, regs[18], 8);
hexvalue (ctx->v20.oldmask, regs[19], 8);
}
else
{
hexvalue (ctx->v21.arm_r0, regs[0], 8);
hexvalue (ctx->v21.arm_r1, regs[1], 8);
hexvalue (ctx->v21.arm_r2, regs[2], 8);
hexvalue (ctx->v21.arm_r3, regs[3], 8);
hexvalue (ctx->v21.arm_r4, regs[4], 8);
hexvalue (ctx->v21.arm_r5, regs[5], 8);
hexvalue (ctx->v21.arm_r6, regs[6], 8);
hexvalue (ctx->v21.arm_r7, regs[7], 8);
hexvalue (ctx->v21.arm_r8, regs[8], 8);
hexvalue (ctx->v21.arm_r9, regs[9], 8);
hexvalue (ctx->v21.arm_r10, regs[10], 8);
hexvalue (ctx->v21.arm_fp, regs[11], 8);
hexvalue (ctx->v21.arm_ip, regs[12], 8);
hexvalue (ctx->v21.arm_sp, regs[13], 8);
hexvalue (ctx->v21.arm_lr, regs[14], 8);
hexvalue (ctx->v21.arm_pc, regs[15], 8);
hexvalue (ctx->v21.arm_cpsr, regs[16], 8);
hexvalue (ctx->v21.trap_no, regs[17], 8);
hexvalue (ctx->v21.error_code, regs[18], 8);
hexvalue (ctx->v21.oldmask, regs[19], 8);
hexvalue (ctx->v21.fault_address, regs[20], 8);
}
/* Generate the output. */
ADD_STRING ("Register dump:\n\n R0: ");
ADD_MEM (regs[0], 8);
ADD_STRING (" R1: ");
ADD_MEM (regs[1], 8);
ADD_STRING (" R2: ");
ADD_MEM (regs[2], 8);
ADD_STRING (" R3: ");
ADD_MEM (regs[3], 8);
ADD_STRING ("\n R4: ");
ADD_MEM (regs[4], 8);
ADD_STRING (" R5: ");
ADD_MEM (regs[5], 8);
ADD_STRING (" R6: ");
ADD_MEM (regs[6], 8);
ADD_STRING (" R7: ");
ADD_MEM (regs[7], 8);
ADD_STRING ("\n R8: ");
ADD_MEM (regs[8], 8);
ADD_STRING (" R9: ");
ADD_MEM (regs[9], 8);
ADD_STRING (" SL: ");
ADD_MEM (regs[10], 8);
ADD_STRING (" FP: ");
ADD_MEM (regs[11], 8);
ADD_STRING ("\n IP: ");
ADD_MEM (regs[12], 8);
ADD_STRING (" SP: ");
ADD_MEM (regs[13], 8);
ADD_STRING (" LR: ");
ADD_MEM (regs[14], 8);
ADD_STRING (" PC: ");
ADD_MEM (regs[15], 8);
ADD_STRING ("\n\n CPSR: ");
ADD_MEM (regs[16], 8);
ADD_STRING ("\n\n Trap: ");
ADD_MEM (regs[17], 8);
ADD_STRING (" Error: ");
ADD_MEM (regs[18], 8);
ADD_STRING (" OldMask: ");
ADD_MEM (regs[19], 8);
if (ctx->v20.magic != SIGCONTEXT_2_0_MAGIC)
{
ADD_STRING ("\n Addr: ");
ADD_MEM (regs[20], 8);
}
ADD_STRING ("\n");
/* Write the stuff out. */
writev (fd, iov, nr);
}
#define REGISTER_DUMP register_dump (fd, &ctx)

View File

@ -1 +0,0 @@
#include <sysdeps/unix/sysv/linux/i386/scandir64.c>

View File

@ -1 +0,0 @@
#include <sysdeps/unix/sysv/linux/i386/semctl.c>

View File

@ -1 +0,0 @@
#include <sysdeps/unix/sysv/linux/i386/setegid.c>

View File

@ -1 +0,0 @@
#include <sysdeps/unix/sysv/linux/i386/seteuid.c>

View File

@ -1 +0,0 @@
#include <sysdeps/unix/sysv/linux/i386/setfsgid.c>

View File

@ -1 +0,0 @@
#include <sysdeps/unix/sysv/linux/i386/setfsuid.c>

View File

@ -1 +0,0 @@
#include <sysdeps/unix/sysv/linux/i386/setgid.c>

View File

@ -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>

View File

@ -1 +0,0 @@
#include <sysdeps/unix/sysv/linux/i386/setregid.c>

View File

@ -1 +0,0 @@
#include <sysdeps/unix/sysv/linux/i386/setresgid.c>

View File

@ -1 +0,0 @@
#include <sysdeps/unix/sysv/linux/i386/setresuid.c>

View File

@ -1 +0,0 @@
#include <sysdeps/unix/sysv/linux/i386/setreuid.c>

View File

@ -1 +0,0 @@
#include <sysdeps/unix/sysv/linux/i386/setrlimit.c>

View File

@ -1 +0,0 @@
#include <sysdeps/unix/sysv/linux/i386/setuid.c>

View File

@ -1 +0,0 @@
#include <sysdeps/unix/sysv/linux/i386/shmctl.c>

View File

@ -1,165 +0,0 @@
/* Copyright (C) 1997,1998,1999,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 <signal.h>
#include <string.h>
#include <sysdep.h>
#include <sys/syscall.h>
#include <kernel-features.h>
/* The difference here is that the sigaction structure used in the
kernel is not the same as we use in the libc. Therefore we must
translate it here. */
#include <kernel_sigaction.h>
/* The variable is shared between all wrappers around signal handling
functions which have RT equivalents. */
int __libc_missing_rt_sigs;
#define SA_RESTORER 0x04000000
extern void __default_sa_restorer(void);
extern void __default_rt_sa_restorer(void);
/* When RT signals are in use we need to use a different return stub. */
#ifdef __NR_rt_sigreturn
#define choose_restorer(flags) \
(flags & SA_SIGINFO) ? __default_rt_sa_restorer \
: __default_sa_restorer
#else
#define choose_restorer(flags) \
__default_sa_restorer
#endif
/* If ACT is not NULL, change the action for SIG to *ACT.
If OACT is not NULL, put the old action for SIG in *OACT. */
int
__libc_sigaction (sig, act, oact)
int sig;
const struct sigaction *act;
struct sigaction *oact;
{
#ifndef __ASSUME_REALTIME_SIGNALS
struct old_kernel_sigaction k_sigact, k_osigact;
#endif
int result;
#ifdef __NR_rt_sigaction
/* First try the RT signals. */
# ifndef __ASSUME_REALTIME_SIGNALS
if (!__libc_missing_rt_sigs)
# endif
{
struct kernel_sigaction kact, koact;
# ifndef __ASSUME_REALTIME_SIGNALS
int saved_errno = errno;
# endif
if (act)
{
kact.k_sa_handler = act->sa_handler;
memcpy (&kact.sa_mask, &act->sa_mask, sizeof (sigset_t));
kact.sa_flags = act->sa_flags;
# ifdef HAVE_SA_RESTORER
/* If the user specified SA_ONSTACK this means she is trying to
use the old-style stack switching. Unfortunately this
requires the sa_restorer field so we cannot install our own
handler. (In fact the user is likely to be out of luck anyway
since the kernel currently only supports stack switching via
the X/Open sigaltstack interface, but we allow for the
possibility that this might change in the future.) */
if (kact.sa_flags & (SA_RESTORER | SA_ONSTACK))
kact.sa_restorer = act->sa_restorer;
else
{
kact.sa_restorer = choose_restorer (kact.sa_flags);
kact.sa_flags |= SA_RESTORER;
}
# endif
}
/* XXX The size argument hopefully will have to be changed to the
real size of the user-level sigset_t. */
result = INLINE_SYSCALL (rt_sigaction, 4, sig,
act ? __ptrvalue (&kact) : NULL,
oact ? __ptrvalue (&koact) : NULL, _NSIG / 8);
# ifndef __ASSUME_REALTIME_SIGNALS
if (result >= 0 || errno != ENOSYS)
# endif
{
if (oact && result >= 0)
{
oact->sa_handler = koact.k_sa_handler;
memcpy (&oact->sa_mask, &koact.sa_mask, sizeof (sigset_t));
oact->sa_flags = koact.sa_flags;
# ifdef HAVE_SA_RESTORER
oact->sa_restorer = koact.sa_restorer;
# endif
}
return result;
}
# ifndef __ASSUME_REALTIME_SIGNALS
__set_errno (saved_errno);
__libc_missing_rt_sigs = 1;
# endif
}
#endif
#ifndef __ASSUME_REALTIME_SIGNALS
if (act)
{
k_sigact.k_sa_handler = act->sa_handler;
k_sigact.sa_mask = act->sa_mask.__val[0];
k_sigact.sa_flags = act->sa_flags;
# ifdef HAVE_SA_RESTORER
/* See the comments above for why we test SA_ONSTACK. */
if (k_sigact.sa_flags & (SA_RESTORER | SA_ONSTACK))
k_sigact.sa_restorer = act->sa_restorer;
else
{
k_sigact.sa_restorer = choose_restorer (k_sigact.sa_flags);
k_sigact.sa_flags |= SA_RESTORER;
}
# endif
}
result = INLINE_SYSCALL (sigaction, 3, sig,
act ? __ptrvalue (&k_sigact) : NULL,
oact ? __ptrvalue (&k_osigact) : NULL);
if (oact && result >= 0)
{
oact->sa_handler = k_osigact.k_sa_handler;
oact->sa_mask.__val[0] = k_osigact.sa_mask;
oact->sa_flags = k_osigact.sa_flags;
# ifdef HAVE_SA_RESTORER
oact->sa_restorer = k_osigact.sa_restorer;
# endif
}
return result;
#endif
}
libc_hidden_def (__libc_sigaction)
#ifndef LIBC_SIGACTION
weak_alias (__libc_sigaction, __sigaction)
libc_hidden_weak (__sigaction)
weak_alias (__libc_sigaction, sigaction)
#endif

View File

@ -1,51 +0,0 @@
/* Copyright (C) 1999, 2002 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Philip Blundell <philb@gnu.org>, 1999.
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 <bits/armsigctx.h>
#include "kernel-features.h"
#define SIGCONTEXT int _a2, int _a3, int _a4, union k_sigcontext
#define SIGCONTEXT_EXTRA_ARGS _a2, _a3, _a4,
/* The sigcontext structure changed between 2.0 and 2.1 kernels. On any
modern system we should be able to assume that the "new" format will be
in use. */
#if __LINUX_KERNEL_VERSION > 131328
#define GET_PC(ctx) ((void *) ctx.v21.arm_pc)
#define GET_FRAME(ctx) ADVANCE_STACK_FRAME ((void *) ctx.v21.arm_fp)
#define GET_STACK(ctx) ((void *) ctx.v21.arm_sp)
#else
#define GET_PC(ctx) ((void *)((ctx.v20.magic == SIGCONTEXT_2_0_MAGIC) ? \
ctx.v20.reg.ARM_pc : ctx.v21.arm_pc))
#define GET_FRAME(ctx) \
ADVANCE_STACK_FRAME((void *)((ctx.v20.magic == SIGCONTEXT_2_0_MAGIC) ? \
ctx.v20.reg.ARM_fp : ctx.v21.arm_fp))
#define GET_STACK(ctx) ((void *)((ctx.v20.magic == SIGCONTEXT_2_0_MAGIC) ? \
ctx.v20.reg.ARM_sp : ctx.v21.arm_sp))
#endif
#define ADVANCE_STACK_FRAME(frm) \
((struct layout *)frm - 1)
#define CALL_SIGHANDLER(handler, signo, ctx) \
(handler)((signo), SIGCONTEXT_EXTRA_ARGS (ctx))

View File

@ -1,33 +0,0 @@
/* Copyright (C) 1999 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>
/* If no SA_RESTORER function was specified by the application we use
one of these. This avoids the need for the kernel to synthesise a return
instruction on the stack, which would involve expensive cache flushes. */
ENTRY(__default_sa_restorer)
swi SYS_ify(sigreturn)
#ifdef __NR_rt_sigreturn
ENTRY(__default_rt_sa_restorer)
swi SYS_ify(rt_sigreturn)
#endif

View File

@ -1,123 +0,0 @@
/* Copyright (C) 1995, 1996, 1997, 1998, 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-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
#define __socket P(__,socket)
#endif
#define PUSHARGS_1 str a1, [sp, $-4]!
#define PUSHARGS_2 stmfd sp!, {a1, a2}
#define PUSHARGS_3 stmfd sp!, {a1, a2, a3}
#define PUSHARGS_4 stmfd sp!, {a1, a2, a3, a4}
#define PUSHARGS_5 stmfd sp!, {a1, a2, a3, a4} /* Caller has already pushed arg 5 */
#define PUSHARGS_6 stmfd sp!, {a1, a2, a3, a4}
#define POPARGS_1 add sp, sp, #4
#define POPARGS_2 add sp, sp, #8
#define POPARGS_3 add sp, sp, #12
#define POPARGS_4 add sp, sp, #16
#define POPARGS_5 add sp, sp, #16
#define POPARGS_6 add sp, sp, #16
#ifndef NARGS
#define NARGS 3 /* If we were called with no wrapper, this is really socket() */
#endif
#if defined NEED_CANCELLATION && defined CENABLE
PSEUDO_PROLOGUE
#endif
.globl __socket
ENTRY (__socket)
/* This code previously moved sp into ip and stored the args using
stmdb ip!, {a1-a4}. It did not modify sp, so the stack never had
to be restored after the syscall completed. It saved an
instruction and meant no stack cleanup work was required.
This will not work in the case of a socket call being interrupted
by a signal. If the signal handler uses any stack the arguments
to socket will be trashed. The results of a restart of any
socket call are then unpredictable. */
/* Push args onto the stack. */
P(PUSHARGS_,NARGS)
#if defined NEED_CANCELLATION && defined CENABLE
#ifdef PIC
SINGLE_THREAD_P_PIC(r3)
#else
SINGLE_THREAD_P
#endif
bne 1f
#endif
/* Do the system call trap. */
mov a1, $P(SOCKOP_,socket)
mov a2, sp
swi SYS_ify(socketcall)
/* Pop args off the stack */
P(POPARGS_,NARGS)
/* r0 is < 0 if there was an error. */
cmn r0, $124
RETINSTR(cc, r14)
b PLTJMP(SYSCALL_ERROR)
#if defined NEED_CANCELLATION && defined CENABLE
1:
str lr, [sp, #-4]!
CENABLE
mov ip, r0
mov r0, #P(SOCKOP_,socket)
add r1, sp, #4
swi SYS_ify(socketcall)
str r0, [sp, #-4]!
mov r0, ip
CDISABLE
ldr r0, [sp], #4
ldr lr, [sp], #4
P(POPARGS_,NARGS)
/* r0 is < 0 if there was an error. */
cmn r0, $124
RETINSTR(cc, r14)
b PLTJMP(SYSCALL_ERROR)
#endif
PSEUDO_END (__socket)
weak_alias (__socket, socket)

View File

@ -1,26 +0,0 @@
/* Copyright (C) 1996, 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. */
#ifndef _SYS_ELF_H
#define _SYS_ELF_H 1
#warning "This header is obsolete; use <sys/procfs.h> instead."
#include <sys/procfs.h>
#endif /* sys/elf.h */

View File

@ -1,48 +0,0 @@
/* Copyright (C) 1996, 1998, 1999 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_IO_H
#define _SYS_IO_H 1
#include <features.h>
__BEGIN_DECLS
/* If TURN_ON is TRUE, request for permission to do direct i/o on the
port numbers in the range [FROM,FROM+NUM-1]. Otherwise, turn I/O
permission off for that range. This call requires root privileges. */
extern int ioperm (unsigned long int __from, unsigned long int __num,
int __turn_on) __THROW;
/* Set the I/O privilege level to LEVEL. If LEVEL is nonzero,
permission to access any I/O port is granted. This call requires
root privileges. */
extern int iopl (int __level) __THROW;
/* The functions that actually perform reads and writes. */
extern unsigned char inb (unsigned long int port) __THROW;
extern unsigned short int inw (unsigned long int port) __THROW;
extern unsigned long int inl (unsigned long int port) __THROW;
extern void outb (unsigned char value, unsigned long int port) __THROW;
extern void outw (unsigned short value, unsigned long int port) __THROW;
extern void outl (unsigned long value, unsigned long int port) __THROW;
__END_DECLS
#endif /* _SYS_IO_H */

View File

@ -1,123 +0,0 @@
/* Copyright (C) 1996, 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. */
#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' 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) / sizeof(elf_greg_t))
typedef elf_greg_t elf_gregset_t[ELF_NGREG];
/* Register set for the floating-point registers. */
typedef struct user_fpregs 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 */

View File

@ -1,94 +0,0 @@
/* Copyright (C) 1998, 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/ARM ABI compliant context switching support. */
#ifndef _SYS_UCONTEXT_H
#define _SYS_UCONTEXT_H 1
#include <features.h>
#include <signal.h>
#include <sys/procfs.h>
typedef int greg_t;
/* Number of general registers. */
#define NGREG 16
/* Container for all general registers. */
typedef elf_gregset_t gregset_t;
/* Number of each register is the `gregset_t' array. */
enum
{
R0 = 0,
#define R0 R0
R1 = 1,
#define R1 R1
R2 = 2,
#define R2 R2
R3 = 3,
#define R3 R3
R4 = 4,
#define R4 R4
R5 = 5,
#define R5 R5
R6 = 6,
#define R6 R6
R7 = 7,
#define R7 R7
R8 = 8,
#define R8 R8
R9 = 9,
#define R9 R9
R10 = 10,
#define R10 R10
R11 = 11,
#define R11 R11
R12 = 12,
#define R12 R12
R13 = 13,
#define R13 R13
R14 = 14,
#define R14 R14
R15 = 15
#define R15 R15
};
/* Structure to describe FPU registers. */
typedef elf_fpregset_t fpregset_t;
/* Context to describe whole processor state. */
typedef struct
{
gregset_t gregs;
fpregset_t fpregs;
} mcontext_t;
/* 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[5];
} ucontext_t;
#endif /* sys/ucontext.h */

View File

@ -1,72 +0,0 @@
/* Copyright (C) 1998, 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_USER_H
#define _SYS_USER_H 1
/* 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. */
struct user_fpregs
{
struct fp_reg
{
unsigned int sign1:1;
unsigned int unused:15;
unsigned int sign2:1;
unsigned int exponent:14;
unsigned int j:1;
unsigned int mantissa1:31;
unsigned int mantissa0:32;
} fpregs[8];
unsigned int fpsr:32;
unsigned int fpcr:32;
unsigned char ftype[8];
unsigned int init_flag;
};
struct user_regs
{
unsigned long int uregs[18];
};
struct user
{
struct user_regs regs; /* General registers */
int u_fpvalid; /* True if math co-processor being used. */
unsigned long int u_tsize; /* Text segment size (pages). */
unsigned long int u_dsize; /* Data segment size (pages). */
unsigned long int u_ssize; /* Stack segment size (pages). */
unsigned long start_code; /* Starting virtual address of text. */
unsigned long start_stack; /* Starting virtual address of stack. */
long int signal; /* Signal that caused the core dump. */
int reserved; /* No longer used */
struct user_regs *u_ar0; /* help gdb to find the general registers. */
unsigned long magic; /* uniquely identify a core file */
char u_comm[32]; /* User command that was responsible */
int u_debugreg[8];
struct user_fpregs u_fp; /* Floating point registers */
struct user_fpregs *u_fp0; /* help gdb to find the FP registers. */
};
#endif /* sys/user.h */

View File

@ -1,5 +0,0 @@
# File name Caller Syscall name # args Strong name Weak names
syscall - syscall 7 syscall
oldgetrlimit EXTRA getrlimit i:ip __old_getrlimit getrlimit@GLIBC_2.0
oldsetrlimit EXTRA setrlimit i:ip __old_setrlimit setrlimit@GLIBC_2.0

View File

@ -1,34 +0,0 @@
/* Copyright (C) 1995, 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
/* The syscall stubs jump here when they detect an error.
The code for Linux is almost identical to the canonical Unix
code, except that the error number in R0 is negated. */
#undef CALL_MCOUNT
#define CALL_MCOUNT /* Don't insert the profiling call, it clobbers R0. */
ENTRY (__syscall_error)
rsb r0, r0, $0
#define __syscall_error __syscall_error_1
#include <sysdeps/unix/arm/sysdep.S>

View File

@ -1,236 +0,0 @@
/* Copyright (C) 1992, 93, 1995-2000, 2002, 2003 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper, <drepper@gnu.ai.mit.edu>, August 1995.
ARM changes by Philip Blundell, <pjb27@cam.ac.uk>, May 1997.
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 _LINUX_ARM_SYSDEP_H
#define _LINUX_ARM_SYSDEP_H 1
/* There is some commonality. */
#include <sysdeps/unix/arm/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
#define SWI_BASE (0x900000)
#define SYS_ify(syscall_name) (__NR_##syscall_name)
#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 R0
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. */
#undef PSEUDO
#define PSEUDO(name, syscall_name, args) \
.text; \
ENTRY (name); \
DO_CALL (syscall_name, args); \
cmn r0, $4096;
#define PSEUDO_RET \
RETINSTR(cc, lr); \
b PLTJMP(SYSCALL_ERROR)
#undef ret
#define ret PSEUDO_RET
#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);
#define PSEUDO_RET_NOERRNO \
DO_RET (lr);
#undef ret_NOERRNO
#define ret_NOERRNO PSEUDO_RET_NOERRNO
#undef PSEUDO_END_NOERRNO
#define PSEUDO_END_NOERRNO(name) \
END (name)
/* 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); \
rsb r0, r0, #0
#undef PSEUDO_END_ERRVAL
#define PSEUDO_END_ERRVAL(name) \
END (name)
#define ret_ERRVAL PSEUDO_RET_NOERRNO
#if NOT_IN_libc
# define SYSCALL_ERROR __local_syscall_error
# define SYSCALL_ERROR_HANDLER \
__local_syscall_error: \
str lr, [sp, #-4]!; \
str r0, [sp, #-4]!; \
bl PLTJMP(C_SYMBOL_NAME(__errno_location)); \
ldr r1, [sp], #4; \
rsb r1, r1, #0; \
str r1, [r0]; \
mvn r0, #0; \
ldr pc, [sp], #4;
#else
# define SYSCALL_ERROR_HANDLER /* Nothing here; code in sysdep.S is used. */
# define SYSCALL_ERROR __syscall_error
#endif
/* Linux takes system call args in registers:
syscall number in the SWI instruction
arg 1 r0
arg 2 r1
arg 3 r2
arg 4 r3
arg 5 r4 (this is different from the APCS convention)
arg 6 r5
arg 7 r6
The compiler is going to form a call by coming here, through PSEUDO, with
arguments
syscall number in the DO_CALL macro
arg 1 r0
arg 2 r1
arg 3 r2
arg 4 r3
arg 5 [sp]
arg 6 [sp+4]
arg 7 [sp+8]
We need to shuffle values between R4..R6 and the stack so that the
caller's v1..v3 and stack frame are not corrupted, and the kernel
sees the right arguments.
*/
#undef DO_CALL
#define DO_CALL(syscall_name, args) \
DOARGS_##args \
swi SYS_ify (syscall_name); \
UNDOARGS_##args
#define DOARGS_0 /* nothing */
#define DOARGS_1 /* nothing */
#define DOARGS_2 /* nothing */
#define DOARGS_3 /* nothing */
#define DOARGS_4 /* nothing */
#define DOARGS_5 str r4, [sp, $-4]!; ldr r4, [sp, $4];
#define DOARGS_6 mov ip, sp; stmfd sp!, {r4, r5}; ldmia ip, {r4, r5};
#define DOARGS_7 mov ip, sp; stmfd sp!, {r4, r5, r6}; ldmia ip, {r4, r5, r6};
#define UNDOARGS_0 /* nothing */
#define UNDOARGS_1 /* nothing */
#define UNDOARGS_2 /* nothing */
#define UNDOARGS_3 /* nothing */
#define UNDOARGS_4 /* nothing */
#define UNDOARGS_5 ldr r4, [sp], $4;
#define UNDOARGS_6 ldmfd sp!, {r4, r5};
#define UNDOARGS_7 ldmfd sp!, {r4, r5, r6};
#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)
#undef INTERNAL_SYSCALL
#define INTERNAL_SYSCALL(name, err, nr, args...) \
({ unsigned int _sys_result; \
{ \
register int _a1 asm ("a1"); \
LOAD_ARGS_##nr (args) \
asm volatile ("swi %1 @ syscall " #name \
: "=r" (_a1) \
: "i" (SYS_ify(name)) ASM_ARGS_##nr \
: "memory"); \
_sys_result = _a1; \
} \
(int) _sys_result; })
#undef INTERNAL_SYSCALL_ERROR_P
#define INTERNAL_SYSCALL_ERROR_P(val, err) \
((unsigned int) (val) >= 0xfffff001u)
#undef INTERNAL_SYSCALL_ERRNO
#define INTERNAL_SYSCALL_ERRNO(val, err) (-(val))
#define LOAD_ARGS_0()
#define ASM_ARGS_0
#define LOAD_ARGS_1(a1) \
_a1 = (int) (a1); \
LOAD_ARGS_0 ()
#define ASM_ARGS_1 ASM_ARGS_0, "r" (_a1)
#define LOAD_ARGS_2(a1, a2) \
register int _a2 asm ("a2") = (int) (a2); \
LOAD_ARGS_1 (a1)
#define ASM_ARGS_2 ASM_ARGS_1, "r" (_a2)
#define LOAD_ARGS_3(a1, a2, a3) \
register int _a3 asm ("a3") = (int) (a3); \
LOAD_ARGS_2 (a1, a2)
#define ASM_ARGS_3 ASM_ARGS_2, "r" (_a3)
#define LOAD_ARGS_4(a1, a2, a3, a4) \
register int _a4 asm ("a4") = (int) (a4); \
LOAD_ARGS_3 (a1, a2, a3)
#define ASM_ARGS_4 ASM_ARGS_3, "r" (_a4)
#define LOAD_ARGS_5(a1, a2, a3, a4, a5) \
register int _v1 asm ("v1") = (int) (a5); \
LOAD_ARGS_4 (a1, a2, a3, a4)
#define ASM_ARGS_5 ASM_ARGS_4, "r" (_v1)
#define LOAD_ARGS_6(a1, a2, a3, a4, a5, a6) \
register int _v2 asm ("v2") = (int) (a6); \
LOAD_ARGS_5 (a1, a2, a3, a4, a5)
#define ASM_ARGS_6 ASM_ARGS_5, "r" (_v2)
#define LOAD_ARGS_7(a1, a2, a3, a4, a5, a6, a7) \
register int _v3 asm ("v3") = (int) (a7); \
LOAD_ARGS_6 (a1, a2, a3, a4, a5, a6)
#define ASM_ARGS_7 ASM_ARGS_6, "r" (_v3)
#endif /* __ASSEMBLER__ */
#endif /* linux/arm/sysdep.h */

View File

@ -1 +0,0 @@
#include <sysdeps/unix/sysv/linux/i386/versionsort64.c>

View File

@ -1,59 +0,0 @@
/* Copyright (C) 1999, 2002, 2003 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Philip Blundell <philb@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
swi __NR_vfork
cmn a1, #4096
RETINSTR(cc, lr)
# ifdef __ASSUME_VFORK_SYSCALL
b PLTJMP(C_SYMBOL_NAME(__syscall_error))
# else
/* Check if vfork syscall is known at all. */
cmn a2, #ENOSYS
bne PLTJMP(C_SYMBOL_NAME(__syscall_error))
# endif
#endif
#ifndef __ASSUME_VFORK_SYSCALL
/* If we don't have vfork, fork is close enough. */
swi __NR_fork
cmn a1, #4096
RETINSTR(cc, lr)
b PLTJMP(C_SYMBOL_NAME(__syscall_error))
#elif !defined __NR_vfork
# error "__NR_vfork not available and __ASSUME_VFORK_SYSCALL defined"
#endif
PSEUDO_END (__vfork)
libc_hidden_def (__vfork)
weak_alias (__vfork, vfork)

View File

@ -1 +0,0 @@
#include <sysdeps/unix/sysv/linux/i386/xstat.c>