mirror of
https://sourceware.org/git/glibc.git
synced 2025-07-29 11:41:21 +03:00
Moved alpha to ports repository.
2008-11-25 Roland McGrath <roland@redhat.com> * sysdeps/alpha, sysdeps/unix/bsd/osf/alpha, sysdeps/unix/bsd/Attic/osf1/alpha, sysdeps/unix/sysv/linux/alpha, sysdeps/unix/sysv/linux/alpha/alpha, sysdeps/unix/alpha, sysdeps/mach/alpha, sysdeps/mach/hurd/alpha: Subdirectories moved to ports repository. * configure.in (base_machine): Remove alpha case.
This commit is contained in:
@ -1,4 +0,0 @@
|
||||
unix/sysv/linux/wordsize-64
|
||||
# These supply the ABI compatibility for when long double was double.
|
||||
ieee754/ldbl-64-128
|
||||
ieee754/ldbl-opt
|
@ -1,38 +0,0 @@
|
||||
ifeq ($(subdir),posix)
|
||||
sysdep_routines += oldglob
|
||||
endif
|
||||
|
||||
ifeq ($(subdir),stdlib)
|
||||
gen-as-const-headers += ucontext-offsets.sym
|
||||
endif
|
||||
|
||||
ifeq ($(subdir),misc)
|
||||
sysdep_headers += alpha/ptrace.h alpha/regdef.h sys/io.h
|
||||
|
||||
sysdep_routines += ieee_get_fp_control ieee_set_fp_control \
|
||||
ioperm llseek
|
||||
|
||||
# Support old timeval32 entry points
|
||||
sysdep_routines += osf_select osf_gettimeofday osf_settimeofday \
|
||||
osf_getitimer osf_setitimer osf_utimes \
|
||||
osf_getrusage osf_wait4
|
||||
|
||||
# Support old ipc control
|
||||
sysdep_routines += oldmsgctl oldsemctl oldshmctl
|
||||
|
||||
CFLAGS-ioperm.c = -Wa,-mev6
|
||||
endif
|
||||
|
||||
ifeq ($(subdir),signal)
|
||||
sysdep_routines += rt_sigaction
|
||||
endif
|
||||
|
||||
ifeq ($(subdir),math)
|
||||
# These 2 routines are normally in libgcc{.a,_s.so.1}.
|
||||
# However, alpha -mlong-double-128 libgcc relies on
|
||||
# glibc providing _Ots* routines and without these files
|
||||
# glibc relies on __multc3/__divtc3 only provided
|
||||
# by libgcc if configured with -mlong-double-128.
|
||||
# Provide these routines here as well.
|
||||
libm-routines += multc3 divtc3
|
||||
endif # math
|
@ -1,94 +0,0 @@
|
||||
libc {
|
||||
# The comment lines with "#errlist-compat" are magic; see
|
||||
# sysdeps/gnu/errlist-compat.awk.
|
||||
# When you get an error from errlist-compat.awk, you need to add a new
|
||||
# version here. Don't do this blindly, since this means changing the ABI
|
||||
# for all GNU/Linux configurations.
|
||||
|
||||
GLIBC_2.0 {
|
||||
#errlist-compat 131
|
||||
_sys_errlist; sys_errlist; _sys_nerr; sys_nerr;
|
||||
|
||||
# Unfortunately in wider use.
|
||||
_inb; _inw; _inl; _outb; _outw; _outl; _bus_base; _bus_base_sparse;
|
||||
_hae_shift;
|
||||
|
||||
# Exception handling support functions from libgcc
|
||||
__register_frame; __register_frame_table; __deregister_frame;
|
||||
__frame_state_for; __register_frame_info_table;
|
||||
|
||||
# b*
|
||||
bus_base; bus_base_sparse;
|
||||
|
||||
# h*
|
||||
hae_shift;
|
||||
|
||||
# i*
|
||||
inb; inl; inw; ioperm; iopl;
|
||||
|
||||
# o*
|
||||
outb; outl; outw;
|
||||
|
||||
# p*
|
||||
pciconfig_read; pciconfig_write; sethae;
|
||||
}
|
||||
GLIBC_2.1 {
|
||||
#errlist-compat 131
|
||||
_sys_errlist; sys_errlist; _sys_nerr; sys_nerr;
|
||||
|
||||
# Linux/Alpha 64-bit timeval functions.
|
||||
__select; select;
|
||||
adjtime; adjtimex; __adjtimex;
|
||||
__gettimeofday;
|
||||
|
||||
# glob interface change
|
||||
glob; globfree;
|
||||
|
||||
# limit type change
|
||||
getrusage;
|
||||
|
||||
# time type change
|
||||
gettimeofday; getitimer;
|
||||
|
||||
# i*
|
||||
ieee_get_fp_control; ieee_set_fp_control;
|
||||
|
||||
# s*
|
||||
setitimer; settimeofday;
|
||||
|
||||
# u*
|
||||
utimes;
|
||||
|
||||
# w*
|
||||
wait4;
|
||||
}
|
||||
GLIBC_2.1.4 {
|
||||
pciconfig_iobase;
|
||||
}
|
||||
GLIBC_2.2.2 {
|
||||
# w*
|
||||
wordexp;
|
||||
}
|
||||
GLIBC_2.3 {
|
||||
#errlist-compat 132
|
||||
_sys_errlist; sys_errlist; _sys_nerr; sys_nerr;
|
||||
}
|
||||
GLIBC_2.4 {
|
||||
#errlist-compat 138
|
||||
_sys_errlist; sys_errlist; _sys_nerr; sys_nerr;
|
||||
}
|
||||
GLIBC_PRIVATE {
|
||||
__libc_alpha_cache_shape;
|
||||
}
|
||||
}
|
||||
ld {
|
||||
GLIBC_PRIVATE {
|
||||
__libc_alpha_cache_shape;
|
||||
}
|
||||
}
|
||||
librt {
|
||||
GLIBC_2.3 {
|
||||
# AIO functions.
|
||||
aio_cancel; aio_cancel64;
|
||||
}
|
||||
}
|
@ -1,197 +0,0 @@
|
||||
#ifndef __A_OUT_GNU_H__
|
||||
#define __A_OUT_GNU_H__
|
||||
|
||||
#include <bits/a.out.h>
|
||||
|
||||
#define __GNU_EXEC_MACROS__
|
||||
|
||||
/*
|
||||
* OSF/1 ECOFF header structs. ECOFF files consist of:
|
||||
* - a file header (struct filehdr),
|
||||
* - an a.out header (struct aouthdr),
|
||||
* - one or more section headers (struct scnhdr).
|
||||
* The filhdr's "f_nscns" field contains the
|
||||
* number of section headers.
|
||||
*/
|
||||
|
||||
struct filehdr
|
||||
{
|
||||
/* OSF/1 "file" header */
|
||||
unsigned short f_magic, f_nscns;
|
||||
unsigned int f_timdat;
|
||||
unsigned long f_symptr;
|
||||
unsigned int f_nsyms;
|
||||
unsigned short f_opthdr, f_flags;
|
||||
};
|
||||
|
||||
struct aouthdr
|
||||
{
|
||||
unsigned long info; /* After that it looks quite normal.. */
|
||||
unsigned long tsize;
|
||||
unsigned long dsize;
|
||||
unsigned long bsize;
|
||||
unsigned long entry;
|
||||
unsigned long text_start; /* With a few additions that actually make sense. */
|
||||
unsigned long data_start;
|
||||
unsigned long bss_start;
|
||||
unsigned int gprmask, fprmask; /* Bitmask of general & floating point regs used in binary. */
|
||||
unsigned long gpvalue;
|
||||
};
|
||||
|
||||
struct scnhdr
|
||||
{
|
||||
char s_name[8];
|
||||
unsigned long s_paddr;
|
||||
unsigned long s_vaddr;
|
||||
unsigned long s_size;
|
||||
unsigned long s_scnptr;
|
||||
unsigned long s_relptr;
|
||||
unsigned long s_lnnoptr;
|
||||
unsigned short s_nreloc;
|
||||
unsigned short s_nlnno;
|
||||
unsigned int s_flags;
|
||||
};
|
||||
|
||||
struct exec
|
||||
{
|
||||
/* OSF/1 "file" header */
|
||||
struct filehdr fh;
|
||||
struct aouthdr ah;
|
||||
};
|
||||
|
||||
#define a_info ah.info
|
||||
#define a_text ah.tsize
|
||||
#define a_data ah.dsize
|
||||
#define a_bss ah.bsize
|
||||
#define a_entry ah.entry
|
||||
#define a_textstart ah.text_start
|
||||
#define a_datastart ah.data_start
|
||||
#define a_bssstart ah.bss_start
|
||||
#define a_gprmask ah.gprmask
|
||||
#define a_fprmask ah.fprmask
|
||||
#define a_gpvalue ah.gpvalue
|
||||
|
||||
|
||||
#define AOUTHSZ sizeof(struct aouthdr)
|
||||
#define SCNHSZ sizeof(struct scnhdr)
|
||||
#define SCNROUND 16
|
||||
|
||||
enum machine_type
|
||||
{
|
||||
M_OLDSUN2 = 0,
|
||||
M_68010 = 1,
|
||||
M_68020 = 2,
|
||||
M_SPARC = 3,
|
||||
M_386 = 100,
|
||||
M_MIPS1 = 151,
|
||||
M_MIPS2 = 152
|
||||
};
|
||||
|
||||
#define N_MAGIC(exec) ((exec).a_info & 0xffff)
|
||||
#define N_MACHTYPE(exec) ((enum machine_type)(((exec).a_info >> 16) & 0xff))
|
||||
#define N_FLAGS(exec) (((exec).a_info >> 24) & 0xff)
|
||||
#define N_SET_INFO(exec, magic, type, flags) \
|
||||
((exec).a_info = ((magic) & 0xffff) \
|
||||
| (((int)(type) & 0xff) << 16) \
|
||||
| (((flags) & 0xff) << 24))
|
||||
#define N_SET_MAGIC(exec, magic) \
|
||||
((exec).a_info = ((exec).a_info & 0xffff0000) | ((magic) & 0xffff))
|
||||
#define N_SET_MACHTYPE(exec, machtype) \
|
||||
((exec).a_info = \
|
||||
((exec).a_info&0xff00ffff) | ((((int)(machtype))&0xff) << 16))
|
||||
#define N_SET_FLAGS(exec, flags) \
|
||||
((exec).a_info = \
|
||||
((exec).a_info&0x00ffffff) | (((flags) & 0xff) << 24))
|
||||
|
||||
/* Code indicating object file or impure executable. */
|
||||
#define OMAGIC 0407
|
||||
/* Code indicating pure executable. */
|
||||
#define NMAGIC 0410
|
||||
/* Code indicating demand-paged executable. */
|
||||
#define ZMAGIC 0413
|
||||
/* This indicates a demand-paged executable with the header in the text.
|
||||
The first page is unmapped to help trap NULL pointer references. */
|
||||
#define QMAGIC 0314
|
||||
/* Code indicating core file. */
|
||||
#define CMAGIC 0421
|
||||
|
||||
#define N_TRSIZE(x) 0
|
||||
#define N_DRSIZE(x) 0
|
||||
#define N_SYMSIZE(x) 0
|
||||
#define N_BADMAG(x) \
|
||||
(N_MAGIC(x) != OMAGIC && N_MAGIC(x) != NMAGIC \
|
||||
&& N_MAGIC(x) != ZMAGIC && N_MAGIC(x) != QMAGIC)
|
||||
#define _N_HDROFF(x) (1024 - sizeof (struct exec))
|
||||
#define N_TXTOFF(x) \
|
||||
((long) N_MAGIC(x) == ZMAGIC ? 0 : \
|
||||
(sizeof (struct exec) + (x).fh.f_nscns * SCNHSZ + SCNROUND - 1) \
|
||||
& ~(SCNROUND - 1))
|
||||
|
||||
#define N_DATOFF(x) (N_TXTOFF(x) + (x).a_text)
|
||||
#define N_TRELOFF(x) (N_DATOFF(x) + (x).a_data)
|
||||
#define N_DRELOFF(x) (N_TRELOFF(x) + N_TRSIZE(x))
|
||||
#define N_SYMOFF(x) (N_DRELOFF(x) + N_DRSIZE(x))
|
||||
#define N_STROFF(x) (N_SYMOFF(x) + N_SYMSIZE(x))
|
||||
|
||||
/* Address of text segment in memory after it is loaded. */
|
||||
#define N_TXTADDR(x) ((x).a_textstart)
|
||||
|
||||
/* Address of data segment in memory after it is loaded. */
|
||||
#define SEGMENT_SIZE 1024
|
||||
|
||||
#define _N_SEGMENT_ROUND(x) (((x) + SEGMENT_SIZE - 1) & ~(SEGMENT_SIZE - 1))
|
||||
#define _N_TXTENDADDR(x) (N_TXTADDR(x)+(x).a_text)
|
||||
|
||||
#define N_DATADDR(x) ((x).a_datastart)
|
||||
#define N_BSSADDR(x) ((x).a_bssstart)
|
||||
|
||||
#if !defined (N_NLIST_DECLARED)
|
||||
struct nlist
|
||||
{
|
||||
union
|
||||
{
|
||||
char *n_name;
|
||||
struct nlist *n_next;
|
||||
long n_strx;
|
||||
} n_un;
|
||||
unsigned char n_type;
|
||||
char n_other;
|
||||
short n_desc;
|
||||
unsigned long n_value;
|
||||
};
|
||||
#endif /* no N_NLIST_DECLARED. */
|
||||
|
||||
#define N_UNDF 0
|
||||
#define N_ABS 2
|
||||
#define N_TEXT 4
|
||||
#define N_DATA 6
|
||||
#define N_BSS 8
|
||||
#define N_FN 15
|
||||
#define N_EXT 1
|
||||
#define N_TYPE 036
|
||||
#define N_STAB 0340
|
||||
#define N_INDR 0xa
|
||||
#define N_SETA 0x14 /* Absolute set element symbol. */
|
||||
#define N_SETT 0x16 /* Text set element symbol. */
|
||||
#define N_SETD 0x18 /* Data set element symbol. */
|
||||
#define N_SETB 0x1A /* Bss set element symbol. */
|
||||
#define N_SETV 0x1C /* Pointer to set vector in data area. */
|
||||
|
||||
#if !defined (N_RELOCATION_INFO_DECLARED)
|
||||
/* This structure describes a single relocation to be performed.
|
||||
The text-relocation section of the file is a vector of these structures,
|
||||
all of which apply to the text section.
|
||||
Likewise, the data-relocation section applies to the data section. */
|
||||
|
||||
struct relocation_info
|
||||
{
|
||||
int r_address;
|
||||
unsigned int r_symbolnum:24;
|
||||
unsigned int r_pcrel:1;
|
||||
unsigned int r_length:2;
|
||||
unsigned int r_extern:1;
|
||||
unsigned int r_pad:4;
|
||||
};
|
||||
#endif /* no N_RELOCATION_INFO_DECLARED. */
|
||||
|
||||
#endif /* __A_OUT_GNU_H__ */
|
@ -1,220 +0,0 @@
|
||||
/* Copyright (C) 1998,2000,2002,2003,2004,2006 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Lesser General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 2.1 of the License, or (at your option) any later version.
|
||||
|
||||
The GNU C Library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public
|
||||
License along with the GNU C Library; if not, write to the Free
|
||||
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||
02111-1307 USA. */
|
||||
|
||||
#include <shlib-compat.h>
|
||||
#include <sysdep.h>
|
||||
#include <sys/time.h>
|
||||
#include <kernel-features.h>
|
||||
|
||||
#if !defined __ASSUME_TIMEVAL64 || SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_1)
|
||||
struct timeval32
|
||||
{
|
||||
int tv_sec, tv_usec;
|
||||
};
|
||||
|
||||
struct timex32 {
|
||||
unsigned int modes; /* mode selector */
|
||||
long offset; /* time offset (usec) */
|
||||
long freq; /* frequency offset (scaled ppm) */
|
||||
long maxerror; /* maximum error (usec) */
|
||||
long esterror; /* estimated error (usec) */
|
||||
int status; /* clock command/status */
|
||||
long constant; /* pll time constant */
|
||||
long precision; /* clock precision (usec) (read only) */
|
||||
long tolerance; /* clock frequency tolerance (ppm)
|
||||
* (read only)
|
||||
*/
|
||||
struct timeval32 time; /* (read only) */
|
||||
long tick; /* (modified) usecs between clock ticks */
|
||||
|
||||
long ppsfreq; /* pps frequency (scaled ppm) (ro) */
|
||||
long jitter; /* pps jitter (us) (ro) */
|
||||
int shift; /* interval duration (s) (shift) (ro) */
|
||||
long stabil; /* pps stability (scaled ppm) (ro) */
|
||||
long jitcnt; /* jitter limit exceeded (ro) */
|
||||
long calcnt; /* calibration intervals (ro) */
|
||||
long errcnt; /* calibration errors (ro) */
|
||||
long stbcnt; /* stability limit exceeded (ro) */
|
||||
|
||||
int :32; int :32; int :32; int :32;
|
||||
int :32; int :32; int :32; int :32;
|
||||
int :32; int :32; int :32; int :32;
|
||||
};
|
||||
|
||||
#define TIMEVAL timeval32
|
||||
#define TIMEX timex32
|
||||
#define ADJTIME attribute_compat_text_section __adjtime_tv32
|
||||
#define ADJTIMEX(x) INLINE_SYSCALL (old_adjtimex, 1, x)
|
||||
#define ADJTIMEX32(x) INLINE_SYSCALL (old_adjtimex, 1, x)
|
||||
#if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_1)
|
||||
#define LINKAGE
|
||||
#else
|
||||
#define LINKAGE static
|
||||
#endif
|
||||
|
||||
LINKAGE int ADJTIME (const struct TIMEVAL *itv, struct TIMEVAL *otv);
|
||||
|
||||
#include <sysdeps/unix/sysv/linux/adjtime.c>
|
||||
|
||||
#if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_1)
|
||||
int
|
||||
attribute_compat_text_section
|
||||
__adjtimex_tv32 (struct timex32 *tx) { return ADJTIMEX (tx); }
|
||||
strong_alias (__adjtimex_tv32, __adjtimex_tv32_1);
|
||||
strong_alias (__adjtimex_tv32, __adjtimex_tv32_2);
|
||||
compat_symbol (libc, __adjtimex_tv32_1, __adjtimex, GLIBC_2_0);
|
||||
compat_symbol (libc, __adjtimex_tv32_2, adjtimex, GLIBC_2_0);
|
||||
compat_symbol (libc, __adjtime_tv32, adjtime, GLIBC_2_0);
|
||||
#endif
|
||||
#endif /* !__ASSUME_TIMEVAL64 || SHLIB_COMPAT */
|
||||
|
||||
#undef TIMEVAL
|
||||
#define TIMEVAL timeval
|
||||
#undef TIMEX
|
||||
#define TIMEX timex
|
||||
#undef ADJTIMEX
|
||||
#define ADJTIMEX(x) INLINE_SYSCALL (adjtimex, 1, x)
|
||||
|
||||
#undef LINKAGE
|
||||
#undef ADJTIME
|
||||
#if !defined __ASSUME_TIMEVAL64
|
||||
#define LINKAGE static
|
||||
#define ADJTIME __adjtime_tv64
|
||||
#endif
|
||||
|
||||
#include <sysdeps/unix/sysv/linux/adjtime.c>
|
||||
#include <stdbool.h>
|
||||
|
||||
#if !defined __ASSUME_TIMEVAL64
|
||||
static bool missing_adjtimex;
|
||||
|
||||
int
|
||||
__adjtime (itv, otv)
|
||||
const struct timeval *itv;
|
||||
struct timeval *otv;
|
||||
{
|
||||
struct timeval32 itv32, otv32;
|
||||
int ret;
|
||||
|
||||
switch (missing_adjtimex)
|
||||
{
|
||||
case false:
|
||||
ret = __adjtime_tv64 (itv, otv);
|
||||
if (ret && errno == ENOSYS)
|
||||
missing_adjtimex = 1;
|
||||
else
|
||||
break;
|
||||
|
||||
/* FALLTHRU */
|
||||
|
||||
default:
|
||||
itv32.tv_sec = itv->tv_sec;
|
||||
itv32.tv_usec = itv->tv_usec;
|
||||
ret = __adjtime_tv32 (&itv32, &otv32);
|
||||
if (ret == 0)
|
||||
{
|
||||
otv->tv_sec = otv32.tv_sec;
|
||||
otv->tv_usec = otv32.tv_usec;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
#endif
|
||||
|
||||
versioned_symbol (libc, __adjtime, adjtime, GLIBC_2_1);
|
||||
|
||||
int
|
||||
__adjtimex_tv64 (struct timex *tx)
|
||||
{
|
||||
#if defined __ASSUME_TIMEVAL64
|
||||
return ADJTIMEX (tx);
|
||||
#else
|
||||
struct timex32 tx32;
|
||||
int ret;
|
||||
|
||||
switch (missing_adjtimex)
|
||||
{
|
||||
case false:
|
||||
ret = ADJTIMEX (tx);
|
||||
if (ret && errno == ENOSYS)
|
||||
missing_adjtimex = 1;
|
||||
else
|
||||
break;
|
||||
|
||||
/* FALLTHRU */
|
||||
|
||||
default:
|
||||
tx32.modes = tx->modes;
|
||||
tx32.offset = tx->offset;
|
||||
tx32.freq = tx->freq;
|
||||
tx32.maxerror = tx->maxerror;
|
||||
tx32.esterror = tx->esterror;
|
||||
tx32.status = tx->status;
|
||||
tx32.constant = tx->constant;
|
||||
tx32.precision = tx->precision;
|
||||
tx32.tolerance = tx->tolerance;
|
||||
tx32.time.tv_sec = tx->time.tv_sec;
|
||||
tx32.time.tv_sec = tx->time.tv_usec;
|
||||
tx32.tick = tx->tick;
|
||||
tx32.ppsfreq = tx->ppsfreq;
|
||||
tx32.jitter = tx->jitter;
|
||||
tx32.shift = tx->shift;
|
||||
tx32.stabil = tx->stabil;
|
||||
tx32.jitcnt = tx->jitcnt;
|
||||
tx32.calcnt = tx->calcnt;
|
||||
tx32.errcnt = tx->errcnt;
|
||||
tx32.stbcnt = tx->stbcnt;
|
||||
|
||||
ret = ADJTIMEX32 (&tx32);
|
||||
if (ret == 0)
|
||||
{
|
||||
tx->modes = tx32.modes;
|
||||
tx->offset = tx32.offset;
|
||||
tx->freq = tx32.freq;
|
||||
tx->maxerror = tx32.maxerror;
|
||||
tx->esterror = tx32.esterror;
|
||||
tx->status = tx32.status;
|
||||
tx->constant = tx32.constant;
|
||||
tx->precision = tx32.precision;
|
||||
tx->tolerance = tx32.tolerance;
|
||||
tx->time.tv_sec = tx32.time.tv_sec;
|
||||
tx->time.tv_usec = tx32.time.tv_sec;
|
||||
tx->tick = tx32.tick;
|
||||
tx->ppsfreq = tx32.ppsfreq;
|
||||
tx->jitter = tx32.jitter;
|
||||
tx->shift = tx32.shift;
|
||||
tx->stabil = tx32.stabil;
|
||||
tx->jitcnt = tx32.jitcnt;
|
||||
tx->calcnt = tx32.calcnt;
|
||||
tx->errcnt = tx32.errcnt;
|
||||
tx->stbcnt = tx32.stbcnt;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
return ret;
|
||||
#endif
|
||||
}
|
||||
|
||||
strong_alias (__adjtimex_tv64, __adjtimex_internal);
|
||||
strong_alias (__adjtimex_tv64, __adjtimex_tv64p);
|
||||
weak_alias (__adjtimex_tv64, ntp_adjtime);
|
||||
versioned_symbol (libc, __adjtimex_tv64, __adjtimex, GLIBC_2_1);
|
||||
versioned_symbol (libc, __adjtimex_tv64p, adjtimex, GLIBC_2_1);
|
@ -1,18 +0,0 @@
|
||||
#ifndef __alpha_ptrace_h__
|
||||
#define __alpha_ptrace_h__
|
||||
|
||||
/*
|
||||
* Mostly for OSF/1 compatibility.
|
||||
*/
|
||||
|
||||
#define REG_BASE 0
|
||||
#define NGP_REGS 32
|
||||
#define NFP_REGS 32
|
||||
|
||||
#define GPR_BASE REG_BASE
|
||||
#define FPR_BASE (GPR_BASE+NGP_REGS)
|
||||
#define PC (FPR_BASE+NFP_REGS)
|
||||
#define SPR_PS (PC+1)
|
||||
#define NPTRC_REGS (SPR_PS+1)
|
||||
|
||||
#endif /* __alpha_ptrace_h__ */
|
@ -1,44 +0,0 @@
|
||||
#ifndef __alpha_regdef_h__
|
||||
#define __alpha_regdef_h__
|
||||
|
||||
#define v0 $0 /* function return value */
|
||||
|
||||
#define t0 $1 /* temporary registers (caller-saved) */
|
||||
#define t1 $2
|
||||
#define t2 $3
|
||||
#define t3 $4
|
||||
#define t4 $5
|
||||
#define t5 $6
|
||||
#define t6 $7
|
||||
#define t7 $8
|
||||
|
||||
#define s0 $9 /* saved-registers (callee-saved registers) */
|
||||
#define s1 $10
|
||||
#define s2 $11
|
||||
#define s3 $12
|
||||
#define s4 $13
|
||||
#define s5 $14
|
||||
#define s6 $15
|
||||
#define fp s6 /* frame-pointer (s6 in frame-less procedures) */
|
||||
|
||||
#define a0 $16 /* argument registers (caller-saved) */
|
||||
#define a1 $17
|
||||
#define a2 $18
|
||||
#define a3 $19
|
||||
#define a4 $20
|
||||
#define a5 $21
|
||||
|
||||
#define t8 $22 /* more temps (caller-saved) */
|
||||
#define t9 $23
|
||||
#define t10 $24
|
||||
#define t11 $25
|
||||
#define ra $26 /* return address register */
|
||||
#define t12 $27
|
||||
|
||||
#define pv t12 /* procedure-variable register */
|
||||
#define AT $at /* assembler temporary */
|
||||
#define gp $29 /* global pointer */
|
||||
#define sp $30 /* stack pointer */
|
||||
#define zero $31 /* reads as zero, writes are noops */
|
||||
|
||||
#endif /* __alpha_regdef_h__ */
|
@ -1,2 +0,0 @@
|
||||
# Override ldbl-opt with alpha specific routines.
|
||||
alpha/alphaev6/fpu
|
@ -1,2 +0,0 @@
|
||||
# Override ldbl-opt with alpha specific routines.
|
||||
alpha/alphaev67/fpu
|
@ -1,9 +0,0 @@
|
||||
#ifndef __A_OUT_GNU_H__
|
||||
# error "Never use <bits/a.out.h> directly; include <a.out.h> instead."
|
||||
#endif
|
||||
#ifndef __A_OUT_GNU_H__
|
||||
# error "Never use <bits/a.out.h> directly; include <a.out.h> instead."
|
||||
#endif
|
||||
#ifndef __A_OUT_GNU_H__
|
||||
# error "Never use <bits/a.out.h> directly; include <a.out.h> instead."
|
||||
#endif
|
@ -1,55 +0,0 @@
|
||||
/* Copyright (C) 1996, 1997 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Lesser General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 2.1 of the License, or (at your option) any later version.
|
||||
|
||||
The GNU C Library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public
|
||||
License along with the GNU C Library; if not, write to the Free
|
||||
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||
02111-1307 USA. */
|
||||
|
||||
#ifndef _BITS_DIRENT_H
|
||||
#define _BITS_DIRENT_H 1
|
||||
|
||||
struct dirent
|
||||
{
|
||||
#ifdef __USE_FILE_OFFSET64
|
||||
__ino64_t d_ino;
|
||||
#else
|
||||
__ino_t d_ino;
|
||||
int __pad;
|
||||
#endif
|
||||
__off_t d_off;
|
||||
unsigned short int d_reclen;
|
||||
unsigned char d_type;
|
||||
char d_name[256]; /* We must not include limits.h! */
|
||||
};
|
||||
|
||||
#ifdef __USE_LARGEFILE64
|
||||
/* Note dirent64 is the same as dirent. */
|
||||
struct dirent64
|
||||
{
|
||||
__ino64_t d_ino;
|
||||
__off64_t d_off;
|
||||
unsigned short int d_reclen;
|
||||
unsigned char d_type;
|
||||
char d_name[256]; /* We must not include limits.h! */
|
||||
};
|
||||
#endif
|
||||
|
||||
#define d_fileno d_ino /* Backwards compatibility. */
|
||||
|
||||
#undef _DIRENT_HAVE_D_NAMLEN
|
||||
#define _DIRENT_HAVE_D_RECLEN
|
||||
#define _DIRENT_HAVE_D_OFF
|
||||
#define _DIRENT_HAVE_D_TYPE
|
||||
|
||||
#endif /* bits/dirent.h */
|
@ -1,14 +0,0 @@
|
||||
/* This file specifies the native word size of the machine, which indicates
|
||||
the ELF file class used for executables and shared objects on this
|
||||
machine. */
|
||||
|
||||
#ifndef _LINK_H
|
||||
# error "Never use <bits/elfclass.h> directly; include <link.h> instead."
|
||||
#endif
|
||||
|
||||
#include <bits/wordsize.h>
|
||||
|
||||
#define __ELF_NATIVE_CLASS __WORDSIZE
|
||||
|
||||
/* Linux/Alpha is exceptional as it has .hash section with 64 bit entries. */
|
||||
typedef uint64_t Elf_Symndx;
|
@ -1,58 +0,0 @@
|
||||
/* Error constants. Linux/Alpha specific version.
|
||||
Copyright (C) 1996,1997,1998,1999,2002,2005 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Lesser General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 2.1 of the License, or (at your option) any later version.
|
||||
|
||||
The GNU C Library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public
|
||||
License along with the GNU C Library; if not, write to the Free
|
||||
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||
02111-1307 USA. */
|
||||
|
||||
#ifdef _ERRNO_H
|
||||
|
||||
# undef EDOM
|
||||
# undef EILSEQ
|
||||
# undef ERANGE
|
||||
# include <linux/errno.h>
|
||||
|
||||
/* Linux has no ENOTSUP error code. */
|
||||
# define ENOTSUP EOPNOTSUPP
|
||||
|
||||
# ifndef ECANCELED
|
||||
# define ECANCELED 131
|
||||
# endif
|
||||
|
||||
/* Support for error codes to support robust mutexes was added later, too. */
|
||||
# ifndef EOWNERDEAD
|
||||
# define EOWNERDEAD 136
|
||||
# define ENOTRECOVERABLE 137
|
||||
# endif
|
||||
|
||||
# ifndef __ASSEMBLER__
|
||||
/* Function to get address of global `errno' variable. */
|
||||
extern int *__errno_location (void) __THROW __attribute__ ((__const__));
|
||||
|
||||
# if !defined _LIBC || defined _LIBC_REENTRANT
|
||||
/* When using threads, errno is a per-thread value. */
|
||||
# define errno (*__errno_location ())
|
||||
# endif
|
||||
# endif /* !__ASSEMBLER__ */
|
||||
#endif /* _ERRNO_H */
|
||||
|
||||
#if !defined _ERRNO_H && defined __need_Emath
|
||||
/* This is ugly but the kernel header is not clean enough. We must
|
||||
define only the values EDOM, EILSEQ and ERANGE in case __need_Emath is
|
||||
defined. */
|
||||
# define EDOM 33 /* Math argument out of domain of function. */
|
||||
# define EILSEQ 116 /* Illegal byte sequence. */
|
||||
# define ERANGE 34 /* Math result not representable. */
|
||||
#endif /* !_ERRNO_H && __need_Emath */
|
@ -1,232 +0,0 @@
|
||||
/* O_*, F_*, FD_* bit values for Linux.
|
||||
Copyright (C) 1995-2000,2004,2005,2006,2007 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>
|
||||
#ifdef __USE_GNU
|
||||
# include <bits/uio.h>
|
||||
#endif
|
||||
|
||||
|
||||
/* open/fcntl - O_SYNC is only implemented on blocks devices and on files
|
||||
located on an ext2 file system */
|
||||
#define O_ACCMODE 0003
|
||||
#define O_RDONLY 00
|
||||
#define O_WRONLY 01
|
||||
#define O_RDWR 02
|
||||
#define O_CREAT 01000 /* not fcntl */
|
||||
#define O_TRUNC 02000 /* not fcntl */
|
||||
#define O_EXCL 04000 /* not fcntl */
|
||||
#define O_NOCTTY 010000 /* not fcntl */
|
||||
|
||||
#define O_NONBLOCK 00004
|
||||
#define O_APPEND 00010
|
||||
#define O_NDELAY O_NONBLOCK
|
||||
#define O_SYNC 040000
|
||||
#define O_FSYNC O_SYNC
|
||||
#define O_ASYNC 020000 /* fcntl, for BSD compatibility */
|
||||
|
||||
#ifdef __USE_GNU
|
||||
# define O_DIRECTORY 0100000 /* Must be a directory. */
|
||||
# define O_NOFOLLOW 0200000 /* Do not follow links. */
|
||||
# define O_DIRECT 02000000 /* Direct disk access. */
|
||||
# define O_NOATIME 04000000 /* Do not set atime. */
|
||||
# define O_CLOEXEC 010000000 /* Set close_on_exec. */
|
||||
#endif
|
||||
|
||||
#ifdef __USE_LARGEFILE64
|
||||
/* Not necessary, files are always with 64bit off_t. */
|
||||
# define O_LARGEFILE 0
|
||||
#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. */
|
||||
#define F_GETLK 7 /* Get record locking info. */
|
||||
#define F_SETLK 8 /* Set record locking info (non-blocking). */
|
||||
#define F_SETLKW 9 /* Set record locking info (blocking). */
|
||||
#define F_GETLK64 F_GETLK /* Get record locking info. */
|
||||
#define F_SETLK64 F_SETLK /* Set record locking info (non-blocking). */
|
||||
#define F_SETLKW64 F_SETLKW /* Set record locking info (blocking). */
|
||||
|
||||
#if defined __USE_BSD || defined __USE_UNIX98
|
||||
# define F_SETOWN 5 /* Get owner of socket (receiver of SIGIO). */
|
||||
# define F_GETOWN 6 /* 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. */
|
||||
# define F_DUPFD_CLOEXEC 1030 /* Duplicate file descriptor with
|
||||
close-on-exit set. */
|
||||
#endif
|
||||
|
||||
/* for F_[GET|SET]FD */
|
||||
#define FD_CLOEXEC 1 /* actually anything with low bit set goes */
|
||||
|
||||
/* For posix fcntl() and `l_type' field of a `struct flock' for lockf() */
|
||||
#define F_RDLCK 1 /* Read lock. */
|
||||
#define F_WRLCK 2 /* Write lock. */
|
||||
#define F_UNLCK 8 /* Remove lock. */
|
||||
|
||||
/* for old implementation of bsd flock () */
|
||||
#define F_EXLCK 16 /* or 3 */
|
||||
#define F_SHLCK 32 /* or 4 */
|
||||
|
||||
/* Operations for bsd flock(), also used by the kernel implementation */
|
||||
#ifdef __USE_BSD
|
||||
# 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
|
||||
|
||||
/* We don't need to support __USE_FILE_OFFSET64. */
|
||||
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'). */
|
||||
__off_t l_start; /* Offset where the lock begins. */
|
||||
__off_t l_len; /* Size of the locked area; zero means until EOF. */
|
||||
__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
|
||||
|
||||
|
||||
#ifdef __USE_GNU
|
||||
/* Flags for SYNC_FILE_RANGE. */
|
||||
# define SYNC_FILE_RANGE_WAIT_BEFORE 1 /* Wait upon writeout of all pages
|
||||
in the range before performing the
|
||||
write. */
|
||||
# define SYNC_FILE_RANGE_WRITE 2 /* Initiate writeout of all those
|
||||
dirty pages in the range which are
|
||||
not presently under writeback. */
|
||||
# define SYNC_FILE_RANGE_WAIT_AFTER 4 /* Wait upon writeout of all pages in
|
||||
the range after performing the
|
||||
write. */
|
||||
|
||||
/* Flags for SPLICE and VMSPLICE. */
|
||||
# define SPLICE_F_MOVE 1 /* Move pages instead of copying. */
|
||||
# define SPLICE_F_NONBLOCK 2 /* Don't block on the pipe splicing
|
||||
(but we may still block on the fd
|
||||
we splice from/to). */
|
||||
# define SPLICE_F_MORE 4 /* Expect more data. */
|
||||
# define SPLICE_F_GIFT 8 /* Pages passed in are a gift. */
|
||||
#endif
|
||||
|
||||
__BEGIN_DECLS
|
||||
|
||||
#ifdef __USE_GNU
|
||||
|
||||
/* Provide kernel hint to read ahead. */
|
||||
extern ssize_t readahead (int __fd, __off64_t __offset, size_t __count)
|
||||
__THROW;
|
||||
|
||||
|
||||
/* Selective file content synch'ing. */
|
||||
extern int sync_file_range (int __fd, __off64_t __from, __off64_t __to,
|
||||
unsigned int __flags);
|
||||
|
||||
|
||||
/* Splice address range into a pipe. */
|
||||
extern ssize_t vmsplice (int __fdout, const struct iovec *__iov,
|
||||
size_t __count, unsigned int __flags);
|
||||
|
||||
/* Splice two files together. */
|
||||
extern ssize_t splice (int __fdin, __off64_t *__offin, int __fdout,
|
||||
__off64_t *__offout, size_t __len,
|
||||
unsigned int __flags);
|
||||
|
||||
/* In-kernel implementation of tee for pipe buffers. */
|
||||
extern ssize_t tee (int __fdin, int __fdout, size_t __len,
|
||||
unsigned int __flags);
|
||||
|
||||
#endif
|
||||
|
||||
__END_DECLS
|
@ -1,37 +0,0 @@
|
||||
/* Copyright (C) 1996, 1997 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Lesser General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 2.1 of the License, or (at your option) any later version.
|
||||
|
||||
The GNU C Library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public
|
||||
License along with the GNU C Library; if not, write to the Free
|
||||
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||
02111-1307 USA. */
|
||||
|
||||
#ifndef _SYS_IOCTL_H
|
||||
# error "Never use <bits/ioctls.h> directly; include <sys/ioctl.h> instead."
|
||||
#endif
|
||||
|
||||
/* Use the definitions from the kernel header files. */
|
||||
#include <asm/ioctls.h>
|
||||
|
||||
/* Oh well, this is necessary since the kernel data structure is
|
||||
different from the user-level version. */
|
||||
#undef TCGETS
|
||||
#undef TCSETS
|
||||
#undef TCSETSW
|
||||
#undef TCSETSF
|
||||
#define TCGETS _IOR ('t', 19, char[44])
|
||||
#define TCSETS _IOW ('t', 20, char[44])
|
||||
#define TCSETSW _IOW ('t', 21, char[44])
|
||||
#define TCSETSF _IOW ('t', 22, char[44])
|
||||
|
||||
#include <linux/sockios.h>
|
@ -1,55 +0,0 @@
|
||||
/* Copyright (C) 1995, 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. */
|
||||
|
||||
#ifndef _SYS_IPC_H
|
||||
# error "Never use <bits/ipc.h> directly; include <sys/ipc.h> instead."
|
||||
#endif
|
||||
|
||||
#include <bits/types.h>
|
||||
|
||||
/* Mode bits for `msgget', `semget', and `shmget'. */
|
||||
#define IPC_CREAT 01000 /* Create key if key does not exist. */
|
||||
#define IPC_EXCL 02000 /* Fail if key exists. */
|
||||
#define IPC_NOWAIT 04000 /* Return error on wait. */
|
||||
|
||||
/* Control commands for `msgctl', `semctl', and `shmctl'. */
|
||||
#define IPC_RMID 0 /* Remove identifier. */
|
||||
#define IPC_SET 1 /* Set `ipc_perm' options. */
|
||||
#define IPC_STAT 2 /* Get `ipc_perm' options. */
|
||||
#ifdef __USE_GNU
|
||||
# define IPC_INFO 3 /* See ipcs. */
|
||||
#endif
|
||||
|
||||
/* Special key values. */
|
||||
#define IPC_PRIVATE ((__key_t) 0) /* Private key. */
|
||||
|
||||
|
||||
/* Data structure used to pass permission information to IPC operations. */
|
||||
struct ipc_perm
|
||||
{
|
||||
__key_t __key; /* Key. */
|
||||
unsigned int uid; /* Owner's user ID. */
|
||||
unsigned int gid; /* Owner's group ID. */
|
||||
unsigned int cuid; /* Creator's user ID. */
|
||||
unsigned int cgid; /* Creator's group ID. */
|
||||
unsigned int mode; /* Read/write permission. */
|
||||
unsigned short int __seq; /* Sequence number. */
|
||||
unsigned short int __pad1;
|
||||
unsigned long int __unused1;
|
||||
unsigned long int __unused2;
|
||||
};
|
@ -1,118 +0,0 @@
|
||||
/* Definitions for POSIX memory map interface. Linux/Alpha version.
|
||||
Copyright (C) 1997, 1998, 2000, 2003, 2006 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Lesser General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 2.1 of the License, or (at your option) any later version.
|
||||
|
||||
The GNU C Library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public
|
||||
License along with the GNU C Library; if not, write to the Free
|
||||
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||
02111-1307 USA. */
|
||||
|
||||
#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 0x100 /* Interpret addr exactly. */
|
||||
#ifdef __USE_MISC
|
||||
# define MAP_FILE 0
|
||||
# define MAP_ANONYMOUS 0x10 /* Don't use a file. */
|
||||
# define MAP_ANON MAP_ANONYMOUS
|
||||
#endif
|
||||
|
||||
/* Not used by Linux, but here to make sure we don't clash with
|
||||
OSF/1 defines. */
|
||||
#if 0 && defined __USE_BSD
|
||||
# define MAP_HASSEMAPHORE 0x0200
|
||||
# define MAP_INHERIT 0x0400
|
||||
# define MAP_UNALIGNED 0x0800
|
||||
#endif
|
||||
|
||||
/* These are Linux-specific. */
|
||||
#ifdef __USE_MISC
|
||||
# define MAP_GROWSDOWN 0x01000 /* Stack-like segment. */
|
||||
# define MAP_DENYWRITE 0x02000 /* ETXTBSY */
|
||||
# define MAP_EXECUTABLE 0x04000 /* Mark it as an executable. */
|
||||
# define MAP_LOCKED 0x08000 /* Lock the mapping. */
|
||||
# define MAP_NORESERVE 0x10000 /* Don't check for reservations. */
|
||||
# define MAP_POPULATE 0x20000 /* Populate (prefault) pagetables. */
|
||||
# define MAP_NONBLOCK 0x40000 /* Do not block on IO. */
|
||||
#endif
|
||||
|
||||
/* Flags to `msync'. */
|
||||
#define MS_ASYNC 1 /* Sync memory asynchronously. */
|
||||
#define MS_SYNC 2 /* Synchronous memory sync. */
|
||||
#define MS_INVALIDATE 4 /* Invalidate the caches. */
|
||||
|
||||
/* Flags for `mlockall'. */
|
||||
#define MCL_CURRENT 8192 /* Lock all currently mapped pages. */
|
||||
#define MCL_FUTURE 16384 /* Lock all additions to address
|
||||
space. */
|
||||
|
||||
/* Flags for `mremap'. */
|
||||
#ifdef __USE_GNU
|
||||
# define MREMAP_MAYMOVE 1
|
||||
# define MREMAP_FIXED 2
|
||||
#endif
|
||||
|
||||
/* Advice to `madvise'. */
|
||||
#ifdef __USE_BSD
|
||||
# define MADV_NORMAL 0 /* No further special treatment. */
|
||||
# define MADV_RANDOM 1 /* Expect random page references. */
|
||||
# define MADV_SEQUENTIAL 2 /* Expect sequential page references. */
|
||||
# define MADV_WILLNEED 3 /* Will need these pages. */
|
||||
# define MADV_DONTNEED 6 /* Don't need these pages. */
|
||||
# define MADV_REMOVE 9 /* Remove these pages and resources. */
|
||||
# define MADV_DONTFORK 10 /* Do not inherit across fork. */
|
||||
# define MADV_DOFORK 11 /* Do inherit across fork. */
|
||||
#endif
|
||||
|
||||
/* The POSIX people had to invent similar names for the same things. */
|
||||
#ifdef __USE_XOPEN2K
|
||||
# define POSIX_MADV_NORMAL 0 /* No further special treatment. */
|
||||
# define POSIX_MADV_RANDOM 1 /* Expect random page references. */
|
||||
# define POSIX_MADV_SEQUENTIAL 2 /* Expect sequential page references. */
|
||||
# define POSIX_MADV_WILLNEED 3 /* Will need these pages. */
|
||||
# define POSIX_MADV_DONTNEED 6 /* Don't need these pages. */
|
||||
#endif
|
||||
|
||||
/* Not used by Linux, but here to make sure we don't clash with
|
||||
OSF/1 defines. */
|
||||
#if 0 && defined __USE_BSD
|
||||
# define MADV_DONTNEED_COMPAT 4 /* Old version? */
|
||||
# define MADV_SPACEAVAIL 5 /* Ensure resources are available. */
|
||||
#endif
|
@ -1,74 +0,0 @@
|
||||
/* Copyright (C) 1995, 1996, 1997, 2000 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Lesser General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 2.1 of the License, or (at your option) any later version.
|
||||
|
||||
The GNU C Library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public
|
||||
License along with the GNU C Library; if not, write to the Free
|
||||
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||
02111-1307 USA. */
|
||||
|
||||
#ifndef _SYS_MSG_H
|
||||
# error "Never use <bits/msq.h> directly; include <sys/msg.h> instead."
|
||||
#endif
|
||||
|
||||
#include <bits/types.h>
|
||||
|
||||
/* Define options for message queue functions. */
|
||||
#define MSG_NOERROR 010000 /* no error if message is too big */
|
||||
#ifdef __USE_GNU
|
||||
# define MSG_EXCEPT 020000 /* recv any msg except of specified type */
|
||||
#endif
|
||||
|
||||
/* Types used in the structure definition. */
|
||||
typedef unsigned long int msgqnum_t;
|
||||
typedef unsigned long int msglen_t;
|
||||
|
||||
|
||||
/* Structure of record for one message inside the kernel.
|
||||
The type `struct msg' is opaque. */
|
||||
struct msqid_ds
|
||||
{
|
||||
struct ipc_perm msg_perm; /* structure describing operation permission */
|
||||
__time_t msg_stime; /* time of last msgsnd command */
|
||||
__time_t msg_rtime; /* time of last msgrcv command */
|
||||
__time_t msg_ctime; /* time of last change */
|
||||
unsigned long int __msg_cbytes; /* current number of bytes on queue */
|
||||
msgqnum_t msg_qnum; /* number of messages currently on queue */
|
||||
msglen_t msg_qbytes; /* max number of bytes allowed on queue */
|
||||
__pid_t msg_lspid; /* pid of last msgsnd() */
|
||||
__pid_t msg_lrpid; /* pid of last msgrcv() */
|
||||
unsigned long int __unused1;
|
||||
unsigned long int __unused2;
|
||||
};
|
||||
|
||||
#ifdef __USE_MISC
|
||||
|
||||
# define msg_cbytes __msg_cbytes
|
||||
|
||||
/* ipcs ctl commands */
|
||||
# define MSG_STAT 11
|
||||
# define MSG_INFO 12
|
||||
|
||||
/* buffer for msgctl calls IPC_INFO, MSG_INFO */
|
||||
struct msginfo
|
||||
{
|
||||
int msgpool;
|
||||
int msgmap;
|
||||
int msgmax;
|
||||
int msgmnb;
|
||||
int msgmni;
|
||||
int msgssz;
|
||||
int msgtql;
|
||||
unsigned short int msgseg;
|
||||
};
|
||||
|
||||
#endif /* __USE_MISC */
|
@ -1,35 +0,0 @@
|
||||
/* 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. */
|
||||
|
||||
#ifndef _NETDB_H
|
||||
# error "Never include <bits/netdb.h> directly; use <netdb.h> instead."
|
||||
#endif
|
||||
|
||||
|
||||
/* Description of data base entry for a single network. NOTE: here a
|
||||
poor assumption is made. The network number is expected to fit
|
||||
into an unsigned long int variable. */
|
||||
struct netent
|
||||
{
|
||||
char *n_name; /* Official name of network. */
|
||||
char **n_aliases; /* Alias list. */
|
||||
int n_addrtype; /* Net address type. */
|
||||
/* XXX We should probably use uint32_t for the field and ensure
|
||||
compatiblity by adding appropriate padding. */
|
||||
unsigned long int n_net; /* Network number. */
|
||||
};
|
@ -1,233 +0,0 @@
|
||||
/* Bit values & structures for resource limits. Alpha/Linux version.
|
||||
Copyright (C) 1994, 1996, 1997, 1998, 1999, 2000, 2004, 2005
|
||||
Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Lesser General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 2.1 of the License, or (at your option) any later version.
|
||||
|
||||
The GNU C Library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public
|
||||
License along with the GNU C Library; if not, write to the Free
|
||||
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||
02111-1307 USA. */
|
||||
|
||||
#ifndef _SYS_RESOURCE_H
|
||||
# error "Never use <bits/resource.h> directly; include <sys/resource.h> instead."
|
||||
#endif
|
||||
|
||||
#include <bits/types.h>
|
||||
|
||||
/* Transmute defines to enumerations. The macro re-definitions are
|
||||
necessary because some programs want to test for operating system
|
||||
features with #ifdef RUSAGE_SELF. In ISO C the reflexive
|
||||
definition is a no-op. */
|
||||
|
||||
/* Kinds of resource limit. */
|
||||
enum __rlimit_resource
|
||||
{
|
||||
/* Per-process CPU limit, in seconds. */
|
||||
RLIMIT_CPU = 0,
|
||||
#define RLIMIT_CPU RLIMIT_CPU
|
||||
|
||||
/* Largest file that can be created, in bytes. */
|
||||
RLIMIT_FSIZE = 1,
|
||||
#define RLIMIT_FSIZE RLIMIT_FSIZE
|
||||
|
||||
/* Maximum size of data segment, in bytes. */
|
||||
RLIMIT_DATA = 2,
|
||||
#define RLIMIT_DATA RLIMIT_DATA
|
||||
|
||||
/* Maximum size of stack segment, in bytes. */
|
||||
RLIMIT_STACK = 3,
|
||||
#define RLIMIT_STACK RLIMIT_STACK
|
||||
|
||||
/* Largest core file that can be created, in bytes. */
|
||||
RLIMIT_CORE = 4,
|
||||
#define RLIMIT_CORE RLIMIT_CORE
|
||||
|
||||
/* Largest resident set size, in bytes.
|
||||
This affects swapping; processes that are exceeding their
|
||||
resident set size will be more likely to have physical memory
|
||||
taken from them. */
|
||||
__RLIMIT_RSS = 5,
|
||||
#define RLIMIT_RSS __RLIMIT_RSS
|
||||
|
||||
/* Number of open files. */
|
||||
RLIMIT_NOFILE = 6,
|
||||
__RLIMIT_OFILE = RLIMIT_NOFILE, /* BSD name for same. */
|
||||
#define RLIMIT_NOFILE RLIMIT_NOFILE
|
||||
#define RLIMIT_OFILE __RLIMIT_OFILE
|
||||
|
||||
/* Address space limit (?) */
|
||||
RLIMIT_AS = 7,
|
||||
#define RLIMIT_AS RLIMIT_AS
|
||||
|
||||
/* Number of processes. */
|
||||
__RLIMIT_NPROC = 8,
|
||||
#define RLIMIT_NPROC __RLIMIT_NPROC
|
||||
|
||||
/* Locked-in-memory address space. */
|
||||
__RLIMIT_MEMLOCK = 9,
|
||||
#define RLIMIT_MEMLOCK __RLIMIT_MEMLOCK
|
||||
|
||||
/* Maximum number of file locks. */
|
||||
__RLIMIT_LOCKS = 10,
|
||||
#define RLIMIT_LOCKS __RLIMIT_LOCKS
|
||||
|
||||
/* Maximum number of pending signals. */
|
||||
__RLIMIT_SIGPENDING = 11,
|
||||
#define RLIMIT_SIGPENDING __RLIMIT_SIGPENDING
|
||||
|
||||
/* Maximum bytes in POSIX message queues. */
|
||||
__RLIMIT_MSGQUEUE = 12,
|
||||
#define RLIMIT_MSGQUEUE __RLIMIT_MSGQUEUE
|
||||
|
||||
/* Maximum nice priority allowed to raise to.
|
||||
Nice levels 19 .. -20 correspond to 0 .. 39
|
||||
values of this resource limit. */
|
||||
__RLIMIT_NICE = 13,
|
||||
#define RLIMIT_NICE __RLIMIT_NICE
|
||||
|
||||
/* Maximum realtime priority allowed for non-priviledged
|
||||
processes. */
|
||||
__RLIMIT_RTPRIO = 14,
|
||||
#define RLIMIT_RTPRIO __RLIMIT_RTPRIO
|
||||
|
||||
__RLIMIT_NLIMITS = 15,
|
||||
__RLIM_NLIMITS = __RLIMIT_NLIMITS
|
||||
#define RLIMIT_NLIMITS __RLIMIT_NLIMITS
|
||||
#define RLIM_NLIMITS __RLIM_NLIMITS
|
||||
};
|
||||
|
||||
/* Value to indicate that there is no limit. */
|
||||
#ifndef __USE_FILE_OFFSET64
|
||||
# define RLIM_INFINITY ((long int)(~0UL >> 1))
|
||||
#else
|
||||
# define RLIM_INFINITY 0x7fffffffffffffffLL
|
||||
#endif
|
||||
|
||||
#ifdef __USE_LARGEFILE64
|
||||
# define RLIM64_INFINITY 0x7fffffffffffffffLL
|
||||
#endif
|
||||
|
||||
/* We can represent all limits. */
|
||||
#define RLIM_SAVED_MAX RLIM_INFINITY
|
||||
#define RLIM_SAVED_CUR RLIM_INFINITY
|
||||
|
||||
|
||||
/* Type for resource quantity measurement. */
|
||||
#ifndef __USE_FILE_OFFSET64
|
||||
typedef __rlim_t rlim_t;
|
||||
#else
|
||||
typedef __rlim64_t rlim_t;
|
||||
#endif
|
||||
#ifdef __USE_LARGEFILE64
|
||||
typedef __rlim64_t rlim64_t;
|
||||
#endif
|
||||
|
||||
struct rlimit
|
||||
{
|
||||
/* The current (soft) limit. */
|
||||
rlim_t rlim_cur;
|
||||
/* The hard limit. */
|
||||
rlim_t rlim_max;
|
||||
};
|
||||
|
||||
#ifdef __USE_LARGEFILE64
|
||||
struct rlimit64
|
||||
{
|
||||
/* The current (soft) limit. */
|
||||
rlim64_t rlim_cur;
|
||||
/* The hard limit. */
|
||||
rlim64_t rlim_max;
|
||||
};
|
||||
#endif
|
||||
|
||||
/* Whose usage statistics do you want? */
|
||||
enum __rusage_who
|
||||
{
|
||||
/* The calling process. */
|
||||
RUSAGE_SELF = 0,
|
||||
#define RUSAGE_SELF RUSAGE_SELF
|
||||
|
||||
/* All of its terminated child processes. */
|
||||
RUSAGE_CHILDREN = -1,
|
||||
#define RUSAGE_CHILDREN RUSAGE_CHILDREN
|
||||
|
||||
#ifdef __USE_GNU
|
||||
/* The calling thread. */
|
||||
RUSAGE_THREAD = 1
|
||||
# define RUSAGE_THREAD RUSAGE_THREAD
|
||||
/* Name for the same functionality on Solaris. */
|
||||
# define RUSAGE_LWP RUSAGE_THREAD
|
||||
#endif
|
||||
};
|
||||
|
||||
#define __need_timeval
|
||||
#include <bits/time.h> /* For `struct timeval'. */
|
||||
|
||||
/* Structure which says how much of each resource has been used. */
|
||||
struct rusage
|
||||
{
|
||||
/* Total amount of user time used. */
|
||||
struct timeval ru_utime;
|
||||
/* Total amount of system time used. */
|
||||
struct timeval ru_stime;
|
||||
/* Maximum resident set size (in kilobytes). */
|
||||
long int ru_maxrss;
|
||||
/* Amount of sharing of text segment memory
|
||||
with other processes (kilobyte-seconds). */
|
||||
long int ru_ixrss;
|
||||
/* Amount of data segment memory used (kilobyte-seconds). */
|
||||
long int ru_idrss;
|
||||
/* Amount of stack memory used (kilobyte-seconds). */
|
||||
long int ru_isrss;
|
||||
/* Number of soft page faults (i.e. those serviced by reclaiming
|
||||
a page from the list of pages awaiting reallocation. */
|
||||
long int ru_minflt;
|
||||
/* Number of hard page faults (i.e. those that required I/O). */
|
||||
long int ru_majflt;
|
||||
/* Number of times a process was swapped out of physical memory. */
|
||||
long int ru_nswap;
|
||||
/* Number of input operations via the file system. Note: This
|
||||
and `ru_oublock' do not include operations with the cache. */
|
||||
long int ru_inblock;
|
||||
/* Number of output operations via the file system. */
|
||||
long int ru_oublock;
|
||||
/* Number of IPC messages sent. */
|
||||
long int ru_msgsnd;
|
||||
/* Number of IPC messages received. */
|
||||
long int ru_msgrcv;
|
||||
/* Number of signals delivered. */
|
||||
long int ru_nsignals;
|
||||
/* Number of voluntary context switches, i.e. because the process
|
||||
gave up the process before it had to (usually to wait for some
|
||||
resource to be available). */
|
||||
long int ru_nvcsw;
|
||||
/* Number of involuntary context switches, i.e. a higher priority process
|
||||
became runnable or the current process used up its time slice. */
|
||||
long int ru_nivcsw;
|
||||
};
|
||||
|
||||
/* Priority limits. */
|
||||
#define PRIO_MIN -20 /* Minimum priority a process can have. */
|
||||
#define PRIO_MAX 20 /* Maximum priority a process can have. */
|
||||
|
||||
/* The type of the WHICH argument to `getpriority' and `setpriority',
|
||||
indicating what flavor of entity the WHO argument specifies. */
|
||||
enum __priority_which
|
||||
{
|
||||
PRIO_PROCESS = 0, /* WHO is a process ID. */
|
||||
#define PRIO_PROCESS PRIO_PROCESS
|
||||
PRIO_PGRP = 1, /* WHO is a process group ID. */
|
||||
#define PRIO_PGRP PRIO_PGRP
|
||||
PRIO_USER = 2 /* WHO is a user ID. */
|
||||
#define PRIO_USER PRIO_USER
|
||||
};
|
@ -1,85 +0,0 @@
|
||||
/* Copyright (C) 1995, 1996, 1997, 1998, 2000 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Lesser General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 2.1 of the License, or (at your option) any later version.
|
||||
|
||||
The GNU C Library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public
|
||||
License along with the GNU C Library; if not, write to the Free
|
||||
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||
02111-1307 USA. */
|
||||
|
||||
#ifndef _SYS_SEM_H
|
||||
# error "Never include <bits/sem.h> directly; use <sys/sem.h> instead."
|
||||
#endif
|
||||
|
||||
#include <sys/types.h>
|
||||
|
||||
/* Flags for `semop'. */
|
||||
#define SEM_UNDO 0x1000 /* undo the operation on exit */
|
||||
|
||||
/* Commands for `semctl'. */
|
||||
#define GETPID 11 /* get sempid */
|
||||
#define GETVAL 12 /* get semval */
|
||||
#define GETALL 13 /* get all semval's */
|
||||
#define GETNCNT 14 /* get semncnt */
|
||||
#define GETZCNT 15 /* get semzcnt */
|
||||
#define SETVAL 16 /* set semval */
|
||||
#define SETALL 17 /* set all semval's */
|
||||
|
||||
|
||||
/* Data structure describing a set of semaphores. */
|
||||
struct semid_ds
|
||||
{
|
||||
struct ipc_perm sem_perm; /* operation permission struct */
|
||||
__time_t sem_otime; /* last semop() time */
|
||||
__time_t sem_ctime; /* last time changed by semctl() */
|
||||
unsigned long int sem_nsems; /* number of semaphores in set */
|
||||
unsigned long int __unused1;
|
||||
unsigned long int __unused2;
|
||||
};
|
||||
|
||||
/* The user should define a union like the following to use it for arguments
|
||||
for `semctl'.
|
||||
|
||||
union semun
|
||||
{
|
||||
int val; <= value for SETVAL
|
||||
struct semid_ds *buf; <= buffer for IPC_STAT & IPC_SET
|
||||
unsigned short int *array; <= array for GETALL & SETALL
|
||||
struct seminfo *__buf; <= buffer for IPC_INFO
|
||||
};
|
||||
|
||||
Previous versions of this file used to define this union but this is
|
||||
incorrect. One can test the macro _SEM_SEMUN_UNDEFINED to see whether
|
||||
one must define the union or not. */
|
||||
#define _SEM_SEMUN_UNDEFINED 1
|
||||
|
||||
#ifdef __USE_MISC
|
||||
|
||||
/* ipcs ctl cmds */
|
||||
# define SEM_STAT 18
|
||||
# define SEM_INFO 19
|
||||
|
||||
struct seminfo
|
||||
{
|
||||
int semmap;
|
||||
int semmni;
|
||||
int semmns;
|
||||
int semmnu;
|
||||
int semmsl;
|
||||
int semopm;
|
||||
int semume;
|
||||
int semusz;
|
||||
int semvmx;
|
||||
int semaem;
|
||||
};
|
||||
|
||||
#endif /* __USE_MISC */
|
@ -1,101 +0,0 @@
|
||||
/* Copyright (C) 1995, 1996, 1997, 2000, 2002, 2004
|
||||
Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Lesser General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 2.1 of the License, or (at your option) any later version.
|
||||
|
||||
The GNU C Library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public
|
||||
License along with the GNU C Library; if not, write to the Free
|
||||
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||
02111-1307 USA. */
|
||||
|
||||
#ifndef _SYS_SHM_H
|
||||
# error "Never include <bits/shm.h> directly; use <sys/shm.h> instead."
|
||||
#endif
|
||||
|
||||
#include <bits/types.h>
|
||||
|
||||
/* Permission flag for shmget. */
|
||||
#define SHM_R 0400 /* or S_IRUGO from <linux/stat.h> */
|
||||
#define SHM_W 0200 /* or S_IWUGO from <linux/stat.h> */
|
||||
|
||||
/* Flags for `shmat'. */
|
||||
#define SHM_RDONLY 010000 /* attach read-only else read-write */
|
||||
#define SHM_RND 020000 /* round attach address to SHMLBA */
|
||||
#define SHM_REMAP 040000 /* take-over region on attach */
|
||||
|
||||
/* Commands for `shmctl'. */
|
||||
#define SHM_LOCK 11 /* lock segment (root only) */
|
||||
#define SHM_UNLOCK 12 /* unlock segment (root only) */
|
||||
|
||||
__BEGIN_DECLS
|
||||
|
||||
/* Segment low boundary address multiple. */
|
||||
#define SHMLBA (__getpagesize ())
|
||||
extern int __getpagesize (void) __THROW __attribute__ ((__const__));
|
||||
|
||||
|
||||
/* Type to count number of attaches. */
|
||||
typedef unsigned long int shmatt_t;
|
||||
|
||||
/* Data structure describing a shared memory segment. */
|
||||
struct shmid_ds
|
||||
{
|
||||
struct ipc_perm shm_perm; /* operation permission struct */
|
||||
size_t shm_segsz; /* size of segment in bytes */
|
||||
__time_t shm_atime; /* time of last shmat() */
|
||||
__time_t shm_dtime; /* time of last shmdt() */
|
||||
__time_t shm_ctime; /* time of last change by shmctl() */
|
||||
__pid_t shm_cpid; /* pid of creator */
|
||||
__pid_t shm_lpid; /* pid of last shmop */
|
||||
shmatt_t shm_nattch; /* number of current attaches */
|
||||
unsigned long int __unused1;
|
||||
unsigned long int __unused2;
|
||||
};
|
||||
|
||||
#ifdef __USE_MISC
|
||||
|
||||
/* ipcs ctl commands */
|
||||
# define SHM_STAT 13
|
||||
# define SHM_INFO 14
|
||||
|
||||
/* shm_mode upper byte flags */
|
||||
# define SHM_DEST 01000 /* segment will be destroyed on last detach */
|
||||
# define SHM_LOCKED 02000 /* segment will not be swapped */
|
||||
# define SHM_HUGETLB 04000 /* segment is mapped via hugetlb */
|
||||
# define SHM_NORESERVE 010000 /* don't check for reservations */
|
||||
|
||||
struct shminfo
|
||||
{
|
||||
unsigned long int shmmax;
|
||||
unsigned long int shmmin;
|
||||
unsigned long int shmmni;
|
||||
unsigned long int shmseg;
|
||||
unsigned long int shmall;
|
||||
unsigned long int __unused1;
|
||||
unsigned long int __unused2;
|
||||
unsigned long int __unused3;
|
||||
unsigned long int __unused4;
|
||||
};
|
||||
|
||||
struct shm_info
|
||||
{
|
||||
int used_ids;
|
||||
unsigned long int shm_tot; /* total allocated shm */
|
||||
unsigned long int shm_rss; /* total resident shm */
|
||||
unsigned long int shm_swp; /* total swapped shm */
|
||||
unsigned long int swap_attempts;
|
||||
unsigned long int swap_successes;
|
||||
};
|
||||
|
||||
#endif /* __USE_MISC */
|
||||
|
||||
__END_DECLS
|
@ -1,74 +0,0 @@
|
||||
/* The proper definitions for Linux/Alpha sigaction.
|
||||
Copyright (C) 1996, 1997, 1999, 2000 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Lesser General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 2.1 of the License, or (at your option) any later version.
|
||||
|
||||
The GNU C Library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public
|
||||
License along with the GNU C Library; if not, write to the Free
|
||||
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||
02111-1307 USA. */
|
||||
|
||||
#ifndef _SIGNAL_H
|
||||
# error "Never include <bits/sigaction.h> directly; use <signal.h> instead."
|
||||
#endif
|
||||
|
||||
/* Structure describing the action to be taken when a signal arrives. */
|
||||
struct sigaction
|
||||
{
|
||||
/* Signal handler. */
|
||||
#ifdef __USE_POSIX199309
|
||||
union
|
||||
{
|
||||
/* Used if SA_SIGINFO is not set. */
|
||||
__sighandler_t sa_handler;
|
||||
/* Used if SA_SIGINFO is set. */
|
||||
void (*sa_sigaction) (int, siginfo_t *, void *);
|
||||
}
|
||||
__sigaction_handler;
|
||||
# define sa_handler __sigaction_handler.sa_handler
|
||||
# define sa_sigaction __sigaction_handler.sa_sigaction
|
||||
#else
|
||||
__sighandler_t sa_handler;
|
||||
#endif
|
||||
|
||||
/* Additional set of signals to be blocked. */
|
||||
__sigset_t sa_mask;
|
||||
|
||||
/* Special flags. */
|
||||
unsigned int sa_flags;
|
||||
};
|
||||
|
||||
/* Bits in `sa_flags'. */
|
||||
#define SA_NOCLDSTOP 0x00000004 /* Don't send SIGCHLD when children stop. */
|
||||
#define SA_NOCLDWAIT 0x00000020 /* Don't create zombie on child death. */
|
||||
#define SA_SIGINFO 0x00000040 /* Invoke signal-catching function with
|
||||
three arguments instead of one. */
|
||||
#if defined __USE_UNIX98 || defined __USE_MISC
|
||||
# define SA_ONSTACK 0x00000001 /* Use signal stack by using `sa_restorer'. */
|
||||
# define SA_RESTART 0x00000002 /* Restart syscall on signal return. */
|
||||
# define SA_NODEFER 0x00000008 /* Don't automatically block the signal
|
||||
when its handler is being executed. */
|
||||
# define SA_RESETHAND 0x00000010 /* Reset to SIG_DFL on entry to handler. */
|
||||
#endif
|
||||
#ifdef __USE_MISC
|
||||
# define SA_INTERRUPT 0x20000000 /* Historical no-op. */
|
||||
|
||||
/* Some aliases for the SA_ constants. */
|
||||
# define SA_NOMASK SA_NODEFER
|
||||
# define SA_ONESHOT SA_RESETHAND
|
||||
# define SA_STACK SA_ONSTACK
|
||||
#endif
|
||||
|
||||
/* Values for the HOW argument to `sigprocmask'. */
|
||||
#define SIG_BLOCK 1 /* Block signals. */
|
||||
#define SIG_UNBLOCK 2 /* Unblock signals. */
|
||||
#define SIG_SETMASK 3 /* Set the set of blocked signals. */
|
@ -1,303 +0,0 @@
|
||||
/* siginfo_t, sigevent and constants. Linux/Alpha version.
|
||||
Copyright (C) 1997-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. */
|
||||
|
||||
#if !defined _SIGNAL_H && !defined __need_siginfo_t \
|
||||
&& !defined __need_sigevent_t
|
||||
# error "Never include this file directly. Use <signal.h> instead"
|
||||
#endif
|
||||
|
||||
#if (!defined __have_sigval_t \
|
||||
&& (defined _SIGNAL_H || defined __need_siginfo_t \
|
||||
|| defined __need_sigevent_t))
|
||||
# define __have_sigval_t 1
|
||||
|
||||
/* Type for data associated with a signal. */
|
||||
typedef union sigval
|
||||
{
|
||||
int sival_int;
|
||||
void *sival_ptr;
|
||||
} sigval_t;
|
||||
#endif
|
||||
|
||||
#if (!defined __have_siginfo_t \
|
||||
&& (defined _SIGNAL_H || defined __need_siginfo_t))
|
||||
# define __have_siginfo_t 1
|
||||
|
||||
# define __SI_MAX_SIZE 128
|
||||
# define __SI_PAD_SIZE ((__SI_MAX_SIZE / sizeof (int)) - 4)
|
||||
|
||||
typedef struct siginfo
|
||||
{
|
||||
int si_signo; /* Signal number. */
|
||||
int si_errno; /* If non-zero, an errno value associated with
|
||||
this signal, as defined in <errno.h>. */
|
||||
int si_code; /* Signal code. */
|
||||
|
||||
union
|
||||
{
|
||||
int _pad[__SI_PAD_SIZE];
|
||||
|
||||
/* kill(). */
|
||||
struct
|
||||
{
|
||||
__pid_t si_pid; /* Sending process ID. */
|
||||
__uid_t si_uid; /* Real user ID of sending process. */
|
||||
} _kill;
|
||||
|
||||
/* POSIX.1b timers. */
|
||||
struct
|
||||
{
|
||||
int si_tid; /* Timer ID. */
|
||||
int si_overrun; /* Overrun count. */
|
||||
sigval_t si_sigval; /* Signal value. */
|
||||
} _timer;
|
||||
|
||||
/* POSIX.1b signals. */
|
||||
struct
|
||||
{
|
||||
__pid_t si_pid; /* Sending process ID. */
|
||||
__uid_t si_uid; /* Real user ID of sending process. */
|
||||
sigval_t si_sigval; /* Signal value. */
|
||||
} _rt;
|
||||
|
||||
/* SIGCHLD. */
|
||||
struct
|
||||
{
|
||||
__pid_t si_pid; /* Which child. */
|
||||
__uid_t si_uid; /* Real user ID of sending process. */
|
||||
int si_status; /* Exit value or signal. */
|
||||
__clock_t si_utime;
|
||||
__clock_t si_stime;
|
||||
} _sigchld;
|
||||
|
||||
/* SIGILL, SIGFPE, SIGSEGV, SIGBUS. */
|
||||
struct
|
||||
{
|
||||
void *si_addr; /* Faulting insn/memory ref. */
|
||||
} _sigfault;
|
||||
|
||||
/* SIGPOLL. */
|
||||
struct
|
||||
{
|
||||
int si_band; /* Band event for SIGPOLL. */
|
||||
int si_fd;
|
||||
} _sigpoll;
|
||||
} _sifields;
|
||||
} siginfo_t;
|
||||
|
||||
|
||||
/* X/Open requires some more fields with fixed names. */
|
||||
# define si_pid _sifields._kill.si_pid
|
||||
# define si_uid _sifields._kill.si_uid
|
||||
# define si_timerid _sifields._timer.si_tid
|
||||
# define si_overrun _sifields._timer.si_overrun
|
||||
# define si_status _sifields._sigchld.si_status
|
||||
# define si_utime _sifields._sigchld.si_utime
|
||||
# define si_stime _sifields._sigchld.si_stime
|
||||
# define si_value _sifields._rt.si_sigval
|
||||
# define si_int _sifields._rt.si_sigval.sival_int
|
||||
# define si_ptr _sifields._rt.si_sigval.sival_ptr
|
||||
# define si_addr _sifields._sigfault.si_addr
|
||||
# define si_band _sifields._sigpoll.si_band
|
||||
# define si_fd _sifields._sigpoll.si_fd
|
||||
|
||||
|
||||
/* Values for `si_code'. Positive values are reserved for kernel-generated
|
||||
signals. */
|
||||
enum
|
||||
{
|
||||
SI_ASYNCNL = -60, /* Sent by asynch name lookup completion. */
|
||||
# define SI_ASYNCNL SI_ASYNCNL
|
||||
SI_TKILL = -6, /* Sent by tkill. */
|
||||
# define SI_TKILL SI_TKILL
|
||||
SI_SIGIO, /* Sent by queued SIGIO. */
|
||||
# define SI_SIGIO SI_SIGIO
|
||||
SI_ASYNCIO, /* Sent by AIO completion. */
|
||||
# define SI_ASYNCIO SI_ASYNCIO
|
||||
SI_MESGQ, /* Sent by real time mesq state change. */
|
||||
# define SI_MESGQ SI_MESGQ
|
||||
SI_TIMER, /* Sent by timer expiration. */
|
||||
# define SI_TIMER SI_TIMER
|
||||
SI_QUEUE, /* Sent by sigqueue. */
|
||||
# define SI_QUEUE SI_QUEUE
|
||||
SI_USER, /* Sent by kill, sigsend, raise. */
|
||||
# define SI_USER SI_USER
|
||||
SI_KERNEL = 0x80 /* Send by kernel. */
|
||||
#define SI_KERNEL SI_KERNEL
|
||||
};
|
||||
|
||||
|
||||
/* `si_code' values for SIGILL signal. */
|
||||
enum
|
||||
{
|
||||
ILL_ILLOPC = 1, /* Illegal opcode. */
|
||||
# define ILL_ILLOPC ILL_ILLOPC
|
||||
ILL_ILLOPN, /* Illegal operand. */
|
||||
# define ILL_ILLOPN ILL_ILLOPN
|
||||
ILL_ILLADR, /* Illegal addressing mode. */
|
||||
# define ILL_ILLADR ILL_ILLADR
|
||||
ILL_ILLTRP, /* Illegal trap. */
|
||||
# define ILL_ILLTRP ILL_ILLTRP
|
||||
ILL_PRVOPC, /* Privileged opcode. */
|
||||
# define ILL_PRVOPC ILL_PRVOPC
|
||||
ILL_PRVREG, /* Privileged register. */
|
||||
# define ILL_PRVREG ILL_PRVREG
|
||||
ILL_COPROC, /* Coprocessor error. */
|
||||
# define ILL_COPROC ILL_COPROC
|
||||
ILL_BADSTK /* Internal stack error. */
|
||||
# define ILL_BADSTK ILL_BADSTK
|
||||
};
|
||||
|
||||
/* `si_code' values for SIGFPE signal. */
|
||||
enum
|
||||
{
|
||||
FPE_INTDIV = 1, /* Integer divide by zero. */
|
||||
# define FPE_INTDIV FPE_INTDIV
|
||||
FPE_INTOVF, /* Integer overflow. */
|
||||
# define FPE_INTOVF FPE_INTOVF
|
||||
FPE_FLTDIV, /* Floating point divide by zero. */
|
||||
# define FPE_FLTDIV FPE_FLTDIV
|
||||
FPE_FLTOVF, /* Floating point overflow. */
|
||||
# define FPE_FLTOVF FPE_FLTOVF
|
||||
FPE_FLTUND, /* Floating point underflow. */
|
||||
# define FPE_FLTUND FPE_FLTUND
|
||||
FPE_FLTRES, /* Floating point inexact result. */
|
||||
# define FPE_FLTRES FPE_FLTRES
|
||||
FPE_FLTINV, /* Floating point invalid operation. */
|
||||
# define FPE_FLTINV FPE_FLTINV
|
||||
FPE_FLTSUB /* Subscript out of range. */
|
||||
# define FPE_FLTSUB FPE_FLTSUB
|
||||
};
|
||||
|
||||
/* `si_code' values for SIGSEGV signal. */
|
||||
enum
|
||||
{
|
||||
SEGV_MAPERR = 1, /* Address not mapped to object. */
|
||||
# define SEGV_MAPERR SEGV_MAPERR
|
||||
SEGV_ACCERR /* Invalid permissions for mapped object. */
|
||||
# define SEGV_ACCERR SEGV_ACCERR
|
||||
};
|
||||
|
||||
/* `si_code' values for SIGBUS signal. */
|
||||
enum
|
||||
{
|
||||
BUS_ADRALN = 1, /* Invalid address alignment. */
|
||||
# define BUS_ADRALN BUS_ADRALN
|
||||
BUS_ADRERR, /* Non-existant physical address. */
|
||||
# define BUS_ADRERR BUS_ADRERR
|
||||
BUS_OBJERR /* Object specific hardware error. */
|
||||
# define BUS_OBJERR BUS_OBJERR
|
||||
};
|
||||
|
||||
/* `si_code' values for SIGTRAP signal. */
|
||||
enum
|
||||
{
|
||||
TRAP_BRKPT = 1, /* Process breakpoint. */
|
||||
# define TRAP_BRKPT TRAP_BRKPT
|
||||
TRAP_TRACE /* Process trace trap. */
|
||||
# define TRAP_TRACE TRAP_TRACE
|
||||
};
|
||||
|
||||
/* `si_code' values for SIGCHLD signal. */
|
||||
enum
|
||||
{
|
||||
CLD_EXITED = 1, /* Child has exited. */
|
||||
# define CLD_EXITED CLD_EXITED
|
||||
CLD_KILLED, /* Child was killed. */
|
||||
# define CLD_KILLED CLD_KILLED
|
||||
CLD_DUMPED, /* Child terminated abnormally. */
|
||||
# define CLD_DUMPED CLD_DUMPED
|
||||
CLD_TRAPPED, /* Traced child has trapped. */
|
||||
# define CLD_TRAPPED CLD_TRAPPED
|
||||
CLD_STOPPED, /* Child has stopped. */
|
||||
# define CLD_STOPPED CLD_STOPPED
|
||||
CLD_CONTINUED /* Stopped child has continued. */
|
||||
# define CLD_CONTINUED CLD_CONTINUED
|
||||
};
|
||||
|
||||
/* `si_code' values for SIGPOLL signal. */
|
||||
enum
|
||||
{
|
||||
POLL_IN = 1, /* Data input available. */
|
||||
# define POLL_IN POLL_IN
|
||||
POLL_OUT, /* Output buffers available. */
|
||||
# define POLL_OUT POLL_OUT
|
||||
POLL_MSG, /* Input message available. */
|
||||
# define POLL_MSG POLL_MSG
|
||||
POLL_ERR, /* I/O error. */
|
||||
# define POLL_ERR POLL_ERR
|
||||
POLL_PRI, /* High priority input available. */
|
||||
# define POLL_PRI POLL_PRI
|
||||
POLL_HUP /* Device disconnected. */
|
||||
# define POLL_HUP POLL_HUP
|
||||
};
|
||||
|
||||
# undef __need_siginfo_t
|
||||
#endif /* !have siginfo_t && (have _SIGNAL_H || need siginfo_t). */
|
||||
|
||||
|
||||
#if (defined _SIGNAL_H || defined __need_sigevent_t) \
|
||||
&& !defined __have_sigevent_t
|
||||
# define __have_sigevent_t 1
|
||||
|
||||
/* Structure to transport application-defined values with signals. */
|
||||
# define __SIGEV_MAX_SIZE 64
|
||||
# define __SIGEV_PAD_SIZE ((__SIGEV_MAX_SIZE / sizeof (int)) - 4)
|
||||
|
||||
typedef struct sigevent
|
||||
{
|
||||
sigval_t sigev_value;
|
||||
int sigev_signo;
|
||||
int sigev_notify;
|
||||
|
||||
union
|
||||
{
|
||||
int _pad[__SIGEV_PAD_SIZE];
|
||||
|
||||
/* When SIGEV_SIGNAL and SIGEV_THREAD_ID set, LWP ID of the
|
||||
thread to receive the signal. */
|
||||
__pid_t _tid;
|
||||
|
||||
struct
|
||||
{
|
||||
void (*_function) (sigval_t); /* Function to start. */
|
||||
void *_attribute; /* Really pthread_attr_t. */
|
||||
} _sigev_thread;
|
||||
} _sigev_un;
|
||||
} sigevent_t;
|
||||
|
||||
/* POSIX names to access some of the members. */
|
||||
# define sigev_notify_function _sigev_un._sigev_thread._function
|
||||
# define sigev_notify_attributes _sigev_un._sigev_thread._attribute
|
||||
|
||||
/* `sigev_notify' values. */
|
||||
enum
|
||||
{
|
||||
SIGEV_SIGNAL = 0, /* Notify via signal. */
|
||||
# define SIGEV_SIGNAL SIGEV_SIGNAL
|
||||
SIGEV_NONE, /* Other notification: meaningless. */
|
||||
# define SIGEV_NONE SIGEV_NONE
|
||||
SIGEV_THREAD, /* Deliver via thread creation. */
|
||||
# define SIGEV_THREAD SIGEV_THREAD
|
||||
|
||||
SIGEV_THREAD_ID = 4 /* Send signal to specific thread. */
|
||||
#define SIGEV_THREAD_ID SIGEV_THREAD_ID
|
||||
};
|
||||
|
||||
#endif /* have _SIGNAL_H. */
|
@ -1,82 +0,0 @@
|
||||
/* Signal number definitions. Linux/Alpha version.
|
||||
Copyright (C) 1996, 1997, 1998, 1999, 2003 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Lesser General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 2.1 of the License, or (at your option) any later version.
|
||||
|
||||
The GNU C Library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public
|
||||
License along with the GNU C Library; if not, write to the Free
|
||||
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||
02111-1307 USA. */
|
||||
|
||||
#ifdef _SIGNAL_H
|
||||
|
||||
/* Fake signal functions. */
|
||||
#define SIG_ERR ((__sighandler_t) -1) /* Error return. */
|
||||
#define SIG_DFL ((__sighandler_t) 0) /* Default action. */
|
||||
#define SIG_IGN ((__sighandler_t) 1) /* Ignore signal. */
|
||||
|
||||
#ifdef __USE_UNIX98
|
||||
# define SIG_HOLD ((__sighandler_t) 2) /* Add signal to hold mask. */
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Linux/AXP has different signal numbers that Linux/i386: I'm trying
|
||||
* to make it OSF/1 binary compatible, at least for normal binaries.
|
||||
*/
|
||||
#define SIGHUP 1
|
||||
#define SIGINT 2
|
||||
#define SIGQUIT 3
|
||||
#define SIGILL 4
|
||||
#define SIGTRAP 5
|
||||
#define SIGABRT 6
|
||||
#define SIGEMT 7
|
||||
#define SIGFPE 8
|
||||
#define SIGKILL 9
|
||||
#define SIGBUS 10
|
||||
#define SIGSEGV 11
|
||||
#define SIGSYS 12
|
||||
#define SIGPIPE 13
|
||||
#define SIGALRM 14
|
||||
#define SIGTERM 15
|
||||
#define SIGURG 16
|
||||
#define SIGSTOP 17
|
||||
#define SIGTSTP 18
|
||||
#define SIGCONT 19
|
||||
#define SIGCHLD 20
|
||||
#define SIGCLD SIGCHLD
|
||||
#define SIGTTIN 21
|
||||
#define SIGTTOU 22
|
||||
#define SIGIO 23
|
||||
#define SIGXCPU 24
|
||||
#define SIGXFSZ 25
|
||||
#define SIGVTALRM 26
|
||||
#define SIGPROF 27
|
||||
#define SIGWINCH 28
|
||||
#define SIGINFO 29
|
||||
#define SIGUSR1 30
|
||||
#define SIGUSR2 31
|
||||
|
||||
#define SIGPOLL SIGIO
|
||||
#define SIGPWR SIGINFO
|
||||
#define SIGIOT SIGABRT
|
||||
|
||||
#define _NSIG 65 /* Biggest signal number + 1. */
|
||||
|
||||
#define SIGRTMIN (__libc_current_sigrtmin ())
|
||||
#define SIGRTMAX (__libc_current_sigrtmax ())
|
||||
|
||||
/* These are the hard limits of the kernel. These values should not be
|
||||
used directly at user level. */
|
||||
#define __SIGRTMIN 32
|
||||
#define __SIGRTMAX (_NSIG - 1)
|
||||
|
||||
#endif /* <signal.h> included. */
|
@ -1,55 +0,0 @@
|
||||
/* sigstack, sigaltstack definitions.
|
||||
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 _SIGNAL_H
|
||||
# error "Never include this file directly. Use <signal.h> instead"
|
||||
#endif
|
||||
|
||||
|
||||
/* Structure describing a signal stack (obsolete). */
|
||||
struct sigstack
|
||||
{
|
||||
__ptr_t ss_sp; /* Signal stack pointer. */
|
||||
int ss_onstack; /* Nonzero if executing on this stack. */
|
||||
};
|
||||
|
||||
|
||||
/* Possible values for `ss_flags.'. */
|
||||
enum
|
||||
{
|
||||
SS_ONSTACK = 1,
|
||||
#define SS_ONSTACK SS_ONSTACK
|
||||
SS_DISABLE
|
||||
#define SS_DISABLE SS_DISABLE
|
||||
};
|
||||
|
||||
/* Minimum stack size for a signal handler. */
|
||||
#define MINSIGSTKSZ 4096
|
||||
|
||||
/* System default stack size. */
|
||||
#define SIGSTKSZ 16384
|
||||
|
||||
|
||||
/* Alternate, preferred interface. */
|
||||
typedef struct sigaltstack
|
||||
{
|
||||
__ptr_t ss_sp;
|
||||
int ss_flags;
|
||||
size_t ss_size;
|
||||
} stack_t;
|
@ -1,157 +0,0 @@
|
||||
/* Copyright (C) 1996,1997,1998,1999,2000,2001,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 _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_KERNEL 0
|
||||
#define _STAT_VER_GLIBC2 1
|
||||
#define _STAT_VER_GLIBC2_1 2
|
||||
#define _STAT_VER_KERNEL64 3
|
||||
#define _STAT_VER_GLIBC2_3_4 3
|
||||
#define _STAT_VER _STAT_VER_GLIBC2_3_4
|
||||
|
||||
/* Versions of the `xmknod' interface. */
|
||||
#define _MKNOD_VER_LINUX 0
|
||||
|
||||
|
||||
/* 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.
|
||||
|
||||
Use neat tidy anonymous unions and structures when possible. */
|
||||
|
||||
#ifdef __USE_MISC
|
||||
# if __GNUC_PREREQ(3,3)
|
||||
# define __ST_TIME(X) \
|
||||
__extension__ union { \
|
||||
struct timespec st_##X##tim; \
|
||||
struct { \
|
||||
__time_t st_##X##time; \
|
||||
unsigned long st_##X##timensec; \
|
||||
}; \
|
||||
}
|
||||
# else
|
||||
# define __ST_TIME(X) struct timespec st_##X##tim
|
||||
# define st_atime st_atim.tv_sec
|
||||
# define st_mtime st_mtim.tv_sec
|
||||
# define st_ctime st_ctim.tv_sec
|
||||
# endif
|
||||
#else
|
||||
# define __ST_TIME(X) \
|
||||
__time_t st_##X##time; \
|
||||
unsigned long st_##X##timensec
|
||||
#endif
|
||||
|
||||
|
||||
struct stat
|
||||
{
|
||||
__dev_t st_dev; /* Device. */
|
||||
#ifdef __USE_FILE_OFFSET64
|
||||
__ino64_t st_ino; /* File serial number. */
|
||||
#else
|
||||
__ino_t st_ino; /* File serial number. */
|
||||
int __pad0; /* 64-bit st_ino. */
|
||||
#endif
|
||||
__dev_t st_rdev; /* Device number, if device. */
|
||||
__off_t st_size; /* Size of file, in bytes. */
|
||||
#ifdef __USE_FILE_OFFSET64
|
||||
__blkcnt64_t st_blocks; /* Nr. 512-byte blocks allocated. */
|
||||
#else
|
||||
__blkcnt_t st_blocks; /* Nr. 512-byte blocks allocated. */
|
||||
int __pad1; /* 64-bit st_blocks. */
|
||||
#endif
|
||||
__mode_t st_mode; /* File mode. */
|
||||
__uid_t st_uid; /* User ID of the file's owner. */
|
||||
__gid_t st_gid; /* Group ID of the file's group.*/
|
||||
__blksize_t st_blksize; /* Optimal block size for I/O. */
|
||||
__nlink_t st_nlink; /* Link count. */
|
||||
int __pad2; /* Real padding. */
|
||||
__ST_TIME(a); /* Time of last access. */
|
||||
__ST_TIME(m); /* Time of last modification. */
|
||||
__ST_TIME(c); /* Time of last status change. */
|
||||
long __unused[3];
|
||||
};
|
||||
|
||||
#ifdef __USE_LARGEFILE64
|
||||
/* Note stat64 is the same shape as stat. */
|
||||
struct stat64
|
||||
{
|
||||
__dev_t st_dev; /* Device. */
|
||||
__ino64_t st_ino; /* File serial number. */
|
||||
__dev_t st_rdev; /* Device number, if device. */
|
||||
__off_t st_size; /* Size of file, in bytes. */
|
||||
__blkcnt64_t st_blocks; /* Nr. 512-byte blocks allocated. */
|
||||
__mode_t st_mode; /* File mode. */
|
||||
__uid_t st_uid; /* User ID of the file's owner. */
|
||||
__gid_t st_gid; /* Group ID of the file's group.*/
|
||||
__blksize_t st_blksize; /* Optimal block size for I/O. */
|
||||
__nlink_t st_nlink; /* Link count. */
|
||||
int __pad0; /* Real padding. */
|
||||
__ST_TIME(a); /* Time of last access. */
|
||||
__ST_TIME(m); /* Time of last modification. */
|
||||
__ST_TIME(c); /* Time of last status change. */
|
||||
long __unused[3];
|
||||
};
|
||||
#endif
|
||||
|
||||
#undef __ST_TIME
|
||||
|
||||
/* Tell code we have these members. */
|
||||
#define _STATBUF_ST_BLKSIZE
|
||||
#define _STATBUF_ST_RDEV
|
||||
#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. */
|
||||
|
||||
#if defined __USE_ATFILE || defined __USE_GNU
|
||||
/* XXX This will change to the macro for the next 2008 POSIX revision. */
|
||||
# define UTIME_NOW ((1l << 30) - 1l)
|
||||
# define UTIME_OMIT ((1l << 30) - 2l)
|
||||
#endif
|
@ -1,67 +0,0 @@
|
||||
/* Copyright (C) 1997, 1998, 2000, 2003 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Lesser General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 2.1 of the License, or (at your option) any later version.
|
||||
|
||||
The GNU C Library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public
|
||||
License along with the GNU C Library; if not, write to the Free
|
||||
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||
02111-1307 USA. */
|
||||
|
||||
#ifndef _SYS_STATFS_H
|
||||
# error "Never include <bits/statfs.h> directly; use <sys/statfs.h> instead."
|
||||
#endif
|
||||
|
||||
#include <bits/types.h> /* for __fsid_t and __fsblkcnt_t. */
|
||||
|
||||
struct statfs
|
||||
{
|
||||
int f_type;
|
||||
int f_bsize;
|
||||
#ifndef __USE_FILE_OFFSET64
|
||||
__fsblkcnt_t f_blocks;
|
||||
__fsblkcnt_t f_bfree;
|
||||
__fsblkcnt_t f_bavail;
|
||||
__fsfilcnt_t f_files;
|
||||
__fsfilcnt_t f_ffree;
|
||||
#else
|
||||
__fsblkcnt64_t f_blocks;
|
||||
__fsblkcnt64_t f_bfree;
|
||||
__fsblkcnt64_t f_bavail;
|
||||
__fsfilcnt64_t f_files;
|
||||
__fsfilcnt64_t f_ffree;
|
||||
#endif
|
||||
__fsid_t f_fsid;
|
||||
int f_namelen;
|
||||
int f_frsize;
|
||||
int f_spare[5];
|
||||
};
|
||||
|
||||
#ifdef __USE_LARGEFILE64
|
||||
struct statfs64
|
||||
{
|
||||
int f_type;
|
||||
int f_bsize;
|
||||
__fsblkcnt64_t f_blocks;
|
||||
__fsblkcnt64_t f_bfree;
|
||||
__fsblkcnt64_t f_bavail;
|
||||
__fsfilcnt64_t f_files;
|
||||
__fsfilcnt64_t f_ffree;
|
||||
__fsid_t f_fsid;
|
||||
int f_namelen;
|
||||
int f_frsize;
|
||||
int f_spare[5];
|
||||
};
|
||||
#endif
|
||||
|
||||
/* Tell code we have this member. */
|
||||
#define _STATFS_F_NAMELEN
|
||||
#define _STATFS_F_FRSIZE
|
@ -1,226 +0,0 @@
|
||||
/* termios type and macro definitions. Linux version.
|
||||
Copyright (C) 1993, 1994, 1995, 1996, 1997, 1999, 2003, 2005
|
||||
Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Lesser General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 2.1 of the License, or (at your option) any later version.
|
||||
|
||||
The GNU C Library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public
|
||||
License along with the GNU C Library; if not, write to the Free
|
||||
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||
02111-1307 USA. */
|
||||
|
||||
#ifndef _TERMIOS_H
|
||||
# error "Never include <bits/termios.h> directly; use <termios.h> instead."
|
||||
#endif
|
||||
|
||||
typedef unsigned char cc_t;
|
||||
typedef unsigned int speed_t;
|
||||
typedef unsigned int tcflag_t;
|
||||
|
||||
#define NCCS 32
|
||||
struct termios
|
||||
{
|
||||
tcflag_t c_iflag; /* input mode flags */
|
||||
tcflag_t c_oflag; /* output mode flags */
|
||||
tcflag_t c_cflag; /* control mode flags */
|
||||
tcflag_t c_lflag; /* local mode flags */
|
||||
cc_t c_cc[NCCS]; /* control characters */
|
||||
cc_t c_line; /* line discipline (== c_cc[33]) */
|
||||
speed_t c_ispeed; /* input speed */
|
||||
speed_t c_ospeed; /* output speed */
|
||||
#define _HAVE_STRUCT_TERMIOS_C_ISPEED 1
|
||||
#define _HAVE_STRUCT_TERMIOS_C_OSPEED 1
|
||||
};
|
||||
|
||||
/* c_cc characters */
|
||||
#define VEOF 0
|
||||
#define VEOL 1
|
||||
#define VEOL2 2
|
||||
#define VERASE 3
|
||||
#define VWERASE 4
|
||||
#define VKILL 5
|
||||
#define VREPRINT 6
|
||||
#define VSWTC 7
|
||||
#define VINTR 8
|
||||
#define VQUIT 9
|
||||
#define VSUSP 10
|
||||
#define VSTART 12
|
||||
#define VSTOP 13
|
||||
#define VLNEXT 14
|
||||
#define VDISCARD 15
|
||||
#define VMIN 16
|
||||
#define VTIME 17
|
||||
|
||||
/* c_iflag bits */
|
||||
#define IGNBRK 0000001
|
||||
#define BRKINT 0000002
|
||||
#define IGNPAR 0000004
|
||||
#define PARMRK 0000010
|
||||
#define INPCK 0000020
|
||||
#define ISTRIP 0000040
|
||||
#define INLCR 0000100
|
||||
#define IGNCR 0000200
|
||||
#define ICRNL 0000400
|
||||
#define IXON 0001000
|
||||
#define IXOFF 0002000
|
||||
#ifdef __USE_BSD
|
||||
/* POSIX.1 doesn't want these... */
|
||||
# define IXANY 0004000
|
||||
# define IUCLC 0010000
|
||||
# define IMAXBEL 0020000
|
||||
# define IUTF8 0040000
|
||||
#endif
|
||||
|
||||
/* c_oflag bits */
|
||||
#define OPOST 0000001
|
||||
#define ONLCR 0000002
|
||||
#define OLCUC 0000004
|
||||
|
||||
#define OCRNL 0000010
|
||||
#define ONOCR 0000020
|
||||
#define ONLRET 0000040
|
||||
|
||||
#define OFILL 00000100
|
||||
#define OFDEL 00000200
|
||||
#if defined __USE_MISC || defined __USE_XOPEN
|
||||
# define NLDLY 00001400
|
||||
# define NL0 00000000
|
||||
# define NL1 00000400
|
||||
# define NL2 00001000
|
||||
# define NL3 00001400
|
||||
# define TABDLY 00006000
|
||||
# define TAB0 00000000
|
||||
# define TAB1 00002000
|
||||
# define TAB2 00004000
|
||||
# define TAB3 00006000
|
||||
# define CRDLY 00030000
|
||||
# define CR0 00000000
|
||||
# define CR1 00010000
|
||||
# define CR2 00020000
|
||||
# define CR3 00030000
|
||||
# define FFDLY 00040000
|
||||
# define FF0 00000000
|
||||
# define FF1 00040000
|
||||
# define BSDLY 00100000
|
||||
# define BS0 00000000
|
||||
# define BS1 00100000
|
||||
#endif
|
||||
|
||||
#define VTDLY 00200000
|
||||
#define VT0 00000000
|
||||
#define VT1 00200000
|
||||
|
||||
#ifdef __USE_MISC
|
||||
# define XTABS 01000000 /* Hmm.. Linux/i386 considers this part of TABDLY.. */
|
||||
#endif
|
||||
|
||||
/* c_cflag bit meaning */
|
||||
#ifdef __USE_MISC
|
||||
# define CBAUD 0000037
|
||||
#endif
|
||||
#define B0 0000000 /* hang up */
|
||||
#define B50 0000001
|
||||
#define B75 0000002
|
||||
#define B110 0000003
|
||||
#define B134 0000004
|
||||
#define B150 0000005
|
||||
#define B200 0000006
|
||||
#define B300 0000007
|
||||
#define B600 0000010
|
||||
#define B1200 0000011
|
||||
#define B1800 0000012
|
||||
#define B2400 0000013
|
||||
#define B4800 0000014
|
||||
#define B9600 0000015
|
||||
#define B19200 0000016
|
||||
#define B38400 0000017
|
||||
#ifdef __USE_MISC
|
||||
# define EXTA B19200
|
||||
# define EXTB B38400
|
||||
# define CBAUDEX 0000000
|
||||
#endif
|
||||
#define B57600 00020
|
||||
#define B115200 00021
|
||||
#define B230400 00022
|
||||
#define B460800 00023
|
||||
#define B500000 00024
|
||||
#define B576000 00025
|
||||
#define B921600 00026
|
||||
#define B1000000 00027
|
||||
#define B1152000 00030
|
||||
#define B1500000 00031
|
||||
#define B2000000 00032
|
||||
#define B2500000 00033
|
||||
#define B3000000 00034
|
||||
#define B3500000 00035
|
||||
#define B4000000 00036
|
||||
|
||||
#define __MAX_BAUD B4000000
|
||||
|
||||
#define CSIZE 00001400
|
||||
#define CS5 00000000
|
||||
#define CS6 00000400
|
||||
#define CS7 00001000
|
||||
#define CS8 00001400
|
||||
|
||||
#define CSTOPB 00002000
|
||||
#define CREAD 00004000
|
||||
#define PARENB 00010000
|
||||
#define PARODD 00020000
|
||||
#define HUPCL 00040000
|
||||
|
||||
#define CLOCAL 00100000
|
||||
#ifdef __USE_MISC
|
||||
# define CMSPAR 010000000000 /* mark or space (stick) parity */
|
||||
# define CRTSCTS 020000000000 /* flow control */
|
||||
#endif
|
||||
|
||||
/* c_lflag bits */
|
||||
#define ISIG 0x00000080
|
||||
#define ICANON 0x00000100
|
||||
#if defined __USE_MISC || defined __USE_XOPEN
|
||||
# define XCASE 0x00004000
|
||||
#endif
|
||||
#define ECHO 0x00000008
|
||||
#define ECHOE 0x00000002
|
||||
#define ECHOK 0x00000004
|
||||
#define ECHONL 0x00000010
|
||||
#define NOFLSH 0x80000000
|
||||
#define TOSTOP 0x00400000
|
||||
#ifdef __USE_MISC
|
||||
# define ECHOCTL 0x00000040
|
||||
# define ECHOPRT 0x00000020
|
||||
# define ECHOKE 0x00000001
|
||||
# define FLUSHO 0x00800000
|
||||
# define PENDIN 0x20000000
|
||||
#endif
|
||||
#define IEXTEN 0x00000400
|
||||
|
||||
/* Values for the ACTION argument to `tcflow'. */
|
||||
#define TCOOFF 0
|
||||
#define TCOON 1
|
||||
#define TCIOFF 2
|
||||
#define TCION 3
|
||||
|
||||
/* Values for the QUEUE_SELECTOR argument to `tcflush'. */
|
||||
#define TCIFLUSH 0
|
||||
#define TCOFLUSH 1
|
||||
#define TCIOFLUSH 2
|
||||
|
||||
/* Values for the OPTIONAL_ACTIONS argument to `tcsetattr'. */
|
||||
#define TCSANOW 0
|
||||
#define TCSADRAIN 1
|
||||
#define TCSAFLUSH 2
|
||||
|
||||
|
||||
#define _IOT_termios /* Hurd ioctl type field. */ \
|
||||
_IOT (_IOTS (cflag_t), 4, _IOTS (cc_t), NCCS, _IOTS (speed_t), 2)
|
@ -1,66 +0,0 @@
|
||||
/* bits/typesizes.h -- underlying types for *_t. Linux/Alpha version.
|
||||
Copyright (C) 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. */
|
||||
|
||||
#ifndef _BITS_TYPES_H
|
||||
# error "Never include <bits/typesizes.h> directly; use <sys/types.h> instead."
|
||||
#endif
|
||||
|
||||
#ifndef _BITS_TYPESIZES_H
|
||||
#define _BITS_TYPESIZES_H 1
|
||||
|
||||
/* See <bits/types.h> for the meaning of these macros. This file exists so
|
||||
that <bits/types.h> need not vary across different GNU platforms. */
|
||||
|
||||
#define __DEV_T_TYPE __U64_TYPE
|
||||
#define __UID_T_TYPE __U32_TYPE
|
||||
#define __GID_T_TYPE __U32_TYPE
|
||||
#define __INO_T_TYPE __U32_TYPE
|
||||
#define __INO64_T_TYPE __U64_TYPE
|
||||
#define __MODE_T_TYPE __U32_TYPE
|
||||
#define __NLINK_T_TYPE __U32_TYPE
|
||||
#define __OFF_T_TYPE __SLONGWORD_TYPE
|
||||
#define __OFF64_T_TYPE __S64_TYPE
|
||||
#define __PID_T_TYPE __S32_TYPE
|
||||
#define __RLIM_T_TYPE __ULONGWORD_TYPE
|
||||
#define __RLIM64_T_TYPE __U64_TYPE
|
||||
#define __BLKCNT_T_TYPE __U32_TYPE
|
||||
#define __BLKCNT64_T_TYPE __U64_TYPE
|
||||
#define __FSBLKCNT_T_TYPE __S32_TYPE
|
||||
#define __FSBLKCNT64_T_TYPE __S64_TYPE
|
||||
#define __FSFILCNT_T_TYPE __U32_TYPE
|
||||
#define __FSFILCNT64_T_TYPE __U64_TYPE
|
||||
#define __ID_T_TYPE __U32_TYPE
|
||||
#define __CLOCK_T_TYPE __SLONGWORD_TYPE
|
||||
#define __TIME_T_TYPE __SLONGWORD_TYPE
|
||||
#define __USECONDS_T_TYPE __U32_TYPE
|
||||
#define __SUSECONDS_T_TYPE __S64_TYPE
|
||||
#define __DADDR_T_TYPE __S32_TYPE
|
||||
#define __SWBLK_T_TYPE __SLONGWORD_TYPE
|
||||
#define __KEY_T_TYPE __S32_TYPE
|
||||
#define __CLOCKID_T_TYPE __S32_TYPE
|
||||
#define __TIMER_T_TYPE void *
|
||||
#define __BLKSIZE_T_TYPE __U32_TYPE
|
||||
#define __FSID_T_TYPE struct { int __val[2]; }
|
||||
#define __SSIZE_T_TYPE __SWORD_TYPE
|
||||
|
||||
/* Number of descriptors that can fit in an `fd_set'. */
|
||||
#define __FD_SETSIZE 1024
|
||||
|
||||
|
||||
#endif /* bits/typesizes.h */
|
@ -1,30 +0,0 @@
|
||||
/* Copyright (C) 1999, 2006 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Lesser General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 2.1 of the License, or (at your option) any later version.
|
||||
|
||||
The GNU C Library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public
|
||||
License along with the GNU C Library; if not, write to the Free
|
||||
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||
02111-1307 USA. */
|
||||
|
||||
#define __WORDSIZE 64
|
||||
|
||||
#if !defined __NO_LONG_DOUBLE_MATH && !defined __LONG_DOUBLE_MATH_OPTIONAL
|
||||
|
||||
/* Signal that we didn't used to have a `long double'. The changes all
|
||||
the `long double' function variants to be redirects to the double
|
||||
functions. */
|
||||
# define __LONG_DOUBLE_MATH_OPTIONAL 1
|
||||
# ifndef __LONG_DOUBLE_128__
|
||||
# define __NO_LONG_DOUBLE_MATH 1
|
||||
# endif
|
||||
#endif
|
@ -1,81 +0,0 @@
|
||||
/* Copyright (C) 1993, 1995, 1996, 1997 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by Brendan Kehoe <brendan@zen.org>, 1993.
|
||||
|
||||
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. */
|
||||
|
||||
/* __brk is a special syscall under Linux since it never returns an
|
||||
error. Instead, the error condition is indicated by returning the old
|
||||
break value (instead of the new, requested one). */
|
||||
|
||||
#include <sysdep.h>
|
||||
#define _ERRNO_H
|
||||
#include <bits/errno.h>
|
||||
|
||||
#ifdef PIC
|
||||
.section .bss
|
||||
.align 3
|
||||
.globl __curbrk
|
||||
__curbrk: .skip 8
|
||||
.type __curbrk,@object
|
||||
.size __curbrk,8
|
||||
#else
|
||||
.comm __curbrk, 8
|
||||
#endif
|
||||
|
||||
.text
|
||||
LEAF(__brk, 8)
|
||||
ldgp gp, 0(t12)
|
||||
subq sp, 8, sp
|
||||
#ifdef PROF
|
||||
.set noat
|
||||
lda AT, _mcount
|
||||
jsr AT, (AT), _mcount
|
||||
.set at
|
||||
#endif
|
||||
.prologue 1
|
||||
|
||||
/* Save the requested brk across the system call. */
|
||||
stq a0, 0(sp)
|
||||
|
||||
ldiq v0, __NR_brk
|
||||
call_pal PAL_callsys
|
||||
|
||||
ldq a0, 0(sp)
|
||||
|
||||
/* Be prepared for an OSF-style brk. */
|
||||
bne a3, $err1
|
||||
beq v0, $ok
|
||||
|
||||
/* Correctly handle the brk(0) query case. */
|
||||
cmoveq a0, v0, a0
|
||||
xor a0, v0, t0
|
||||
bne t0, $err0
|
||||
|
||||
/* Update __curbrk and return cleanly. */
|
||||
mov zero, v0
|
||||
$ok: stq a0, __curbrk
|
||||
addq sp, 8, sp
|
||||
ret
|
||||
|
||||
/* What a horrible way to die. */
|
||||
$err0: ldi v0, ENOMEM
|
||||
$err1: addq sp, 8, sp
|
||||
SYSCALL_ERROR_HANDLER
|
||||
|
||||
END(__brk)
|
||||
|
||||
weak_alias (__brk, brk)
|
@ -1,149 +0,0 @@
|
||||
/* Copyright (C) 1996, 1997, 2002 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by Richard Henderson <rth@tamu.edu>, 1996.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Lesser General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 2.1 of the License, or (at your option) any later version.
|
||||
|
||||
The GNU C Library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public
|
||||
License along with the GNU C Library; if not, write to the Free
|
||||
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||
02111-1307 USA. */
|
||||
|
||||
/* clone() is even more special than fork() as it mucks with stacks
|
||||
and invokes a function in the right context after its all over. */
|
||||
|
||||
#include <sysdep.h>
|
||||
#define _ERRNO_H 1
|
||||
#include <bits/errno.h>
|
||||
|
||||
#define CLONE_VM 0x00000100
|
||||
#define CLONE_THREAD 0x00010000
|
||||
|
||||
/* int clone(int (*fn)(void *arg), void *child_stack, int flags,
|
||||
void *arg, pid_t *ptid, void *tls, pid_t *ctid);
|
||||
|
||||
Note that everything past ARG is technically optional, based
|
||||
on FLAGS, and that CTID is arg 7, and thus is on the stack.
|
||||
However, since a load from top-of-stack better be legal always,
|
||||
we don't bother checking FLAGS. */
|
||||
|
||||
.text
|
||||
ENTRY(__clone)
|
||||
#ifdef PROF
|
||||
ldgp gp,0(pv)
|
||||
.set noat
|
||||
lda AT, _mcount
|
||||
jsr AT, (AT), _mcount
|
||||
.set at
|
||||
.prologue 1
|
||||
#else
|
||||
.prologue 0
|
||||
#endif
|
||||
|
||||
/* Sanity check arguments. */
|
||||
ldiq v0,EINVAL
|
||||
beq a0,$error /* no NULL function pointers */
|
||||
beq a1,$error /* no NULL stack pointers */
|
||||
|
||||
/* Save the fn ptr and arg on the new stack. */
|
||||
subq a1,32,a1
|
||||
stq a0,0(a1)
|
||||
stq a3,8(a1)
|
||||
#ifdef RESET_PID
|
||||
stq a2,16(a1)
|
||||
#endif
|
||||
|
||||
/* The syscall is of the form clone(flags, usp, ptid, ctid, tls).
|
||||
Shift the flags, ptid, ctid, tls arguments into place; the
|
||||
child_stack argument is already correct. */
|
||||
mov a2,a0
|
||||
mov a4,a2
|
||||
ldq a3,0(sp)
|
||||
mov a5,a4
|
||||
|
||||
/* Do the system call. */
|
||||
ldiq v0,__NR_clone
|
||||
call_pal PAL_callsys
|
||||
|
||||
bne a3,$error
|
||||
beq v0,thread_start
|
||||
|
||||
/* Successful return from the parent. */
|
||||
ret
|
||||
|
||||
/* Something bad happened -- no child created. */
|
||||
$error:
|
||||
#ifndef PROF
|
||||
br gp,1f
|
||||
1: ldgp gp,0(gp)
|
||||
#endif
|
||||
SYSCALL_ERROR_HANDLER
|
||||
|
||||
END(__clone)
|
||||
|
||||
/* Load up the arguments to the function. Put this block of code in
|
||||
its own function so that we can terminate the stack trace with our
|
||||
debug info. */
|
||||
|
||||
.ent thread_start
|
||||
thread_start:
|
||||
.frame fp,0,fp,0
|
||||
mov 0, fp
|
||||
.prologue 0
|
||||
|
||||
#ifdef RESET_PID
|
||||
/* Check and see if we need to reset the PID. */
|
||||
ldq t0,16(sp)
|
||||
lda t1,CLONE_THREAD
|
||||
and t0,t1,t2
|
||||
beq t2,2f
|
||||
1:
|
||||
#endif
|
||||
|
||||
/* Load up the arguments. */
|
||||
ldq pv,0(sp)
|
||||
ldq a0,8(sp)
|
||||
addq sp,32,sp
|
||||
|
||||
/* Call the user's function. */
|
||||
jsr ra,(pv)
|
||||
ldgp gp,0(ra)
|
||||
|
||||
/* Call _exit rather than doing it inline for breakpoint purposes. */
|
||||
mov v0,a0
|
||||
#ifdef PIC
|
||||
bsr ra, HIDDEN_JUMPTARGET(_exit) !samegp
|
||||
#else
|
||||
jsr ra, HIDDEN_JUMPTARGET(_exit)
|
||||
#endif
|
||||
|
||||
/* Die horribly. */
|
||||
halt
|
||||
|
||||
#ifdef RESET_PID
|
||||
2:
|
||||
rduniq
|
||||
lda t1, CLONE_VM
|
||||
mov v0, s0
|
||||
lda v0, -1
|
||||
and t0, t1, t2
|
||||
bne t2, 3f
|
||||
lda v0, __NR_getxpid
|
||||
callsys
|
||||
3:
|
||||
stl v0, PID_OFFSET(s0)
|
||||
stl v0, TID_OFFSET(s0)
|
||||
br 1b
|
||||
#endif
|
||||
|
||||
.end thread_start
|
||||
|
||||
weak_alias (__clone, clone)
|
@ -1,36 +0,0 @@
|
||||
/* Auxiliary vector processing for Linux/Alpha.
|
||||
Copyright (C) 2007 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. */
|
||||
|
||||
/* Scan the Aux Vector for the cache shape entries. */
|
||||
|
||||
long __libc_alpha_cache_shape[4] = { -2, -2, -2, -2 };
|
||||
|
||||
#define DL_PLATFORM_AUXV \
|
||||
case AT_L1I_CACHESHAPE: \
|
||||
__libc_alpha_cache_shape[0] = av->a_un.a_val; \
|
||||
break; \
|
||||
case AT_L1D_CACHESHAPE: \
|
||||
__libc_alpha_cache_shape[1] = av->a_un.a_val; \
|
||||
break; \
|
||||
case AT_L2_CACHESHAPE: \
|
||||
__libc_alpha_cache_shape[2] = av->a_un.a_val; \
|
||||
break; \
|
||||
case AT_L3_CACHESHAPE: \
|
||||
__libc_alpha_cache_shape[3] = av->a_un.a_val; \
|
||||
break;
|
@ -1 +0,0 @@
|
||||
#include <brk.S>
|
@ -1,2 +0,0 @@
|
||||
#include "dl-auxv.h"
|
||||
#include <elf/dl-support.c>
|
@ -1,2 +0,0 @@
|
||||
#include "dl-auxv.h"
|
||||
#include <sysdeps/unix/sysv/linux/dl-sysdep.c>
|
@ -1,2 +0,0 @@
|
||||
# Override ldbl-opt with alpha specific routines.
|
||||
alpha/fpu
|
@ -1,92 +0,0 @@
|
||||
/* Copyright (C) 2004,2006 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Lesser General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 2.1 of the License, or (at your option) any later version.
|
||||
|
||||
The GNU C Library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public
|
||||
License along with the GNU C Library; if not, write to the Free
|
||||
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||
02111-1307 USA. */
|
||||
|
||||
#include <fenv_libc.h>
|
||||
#include <sysdep.h>
|
||||
#include <float.h>
|
||||
#include <kernel-features.h>
|
||||
#include "kernel_sysinfo.h"
|
||||
|
||||
|
||||
int
|
||||
__feraiseexcept (int excepts)
|
||||
{
|
||||
INTERNAL_SYSCALL_DECL (err);
|
||||
unsigned long t = excepts;
|
||||
long r;
|
||||
|
||||
r = INTERNAL_SYSCALL (osf_setsysinfo, err, 2, SSI_IEEE_RAISE_EXCEPTION, &t);
|
||||
|
||||
#ifndef __ASSUME_IEEE_RAISE_EXCEPTION
|
||||
if (!INTERNAL_SYSCALL_ERROR_P (r, err))
|
||||
return 0;
|
||||
|
||||
double d;
|
||||
|
||||
/* If we got an error from SSI_IEEE_RAISE_EXCEPTION, assume it means that
|
||||
the system call isn't actually implemented. Do the best we can. */
|
||||
|
||||
/* Invalid implemented with 0 / 0 -> NaN. */
|
||||
if (excepts & FE_INVALID)
|
||||
__asm__ __volatile__ ("divs/su $f31,$f31,%0; trapb" : "=f"(d) : );
|
||||
|
||||
/* Division By Zero implemented with 1 / 0 -> NaN. */
|
||||
if (excepts & FE_DIVBYZERO)
|
||||
__asm__ __volatile__ ("divs/su %1,$f31,%0; trapb" : "=&f"(d) : "f"(1.0f));
|
||||
|
||||
/* Overflow and underflow cannot be had all by themselves. We can
|
||||
generate them with arithmetic, but we always get INEXACT raised
|
||||
at the same time. Prepare to undo. */
|
||||
if ((excepts & (FE_OVERFLOW | FE_UNDERFLOW)) && !(excepts & FE_INEXACT))
|
||||
INTERNAL_SYSCALL (osf_getsysinfo, err, 2, GSI_IEEE_FP_CONTROL, &t);
|
||||
|
||||
/* Overflow implemented with FLT_MAX + FLT_MAX -> Inf. */
|
||||
if (excepts & FE_OVERFLOW)
|
||||
__asm__ __volatile__ ("adds/sui %1,%1,%0; trapb"
|
||||
: "=&f"(d) : "f"(FLT_MAX));
|
||||
|
||||
/* Underflow implemented with FLT_MIN * FLT_MIN -> 0. */
|
||||
if (excepts & FE_UNDERFLOW)
|
||||
__asm__ __volatile__ ("muls/sui %1,%1,%0; trapb"
|
||||
: "=&f"(d) : "f"(FLT_MIN));
|
||||
|
||||
/* Inexact implemented with (long)0.5 -> 0. */
|
||||
if ((excepts & (FE_OVERFLOW | FE_UNDERFLOW | FE_INEXACT)) == FE_INEXACT)
|
||||
__asm__ __volatile__ ("cvttq/svi %1,%0; trapb" : "=&f"(d) : "f"(0.5f));
|
||||
|
||||
/* If we raised inexact when not asked, and inexact was not previously
|
||||
raised, then clear that exception. */
|
||||
if ((excepts & (FE_OVERFLOW | FE_UNDERFLOW))
|
||||
&& !((excepts | t) & FE_INEXACT))
|
||||
{
|
||||
t |= excepts & SWCR_STATUS_MASK;
|
||||
INTERNAL_SYSCALL (osf_setsysinfo, err, 2, SSI_IEEE_FP_CONTROL, &t);
|
||||
}
|
||||
#endif /* !__ASSUME_IEEE_RAISE_EXCEPTION */
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
#include <shlib-compat.h>
|
||||
#if SHLIB_COMPAT (libm, GLIBC_2_1, GLIBC_2_2)
|
||||
strong_alias (__feraiseexcept, __old_feraiseexcept)
|
||||
compat_symbol (libm, __old_feraiseexcept, feraiseexcept, GLIBC_2_1);
|
||||
#endif
|
||||
|
||||
libm_hidden_ver (__feraiseexcept, feraiseexcept)
|
||||
versioned_symbol (libm, __feraiseexcept, feraiseexcept, GLIBC_2_2);
|
@ -1,64 +0,0 @@
|
||||
/* fxstat using old-style Unix stat system call.
|
||||
Copyright (C) 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. */
|
||||
|
||||
#define __fxstat64 __fxstat64_disable
|
||||
|
||||
#include <errno.h>
|
||||
#include <stddef.h>
|
||||
#include <sys/stat.h>
|
||||
#include <kernel_stat.h>
|
||||
#include <sysdep.h>
|
||||
#include <sys/syscall.h>
|
||||
#include <xstatconv.h>
|
||||
|
||||
#undef __fxstat64
|
||||
|
||||
|
||||
/* Get information about the file NAME in BUF. */
|
||||
int
|
||||
__fxstat (int vers, int fd, struct stat *buf)
|
||||
{
|
||||
INTERNAL_SYSCALL_DECL (err);
|
||||
int result, errno_out;
|
||||
struct kernel_stat kbuf;
|
||||
|
||||
if (vers == _STAT_VER_KERNEL64 && !__libc_missing_axp_stat64)
|
||||
{
|
||||
result = INTERNAL_SYSCALL (fstat64, err, 2, fd, buf);
|
||||
if (__builtin_expect (!INTERNAL_SYSCALL_ERROR_P (result, err), 1))
|
||||
return result;
|
||||
errno_out = INTERNAL_SYSCALL_ERRNO (result, err);
|
||||
if (errno_out != ENOSYS)
|
||||
goto fail;
|
||||
__libc_missing_axp_stat64 = 1;
|
||||
}
|
||||
|
||||
result = INTERNAL_SYSCALL (fstat, err, 2, fd, &kbuf);
|
||||
if (__builtin_expect (!INTERNAL_SYSCALL_ERROR_P (result, err), 1))
|
||||
return __xstat_conv (vers, &kbuf, buf);
|
||||
errno_out = INTERNAL_SYSCALL_ERRNO (result, err);
|
||||
|
||||
fail:
|
||||
__set_errno (errno_out);
|
||||
return -1;
|
||||
}
|
||||
hidden_def (__fxstat)
|
||||
weak_alias (__fxstat, _fxstat);
|
||||
strong_alias (__fxstat, __fxstat64);
|
||||
hidden_ver (__fxstat, __fxstat64)
|
@ -1,99 +0,0 @@
|
||||
/* Copyright (C) 2005, 2006 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Lesser General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 2.1 of the License, or (at your option) any later version.
|
||||
|
||||
The GNU C Library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public
|
||||
License along with the GNU C Library; if not, write to the Free
|
||||
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||
02111-1307 USA. */
|
||||
|
||||
#define __fxstatat64 __fxstatat64_disable
|
||||
|
||||
#include <errno.h>
|
||||
#include <fcntl.h>
|
||||
#include <stddef.h>
|
||||
#include <stdio.h>
|
||||
#include <sys/stat.h>
|
||||
#include <kernel_stat.h>
|
||||
#include <sysdep.h>
|
||||
#include <sys/syscall.h>
|
||||
#include <xstatconv.h>
|
||||
|
||||
#undef __fxstatat64
|
||||
|
||||
|
||||
/* Get information about the file NAME in BUF. */
|
||||
int
|
||||
__fxstatat (int vers, int fd, const char *file, struct stat *st, int flag)
|
||||
{
|
||||
if (flag & ~AT_SYMLINK_NOFOLLOW)
|
||||
{
|
||||
__set_errno (EINVAL);
|
||||
return -1;
|
||||
}
|
||||
|
||||
char *buf = NULL;
|
||||
|
||||
if (fd != AT_FDCWD && file[0] != '/')
|
||||
{
|
||||
size_t filelen = strlen (file);
|
||||
static const char procfd[] = "/proc/self/fd/%d/%s";
|
||||
/* Buffer for the path name we are going to use. It consists of
|
||||
- the string /proc/self/fd/
|
||||
- the file descriptor number
|
||||
- the file name provided.
|
||||
The final NUL is included in the sizeof. A bit of overhead
|
||||
due to the format elements compensates for possible negative
|
||||
numbers. */
|
||||
size_t buflen = sizeof (procfd) + sizeof (int) * 3 + filelen;
|
||||
buf = alloca (buflen);
|
||||
|
||||
__snprintf (buf, buflen, procfd, fd, file);
|
||||
file = buf;
|
||||
}
|
||||
|
||||
INTERNAL_SYSCALL_DECL (err);
|
||||
int result, errno_out;
|
||||
struct kernel_stat kst;
|
||||
|
||||
if (vers == _STAT_VER_KERNEL64 && !__libc_missing_axp_stat64)
|
||||
{
|
||||
if (flag & AT_SYMLINK_NOFOLLOW)
|
||||
result = INTERNAL_SYSCALL (lstat64, err, 2, file, st);
|
||||
else
|
||||
result = INTERNAL_SYSCALL (stat64, err, 2, file, st);
|
||||
|
||||
if (__builtin_expect (!INTERNAL_SYSCALL_ERROR_P (result, err), 1))
|
||||
return result;
|
||||
errno_out = INTERNAL_SYSCALL_ERRNO (result, err);
|
||||
if (errno_out != ENOSYS)
|
||||
goto fail;
|
||||
__libc_missing_axp_stat64 = 1;
|
||||
}
|
||||
|
||||
if (flag & AT_SYMLINK_NOFOLLOW)
|
||||
result = INTERNAL_SYSCALL (lstat, err, 2, file, &kst);
|
||||
else
|
||||
result = INTERNAL_SYSCALL (stat, err, 2, file, &kst);
|
||||
|
||||
if (__builtin_expect (!INTERNAL_SYSCALL_ERROR_P (result, err), 1))
|
||||
return __xstat_conv (vers, &kst, st);
|
||||
errno_out = INTERNAL_SYSCALL_ERRNO (result, err);
|
||||
|
||||
fail:
|
||||
__atfct_seterrno (errno_out, fd, buf);
|
||||
|
||||
return -1;
|
||||
}
|
||||
libc_hidden_def (__fxstatat)
|
||||
strong_alias (__fxstatat, __fxstatat64);
|
||||
libc_hidden_ver(__fxstatat, __fxstatat64);
|
@ -1,2 +0,0 @@
|
||||
#define SYSTEM_CLK_TCK 1024
|
||||
#include <sysdeps/unix/sysv/linux/getclktck.c>
|
@ -1,188 +0,0 @@
|
||||
/* Save current context.
|
||||
Copyright (C) 2004, 2006 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Lesser General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 2.1 of the License, or (at your option) any later version.
|
||||
|
||||
The GNU C Library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public
|
||||
License along with the GNU C Library; if not, write to the Free
|
||||
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||
02111-1307 USA. */
|
||||
|
||||
#include <sysdep.h>
|
||||
#include <ucontext-offsets.h>
|
||||
|
||||
/* ??? Should be a better place for this that's asm friendly. */
|
||||
#define SIG_BLOCK 1
|
||||
|
||||
|
||||
ENTRY (__getcontext)
|
||||
#ifdef PROF
|
||||
ldgp gp, 0(pv)
|
||||
.set noat
|
||||
lda AT, _mcount
|
||||
jsr AT, (AT), _mcount
|
||||
.set at
|
||||
.prologue 1
|
||||
#else
|
||||
.prologue 0
|
||||
#endif
|
||||
|
||||
bsr $0, __getcontext_x
|
||||
mov $31, $0
|
||||
ret
|
||||
|
||||
END(__getcontext)
|
||||
weak_alias (__getcontext, getcontext)
|
||||
|
||||
|
||||
/* An internal routine used by getcontext and setcontext.
|
||||
The incomming return address register is $0. */
|
||||
|
||||
.align 4
|
||||
.globl __getcontext_x
|
||||
.hidden __getcontext_x
|
||||
.usepv __getcontext_x, no
|
||||
|
||||
cfi_startproc
|
||||
cfi_return_column (64)
|
||||
__getcontext_x:
|
||||
cfi_register (64, 0)
|
||||
|
||||
.set noat
|
||||
|
||||
/* Return value of getcontext. $0 is the only register
|
||||
whose value is not preserved. */
|
||||
stq $31, UC_SIGCTX+SC_REGS($16)
|
||||
|
||||
/* Store all registers into the context. */
|
||||
stq $1, UC_SIGCTX+SC_REGS+1*8($16)
|
||||
stq $2, UC_SIGCTX+SC_REGS+2*8($16)
|
||||
stq $3, UC_SIGCTX+SC_REGS+3*8($16)
|
||||
stq $4, UC_SIGCTX+SC_REGS+4*8($16)
|
||||
stq $5, UC_SIGCTX+SC_REGS+5*8($16)
|
||||
stq $6, UC_SIGCTX+SC_REGS+6*8($16)
|
||||
stq $7, UC_SIGCTX+SC_REGS+7*8($16)
|
||||
stq $8, UC_SIGCTX+SC_REGS+8*8($16)
|
||||
stq $9, UC_SIGCTX+SC_REGS+9*8($16)
|
||||
stq $10, UC_SIGCTX+SC_REGS+10*8($16)
|
||||
stq $11, UC_SIGCTX+SC_REGS+11*8($16)
|
||||
stq $12, UC_SIGCTX+SC_REGS+12*8($16)
|
||||
stq $13, UC_SIGCTX+SC_REGS+13*8($16)
|
||||
stq $14, UC_SIGCTX+SC_REGS+14*8($16)
|
||||
stq $15, UC_SIGCTX+SC_REGS+15*8($16)
|
||||
stq $16, UC_SIGCTX+SC_REGS+16*8($16)
|
||||
stq $17, UC_SIGCTX+SC_REGS+17*8($16)
|
||||
stq $18, UC_SIGCTX+SC_REGS+18*8($16)
|
||||
stq $19, UC_SIGCTX+SC_REGS+19*8($16)
|
||||
stq $20, UC_SIGCTX+SC_REGS+20*8($16)
|
||||
stq $21, UC_SIGCTX+SC_REGS+21*8($16)
|
||||
stq $22, UC_SIGCTX+SC_REGS+22*8($16)
|
||||
stq $23, UC_SIGCTX+SC_REGS+23*8($16)
|
||||
stq $24, UC_SIGCTX+SC_REGS+24*8($16)
|
||||
stq $25, UC_SIGCTX+SC_REGS+25*8($16)
|
||||
stq $26, UC_SIGCTX+SC_REGS+26*8($16)
|
||||
stq $27, UC_SIGCTX+SC_REGS+27*8($16)
|
||||
stq $28, UC_SIGCTX+SC_REGS+28*8($16)
|
||||
stq $29, UC_SIGCTX+SC_REGS+29*8($16)
|
||||
stq $30, UC_SIGCTX+SC_REGS+30*8($16)
|
||||
stq $31, UC_SIGCTX+SC_REGS+31*8($16)
|
||||
|
||||
stt $f0, UC_SIGCTX+SC_FPREGS+0*8($16)
|
||||
stt $f1, UC_SIGCTX+SC_FPREGS+1*8($16)
|
||||
stt $f2, UC_SIGCTX+SC_FPREGS+2*8($16)
|
||||
stt $f3, UC_SIGCTX+SC_FPREGS+3*8($16)
|
||||
stt $f4, UC_SIGCTX+SC_FPREGS+4*8($16)
|
||||
stt $f5, UC_SIGCTX+SC_FPREGS+5*8($16)
|
||||
stt $f6, UC_SIGCTX+SC_FPREGS+6*8($16)
|
||||
stt $f7, UC_SIGCTX+SC_FPREGS+7*8($16)
|
||||
stt $f8, UC_SIGCTX+SC_FPREGS+8*8($16)
|
||||
stt $f9, UC_SIGCTX+SC_FPREGS+9*8($16)
|
||||
stt $f10, UC_SIGCTX+SC_FPREGS+10*8($16)
|
||||
stt $f11, UC_SIGCTX+SC_FPREGS+11*8($16)
|
||||
stt $f12, UC_SIGCTX+SC_FPREGS+12*8($16)
|
||||
stt $f13, UC_SIGCTX+SC_FPREGS+13*8($16)
|
||||
stt $f14, UC_SIGCTX+SC_FPREGS+14*8($16)
|
||||
stt $f15, UC_SIGCTX+SC_FPREGS+15*8($16)
|
||||
stt $f16, UC_SIGCTX+SC_FPREGS+16*8($16)
|
||||
stt $f17, UC_SIGCTX+SC_FPREGS+17*8($16)
|
||||
stt $f18, UC_SIGCTX+SC_FPREGS+18*8($16)
|
||||
stt $f19, UC_SIGCTX+SC_FPREGS+19*8($16)
|
||||
stt $f20, UC_SIGCTX+SC_FPREGS+20*8($16)
|
||||
stt $f21, UC_SIGCTX+SC_FPREGS+21*8($16)
|
||||
stt $f22, UC_SIGCTX+SC_FPREGS+22*8($16)
|
||||
stt $f23, UC_SIGCTX+SC_FPREGS+23*8($16)
|
||||
stt $f24, UC_SIGCTX+SC_FPREGS+24*8($16)
|
||||
stt $f25, UC_SIGCTX+SC_FPREGS+25*8($16)
|
||||
stt $f26, UC_SIGCTX+SC_FPREGS+26*8($16)
|
||||
stt $f27, UC_SIGCTX+SC_FPREGS+27*8($16)
|
||||
stt $f28, UC_SIGCTX+SC_FPREGS+28*8($16)
|
||||
stt $f29, UC_SIGCTX+SC_FPREGS+29*8($16)
|
||||
stt $f30, UC_SIGCTX+SC_FPREGS+30*8($16)
|
||||
stt $f31, UC_SIGCTX+SC_FPREGS+31*8($16)
|
||||
|
||||
mf_fpcr $f0
|
||||
lda $1, 8
|
||||
stt $f0, UC_SIGCTX+SC_FPCR($16)
|
||||
|
||||
/* The return address of getcontext is the restart pc. */
|
||||
stq $26, UC_SIGCTX+SC_PC($16)
|
||||
|
||||
/* Userlevel always has a processor status word of 8. */
|
||||
stq $1, UC_SIGCTX+SC_PS($16)
|
||||
|
||||
/* Save registers around the syscall. We preserve $17
|
||||
for the benefit of swapcontext. */
|
||||
subq $30, 4*8, $30
|
||||
cfi_adjust_cfa_offset(4*8)
|
||||
stq $0, 0($30)
|
||||
cfi_rel_offset(64, 0)
|
||||
stq $16, 8($30)
|
||||
stq $17, 16($30)
|
||||
|
||||
/* Save the current signal mask. Whee, there are three
|
||||
copies of this in the alpha ucontext_t. */
|
||||
lda $16, SIG_BLOCK
|
||||
lda $17, 0
|
||||
lda $0, __NR_osf_sigprocmask
|
||||
callsys
|
||||
|
||||
ldq $16, 8($30)
|
||||
ldq $17, 16($30)
|
||||
|
||||
stq $0, UC_OSF_SIGMASK($16)
|
||||
stq $0, UC_SIGCTX+SC_MASK($16)
|
||||
stq $0, UC_SIGMASK($16)
|
||||
stq $31, UC_SIGMASK + 1*8($16)
|
||||
stq $31, UC_SIGMASK + 2*8($16)
|
||||
stq $31, UC_SIGMASK + 3*8($16)
|
||||
stq $31, UC_SIGMASK + 4*8($16)
|
||||
stq $31, UC_SIGMASK + 5*8($16)
|
||||
stq $31, UC_SIGMASK + 6*8($16)
|
||||
stq $31, UC_SIGMASK + 7*8($16)
|
||||
stq $31, UC_SIGMASK + 8*8($16)
|
||||
stq $31, UC_SIGMASK + 9*8($16)
|
||||
stq $31, UC_SIGMASK +10*8($16)
|
||||
stq $31, UC_SIGMASK +11*8($16)
|
||||
stq $31, UC_SIGMASK +12*8($16)
|
||||
stq $31, UC_SIGMASK +13*8($16)
|
||||
stq $31, UC_SIGMASK +14*8($16)
|
||||
stq $31, UC_SIGMASK +15*8($16)
|
||||
|
||||
ldq $0, 0($30)
|
||||
addq $30, 4*8, $30
|
||||
cfi_register (64, 0)
|
||||
cfi_adjust_cfa_offset(-4*8)
|
||||
ret $31, ($0), 1
|
||||
|
||||
cfi_endproc
|
||||
.size __getcontext_x, .-__getcontext_x
|
||||
.type __getcontext_x, @function
|
@ -1,3 +0,0 @@
|
||||
#define DIRENT_SET_DP_INO(dp, value) \
|
||||
do { (dp)->d_ino = (value); (dp)->__pad = 0; } while (0)
|
||||
#include <sysdeps/unix/sysv/linux/getdents.c>
|
@ -1 +0,0 @@
|
||||
#include "../getdents64.c"
|
@ -1,47 +0,0 @@
|
||||
/* Copyright (C) 2001, 2003 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by Ulrich Drepper <drepper@redhat.com>, 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. */
|
||||
|
||||
#include <errno.h>
|
||||
#include <string.h>
|
||||
#include <unistd.h>
|
||||
|
||||
#include <sysdep.h>
|
||||
#include <sys/syscall.h>
|
||||
#include <bp-checks.h>
|
||||
|
||||
int
|
||||
__gethostname (char *name, size_t len)
|
||||
{
|
||||
int result;
|
||||
|
||||
result = INLINE_SYSCALL (gethostname, 2, CHECK_N (name, len), len);
|
||||
|
||||
if (result == 0
|
||||
/* See whether the string is terminated. If not we will return
|
||||
an error. */
|
||||
&& memchr (name, '\0', len) == NULL)
|
||||
{
|
||||
__set_errno (EOVERFLOW);
|
||||
result = -1;
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
weak_alias (__gethostname, gethostname)
|
@ -1,113 +0,0 @@
|
||||
/* Copyright (C) 1998, 2003, 2006 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Lesser General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 2.1 of the License, or (at your option) any later version.
|
||||
|
||||
The GNU C Library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public
|
||||
License along with the GNU C Library; if not, write to the Free
|
||||
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||
02111-1307 USA. */
|
||||
|
||||
#include <sysdep.h>
|
||||
#define _ERRNO_H 1
|
||||
#include <bits/errno.h>
|
||||
#include <kernel-features.h>
|
||||
|
||||
.text
|
||||
|
||||
#if defined HAVE_ELF && defined PIC && defined DO_VERSIONING
|
||||
#define GETITIMER __getitimer_tv64
|
||||
#else
|
||||
#define GETITIMER getitimer
|
||||
#endif
|
||||
|
||||
#if defined __ASSUME_TIMEVAL64
|
||||
PSEUDO(GETITIMER, getitimer, 2)
|
||||
ret
|
||||
PSEUDO_END(GETITIMER)
|
||||
#else
|
||||
/* The problem here is that initially we made struct timeval compatible with
|
||||
OSF/1, using int32. But we defined time_t with uint64, and later found
|
||||
that POSIX requires tv_sec to be time_t.
|
||||
|
||||
So now we have to do compatibility stuff. */
|
||||
|
||||
/* The variable is shared between all wrappers around signal handling
|
||||
functions which have RT equivalents. */
|
||||
.comm __libc_missing_axp_tv64, 4
|
||||
|
||||
LEAF(GETITIMER, 16)
|
||||
ldgp gp, 0(pv)
|
||||
subq sp, 16, sp
|
||||
#ifdef PROF
|
||||
.set noat
|
||||
lda AT, _mcount
|
||||
jsr AT, (AT), _mcount
|
||||
.set at
|
||||
#endif
|
||||
.prologue 1
|
||||
|
||||
ldl t0, __libc_missing_axp_tv64
|
||||
|
||||
/* Save arguments in case we do need to fall back. */
|
||||
stq a0, 0(sp)
|
||||
stq a1, 8(sp)
|
||||
|
||||
bne t0, $do32
|
||||
|
||||
ldi v0, SYS_ify(getitimer)
|
||||
callsys
|
||||
bne a3, $err64
|
||||
|
||||
/* Everything ok. */
|
||||
addq sp, 16, sp
|
||||
ret
|
||||
|
||||
/* If we didn't get ENOSYS, it is a real error. */
|
||||
.align 3
|
||||
$err64: cmpeq v0, ENOSYS, t0
|
||||
beq t0, $error
|
||||
stl t0, __libc_missing_axp_tv64
|
||||
|
||||
/* Recover the saved arguments. */
|
||||
ldq a1, 8(sp)
|
||||
ldq a0, 0(sp)
|
||||
|
||||
.align 3
|
||||
$do32: ldi v0, SYS_ify(osf_getitimer)
|
||||
callsys
|
||||
bne a3, $error
|
||||
|
||||
/* Copy back to proper format. */
|
||||
ldq a1, 8(sp)
|
||||
ldl t0, 0(a1)
|
||||
ldl t1, 4(a1)
|
||||
ldl t2, 8(a1)
|
||||
ldl t3, 12(a1)
|
||||
stq t0, 0(a1)
|
||||
stq t1, 8(a1)
|
||||
stq t2, 16(a1)
|
||||
stq t3, 24(a1)
|
||||
|
||||
addq sp, 16, sp
|
||||
ret
|
||||
|
||||
.align 3
|
||||
$error:
|
||||
addq sp, 16, sp
|
||||
SYSCALL_ERROR_HANDLER
|
||||
|
||||
END(GETITIMER)
|
||||
#endif /* __ASSUME_TIMEVAL64 */
|
||||
|
||||
#if defined HAVE_ELF && defined PIC && defined DO_VERSIONING
|
||||
default_symbol_version (__getitimer_tv64, getitimer, GLIBC_2.1)
|
||||
#endif
|
@ -1,149 +0,0 @@
|
||||
/* Copyright (C) 1998, 2003, 2006 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Lesser General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 2.1 of the License, or (at your option) any later version.
|
||||
|
||||
The GNU C Library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public
|
||||
License along with the GNU C Library; if not, write to the Free
|
||||
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||
02111-1307 USA. */
|
||||
|
||||
#include <sysdep.h>
|
||||
#define _ERRNO_H 1
|
||||
#include <bits/errno.h>
|
||||
#include <kernel-features.h>
|
||||
|
||||
.text
|
||||
|
||||
#if defined HAVE_ELF && defined PIC && defined DO_VERSIONING
|
||||
#define GETRUSAGE __getrusage_tv64
|
||||
#else
|
||||
#define GETRUSAGE __getrusage
|
||||
#endif
|
||||
|
||||
#if defined __ASSUME_TIMEVAL64
|
||||
PSEUDO(GETRUSAGE, getrusage, 2)
|
||||
ret
|
||||
PSEUDO_END(GETRUSAGE)
|
||||
#else
|
||||
/* The problem here is that initially we made struct timeval compatible with
|
||||
OSF/1, using int32. But we defined time_t with uint64, and later found
|
||||
that POSIX requires tv_sec to be time_t.
|
||||
|
||||
So now we have to do compatibility stuff. */
|
||||
|
||||
/* The variable is shared between all wrappers around signal handling
|
||||
functions which have RT equivalents. */
|
||||
.comm __libc_missing_axp_tv64, 4
|
||||
|
||||
LEAF(GETRUSAGE, 16)
|
||||
ldgp gp, 0(pv)
|
||||
subq sp, 16, sp
|
||||
#ifdef PROF
|
||||
.set noat
|
||||
lda AT, _mcount
|
||||
jsr AT, (AT), _mcount
|
||||
.set at
|
||||
#endif
|
||||
.prologue 1
|
||||
|
||||
ldl t0, __libc_missing_axp_tv64
|
||||
|
||||
/* Save arguments in case we do need to fall back. */
|
||||
stq a0, 0(sp)
|
||||
stq a1, 8(sp)
|
||||
|
||||
bne t0, $do32
|
||||
|
||||
ldi v0, SYS_ify(getrusage)
|
||||
callsys
|
||||
bne a3, $err64
|
||||
|
||||
/* Everything ok. */
|
||||
addq sp, 16, sp
|
||||
ret
|
||||
|
||||
/* If we didn't get ENOSYS, it is a real error. */
|
||||
.align 3
|
||||
$err64: cmpeq v0, ENOSYS, t0
|
||||
beq t0, $error
|
||||
stl t0, __libc_missing_axp_tv64
|
||||
|
||||
/* Recover the saved arguments. */
|
||||
ldq a1, 8(sp)
|
||||
ldq a0, 0(sp)
|
||||
|
||||
.align 3
|
||||
$do32: ldi v0, SYS_ify(osf_getrusage)
|
||||
callsys
|
||||
bne a3, $error
|
||||
|
||||
/* Copy back to proper format. */
|
||||
ldq a1, 8(sp)
|
||||
ldl t0, 0(a1) # ru_utime.tv_sec
|
||||
ldl t1, 4(a1) # ru_utime.tv_usec
|
||||
ldl t2, 8(a1) # ru_stime.tv_sec
|
||||
ldl t3, 12(a1) # ru_stime.tv_usec
|
||||
ldt $f15, 16(a1) # ru_maxrss
|
||||
ldt $f16, 24(a1) # ru_ixrss
|
||||
ldt $f17, 32(a1) # ru_idrss
|
||||
ldt $f18, 40(a1) # ru_isrss
|
||||
ldt $f19, 48(a1) # ru_minflt
|
||||
ldt $f20, 56(a1) # ru_majflt
|
||||
ldt $f21, 64(a1) # ru_nswap
|
||||
ldt $f22, 72(a1) # ru_inblock
|
||||
ldt $f23, 80(a1) # ru_oublock
|
||||
ldt $f24, 88(a1) # ru_msgsend
|
||||
ldt $f25, 96(a1) # ru_msgrcv
|
||||
ldt $f26, 104(a1) # ru_nsignals
|
||||
ldt $f27, 112(a1) # ru_nvcsw
|
||||
.set noat
|
||||
ldt $f28, 120(a1) # ru_nivcsw
|
||||
.set at
|
||||
stq t0, 0(a1)
|
||||
stq t1, 8(a1)
|
||||
stq t2, 16(a1)
|
||||
stq t3, 24(a1)
|
||||
stt $f15, 32(a1)
|
||||
stt $f16, 40(a1)
|
||||
stt $f17, 48(a1)
|
||||
stt $f18, 56(a1)
|
||||
stt $f19, 64(a1)
|
||||
stt $f20, 72(a1)
|
||||
stt $f21, 80(a1)
|
||||
stt $f22, 88(a1)
|
||||
stt $f23, 96(a1)
|
||||
stt $f24, 104(a1)
|
||||
stt $f25, 112(a1)
|
||||
stt $f26, 120(a1)
|
||||
stt $f27, 128(a1)
|
||||
.set noat
|
||||
stt $f28, 136(a1)
|
||||
.set at
|
||||
|
||||
addq sp, 16, sp
|
||||
ret
|
||||
|
||||
.align 3
|
||||
$error:
|
||||
addq sp, 16, sp
|
||||
SYSCALL_ERROR_HANDLER
|
||||
|
||||
END(GETRUSAGE)
|
||||
#endif /* __ASSUME_TIMEVAL64 */
|
||||
|
||||
#if defined HAVE_ELF && defined PIC && defined DO_VERSIONING
|
||||
strong_alias(__getrusage_tv64, ____getrusage_tv64)
|
||||
default_symbol_version (____getrusage_tv64, __getrusage, GLIBC_2.1)
|
||||
default_symbol_version (__getrusage_tv64, getrusage, GLIBC_2.1)
|
||||
#else
|
||||
weak_alias (__getrusage, getrusage)
|
||||
#endif
|
@ -1,57 +0,0 @@
|
||||
/* Determine various system internal values, Linux/Alpha version.
|
||||
Copyright (C) 1999 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 \
|
||||
{ \
|
||||
/* Find the line that contains the information about the number of \
|
||||
active cpus. We don't have to fear extremely long lines since \
|
||||
the kernel will not generate them. 8192 bytes are really enough. \
|
||||
If there is no "CPUs ..." line then we are on a UP system. */ \
|
||||
(RESULT) = 1; \
|
||||
while (fgets_unlocked (BUFFER, sizeof (BUFFER), FP) != NULL) \
|
||||
if ((sscanf (BUFFER, "cpus active : %d", &(RESULT)) == 1) \
|
||||
|| (sscanf (BUFFER, "CPUs probed %*d active %d", \
|
||||
&(RESULT)) == 1)) \
|
||||
break; \
|
||||
} \
|
||||
while (0)
|
||||
|
||||
|
||||
/* On the Alpha we can distinguish between the number of configured and
|
||||
active cpus. */
|
||||
#define GET_NPROCS_CONF_PARSER(FP, BUFFER, RESULT) \
|
||||
do \
|
||||
{ \
|
||||
/* Find the line that contains the information about the number of \
|
||||
probed cpus. We don't have to fear extremely long lines since \
|
||||
the kernel will not generate them. 8192 bytes are really enough. \
|
||||
If there is no "CPUs ..." line then we are on a UP system. */ \
|
||||
(RESULT) = 1; \
|
||||
while (fgets_unlocked ((BUFFER), sizeof (BUFFER), (FP)) != NULL) \
|
||||
if ((sscanf (buffer, "cpus detected : %d", &(RESULT)) == 1) \
|
||||
|| (sscanf (buffer, "CPUs probed %d", &(RESULT)) == 1)) \
|
||||
break; \
|
||||
} \
|
||||
while (0)
|
||||
|
||||
#include <sysdeps/unix/sysv/linux/getsysstats.c>
|
@ -1,120 +0,0 @@
|
||||
/* Copyright (C) 1998, 2002, 2003, 2006 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Lesser General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 2.1 of the License, or (at your option) any later version.
|
||||
|
||||
The GNU C Library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public
|
||||
License along with the GNU C Library; if not, write to the Free
|
||||
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||
02111-1307 USA. */
|
||||
|
||||
#include <sysdep.h>
|
||||
#define _ERRNO_H 1
|
||||
#include <bits/errno.h>
|
||||
#include <kernel-features.h>
|
||||
|
||||
.text
|
||||
|
||||
#if defined HAVE_ELF && defined PIC && defined DO_VERSIONING
|
||||
#define GETTIMEOFDAY __gettimeofday_tv64
|
||||
#else
|
||||
#define GETTIMEOFDAY __gettimeofday
|
||||
#endif
|
||||
|
||||
#if defined __ASSUME_TIMEVAL64
|
||||
PSEUDO(GETTIMEOFDAY, gettimeofday, 2)
|
||||
ret
|
||||
PSEUDO_END(GETTIMEOFDAY)
|
||||
#else
|
||||
|
||||
/* The problem here is that initially we made struct timeval compatible with
|
||||
OSF/1, using int32. But we defined time_t with uint64, and later found
|
||||
that POSIX requires tv_sec to be time_t.
|
||||
|
||||
So now we have to do compatibility stuff. */
|
||||
|
||||
/* The variable is shared between all wrappers around signal handling
|
||||
functions which have RT equivalents. */
|
||||
.comm __libc_missing_axp_tv64, 4
|
||||
|
||||
LEAF(GETTIMEOFDAY, 16)
|
||||
ldgp gp, 0(pv)
|
||||
subq sp, 16, sp
|
||||
#ifdef PROF
|
||||
.set noat
|
||||
lda AT, _mcount
|
||||
jsr AT, (AT), _mcount
|
||||
.set at
|
||||
#endif
|
||||
.prologue 1
|
||||
|
||||
ldl t0, __libc_missing_axp_tv64
|
||||
|
||||
/* Save arguments in case we do need to fall back. */
|
||||
stq a0, 0(sp)
|
||||
stq a1, 8(sp)
|
||||
|
||||
bne t0, $do32
|
||||
|
||||
ldi v0, SYS_ify(gettimeofday)
|
||||
callsys
|
||||
bne a3, $err64
|
||||
|
||||
/* Everything ok. */
|
||||
addq sp, 16, sp
|
||||
ret
|
||||
|
||||
/* If we didn't get ENOSYS, it is a real error. */
|
||||
.align 3
|
||||
$err64: cmpeq v0, ENOSYS, t0
|
||||
beq t0, $error
|
||||
stl t0, __libc_missing_axp_tv64
|
||||
|
||||
/* Recover the saved arguments. */
|
||||
ldq a1, 8(sp)
|
||||
ldq a0, 0(sp)
|
||||
|
||||
.align 3
|
||||
$do32: ldi v0, SYS_ify(osf_gettimeofday)
|
||||
callsys
|
||||
bne a3, $error
|
||||
|
||||
/* Copy back to proper format. */
|
||||
ldq a0, 0(sp)
|
||||
beq a0, 2f
|
||||
ldl t0, 0(a0)
|
||||
ldl t1, 4(a0)
|
||||
stq t0, 0(a0)
|
||||
stq t1, 8(a0)
|
||||
|
||||
2: addq sp, 16, sp
|
||||
ret
|
||||
|
||||
.align 3
|
||||
$error:
|
||||
addq sp, 16, sp
|
||||
SYSCALL_ERROR_HANDLER
|
||||
|
||||
END(GETTIMEOFDAY)
|
||||
#endif /* __ASSUME_TIMEVAL64 */
|
||||
|
||||
#if defined HAVE_ELF && defined PIC && defined DO_VERSIONING
|
||||
default_symbol_version (__gettimeofday_tv64, __gettimeofday, GLIBC_2.1)
|
||||
|
||||
/* It seems to me to be a misfeature of the assembler that we can only
|
||||
have one version-alias per symbol. So create an alias ourselves.
|
||||
The 'p' is for 'public'. *Shrug* */
|
||||
strong_alias (__gettimeofday_tv64, __gettimeofday_tv64p)
|
||||
default_symbol_version (__gettimeofday_tv64p, gettimeofday, GLIBC_2.1)
|
||||
#else
|
||||
weak_alias (__gettimeofday, gettimeofday)
|
||||
#endif
|
||||
strong_alias(GETTIMEOFDAY, __gettimeofday_internal)
|
@ -1,52 +0,0 @@
|
||||
/* Copyright (C) 1998, 2000, 2002, 2005 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Lesser General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 2.1 of the License, or (at your option) any later version.
|
||||
|
||||
The GNU C Library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public
|
||||
License along with the GNU C Library; if not, write to the Free
|
||||
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||
02111-1307 USA. */
|
||||
|
||||
#define glob64 __no_glob64_decl
|
||||
#define globfree64 __no_globfree64_decl
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <glob.h>
|
||||
#include <shlib-compat.h>
|
||||
|
||||
/* For Linux/Alpha we have to make the glob symbols versioned. */
|
||||
#define glob(pattern, flags, errfunc, pglob) \
|
||||
__new_glob (pattern, flags, errfunc, pglob)
|
||||
#define globfree(pglob) \
|
||||
__new_globfree (pglob)
|
||||
|
||||
/* We need prototypes for these new names. */
|
||||
extern int __new_glob (const char *__pattern, int __flags,
|
||||
int (*__errfunc) (const char *, int),
|
||||
glob_t *__pglob);
|
||||
extern void __new_globfree (glob_t *__pglob);
|
||||
|
||||
#include <posix/glob.c>
|
||||
|
||||
#undef glob
|
||||
#undef globfree
|
||||
#undef glob64
|
||||
#undef globfree64
|
||||
|
||||
versioned_symbol (libc, __new_glob, glob, GLIBC_2_1);
|
||||
versioned_symbol (libc, __new_globfree, globfree, GLIBC_2_1);
|
||||
libc_hidden_ver (__new_glob, glob)
|
||||
libc_hidden_ver (__new_globfree, globfree)
|
||||
|
||||
weak_alias (__new_glob, glob64)
|
||||
weak_alias (__new_globfree, globfree64)
|
||||
libc_hidden_ver (__new_globfree, globfree64)
|
@ -1,61 +0,0 @@
|
||||
/* Copyright (C) 1993, 1995, 1996, 2003, 2004 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by David Mosberger <davidm@azstarnet.com>, 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 <sysdep.h>
|
||||
#include "kernel_sysinfo.h"
|
||||
|
||||
|
||||
.text
|
||||
|
||||
LEAF(__ieee_get_fp_control, 16)
|
||||
#ifdef PROF
|
||||
ldgp gp, 0(pv)
|
||||
lda sp, -16(sp)
|
||||
.set noat
|
||||
lda AT, _mcount
|
||||
jsr AT, (AT), _mcount
|
||||
.set at
|
||||
.prologue 1
|
||||
#elif defined PIC
|
||||
lda sp, -16(sp)
|
||||
.prologue 0
|
||||
#else
|
||||
ldgp gp, 0(pv)
|
||||
lda sp, -16(sp)
|
||||
.prologue 1
|
||||
#endif
|
||||
|
||||
mov sp, a1
|
||||
ldi a0, GSI_IEEE_FP_CONTROL
|
||||
ldi v0, __NR_osf_getsysinfo
|
||||
call_pal PAL_callsys
|
||||
bne a3, $error
|
||||
|
||||
ldq v0, 0(sp)
|
||||
lda sp, 16(sp)
|
||||
ret
|
||||
|
||||
$error:
|
||||
lda sp, 16(sp)
|
||||
SYSCALL_ERROR_HANDLER
|
||||
|
||||
END(__ieee_get_fp_control)
|
||||
|
||||
libc_hidden_def(__ieee_get_fp_control)
|
||||
weak_alias (__ieee_get_fp_control, ieee_get_fp_control)
|
@ -1,61 +0,0 @@
|
||||
/* Copyright (C) 1993, 1995, 1996, 1997, 2003, 2004
|
||||
Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by David Mosberger <davidm@azstarnet.com>, 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 <sysdep.h>
|
||||
#include "kernel_sysinfo.h"
|
||||
|
||||
|
||||
LEAF(__ieee_set_fp_control, 16)
|
||||
#ifdef PROF
|
||||
ldgp gp, 0(pv)
|
||||
lda sp, -16(sp)
|
||||
.set noat
|
||||
lda AT, _mcount
|
||||
jsr AT, (AT), _mcount
|
||||
.set at
|
||||
.prologue 1
|
||||
#elif defined PIC
|
||||
lda sp, -16(sp)
|
||||
.prologue 0
|
||||
#else
|
||||
ldgp gp, 0(pv)
|
||||
lda sp, -16(sp)
|
||||
.prologue 1
|
||||
#endif
|
||||
|
||||
stq a0, 0(sp)
|
||||
mov sp, a1
|
||||
ldi a0, SSI_IEEE_FP_CONTROL
|
||||
ldi v0, __NR_osf_setsysinfo
|
||||
call_pal PAL_callsys
|
||||
|
||||
bne a3, $error
|
||||
|
||||
lda sp, 16(sp)
|
||||
ret
|
||||
|
||||
$error:
|
||||
lda sp, 16(sp)
|
||||
SYSCALL_ERROR_HANDLER
|
||||
|
||||
END(__ieee_set_fp_control)
|
||||
|
||||
libc_hidden_def(__ieee_set_fp_control)
|
||||
weak_alias (__ieee_set_fp_control, ieee_set_fp_control)
|
@ -1,883 +0,0 @@
|
||||
/* Copyright (C) 1992, 1996-1999, 2000 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed 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 access is restricted to ISA port space (ports 0..65535).
|
||||
Modern devices hopefully are sane enough not to put any performance
|
||||
critical registers in i/o space.
|
||||
|
||||
On the first call to ioperm, the entire (E)ISA port space is mapped
|
||||
into the virtual address space at address io.base. mprotect calls
|
||||
are then used to enable/disable access to ports. Per page, there
|
||||
are PAGE_SIZE>>IO_SHIFT I/O ports (e.g., 256 ports on a Low Cost Alpha
|
||||
based system using 8KB pages).
|
||||
|
||||
Keep in mind that this code should be able to run in a 32bit address
|
||||
space. It is therefore unreasonable to expect mmap'ing the entire
|
||||
sparse address space would work (e.g., the Low Cost Alpha chip has an
|
||||
I/O address space that's 512MB large!). */
|
||||
|
||||
/* Make sure the ldbu/stb asms below are not expaneded to macros. */
|
||||
#ifndef __alpha_bwx__
|
||||
asm(".arch ev56");
|
||||
#endif
|
||||
|
||||
#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 <sys/io.h>
|
||||
|
||||
#include <sysdep.h>
|
||||
#include <sys/syscall.h>
|
||||
|
||||
#define PATH_ALPHA_SYSTYPE "/etc/alpha_systype"
|
||||
#define PATH_CPUINFO "/proc/cpuinfo"
|
||||
|
||||
#define MAX_PORT 0x10000
|
||||
#define vip volatile int *
|
||||
#define vuip volatile unsigned int *
|
||||
#define vusp volatile unsigned short *
|
||||
#define vucp volatile unsigned char *
|
||||
|
||||
#define JENSEN_IO_BASE (0x300000000UL)
|
||||
#define JENSEN_SPARSE_MEM (0x200000000UL)
|
||||
|
||||
/* With respect to the I/O architecture, APECS and LCA are identical,
|
||||
so the following defines apply to LCA as well. */
|
||||
#define APECS_IO_BASE (0x1c0000000UL)
|
||||
#define APECS_SPARSE_MEM (0x200000000UL)
|
||||
#define APECS_DENSE_MEM (0x300000000UL)
|
||||
|
||||
/* The same holds for CIA and PYXIS, except for PYXIS we prefer BWX. */
|
||||
#define CIA_IO_BASE (0x8580000000UL)
|
||||
#define CIA_SPARSE_MEM (0x8000000000UL)
|
||||
#define CIA_DENSE_MEM (0x8600000000UL)
|
||||
|
||||
#define PYXIS_IO_BASE (0x8900000000UL)
|
||||
#define PYXIS_DENSE_MEM (0x8800000000UL)
|
||||
|
||||
/* SABLE is EV4, GAMMA is EV5 */
|
||||
#define T2_IO_BASE (0x3a0000000UL)
|
||||
#define T2_SPARSE_MEM (0x200000000UL)
|
||||
#define T2_DENSE_MEM (0x3c0000000UL)
|
||||
|
||||
#define GAMMA_IO_BASE (0x83a0000000UL)
|
||||
#define GAMMA_SPARSE_MEM (0x8200000000UL)
|
||||
#define GAMMA_DENSE_MEM (0x83c0000000UL)
|
||||
|
||||
/* NOTE: these are hardwired to PCI bus 0 addresses!!! */
|
||||
#define MCPCIA_IO_BASE (0xf980000000UL)
|
||||
#define MCPCIA_SPARSE_MEM (0xf800000000UL)
|
||||
#define MCPCIA_DENSE_MEM (0xf900000000UL)
|
||||
|
||||
/* Tsunami and Irongate use the same offsets, at least for hose 0. */
|
||||
#define TSUNAMI_IO_BASE (0x801fc000000UL)
|
||||
#define TSUNAMI_DENSE_MEM (0x80000000000UL)
|
||||
|
||||
/* Polaris has SPARSE space, but we prefer to use only DENSE
|
||||
because of some idiosyncracies in actually using SPARSE. */
|
||||
#define POLARIS_IO_BASE (0xf9fc000000UL)
|
||||
#define POLARIS_DENSE_MEM (0xf900000000UL)
|
||||
|
||||
typedef enum {
|
||||
IOSYS_UNKNOWN, IOSYS_JENSEN, IOSYS_APECS, IOSYS_CIA, IOSYS_PYXIS, IOSYS_T2,
|
||||
IOSYS_TSUNAMI, IOSYS_MCPCIA, IOSYS_GAMMA, IOSYS_POLARIS,
|
||||
IOSYS_CPUDEP, IOSYS_PCIDEP
|
||||
} iosys_t;
|
||||
|
||||
typedef enum {
|
||||
IOSWIZZLE_JENSEN, IOSWIZZLE_SPARSE, IOSWIZZLE_DENSE
|
||||
} ioswizzle_t;
|
||||
|
||||
static struct io_system {
|
||||
unsigned long int bus_memory_base;
|
||||
unsigned long int sparse_bus_mem_base;
|
||||
unsigned long int bus_io_base;
|
||||
} io_system[] = { /* NOTE! must match iosys_t enumeration */
|
||||
/* UNKNOWN */ {0, 0, 0},
|
||||
/* JENSEN */ {0, JENSEN_SPARSE_MEM, JENSEN_IO_BASE},
|
||||
/* APECS */ {APECS_DENSE_MEM, APECS_SPARSE_MEM, APECS_IO_BASE},
|
||||
/* CIA */ {CIA_DENSE_MEM, CIA_SPARSE_MEM, CIA_IO_BASE},
|
||||
/* PYXIS */ {PYXIS_DENSE_MEM, 0, PYXIS_IO_BASE},
|
||||
/* T2 */ {T2_DENSE_MEM, T2_SPARSE_MEM, T2_IO_BASE},
|
||||
/* TSUNAMI */ {TSUNAMI_DENSE_MEM, 0, TSUNAMI_IO_BASE},
|
||||
/* MCPCIA */ {MCPCIA_DENSE_MEM, MCPCIA_SPARSE_MEM, MCPCIA_IO_BASE},
|
||||
/* GAMMA */ {GAMMA_DENSE_MEM, GAMMA_SPARSE_MEM, GAMMA_IO_BASE},
|
||||
/* POLARIS */ {POLARIS_DENSE_MEM, 0, POLARIS_IO_BASE},
|
||||
/* CPUDEP */ {0, 0, 0}, /* for platforms dependent on CPU type */
|
||||
/* PCIDEP */ {0, 0, 0}, /* for platforms dependent on core logic */
|
||||
};
|
||||
|
||||
static struct platform {
|
||||
const char *name;
|
||||
iosys_t io_sys;
|
||||
} platform[] = {
|
||||
{"Alcor", IOSYS_CIA},
|
||||
{"Avanti", IOSYS_APECS},
|
||||
{"Cabriolet", IOSYS_APECS},
|
||||
{"EB164", IOSYS_PCIDEP},
|
||||
{"EB64+", IOSYS_APECS},
|
||||
{"EB66", IOSYS_APECS},
|
||||
{"EB66P", IOSYS_APECS},
|
||||
{"Jensen", IOSYS_JENSEN},
|
||||
{"Miata", IOSYS_PYXIS},
|
||||
{"Mikasa", IOSYS_CPUDEP},
|
||||
{"Nautilus", IOSYS_TSUNAMI},
|
||||
{"Noname", IOSYS_APECS},
|
||||
{"Noritake", IOSYS_CPUDEP},
|
||||
{"Rawhide", IOSYS_MCPCIA},
|
||||
{"Ruffian", IOSYS_PYXIS},
|
||||
{"Sable", IOSYS_CPUDEP},
|
||||
{"Takara", IOSYS_CIA},
|
||||
{"Tsunami", IOSYS_TSUNAMI},
|
||||
{"XL", IOSYS_APECS},
|
||||
};
|
||||
|
||||
struct ioswtch {
|
||||
void (*sethae)(unsigned long int addr);
|
||||
void (*outb)(unsigned char b, unsigned long int port);
|
||||
void (*outw)(unsigned short b, unsigned long int port);
|
||||
void (*outl)(unsigned int b, unsigned long int port);
|
||||
unsigned int (*inb)(unsigned long int port);
|
||||
unsigned int (*inw)(unsigned long int port);
|
||||
unsigned int (*inl)(unsigned long int port);
|
||||
};
|
||||
|
||||
static struct {
|
||||
unsigned long int hae_cache;
|
||||
unsigned long int base;
|
||||
struct ioswtch * swp;
|
||||
unsigned long int bus_memory_base;
|
||||
unsigned long int sparse_bus_memory_base;
|
||||
unsigned long int io_base;
|
||||
ioswizzle_t swiz;
|
||||
} io;
|
||||
|
||||
static inline void
|
||||
stb_mb(unsigned char val, unsigned long addr)
|
||||
{
|
||||
__asm__("stb %1,%0; mb" : "=m"(*(vucp)addr) : "r"(val));
|
||||
}
|
||||
|
||||
static inline void
|
||||
stw_mb(unsigned short val, unsigned long addr)
|
||||
{
|
||||
__asm__("stw %1,%0; mb" : "=m"(*(vusp)addr) : "r"(val));
|
||||
}
|
||||
|
||||
static inline void
|
||||
stl_mb(unsigned int val, unsigned long addr)
|
||||
{
|
||||
__asm__("stl %1,%0; mb" : "=m"(*(vip)addr) : "r"(val));
|
||||
}
|
||||
|
||||
/* No need to examine error -- sethae never fails. */
|
||||
static inline void
|
||||
__sethae(unsigned long value)
|
||||
{
|
||||
register unsigned long r16 __asm__("$16") = value;
|
||||
register unsigned long r0 __asm__("$0") = __NR_sethae;
|
||||
__asm__ __volatile__ ("callsys"
|
||||
: "=r"(r0)
|
||||
: "0"(r0), "r" (r16)
|
||||
: inline_syscall_clobbers, "$19");
|
||||
}
|
||||
|
||||
extern long __pciconfig_iobase(enum __pciconfig_iobase_which __which,
|
||||
unsigned long int __bus,
|
||||
unsigned long int __dfn);
|
||||
|
||||
static inline unsigned long int
|
||||
port_to_cpu_addr (unsigned long int port, ioswizzle_t ioswiz, int size)
|
||||
{
|
||||
if (ioswiz == IOSWIZZLE_SPARSE)
|
||||
return io.base + (port << 5) + ((size - 1) << 3);
|
||||
else if (ioswiz == IOSWIZZLE_DENSE)
|
||||
return port + io.base;
|
||||
else
|
||||
return io.base + (port << 7) + ((size - 1) << 5);
|
||||
}
|
||||
|
||||
static inline void
|
||||
inline_sethae (unsigned long int addr, ioswizzle_t ioswiz)
|
||||
{
|
||||
if (ioswiz == IOSWIZZLE_SPARSE)
|
||||
{
|
||||
unsigned long int msb;
|
||||
|
||||
/* no need to set hae if msb is 0: */
|
||||
msb = addr & 0xf8000000;
|
||||
if (msb && msb != io.hae_cache)
|
||||
{
|
||||
io.hae_cache = msb;
|
||||
__sethae (msb);
|
||||
}
|
||||
}
|
||||
else if (ioswiz == IOSWIZZLE_JENSEN)
|
||||
{
|
||||
/* HAE on the Jensen is bits 31:25 shifted right. */
|
||||
addr >>= 25;
|
||||
if (addr != io.hae_cache)
|
||||
{
|
||||
io.hae_cache = addr;
|
||||
__sethae (addr);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static inline void
|
||||
inline_outb (unsigned char b, unsigned long int port, ioswizzle_t ioswiz)
|
||||
{
|
||||
unsigned int w;
|
||||
unsigned long int addr = port_to_cpu_addr (port, ioswiz, 1);
|
||||
|
||||
asm ("insbl %2,%1,%0" : "=r" (w) : "ri" (port & 0x3), "r" (b));
|
||||
stl_mb(w, addr);
|
||||
}
|
||||
|
||||
|
||||
static inline void
|
||||
inline_outw (unsigned short int b, unsigned long int port, ioswizzle_t ioswiz)
|
||||
{
|
||||
unsigned long w;
|
||||
unsigned long int addr = port_to_cpu_addr (port, ioswiz, 2);
|
||||
|
||||
asm ("inswl %2,%1,%0" : "=r" (w) : "ri" (port & 0x3), "r" (b));
|
||||
stl_mb(w, addr);
|
||||
}
|
||||
|
||||
|
||||
static inline void
|
||||
inline_outl (unsigned int b, unsigned long int port, ioswizzle_t ioswiz)
|
||||
{
|
||||
unsigned long int addr = port_to_cpu_addr (port, ioswiz, 4);
|
||||
|
||||
stl_mb(b, addr);
|
||||
}
|
||||
|
||||
|
||||
static inline unsigned int
|
||||
inline_inb (unsigned long int port, ioswizzle_t ioswiz)
|
||||
{
|
||||
unsigned long int addr = port_to_cpu_addr (port, ioswiz, 1);
|
||||
int result;
|
||||
|
||||
result = *(vip) addr;
|
||||
result >>= (port & 3) * 8;
|
||||
return 0xffUL & result;
|
||||
}
|
||||
|
||||
|
||||
static inline unsigned int
|
||||
inline_inw (unsigned long int port, ioswizzle_t ioswiz)
|
||||
{
|
||||
unsigned long int addr = port_to_cpu_addr (port, ioswiz, 2);
|
||||
int result;
|
||||
|
||||
result = *(vip) addr;
|
||||
result >>= (port & 3) * 8;
|
||||
return 0xffffUL & result;
|
||||
}
|
||||
|
||||
|
||||
static inline unsigned int
|
||||
inline_inl (unsigned long int port, ioswizzle_t ioswiz)
|
||||
{
|
||||
unsigned long int addr = port_to_cpu_addr (port, ioswiz, 4);
|
||||
|
||||
return *(vuip) addr;
|
||||
}
|
||||
|
||||
/*
|
||||
* Now define the inline functions for CPUs supporting byte/word insns,
|
||||
* and whose core logic supports I/O space accesses utilizing them.
|
||||
*
|
||||
* These routines could be used by MIATA, for example, because it has
|
||||
* and EV56 plus PYXIS, but it currently uses SPARSE anyway. This is
|
||||
* also true of RX164 which used POLARIS, but we will choose to use
|
||||
* these routines in that case instead of SPARSE.
|
||||
*
|
||||
* These routines are necessary for TSUNAMI/TYPHOON based platforms,
|
||||
* which will have (at least) EV6.
|
||||
*/
|
||||
|
||||
static inline unsigned long int
|
||||
dense_port_to_cpu_addr (unsigned long int port)
|
||||
{
|
||||
return port + io.base;
|
||||
}
|
||||
|
||||
static inline void
|
||||
inline_bwx_outb (unsigned char b, unsigned long int port)
|
||||
{
|
||||
unsigned long int addr = dense_port_to_cpu_addr (port);
|
||||
stb_mb (b, addr);
|
||||
}
|
||||
|
||||
static inline void
|
||||
inline_bwx_outw (unsigned short int b, unsigned long int port)
|
||||
{
|
||||
unsigned long int addr = dense_port_to_cpu_addr (port);
|
||||
stw_mb (b, addr);
|
||||
}
|
||||
|
||||
static inline void
|
||||
inline_bwx_outl (unsigned int b, unsigned long int port)
|
||||
{
|
||||
unsigned long int addr = dense_port_to_cpu_addr (port);
|
||||
stl_mb (b, addr);
|
||||
}
|
||||
|
||||
static inline unsigned int
|
||||
inline_bwx_inb (unsigned long int port)
|
||||
{
|
||||
unsigned long int addr = dense_port_to_cpu_addr (port);
|
||||
unsigned char r;
|
||||
|
||||
__asm__ ("ldbu %0,%1" : "=r"(r) : "m"(*(vucp)addr));
|
||||
return r;
|
||||
}
|
||||
|
||||
static inline unsigned int
|
||||
inline_bwx_inw (unsigned long int port)
|
||||
{
|
||||
unsigned long int addr = dense_port_to_cpu_addr (port);
|
||||
unsigned short r;
|
||||
|
||||
__asm__ ("ldwu %0,%1" : "=r"(r) : "m"(*(vusp)addr));
|
||||
return r;
|
||||
}
|
||||
|
||||
static inline unsigned int
|
||||
inline_bwx_inl (unsigned long int port)
|
||||
{
|
||||
unsigned long int addr = dense_port_to_cpu_addr (port);
|
||||
|
||||
return *(vuip) addr;
|
||||
}
|
||||
|
||||
/* macros to define routines with appropriate names and functions */
|
||||
|
||||
/* these do either SPARSE or JENSEN swizzle */
|
||||
|
||||
#define DCL_SETHAE(name, ioswiz) \
|
||||
static void \
|
||||
name##_sethae (unsigned long int addr) \
|
||||
{ \
|
||||
inline_sethae (addr, IOSWIZZLE_##ioswiz); \
|
||||
}
|
||||
|
||||
#define DCL_OUT(name, func, type, ioswiz) \
|
||||
static void \
|
||||
name##_##func (unsigned type b, unsigned long int addr) \
|
||||
{ \
|
||||
inline_##func (b, addr, IOSWIZZLE_##ioswiz); \
|
||||
}
|
||||
|
||||
#define DCL_IN(name, func, ioswiz) \
|
||||
static unsigned int \
|
||||
name##_##func (unsigned long int addr) \
|
||||
{ \
|
||||
return inline_##func (addr, IOSWIZZLE_##ioswiz); \
|
||||
}
|
||||
|
||||
/* these do DENSE, so no swizzle is needed */
|
||||
|
||||
#define DCL_OUT_BWX(name, func, type) \
|
||||
static void \
|
||||
name##_##func (unsigned type b, unsigned long int addr) \
|
||||
{ \
|
||||
inline_bwx_##func (b, addr); \
|
||||
}
|
||||
|
||||
#define DCL_IN_BWX(name, func) \
|
||||
static unsigned int \
|
||||
name##_##func (unsigned long int addr) \
|
||||
{ \
|
||||
return inline_bwx_##func (addr); \
|
||||
}
|
||||
|
||||
/* now declare/define the necessary routines */
|
||||
|
||||
DCL_SETHAE(jensen, JENSEN)
|
||||
DCL_OUT(jensen, outb, char, JENSEN)
|
||||
DCL_OUT(jensen, outw, short int, JENSEN)
|
||||
DCL_OUT(jensen, outl, int, JENSEN)
|
||||
DCL_IN(jensen, inb, JENSEN)
|
||||
DCL_IN(jensen, inw, JENSEN)
|
||||
DCL_IN(jensen, inl, JENSEN)
|
||||
|
||||
DCL_SETHAE(sparse, SPARSE)
|
||||
DCL_OUT(sparse, outb, char, SPARSE)
|
||||
DCL_OUT(sparse, outw, short int, SPARSE)
|
||||
DCL_OUT(sparse, outl, int, SPARSE)
|
||||
DCL_IN(sparse, inb, SPARSE)
|
||||
DCL_IN(sparse, inw, SPARSE)
|
||||
DCL_IN(sparse, inl, SPARSE)
|
||||
|
||||
DCL_SETHAE(dense, DENSE)
|
||||
DCL_OUT_BWX(dense, outb, char)
|
||||
DCL_OUT_BWX(dense, outw, short int)
|
||||
DCL_OUT_BWX(dense, outl, int)
|
||||
DCL_IN_BWX(dense, inb)
|
||||
DCL_IN_BWX(dense, inw)
|
||||
DCL_IN_BWX(dense, inl)
|
||||
|
||||
/* define the "swizzle" switch */
|
||||
static struct ioswtch ioswtch[] = {
|
||||
{
|
||||
jensen_sethae,
|
||||
jensen_outb, jensen_outw, jensen_outl,
|
||||
jensen_inb, jensen_inw, jensen_inl
|
||||
},
|
||||
{
|
||||
sparse_sethae,
|
||||
sparse_outb, sparse_outw, sparse_outl,
|
||||
sparse_inb, sparse_inw, sparse_inl
|
||||
},
|
||||
{
|
||||
dense_sethae,
|
||||
dense_outb, dense_outw, dense_outl,
|
||||
dense_inb, dense_inw, dense_inl
|
||||
}
|
||||
};
|
||||
|
||||
#undef DEBUG_IOPERM
|
||||
|
||||
/* Routine to process the /proc/cpuinfo information into the fields
|
||||
that are required for correctly determining the platform parameters. */
|
||||
|
||||
struct cpuinfo_data
|
||||
{
|
||||
char systype[256]; /* system type field */
|
||||
char sysvari[256]; /* system variation field */
|
||||
char cpumodel[256]; /* cpu model field */
|
||||
};
|
||||
|
||||
static inline int
|
||||
process_cpuinfo(struct cpuinfo_data *data)
|
||||
{
|
||||
int got_type, got_vari, got_model;
|
||||
char dummy[256];
|
||||
FILE * fp;
|
||||
int n;
|
||||
|
||||
data->systype[0] = 0;
|
||||
data->sysvari[0] = 0;
|
||||
data->cpumodel[0] = 0;
|
||||
|
||||
/* If there's an /etc/alpha_systype link, we're intending to override
|
||||
whatever's in /proc/cpuinfo. */
|
||||
n = __readlink (PATH_ALPHA_SYSTYPE, data->systype, 256 - 1);
|
||||
if (n > 0)
|
||||
{
|
||||
data->systype[n] = '\0';
|
||||
return 1;
|
||||
}
|
||||
|
||||
fp = fopen (PATH_CPUINFO, "r");
|
||||
if (!fp)
|
||||
return 0;
|
||||
|
||||
got_type = got_vari = got_model = 0;
|
||||
|
||||
while (1)
|
||||
{
|
||||
if (fgets (dummy, 256, fp) == NULL)
|
||||
break;
|
||||
if (!got_type &&
|
||||
sscanf (dummy, "system type : %256[^\n]\n", data->systype) == 1)
|
||||
got_type = 1;
|
||||
if (!got_vari &&
|
||||
sscanf (dummy, "system variation : %256[^\n]\n", data->sysvari) == 1)
|
||||
got_vari = 1;
|
||||
if (!got_model &&
|
||||
sscanf (dummy, "cpu model : %256[^\n]\n", data->cpumodel) == 1)
|
||||
got_model = 1;
|
||||
}
|
||||
|
||||
fclose (fp);
|
||||
|
||||
#ifdef DEBUG_IOPERM
|
||||
fprintf(stderr, "system type: `%s'\n", data->systype);
|
||||
fprintf(stderr, "system vari: `%s'\n", data->sysvari);
|
||||
fprintf(stderr, "cpu model: `%s'\n", data->cpumodel);
|
||||
#endif
|
||||
|
||||
return got_type + got_vari + got_model;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Initialize I/O system.
|
||||
*/
|
||||
static int
|
||||
init_iosys (void)
|
||||
{
|
||||
long addr;
|
||||
int i, olderrno = errno;
|
||||
struct cpuinfo_data data;
|
||||
|
||||
/* First try the pciconfig_iobase syscall added to 2.2.15 and 2.3.99. */
|
||||
|
||||
#ifdef __NR_pciconfig_iobase
|
||||
addr = __pciconfig_iobase (IOBASE_DENSE_MEM, 0, 0);
|
||||
if (addr != -1)
|
||||
{
|
||||
ioswizzle_t io_swiz;
|
||||
|
||||
if (addr == 0)
|
||||
{
|
||||
/* Only Jensen doesn't have dense mem space. */
|
||||
io.sparse_bus_memory_base
|
||||
= io_system[IOSYS_JENSEN].sparse_bus_mem_base;
|
||||
io.io_base = io_system[IOSYS_JENSEN].bus_io_base;
|
||||
io_swiz = IOSWIZZLE_JENSEN;
|
||||
}
|
||||
else
|
||||
{
|
||||
io.bus_memory_base = addr;
|
||||
|
||||
addr = __pciconfig_iobase (IOBASE_DENSE_IO, 0, 0);
|
||||
if (addr != 0)
|
||||
{
|
||||
/* The X server uses _bus_base_sparse == 0 to know that
|
||||
BWX access are supported to dense mem space. This is
|
||||
true of every system that supports dense io space, so
|
||||
never fill in io.sparse_bus_memory_base in this case. */
|
||||
io_swiz = IOSWIZZLE_DENSE;
|
||||
io.io_base = addr;
|
||||
}
|
||||
else
|
||||
{
|
||||
io.sparse_bus_memory_base
|
||||
= __pciconfig_iobase (IOBASE_SPARSE_MEM, 0, 0);
|
||||
io.io_base = __pciconfig_iobase (IOBASE_SPARSE_IO, 0, 0);
|
||||
io_swiz = IOSWIZZLE_SPARSE;
|
||||
}
|
||||
}
|
||||
|
||||
io.swiz = io_swiz;
|
||||
io.swp = &ioswtch[io_swiz];
|
||||
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
/* Second, collect the contents of /etc/alpha_systype or /proc/cpuinfo. */
|
||||
|
||||
if (process_cpuinfo(&data) == 0)
|
||||
{
|
||||
/* This can happen if the format of /proc/cpuinfo changes. */
|
||||
fprintf (stderr,
|
||||
"ioperm.init_iosys: Unable to determine system type.\n"
|
||||
"\t(May need " PATH_ALPHA_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, data.systype) == 0)
|
||||
{
|
||||
iosys_t io_sys = platform[i].io_sys;
|
||||
|
||||
/* Some platforms can have either EV4 or EV5 CPUs. */
|
||||
if (io_sys == IOSYS_CPUDEP)
|
||||
{
|
||||
/* SABLE or MIKASA or NORITAKE so far. */
|
||||
if (strcmp (platform[i].name, "Sable") == 0)
|
||||
{
|
||||
if (strncmp (data.cpumodel, "EV4", 3) == 0)
|
||||
io_sys = IOSYS_T2;
|
||||
else if (strncmp (data.cpumodel, "EV5", 3) == 0)
|
||||
io_sys = IOSYS_GAMMA;
|
||||
}
|
||||
else
|
||||
{
|
||||
/* This covers MIKASA/NORITAKE. */
|
||||
if (strncmp (data.cpumodel, "EV4", 3) == 0)
|
||||
io_sys = IOSYS_APECS;
|
||||
else if (strncmp (data.cpumodel, "EV5", 3) == 0)
|
||||
io_sys = IOSYS_CIA;
|
||||
}
|
||||
if (io_sys == IOSYS_CPUDEP)
|
||||
{
|
||||
/* This can happen if the format of /proc/cpuinfo changes.*/
|
||||
fprintf (stderr, "ioperm.init_iosys: Unable to determine"
|
||||
" CPU model.\n");
|
||||
__set_errno (ENODEV);
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
/* Some platforms can have different core logic chipsets */
|
||||
if (io_sys == IOSYS_PCIDEP)
|
||||
{
|
||||
/* EB164 so far */
|
||||
if (strcmp (data.systype, "EB164") == 0)
|
||||
{
|
||||
if (strncmp (data.sysvari, "RX164", 5) == 0)
|
||||
io_sys = IOSYS_POLARIS;
|
||||
else if (strncmp (data.sysvari, "LX164", 5) == 0
|
||||
|| strncmp (data.sysvari, "SX164", 5) == 0)
|
||||
io_sys = IOSYS_PYXIS;
|
||||
else
|
||||
io_sys = IOSYS_CIA;
|
||||
}
|
||||
if (io_sys == IOSYS_PCIDEP)
|
||||
{
|
||||
/* This can happen if the format of /proc/cpuinfo changes.*/
|
||||
fprintf (stderr, "ioperm.init_iosys: Unable to determine"
|
||||
" core logic chipset.\n");
|
||||
__set_errno (ENODEV);
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
io.bus_memory_base = io_system[io_sys].bus_memory_base;
|
||||
io.sparse_bus_memory_base = io_system[io_sys].sparse_bus_mem_base;
|
||||
io.io_base = io_system[io_sys].bus_io_base;
|
||||
|
||||
if (io_sys == IOSYS_JENSEN)
|
||||
io.swiz = IOSWIZZLE_JENSEN;
|
||||
else if (io_sys == IOSYS_TSUNAMI
|
||||
|| io_sys == IOSYS_POLARIS
|
||||
|| io_sys == IOSYS_PYXIS)
|
||||
io.swiz = IOSWIZZLE_DENSE;
|
||||
else
|
||||
io.swiz = IOSWIZZLE_SPARSE;
|
||||
io.swp = &ioswtch[io.swiz];
|
||||
|
||||
__set_errno (olderrno);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
__set_errno (ENODEV);
|
||||
fprintf(stderr, "ioperm.init_iosys: Platform not recognized.\n"
|
||||
"\t(May need " PATH_ALPHA_SYSTYPE " symlink?)\n");
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
||||
int
|
||||
_ioperm (unsigned long int from, unsigned long int num, int turn_on)
|
||||
{
|
||||
unsigned long int addr, len, pagesize = __getpagesize();
|
||||
int prot;
|
||||
|
||||
if (!io.swp && init_iosys() < 0)
|
||||
{
|
||||
#ifdef DEBUG_IOPERM
|
||||
fprintf(stderr, "ioperm: init_iosys() failed (%m)\n");
|
||||
#endif
|
||||
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);
|
||||
#ifdef DEBUG_IOPERM
|
||||
fprintf(stderr, "ioperm: from/num out of range\n");
|
||||
#endif
|
||||
return -1;
|
||||
}
|
||||
|
||||
#ifdef DEBUG_IOPERM
|
||||
fprintf(stderr, "ioperm: turn_on %d io.base %ld\n", turn_on, io.base);
|
||||
#endif
|
||||
|
||||
if (turn_on)
|
||||
{
|
||||
if (!io.base)
|
||||
{
|
||||
int fd;
|
||||
|
||||
io.hae_cache = 0;
|
||||
if (io.swiz != IOSWIZZLE_DENSE)
|
||||
{
|
||||
/* Synchronize with hw. */
|
||||
__sethae (0);
|
||||
}
|
||||
|
||||
fd = __open ("/dev/mem", O_RDWR);
|
||||
if (fd < 0)
|
||||
{
|
||||
#ifdef DEBUG_IOPERM
|
||||
fprintf(stderr, "ioperm: /dev/mem open failed (%m)\n");
|
||||
#endif
|
||||
return -1;
|
||||
}
|
||||
|
||||
addr = port_to_cpu_addr (0, io.swiz, 1);
|
||||
len = port_to_cpu_addr (MAX_PORT, io.swiz, 1) - addr;
|
||||
io.base =
|
||||
(unsigned long int) __mmap (0, len, PROT_NONE, MAP_SHARED,
|
||||
fd, io.io_base);
|
||||
__close (fd);
|
||||
#ifdef DEBUG_IOPERM
|
||||
fprintf(stderr, "ioperm: mmap of len 0x%lx returned 0x%lx\n",
|
||||
len, io.base);
|
||||
#endif
|
||||
if ((long) io.base == -1)
|
||||
return -1;
|
||||
}
|
||||
prot = PROT_READ | PROT_WRITE;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!io.base)
|
||||
return 0; /* never was turned on... */
|
||||
|
||||
/* turnoff access to relevant pages: */
|
||||
prot = PROT_NONE;
|
||||
}
|
||||
addr = port_to_cpu_addr (from, io.swiz, 1);
|
||||
addr &= ~(pagesize - 1);
|
||||
len = port_to_cpu_addr (from + num, io.swiz, 1) - addr;
|
||||
return __mprotect ((void *) addr, len, prot);
|
||||
}
|
||||
|
||||
|
||||
int
|
||||
_iopl (int level)
|
||||
{
|
||||
switch (level)
|
||||
{
|
||||
case 0:
|
||||
return 0;
|
||||
|
||||
case 1: case 2: case 3:
|
||||
return _ioperm (0, MAX_PORT, 1);
|
||||
|
||||
default:
|
||||
__set_errno (EINVAL);
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
_sethae (unsigned long int addr)
|
||||
{
|
||||
if (!io.swp && init_iosys () < 0)
|
||||
return;
|
||||
|
||||
io.swp->sethae (addr);
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
_outb (unsigned char b, unsigned long int port)
|
||||
{
|
||||
if (port >= MAX_PORT)
|
||||
return;
|
||||
|
||||
io.swp->outb (b, port);
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
_outw (unsigned short b, unsigned long int port)
|
||||
{
|
||||
if (port >= MAX_PORT)
|
||||
return;
|
||||
|
||||
io.swp->outw (b, port);
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
_outl (unsigned int b, unsigned long int port)
|
||||
{
|
||||
if (port >= MAX_PORT)
|
||||
return;
|
||||
|
||||
io.swp->outl (b, port);
|
||||
}
|
||||
|
||||
|
||||
unsigned int
|
||||
_inb (unsigned long int port)
|
||||
{
|
||||
return io.swp->inb (port);
|
||||
}
|
||||
|
||||
|
||||
unsigned int
|
||||
_inw (unsigned long int port)
|
||||
{
|
||||
return io.swp->inw (port);
|
||||
}
|
||||
|
||||
|
||||
unsigned int
|
||||
_inl (unsigned long int port)
|
||||
{
|
||||
return io.swp->inl (port);
|
||||
}
|
||||
|
||||
|
||||
unsigned long int
|
||||
_bus_base(void)
|
||||
{
|
||||
if (!io.swp && init_iosys () < 0)
|
||||
return -1;
|
||||
return io.bus_memory_base;
|
||||
}
|
||||
|
||||
unsigned long int
|
||||
_bus_base_sparse(void)
|
||||
{
|
||||
if (!io.swp && init_iosys () < 0)
|
||||
return -1;
|
||||
return io.sparse_bus_memory_base;
|
||||
}
|
||||
|
||||
int
|
||||
_hae_shift(void)
|
||||
{
|
||||
if (!io.swp && init_iosys () < 0)
|
||||
return -1;
|
||||
if (io.swiz == IOSWIZZLE_JENSEN)
|
||||
return 7;
|
||||
if (io.swiz == IOSWIZZLE_SPARSE)
|
||||
return 5;
|
||||
return 0;
|
||||
}
|
||||
|
||||
weak_alias (_sethae, sethae);
|
||||
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);
|
||||
weak_alias (_bus_base, bus_base);
|
||||
weak_alias (_bus_base_sparse, bus_base_sparse);
|
||||
weak_alias (_hae_shift, hae_shift);
|
@ -1,47 +0,0 @@
|
||||
/* Copyright (C) 1995-1999, 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 <sys/ipc.h>
|
||||
|
||||
#define __IPC_64 0x100
|
||||
|
||||
struct __old_ipc_perm
|
||||
{
|
||||
__key_t __key; /* Key. */
|
||||
unsigned int uid; /* Owner's user ID. */
|
||||
unsigned int gid; /* Owner's group ID. */
|
||||
unsigned int cuid; /* Creator's user ID. */
|
||||
unsigned int cgid; /* Creator's group ID. */
|
||||
unsigned int mode; /* Read/write permission. */
|
||||
unsigned short int __seq; /* Sequence number. */
|
||||
};
|
||||
|
||||
|
||||
/* The codes for the functions to use the ipc syscall multiplexer. */
|
||||
#define IPCOP_semop 1
|
||||
#define IPCOP_semget 2
|
||||
#define IPCOP_semctl 3
|
||||
#define IPCOP_semtimedop 4
|
||||
#define IPCOP_msgsnd 11
|
||||
#define IPCOP_msgrcv 12
|
||||
#define IPCOP_msgget 13
|
||||
#define IPCOP_msgctl 14
|
||||
#define IPCOP_shmat 21
|
||||
#define IPCOP_shmdt 22
|
||||
#define IPCOP_shmget 23
|
||||
#define IPCOP_shmctl 24
|
@ -1,15 +0,0 @@
|
||||
/* This is the sigaction struction from the Linux 2.1.20 kernel. */
|
||||
|
||||
struct old_kernel_sigaction {
|
||||
__sighandler_t k_sa_handler;
|
||||
unsigned long sa_mask;
|
||||
unsigned int sa_flags;
|
||||
};
|
||||
|
||||
/* This is the sigaction structure from the Linux 2.1.68 kernel. */
|
||||
|
||||
struct kernel_sigaction {
|
||||
__sighandler_t k_sa_handler;
|
||||
unsigned int sa_flags;
|
||||
sigset_t sa_mask;
|
||||
};
|
@ -1,88 +0,0 @@
|
||||
/* Definition of `struct stat' used in the kernel. */
|
||||
struct kernel_stat
|
||||
{
|
||||
unsigned int st_dev;
|
||||
unsigned int st_ino;
|
||||
unsigned int st_mode;
|
||||
unsigned int st_nlink;
|
||||
unsigned int st_uid;
|
||||
unsigned int st_gid;
|
||||
unsigned int st_rdev;
|
||||
long int st_size;
|
||||
unsigned long int st_atime;
|
||||
unsigned long int st_mtime;
|
||||
unsigned long int st_ctime;
|
||||
unsigned int st_blksize;
|
||||
int st_blocks;
|
||||
unsigned int st_flags;
|
||||
unsigned int st_gen;
|
||||
};
|
||||
|
||||
/* Definition of `struct stat64' used in the kernel. */
|
||||
struct kernel_stat64
|
||||
{
|
||||
unsigned long st_dev;
|
||||
unsigned long st_ino;
|
||||
unsigned long st_rdev;
|
||||
long st_size;
|
||||
unsigned long st_blocks;
|
||||
|
||||
unsigned int st_mode;
|
||||
unsigned int st_uid;
|
||||
unsigned int st_gid;
|
||||
unsigned int st_blksize;
|
||||
unsigned int st_nlink;
|
||||
unsigned int __pad0;
|
||||
|
||||
unsigned long st_atime;
|
||||
unsigned long st_atimensec;
|
||||
unsigned long st_mtime;
|
||||
unsigned long st_mtimensec;
|
||||
unsigned long st_ctime;
|
||||
unsigned long st_ctimensec;
|
||||
long __unused[3];
|
||||
};
|
||||
|
||||
/* Definition of `struct stat' used by glibc 2.0. */
|
||||
struct glibc2_stat
|
||||
{
|
||||
__dev_t st_dev;
|
||||
__ino_t st_ino;
|
||||
__mode_t st_mode;
|
||||
__nlink_t st_nlink;
|
||||
__uid_t st_uid;
|
||||
__gid_t st_gid;
|
||||
__dev_t st_rdev;
|
||||
__off_t st_size;
|
||||
__time_t st_atime;
|
||||
__time_t st_mtime;
|
||||
__time_t st_ctime;
|
||||
unsigned int st_blksize;
|
||||
int st_blocks;
|
||||
unsigned int st_flags;
|
||||
unsigned int st_gen;
|
||||
};
|
||||
|
||||
/* Definition of `struct stat' used by glibc 2.1. */
|
||||
struct glibc21_stat
|
||||
{
|
||||
__dev_t st_dev;
|
||||
__ino64_t st_ino;
|
||||
__mode_t st_mode;
|
||||
__nlink_t st_nlink;
|
||||
__uid_t st_uid;
|
||||
__gid_t st_gid;
|
||||
__dev_t st_rdev;
|
||||
__off_t st_size;
|
||||
__time_t st_atime;
|
||||
__time_t st_mtime;
|
||||
__time_t st_ctime;
|
||||
__blkcnt64_t st_blocks;
|
||||
__blksize_t st_blksize;
|
||||
unsigned int st_flags;
|
||||
unsigned int st_gen;
|
||||
int __pad3;
|
||||
long __unused[4];
|
||||
};
|
||||
|
||||
#define XSTAT_IS_XSTAT64 1
|
@ -1,6 +0,0 @@
|
||||
/* A copy of the couple of bits we need from <asm/sysinfo.h>. */
|
||||
|
||||
#define GSI_IEEE_FP_CONTROL 45
|
||||
|
||||
#define SSI_IEEE_FP_CONTROL 14
|
||||
#define SSI_IEEE_RAISE_EXCEPTION 1001
|
@ -1,44 +0,0 @@
|
||||
/* Copyright (C) 1997 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Lesser General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 2.1 of the License, or (at your option) any later version.
|
||||
|
||||
The GNU C Library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public
|
||||
License along with the GNU C Library; if not, write to the Free
|
||||
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||
02111-1307 USA. */
|
||||
|
||||
#ifndef _KERNEL_TERMIOS_H
|
||||
#define _KERNEL_TERMIOS_H 1
|
||||
|
||||
/* The following corresponds to the values from the Linux 2.1.20 kernel. */
|
||||
|
||||
/* We need the definition of tcflag_t, cc_t, and speed_t. */
|
||||
#include <termios.h>
|
||||
|
||||
#define __KERNEL_NCCS 19
|
||||
|
||||
struct __kernel_termios
|
||||
{
|
||||
tcflag_t c_iflag; /* input mode flags */
|
||||
tcflag_t c_oflag; /* output mode flags */
|
||||
tcflag_t c_cflag; /* control mode flags */
|
||||
tcflag_t c_lflag; /* local mode flags */
|
||||
cc_t c_cc[__KERNEL_NCCS]; /* control characters */
|
||||
cc_t c_line; /* line discipline */
|
||||
speed_t c_ispeed; /* input speed */
|
||||
speed_t c_ospeed; /* output speed */
|
||||
};
|
||||
|
||||
#define _HAVE_C_ISPEED 1
|
||||
#define _HAVE_C_OSPEED 1
|
||||
|
||||
#endif /* kernel_termios.h */
|
@ -1,64 +0,0 @@
|
||||
/* lxstat using old-style Unix stat system call.
|
||||
Copyright (C) 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. */
|
||||
|
||||
#define __lxstat64 __lxstat64_disable
|
||||
|
||||
#include <errno.h>
|
||||
#include <stddef.h>
|
||||
#include <sys/stat.h>
|
||||
#include <kernel_stat.h>
|
||||
#include <sysdep.h>
|
||||
#include <sys/syscall.h>
|
||||
#include <xstatconv.h>
|
||||
|
||||
#undef __lxstat64
|
||||
|
||||
|
||||
/* Get information about the file NAME in BUF. */
|
||||
int
|
||||
__lxstat (int vers, const char *name, struct stat *buf)
|
||||
{
|
||||
INTERNAL_SYSCALL_DECL (err);
|
||||
int result, errno_out;
|
||||
struct kernel_stat kbuf;
|
||||
|
||||
if (vers == _STAT_VER_KERNEL64 && !__libc_missing_axp_stat64)
|
||||
{
|
||||
result = INTERNAL_SYSCALL (lstat64, err, 2, name, buf);
|
||||
if (__builtin_expect (!INTERNAL_SYSCALL_ERROR_P (result, err), 1))
|
||||
return result;
|
||||
errno_out = INTERNAL_SYSCALL_ERRNO (result, err);
|
||||
if (errno_out != ENOSYS)
|
||||
goto fail;
|
||||
__libc_missing_axp_stat64 = 1;
|
||||
}
|
||||
|
||||
result = INTERNAL_SYSCALL (lstat, err, 2, name, &kbuf);
|
||||
if (__builtin_expect (!INTERNAL_SYSCALL_ERROR_P (result, err), 1))
|
||||
return __xstat_conv (vers, &kbuf, buf);
|
||||
errno_out = INTERNAL_SYSCALL_ERRNO (result, err);
|
||||
|
||||
fail:
|
||||
__set_errno (errno_out);
|
||||
return -1;
|
||||
}
|
||||
hidden_def (__lxstat)
|
||||
weak_alias (__lxstat, _lxstat);
|
||||
strong_alias (__lxstat, __lxstat64);
|
||||
hidden_ver (__lxstat, __lxstat64)
|
@ -1,164 +0,0 @@
|
||||
/* Copyright (C) 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. */
|
||||
|
||||
#include <sysdep.h>
|
||||
#include <ucontext-offsets.h>
|
||||
|
||||
|
||||
ENTRY(__makecontext)
|
||||
ldgp $29, 0($27)
|
||||
#ifdef PROF
|
||||
.set noat
|
||||
lda AT, _mcount
|
||||
jsr AT, (AT), _mcount
|
||||
.set at
|
||||
#endif
|
||||
.prologue 1
|
||||
|
||||
/* Compute top of stack, including arguments. */
|
||||
ldq $1, UC_STACK+SS_SP($16)
|
||||
ldq $2, UC_STACK+SS_SIZE($16)
|
||||
addq $1, $2, $8
|
||||
subq $18, 6, $1
|
||||
cmovlt $1, 0, $1
|
||||
s8addq $1, 0, $2
|
||||
subq $8, $2, $8
|
||||
|
||||
/* Copy all parameters. Switch statement header here. */
|
||||
ldah $3, $jumptable($29) !gprelhigh
|
||||
cmple $18, 6, $1
|
||||
mov $18, $2
|
||||
cmoveq $1, 7, $2
|
||||
s4addq $2, $3, $3
|
||||
ldl $4, $jumptable($3) !gprellow
|
||||
addq $4, $29, $4
|
||||
jmp $31, ($4), $args1
|
||||
|
||||
.section .rodata
|
||||
.align 2
|
||||
$jumptable:
|
||||
.gprel32 $args0
|
||||
.gprel32 $args1
|
||||
.gprel32 $args2
|
||||
.gprel32 $args3
|
||||
.gprel32 $args4
|
||||
.gprel32 $args5
|
||||
.gprel32 $args6
|
||||
.gprel32 $argsN
|
||||
.text
|
||||
|
||||
/* Here we process arguments 7 through N. This is a straight
|
||||
stack-to-stack copy. */
|
||||
.align 4
|
||||
$argsN:
|
||||
subq $18, 6, $1
|
||||
lda $2, 0($8)
|
||||
lda $3, 3*8($30)
|
||||
.align 4
|
||||
1:
|
||||
ldq $0, 0($3)
|
||||
subq $1, 1, $1
|
||||
lda $3, 8($3)
|
||||
stq $0, 0($2)
|
||||
lda $2, 8($2)
|
||||
bne $1, 1b
|
||||
|
||||
/* Here we process arguments 6 through 0. This involves
|
||||
copying into the register save areas of the ucontext. */
|
||||
.align 4
|
||||
$args6:
|
||||
ldq $0, 2*8($30)
|
||||
stq $0, UC_SIGCTX+SC_REGS+21*8($16)
|
||||
unop
|
||||
stq $0, UC_SIGCTX+SC_FPREGS+21*8($16)
|
||||
$args5:
|
||||
ldq $0, 1*8($30)
|
||||
stq $0, UC_SIGCTX+SC_REGS+20*8($16)
|
||||
unop
|
||||
stq $0, UC_SIGCTX+SC_FPREGS+20*8($16)
|
||||
$args4:
|
||||
ldq $0, 0*8($30)
|
||||
stq $0, UC_SIGCTX+SC_REGS+19*8($16)
|
||||
unop
|
||||
stq $0, UC_SIGCTX+SC_FPREGS+19*8($16)
|
||||
$args3:
|
||||
unop
|
||||
stq $21, UC_SIGCTX+SC_REGS+18*8($16)
|
||||
unop
|
||||
stt $f21, UC_SIGCTX+SC_FPREGS+18*8($16)
|
||||
$args2:
|
||||
unop
|
||||
stq $20, UC_SIGCTX+SC_REGS+17*8($16)
|
||||
unop
|
||||
stt $f20, UC_SIGCTX+SC_FPREGS+17*8($16)
|
||||
$args1:
|
||||
unop
|
||||
stq $19, UC_SIGCTX+SC_REGS+16*8($16)
|
||||
unop
|
||||
stt $f19, UC_SIGCTX+SC_FPREGS+16*8($16)
|
||||
$args0:
|
||||
|
||||
/* Set up the registers ready to invoke __startcontext.
|
||||
We seed $27 with the target function address, and $9
|
||||
with the link from ucp. */
|
||||
ldah $0, __startcontext($29) !gprelhigh
|
||||
ldq $1, UC_LINK($16)
|
||||
lda $0, __startcontext($0) !gprellow
|
||||
stq $17, UC_SIGCTX+SC_REGS+27*8($16)
|
||||
stq $8, UC_SIGCTX+SC_REGS+30*8($16)
|
||||
stq $0, UC_SIGCTX+SC_PC($16)
|
||||
stq $1, UC_SIGCTX+SC_REGS+9*8($16)
|
||||
|
||||
/* No return value from makecontext. */
|
||||
ret
|
||||
|
||||
END(__makecontext)
|
||||
weak_alias (__makecontext, makecontext)
|
||||
|
||||
/* This function is where a new makecontext "thread" begins life.
|
||||
We have already set up $27 for calling the target function, and
|
||||
we've set $9 to the UC_LINK of the parent context.
|
||||
|
||||
If the function returns, we either jump to the linked context
|
||||
(if non-null) or exit. */
|
||||
|
||||
.align 4
|
||||
.ent __startcontext
|
||||
__startcontext:
|
||||
.frame $31, 0, $31, 0
|
||||
.prologue 0
|
||||
|
||||
jsr $26, ($27), 0
|
||||
ldgp $29, 0($26)
|
||||
mov $9, $16
|
||||
beq $9, 1f
|
||||
|
||||
#ifdef PIC
|
||||
bsr $26, __setcontext !samegp
|
||||
1: mov $31, $16
|
||||
bsr $26, HIDDEN_JUMPTARGET(exit) !samegp
|
||||
#else
|
||||
jsr $26, __setcontext
|
||||
ldgp $29, 0($26)
|
||||
1: mov $31, $16
|
||||
jsr $26, HIDDEN_JUMPTARGET(exit)
|
||||
#endif
|
||||
|
||||
halt
|
||||
|
||||
.end __startcontext
|
@ -1,121 +0,0 @@
|
||||
/* Copyright (C) 1995,1997,1998,2000,2003,2006 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, August 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 <errno.h>
|
||||
#include <sys/msg.h>
|
||||
#include <ipc_priv.h>
|
||||
|
||||
#include <sysdep.h>
|
||||
#include <string.h>
|
||||
#include <sys/syscall.h>
|
||||
#include <bp-checks.h>
|
||||
|
||||
#include <kernel-features.h>
|
||||
|
||||
struct __old_msqid_ds
|
||||
{
|
||||
struct __old_ipc_perm msg_perm; /* structure describing operation permission */
|
||||
struct msg *__unbounded __msg_first; /* pointer to first message on queue */
|
||||
struct msg *__unbounded __msg_last; /* pointer to last message on queue */
|
||||
__time_t msg_stime; /* time of last msgsnd command */
|
||||
__time_t msg_rtime; /* time of last msgrcv command */
|
||||
__time_t msg_ctime; /* time of last change */
|
||||
struct wait_queue *__unbounded __wwait; /* ??? */
|
||||
struct wait_queue *__unbounded __rwait; /* ??? */
|
||||
unsigned short int __msg_cbytes; /* current number of bytes on queue */
|
||||
unsigned short int msg_qnum; /* number of messages currently on queue */
|
||||
unsigned short int msg_qbytes; /* max number of bytes allowed on queue */
|
||||
__ipc_pid_t msg_lspid; /* pid of last msgsnd() */
|
||||
__ipc_pid_t msg_lrpid; /* pid of last msgrcv() */
|
||||
};
|
||||
|
||||
/* Allows to control internal state and destruction of message queue
|
||||
objects. */
|
||||
int __new_msgctl (int, int, struct msqid_ds *);
|
||||
|
||||
int
|
||||
__new_msgctl (int msqid, int cmd, struct msqid_ds *buf)
|
||||
{
|
||||
/* This is a misnomer -- Alpha had 32-bit uids at the beginning
|
||||
of time. However, msg_qnum and msg_qbytes changed size at
|
||||
the same time the size of uid changed elsewhere. */
|
||||
#if __ASSUME_32BITUIDS > 0
|
||||
return INLINE_SYSCALL (msgctl, 3, msqid, cmd | __IPC_64, CHECK_1 (buf));
|
||||
#else
|
||||
switch (cmd) {
|
||||
case MSG_STAT:
|
||||
case IPC_STAT:
|
||||
case IPC_SET:
|
||||
break;
|
||||
default:
|
||||
return INLINE_SYSCALL (msgctl, 3, msqid, cmd, CHECK_1 (buf));
|
||||
}
|
||||
|
||||
{
|
||||
int save_errno = errno, result;
|
||||
struct __old_msqid_ds old;
|
||||
|
||||
/* Unfortunately there is no way how to find out for sure whether
|
||||
we should use old or new msgctl. */
|
||||
result = INLINE_SYSCALL (msgctl, 3, msqid, cmd | __IPC_64, CHECK_1 (buf));
|
||||
if (result != -1 || errno != EINVAL)
|
||||
return result;
|
||||
|
||||
__set_errno(save_errno);
|
||||
if (cmd == IPC_SET)
|
||||
{
|
||||
old.msg_perm.uid = buf->msg_perm.uid;
|
||||
old.msg_perm.gid = buf->msg_perm.gid;
|
||||
old.msg_perm.mode = buf->msg_perm.mode;
|
||||
old.msg_qbytes = buf->msg_qbytes;
|
||||
if (old.msg_perm.uid != buf->msg_perm.uid ||
|
||||
old.msg_perm.gid != buf->msg_perm.gid ||
|
||||
old.msg_qbytes != buf->msg_qbytes)
|
||||
{
|
||||
__set_errno (EINVAL);
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
result = INLINE_SYSCALL (msgctl, 3, msqid, cmd, __ptrvalue (&old));
|
||||
if (result != -1 && cmd != IPC_SET)
|
||||
{
|
||||
memset(buf, 0, sizeof(*buf));
|
||||
buf->msg_perm.__key = old.msg_perm.__key;
|
||||
buf->msg_perm.uid = old.msg_perm.uid;
|
||||
buf->msg_perm.gid = old.msg_perm.gid;
|
||||
buf->msg_perm.cuid = old.msg_perm.cuid;
|
||||
buf->msg_perm.cgid = old.msg_perm.cgid;
|
||||
buf->msg_perm.mode = old.msg_perm.mode;
|
||||
buf->msg_perm.__seq = old.msg_perm.__seq;
|
||||
buf->msg_stime = old.msg_stime;
|
||||
buf->msg_rtime = old.msg_rtime;
|
||||
buf->msg_ctime = old.msg_ctime;
|
||||
buf->__msg_cbytes = old.__msg_cbytes;
|
||||
buf->msg_qnum = old.msg_qnum;
|
||||
buf->msg_qbytes = old.msg_qbytes;
|
||||
buf->msg_lspid = old.msg_lspid;
|
||||
buf->msg_lrpid = old.msg_lrpid;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
#include <shlib-compat.h>
|
||||
versioned_symbol (libc, __new_msgctl, msgctl, GLIBC_2_2);
|
@ -1,8 +0,0 @@
|
||||
/* ABI version for long double switch.
|
||||
This is used by the Versions and math_ldbl_opt.h files in
|
||||
sysdeps/ieee754/ldbl-opt/. It gives the ABI version where
|
||||
long double == double was replaced with proper long double
|
||||
for libm *l functions and libc functions using long double. */
|
||||
|
||||
#define NLDBL_VERSION GLIBC_2.4
|
||||
#define LONG_DOUBLE_COMPAT_VERSION GLIBC_2_4
|
@ -1,100 +0,0 @@
|
||||
/* Copyright (C) 1998, 2000, 2004, 2005 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Lesser General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 2.1 of the License, or (at your option) any later version.
|
||||
|
||||
The GNU C Library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public
|
||||
License along with the GNU C Library; if not, write to the Free
|
||||
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||
02111-1307 USA. */
|
||||
|
||||
/* This file contains only wrappers around the real glob functions. It
|
||||
became necessary since the glob_t structure changed. */
|
||||
#include <sys/types.h>
|
||||
#include <glob.h>
|
||||
#include <shlib-compat.h>
|
||||
|
||||
#if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_1)
|
||||
|
||||
/* This is the old structure. The difference is that the gl_pathc and
|
||||
gl_offs elements have type `int'. */
|
||||
typedef struct
|
||||
{
|
||||
int gl_pathc; /* Count of paths matched by the pattern. */
|
||||
char **gl_pathv; /* List of matched pathnames. */
|
||||
int gl_offs; /* Slots to reserve in `gl_pathv'. */
|
||||
int gl_flags; /* Set to FLAGS, maybe | GLOB_MAGCHAR. */
|
||||
|
||||
/* If the GLOB_ALTDIRFUNC flag is set, the following functions
|
||||
are used instead of the normal file access functions. */
|
||||
void (*gl_closedir) (void *);
|
||||
struct dirent *(*gl_readdir) (void *);
|
||||
__ptr_t (*gl_opendir) (__const char *);
|
||||
int (*gl_lstat) (__const char *, struct stat *);
|
||||
int (*gl_stat) (__const char *, struct stat *);
|
||||
} old_glob_t;
|
||||
|
||||
|
||||
int
|
||||
attribute_compat_text_section
|
||||
__old_glob (const char *pattern, int flags,
|
||||
int (*errfunc) (const char *, int),
|
||||
old_glob_t *pglob)
|
||||
{
|
||||
glob_t correct;
|
||||
int result;
|
||||
|
||||
/* Construct an object of correct type. */
|
||||
correct.gl_pathc = pglob->gl_pathc;
|
||||
correct.gl_pathv = pglob->gl_pathv;
|
||||
correct.gl_offs = pglob->gl_offs;
|
||||
correct.gl_flags = pglob->gl_flags;
|
||||
correct.gl_closedir = pglob->gl_closedir;
|
||||
correct.gl_readdir = pglob->gl_readdir;
|
||||
correct.gl_opendir = pglob->gl_opendir;
|
||||
correct.gl_lstat = pglob->gl_lstat;
|
||||
correct.gl_stat = pglob->gl_stat;
|
||||
|
||||
result = glob (pattern, flags, errfunc, &correct);
|
||||
|
||||
/* And convert it back. */
|
||||
pglob->gl_pathc = correct.gl_pathc;
|
||||
pglob->gl_pathv = correct.gl_pathv;
|
||||
pglob->gl_offs = correct.gl_offs;
|
||||
pglob->gl_flags = correct.gl_flags;
|
||||
pglob->gl_closedir = correct.gl_closedir;
|
||||
pglob->gl_readdir = correct.gl_readdir;
|
||||
pglob->gl_opendir = correct.gl_opendir;
|
||||
pglob->gl_lstat = correct.gl_lstat;
|
||||
pglob->gl_stat = correct.gl_stat;
|
||||
|
||||
return result;
|
||||
}
|
||||
compat_symbol (libc, __old_glob, glob, GLIBC_2_0);
|
||||
|
||||
|
||||
/* Free storage allocated in PGLOB by a previous `glob' call. */
|
||||
void
|
||||
attribute_compat_text_section
|
||||
__old_globfree (old_glob_t *pglob)
|
||||
{
|
||||
glob_t correct;
|
||||
|
||||
/* We only need these two symbols. */
|
||||
correct.gl_pathc = pglob->gl_pathc;
|
||||
correct.gl_pathv = pglob->gl_pathv;
|
||||
correct.gl_offs = pglob->gl_offs;
|
||||
|
||||
globfree (&correct);
|
||||
}
|
||||
compat_symbol (libc, __old_globfree, globfree, GLIBC_2_0);
|
||||
|
||||
#endif
|
@ -1 +0,0 @@
|
||||
#include <sysdeps/unix/alpha/pipe.S>
|
@ -1,157 +0,0 @@
|
||||
/* Dump registers.
|
||||
Copyright (C) 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. */
|
||||
|
||||
#include <stddef.h>
|
||||
#include <string.h>
|
||||
|
||||
/* We will print the register dump in this format:
|
||||
|
||||
V0: XXXXXXXXXXXXXXXX T0: XXXXXXXXXXXXXXXX T1: XXXXXXXXXXXXXXXX
|
||||
T2: XXXXXXXXXXXXXXXX T3: XXXXXXXXXXXXXXXX T4: XXXXXXXXXXXXXXXX
|
||||
T5: XXXXXXXXXXXXXXXX T6: XXXXXXXXXXXXXXXX T7: XXXXXXXXXXXXXXXX
|
||||
S0: XXXXXXXXXXXXXXXX S1: XXXXXXXXXXXXXXXX S2: XXXXXXXXXXXXXXXX
|
||||
S3: XXXXXXXXXXXXXXXX S4: XXXXXXXXXXXXXXXX S5: XXXXXXXXXXXXXXXX
|
||||
S6: XXXXXXXXXXXXXXXX A0: XXXXXXXXXXXXXXXX A1: XXXXXXXXXXXXXXXX
|
||||
A2: XXXXXXXXXXXXXXXX A3: XXXXXXXXXXXXXXXX A4: XXXXXXXXXXXXXXXX
|
||||
A5: XXXXXXXXXXXXXXXX T8: XXXXXXXXXXXXXXXX T9: XXXXXXXXXXXXXXXX
|
||||
T10: XXXXXXXXXXXXXXXX T11: XXXXXXXXXXXXXXXX RA: XXXXXXXXXXXXXXXX
|
||||
T12: XXXXXXXXXXXXXXXX AT: XXXXXXXXXXXXXXXX GP: XXXXXXXXXXXXXXXX
|
||||
SP: XXXXXXXXXXXXXXXX PC: XXXXXXXXXXXXXXXX
|
||||
|
||||
FP0: XXXXXXXXXXXXXXXX FP1: XXXXXXXXXXXXXXXX FP2: XXXXXXXXXXXXXXXX
|
||||
FP3: XXXXXXXXXXXXXXXX FP4: XXXXXXXXXXXXXXXX FP5: XXXXXXXXXXXXXXXX
|
||||
FP6: XXXXXXXXXXXXXXXX FP7: XXXXXXXXXXXXXXXX FP8: XXXXXXXXXXXXXXXX
|
||||
FP9: XXXXXXXXXXXXXXXX FP10: XXXXXXXXXXXXXXXX FP11: XXXXXXXXXXXXXXXX
|
||||
FP12: XXXXXXXXXXXXXXXX FP13: XXXXXXXXXXXXXXXX FP14: XXXXXXXXXXXXXXXX
|
||||
FP15: XXXXXXXXXXXXXXXX FP16: XXXXXXXXXXXXXXXX FP17: XXXXXXXXXXXXXXXX
|
||||
FP18: XXXXXXXXXXXXXXXX FP19: XXXXXXXXXXXXXXXX FP20: XXXXXXXXXXXXXXXX
|
||||
FP21: XXXXXXXXXXXXXXXX FP22: XXXXXXXXXXXXXXXX FP23: XXXXXXXXXXXXXXXX
|
||||
FP24: XXXXXXXXXXXXXXXX FP25: XXXXXXXXXXXXXXXX FP26: XXXXXXXXXXXXXXXX
|
||||
FP27: XXXXXXXXXXXXXXXX FP28: XXXXXXXXXXXXXXXX FP29: XXXXXXXXXXXXXXXX
|
||||
FP30: XXXXXXXXXXXXXXXX FPCR: XXXXXXXXXXXXXXXX
|
||||
|
||||
TA0: XXXXXXXXXXXXXXXX TA1: XXXXXXXXXXXXXXXX TA2: XXXXXXXXXXXXXXXX
|
||||
*/
|
||||
|
||||
#define NREGS (32+32+3)
|
||||
|
||||
static const char __attribute__((aligned(8))) regnames[NREGS][8] =
|
||||
{
|
||||
" V0: ", " T0: ", " T1: ",
|
||||
" T2: ", " T3: ", " T4: ",
|
||||
" T5: ", " T6: ", " T7: ",
|
||||
" S0: ", " S1: ", " S2: ",
|
||||
" S3: ", " S4: ", " S5: ",
|
||||
" S6: ", " A0: ", " A1: ",
|
||||
" A2: ", " A3: ", " A4: ",
|
||||
" A5: ", " T8: ", " T9: ",
|
||||
" T10: ", " T11: ", " RA: ",
|
||||
" T12: ", " AT: ", " GP: ",
|
||||
" SP: ", " PC: ",
|
||||
|
||||
" FP0: ", " FP1: ", " FP2: ",
|
||||
" FP3: ", " FP4: ", " FP5: ",
|
||||
" FP6: ", " FP7: ", " FP8: ",
|
||||
" FP9: ", " FP10: ", " FP11: ",
|
||||
" FP12: ", " FP13: ", " FP14: ",
|
||||
" FP15: ", " FP16: ", " FP17: ",
|
||||
" FP18: ", " FP19: ", " FP20: ",
|
||||
" FP21: ", " FP22: ", " FP23: ",
|
||||
" FP24: ", " FP25: ", " FP26: ",
|
||||
" FP27: ", " FP28: ", " FP29: ",
|
||||
" FP30: ", " FPCR: ",
|
||||
|
||||
" TA0: ", " TA1: ", " TA2: "
|
||||
};
|
||||
|
||||
#define O(FIELD, LF) offsetof(struct sigcontext, FIELD) + LF
|
||||
|
||||
static const int offsets[NREGS] =
|
||||
{
|
||||
O(sc_regs[0], 0), O(sc_regs[1], 0), O(sc_regs[2], 1),
|
||||
O(sc_regs[3], 0), O(sc_regs[4], 0), O(sc_regs[5], 1),
|
||||
O(sc_regs[6], 0), O(sc_regs[7], 0), O(sc_regs[8], 1),
|
||||
O(sc_regs[9], 0), O(sc_regs[10], 0), O(sc_regs[11], 1),
|
||||
O(sc_regs[12], 0), O(sc_regs[13], 0), O(sc_regs[14], 1),
|
||||
O(sc_regs[15], 0), O(sc_regs[16], 0), O(sc_regs[17], 1),
|
||||
O(sc_regs[18], 0), O(sc_regs[19], 0), O(sc_regs[20], 1),
|
||||
O(sc_regs[21], 0), O(sc_regs[22], 0), O(sc_regs[23], 1),
|
||||
O(sc_regs[24], 0), O(sc_regs[25], 0), O(sc_regs[26], 1),
|
||||
O(sc_regs[27], 0), O(sc_regs[28], 0), O(sc_regs[29], 1),
|
||||
O(sc_regs[30], 0), O(sc_pc, 2),
|
||||
|
||||
O(sc_fpregs[0], 0), O(sc_fpregs[1], 0), O(sc_fpregs[2], 1),
|
||||
O(sc_fpregs[3], 0), O(sc_fpregs[4], 0), O(sc_fpregs[5], 1),
|
||||
O(sc_fpregs[6], 0), O(sc_fpregs[7], 0), O(sc_fpregs[8], 1),
|
||||
O(sc_fpregs[9], 0), O(sc_fpregs[10], 0), O(sc_fpregs[11], 1),
|
||||
O(sc_fpregs[12], 0), O(sc_fpregs[13], 0), O(sc_fpregs[14], 1),
|
||||
O(sc_fpregs[15], 0), O(sc_fpregs[16], 0), O(sc_fpregs[17], 1),
|
||||
O(sc_fpregs[18], 0), O(sc_fpregs[19], 0), O(sc_fpregs[20], 1),
|
||||
O(sc_fpregs[21], 0), O(sc_fpregs[22], 0), O(sc_fpregs[23], 1),
|
||||
O(sc_fpregs[24], 0), O(sc_fpregs[25], 0), O(sc_fpregs[26], 1),
|
||||
O(sc_fpregs[27], 0), O(sc_fpregs[28], 0), O(sc_fpregs[29], 1),
|
||||
O(sc_fpregs[30], 0), O(sc_fpcr, 2),
|
||||
|
||||
O(sc_traparg_a0, 0), O(sc_traparg_a1, 0), O(sc_traparg_a2, 1)
|
||||
};
|
||||
|
||||
#undef O
|
||||
|
||||
static void
|
||||
register_dump (int fd, struct sigcontext *ctx)
|
||||
{
|
||||
char buf[NREGS*(8+16) + 25 + 80];
|
||||
char *p = buf;
|
||||
size_t i;
|
||||
|
||||
p = stpcpy (p, "Register dump:\n\n");
|
||||
|
||||
for (i = 0; i < NREGS; ++i)
|
||||
{
|
||||
int this_offset, this_lf;
|
||||
unsigned long val;
|
||||
signed long j;
|
||||
|
||||
this_offset = offsets[i];
|
||||
this_lf = this_offset & 7;
|
||||
|
||||
val = *(unsigned long *)(((size_t)ctx + this_offset) & -8);
|
||||
|
||||
memcpy (p, regnames[i], 8);
|
||||
p += 8;
|
||||
|
||||
for (j = 60; j >= 0; j -= 4)
|
||||
{
|
||||
unsigned long x = (val >> j) & 15;
|
||||
x += x < 10 ? '0' : 'a' - 10;
|
||||
*p++ = x;
|
||||
}
|
||||
|
||||
if (this_lf > 0)
|
||||
{
|
||||
if (this_lf > 1)
|
||||
*p++ = '\n';
|
||||
*p++ = '\n';
|
||||
}
|
||||
}
|
||||
|
||||
write (fd, buf, p - buf);
|
||||
}
|
||||
|
||||
#define REGISTER_DUMP register_dump (fd, ctx)
|
@ -1,120 +0,0 @@
|
||||
/* Copyright (C) 1998, 2003, 2004 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by Richard Henderson <rth@cygnus.com>, 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 <sysdep.h>
|
||||
|
||||
/* On Alpha we desparately want to avoid having to issue an imb. Ordinarily
|
||||
the kernel would have to issue one after setting up the signal return
|
||||
stack, but the Linux rt_sigaction syscall is prepared to accept a pointer
|
||||
to the sigreturn syscall, instead of inlining it on the stack.
|
||||
|
||||
This just about halves signal delivery time. */
|
||||
|
||||
.text
|
||||
|
||||
ENTRY(__syscall_rt_sigaction)
|
||||
.frame sp,0,ra,0
|
||||
ldgp gp,0(pv)
|
||||
#ifdef PROF
|
||||
.set noat
|
||||
lda AT, _mcount
|
||||
jsr AT, (AT), _mcount
|
||||
.set at
|
||||
#endif
|
||||
.prologue 1
|
||||
|
||||
beq a1, 0f
|
||||
ldl t0, 8(a1) # sa_flags
|
||||
|
||||
/* The unwinder will subtract one from the return address when
|
||||
attempting to find the call instruction that led us here.
|
||||
Since we didn't get here via a normal call, if we do nothing
|
||||
we would pick up the wrong symbol and the wrong FDE. Account
|
||||
for this by adding a nop to the start of the function and
|
||||
then skipping it here by adding 4. */
|
||||
ldah a4, __syscall_sigreturn+4(gp) !gprelhigh
|
||||
ldah t1, __syscall_rt_sigreturn+4(gp) !gprelhigh
|
||||
lda a4, __syscall_sigreturn+4(a4) !gprellow
|
||||
lda t1, __syscall_rt_sigreturn+4(t1) !gprellow
|
||||
and t0, 0x40, t0 # SA_SIGINFO
|
||||
cmovne t0, t1, a4
|
||||
|
||||
0: ldi v0, __NR_rt_sigaction
|
||||
callsys
|
||||
bne a3, SYSCALL_ERROR_LABEL
|
||||
ret
|
||||
|
||||
PSEUDO_END(__syscall_rt_sigaction)
|
||||
|
||||
/* To enable unwinding through the signal frame without special hackery
|
||||
elsewhere, describe the entire struct sigcontext with unwind info.
|
||||
|
||||
In order to minimize the size of the encoding, we set the CFA to the
|
||||
end of the sigcontext, which makes all of the registers have small
|
||||
negative offsets from that. */
|
||||
|
||||
.macro SIGCONTEXT_REGS_I base, from=0
|
||||
cfi_offset (\from, \base + (4 + \from) * 8)
|
||||
.if 30-\from
|
||||
SIGCONTEXT_REGS_I \base, "(\from+1)"
|
||||
.endif
|
||||
.endm
|
||||
|
||||
.macro SIGCONTEXT_REGS_F base, from=32
|
||||
cfi_offset (\from, \base + (4 + 1 + \from) * 8)
|
||||
.if 62-\from
|
||||
SIGCONTEXT_REGS_F \base, "(\from+1)"
|
||||
.endif
|
||||
.endm
|
||||
|
||||
.macro SIGCONTEXT_REGS base
|
||||
SIGCONTEXT_REGS_I \base
|
||||
SIGCONTEXT_REGS_F \base
|
||||
cfi_offset (63, \base + (4 + 32 + 1 + 32) * 8)
|
||||
cfi_offset (64, \base + 2 * 8)
|
||||
.endm
|
||||
|
||||
.align 4
|
||||
nop
|
||||
nop
|
||||
nop
|
||||
|
||||
cfi_startproc
|
||||
cfi_return_column (64)
|
||||
SIGCONTEXT_REGS -648
|
||||
|
||||
cfi_def_cfa_offset (648)
|
||||
__syscall_sigreturn:
|
||||
nop
|
||||
mov sp, a0
|
||||
ldi v0, __NR_sigreturn
|
||||
callsys
|
||||
.size __syscall_sigreturn, .-__syscall_sigreturn
|
||||
.type __syscall_sigreturn, @function
|
||||
|
||||
cfi_def_cfa_offset (176 + 648)
|
||||
__syscall_rt_sigreturn:
|
||||
nop
|
||||
mov sp,a0
|
||||
ldi v0,__NR_rt_sigreturn
|
||||
callsys
|
||||
.size __syscall_rt_sigreturn, .-__syscall_rt_sigreturn
|
||||
.type __syscall_rt_sigreturn, @function
|
||||
|
||||
cfi_endproc
|
@ -1,241 +0,0 @@
|
||||
/* Copyright (C) 1998,2002,2003,2006 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Lesser General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 2.1 of the License, or (at your option) any later version.
|
||||
|
||||
The GNU C Library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public
|
||||
License along with the GNU C Library; if not, write to the Free
|
||||
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||
02111-1307 USA. */
|
||||
|
||||
#include <sysdep-cancel.h>
|
||||
#define _ERRNO_H 1
|
||||
#include <bits/errno.h>
|
||||
#include <kernel-features.h>
|
||||
|
||||
.text
|
||||
|
||||
#if defined HAVE_ELF && defined PIC && defined DO_VERSIONING
|
||||
#define SELECT __select_tv64
|
||||
#else
|
||||
#define SELECT __select
|
||||
#endif
|
||||
|
||||
#if defined __ASSUME_TIMEVAL64
|
||||
PSEUDO(SELECT, select, 5)
|
||||
ret
|
||||
PSEUDO_END(SELECT)
|
||||
#else
|
||||
/* The problem here is that initially we made struct timeval compatible with
|
||||
OSF/1, using int32. But we defined time_t with uint64, and later found
|
||||
that POSIX requires tv_sec to be time_t.
|
||||
|
||||
So now we have to do compatibility stuff. */
|
||||
|
||||
/* The variable is shared between all wrappers around signal handling
|
||||
functions which have RT equivalents. */
|
||||
.comm __libc_missing_axp_tv64, 4
|
||||
|
||||
LEAF(SELECT, 64)
|
||||
ldgp gp, 0(pv)
|
||||
subq sp, 64, sp
|
||||
#ifdef PROF
|
||||
.set noat
|
||||
lda AT, _mcount
|
||||
jsr AT, (AT), _mcount
|
||||
.set at
|
||||
#endif
|
||||
stq ra, 40(sp)
|
||||
.mask 0x4000000, 40-64
|
||||
.prologue 1
|
||||
|
||||
#ifdef CENABLE
|
||||
SINGLE_THREAD_P (t1)
|
||||
#else
|
||||
ldl t0, __libc_missing_axp_tv64
|
||||
#endif
|
||||
|
||||
/* Save timeout early, since we'll need to recover this after
|
||||
the system call. */
|
||||
stq a4, 48(sp)
|
||||
|
||||
#ifdef CENABLE
|
||||
bne t1, $do_cancel
|
||||
#endif
|
||||
|
||||
bne t0, $do32
|
||||
|
||||
/* Save arguments in case we do need to fall back. */
|
||||
stq a0, 8(sp)
|
||||
stq a1, 16(sp)
|
||||
stq a2, 24(sp)
|
||||
stq a3, 32(sp)
|
||||
|
||||
ldi v0, SYS_ify(select)
|
||||
callsys
|
||||
bne a3, $err64
|
||||
|
||||
/* Everything ok. */
|
||||
addq sp, 64, sp
|
||||
ret
|
||||
|
||||
/* If we didn't get ENOSYS, it is a real error. */
|
||||
.align 3
|
||||
$err64: cmpeq v0, ENOSYS, t0
|
||||
beq t0, $error
|
||||
stl t0, __libc_missing_axp_tv64
|
||||
|
||||
/* Recover the saved arguments. */
|
||||
ldq a4, 48(sp)
|
||||
ldq a3, 32(sp)
|
||||
ldq a2, 24(sp)
|
||||
ldq a1, 16(sp)
|
||||
ldq a0, 8(sp)
|
||||
|
||||
.align 3
|
||||
$do32:
|
||||
/* If the timeout argument is present bounce to the smaller fmt. */
|
||||
beq a4, 1f
|
||||
ldq t0, 0(a4)
|
||||
ldq t1, 8(a4)
|
||||
stl t0, 0(sp)
|
||||
stl t1, 4(sp)
|
||||
mov sp, a4
|
||||
|
||||
1: ldi v0, SYS_ify(osf_select)
|
||||
callsys
|
||||
bne a3, $error
|
||||
|
||||
/* ... and bounce the remaining timeout back. */
|
||||
ldq a4, 48(sp)
|
||||
beq a4, 2f
|
||||
ldl t0, 0(sp)
|
||||
ldl t1, 4(sp)
|
||||
stq t0, 0(a4)
|
||||
stq t1, 8(a4)
|
||||
|
||||
2: addq sp, 64, sp
|
||||
ret
|
||||
|
||||
#ifdef CENABLE
|
||||
.align 3
|
||||
$do_cancel:
|
||||
/* Save arguments. */
|
||||
stq a0, 8(sp)
|
||||
stq a1, 16(sp)
|
||||
stq a2, 24(sp)
|
||||
stq a3, 32(sp)
|
||||
|
||||
CENABLE
|
||||
mov v0, ra
|
||||
|
||||
ldl t0, __libc_missing_axp_tv64
|
||||
bne t0, $do_cancel32
|
||||
|
||||
/* Recover the saved arguments. */
|
||||
ldq a4, 48(sp)
|
||||
ldq a3, 32(sp)
|
||||
ldq a2, 24(sp)
|
||||
ldq a1, 16(sp)
|
||||
ldq a0, 8(sp)
|
||||
|
||||
ldi v0, SYS_ify(select)
|
||||
callsys
|
||||
|
||||
mov ra, a0
|
||||
bne a3, $cancel_err64
|
||||
|
||||
stq v0, 8(sp)
|
||||
CDISABLE
|
||||
ldq v0, 8(sp)
|
||||
ldq ra, 40(sp)
|
||||
|
||||
/* Everything ok. */
|
||||
addq sp, 64, sp
|
||||
ret
|
||||
|
||||
/* If we didn't get ENOSYS, it is a real error. */
|
||||
.align 3
|
||||
$cancel_err64:
|
||||
cmpeq v0, ENOSYS, t0
|
||||
beq t0, $cancel_error
|
||||
stl t0, __libc_missing_axp_tv64
|
||||
|
||||
/* Recover the saved arguments. */
|
||||
.align 3
|
||||
$do_cancel32:
|
||||
ldq a4, 48(sp)
|
||||
ldq a3, 32(sp)
|
||||
ldq a2, 24(sp)
|
||||
ldq a1, 16(sp)
|
||||
ldq a0, 8(sp)
|
||||
|
||||
/* If the timeout argument is present bounce to the smaller fmt. */
|
||||
beq a4, 1f
|
||||
ldq t0, 0(a4)
|
||||
ldq t1, 8(a4)
|
||||
stl t0, 0(sp)
|
||||
stl t1, 4(sp)
|
||||
mov sp, a4
|
||||
|
||||
1: ldi v0, SYS_ify(osf_select)
|
||||
callsys
|
||||
|
||||
mov ra, a0
|
||||
bne a3, $cancel_error
|
||||
|
||||
/* ... and bounce the remaining timeout back. */
|
||||
ldq a4, 48(sp)
|
||||
beq a4, 2f
|
||||
ldl t0, 0(sp)
|
||||
ldl t1, 4(sp)
|
||||
stq t0, 0(a4)
|
||||
stq t1, 8(a4)
|
||||
|
||||
2: stq v0, 8(sp)
|
||||
CDISABLE
|
||||
ldq v0, 8(sp)
|
||||
ldq ra, 40(sp)
|
||||
|
||||
addq sp, 64, sp
|
||||
ret
|
||||
|
||||
.align 3
|
||||
$cancel_error:
|
||||
stq v0, 8(sp)
|
||||
CDISABLE
|
||||
ldq v0, 8(sp)
|
||||
ldq ra, 40(sp)
|
||||
#endif
|
||||
|
||||
.align 3
|
||||
$error:
|
||||
addq sp, 64, sp
|
||||
SYSCALL_ERROR_HANDLER
|
||||
|
||||
END(SELECT)
|
||||
#endif /* __ASSUME_TIMEVAL64 */
|
||||
|
||||
#if defined HAVE_ELF && defined PIC && defined DO_VERSIONING
|
||||
default_symbol_version (__select_tv64, __select, GLIBC_2.1)
|
||||
|
||||
/* It seems to me to be a misfeature of the assembler that we can only
|
||||
have one version-alias per symbol. So create an alias ourselves.
|
||||
The 'p' is for 'public'. *Shrug* */
|
||||
strong_alias (__select_tv64, __select_tv64p)
|
||||
default_symbol_version (__select_tv64p, select, GLIBC_2.1)
|
||||
libc_hidden_ver (__select_tv64, __select)
|
||||
strong_alias (__select_tv64, __libc_select)
|
||||
#else
|
||||
strong_alias (__select, __libc_select)
|
||||
weak_alias (__select, select)
|
||||
libc_hidden_def (__select)
|
||||
#endif
|
@ -1,136 +0,0 @@
|
||||
/* Copyright (C) 1995,1997,1998,2000,2003,2006
|
||||
Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, August 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 <errno.h>
|
||||
#include <stdarg.h>
|
||||
#include <sys/sem.h>
|
||||
#include <ipc_priv.h>
|
||||
|
||||
#include <sysdep.h>
|
||||
#include <string.h>
|
||||
#include <sys/syscall.h>
|
||||
|
||||
#include <kernel-features.h>
|
||||
|
||||
struct __old_semid_ds
|
||||
{
|
||||
struct __old_ipc_perm sem_perm; /* operation permission struct */
|
||||
__time_t sem_otime; /* last semop() time */
|
||||
__time_t sem_ctime; /* last time changed by semctl() */
|
||||
struct sem *__sembase; /* ptr to first semaphore in array */
|
||||
struct sem_queue *__sem_pending; /* pending operations */
|
||||
struct sem_queue *__sem_pending_last; /* last pending operation */
|
||||
struct sem_undo *__undo; /* ondo requests on this array */
|
||||
unsigned short int sem_nsems; /* number of semaphores in set */
|
||||
};
|
||||
|
||||
/* Define a `union semun' suitable for Linux here. */
|
||||
union semun
|
||||
{
|
||||
int val; /* value for SETVAL */
|
||||
struct semid_ds *buf; /* buffer for IPC_STAT & IPC_SET */
|
||||
unsigned short int *array; /* array for GETALL & SETALL */
|
||||
struct seminfo *__buf; /* buffer for IPC_INFO */
|
||||
};
|
||||
|
||||
#include <bp-checks.h>
|
||||
#include <bp-semctl.h> /* definition of CHECK_SEMCTL needs union semum */
|
||||
|
||||
/* Return identifier for array of NSEMS semaphores associated with
|
||||
KEY. */
|
||||
int __new_semctl (int semid, int semnum, int cmd, ...);
|
||||
|
||||
int
|
||||
__new_semctl (int semid, int semnum, int cmd, ...)
|
||||
{
|
||||
union semun arg;
|
||||
va_list ap;
|
||||
|
||||
va_start (ap, cmd);
|
||||
|
||||
/* Get the argument. */
|
||||
arg = va_arg (ap, union semun);
|
||||
|
||||
va_end (ap);
|
||||
|
||||
#if __ASSUME_32BITUIDS > 0
|
||||
return INLINE_SYSCALL (semctl, 4, semid, semnum, cmd | __IPC_64,
|
||||
CHECK_SEMCTL (&arg, semid, cmd | __IPC_64)->array);
|
||||
#else
|
||||
switch (cmd) {
|
||||
case SEM_STAT:
|
||||
case IPC_STAT:
|
||||
case IPC_SET:
|
||||
break;
|
||||
default:
|
||||
return INLINE_SYSCALL (semctl, 4, semid, semnum, cmd,
|
||||
CHECK_SEMCTL (&arg, semid, cmd)->array);
|
||||
}
|
||||
|
||||
{
|
||||
int save_errno = errno, result;
|
||||
struct __old_semid_ds old;
|
||||
struct semid_ds *buf;
|
||||
|
||||
/* Unfortunately there is no way how to find out for sure whether
|
||||
we should use old or new semctl. */
|
||||
result = INLINE_SYSCALL (semctl, 4, semid, semnum, cmd | __IPC_64,
|
||||
CHECK_SEMCTL (&arg, semid, cmd | __IPC_64)->array);
|
||||
if (result != -1 || errno != EINVAL)
|
||||
return result;
|
||||
|
||||
__set_errno(save_errno);
|
||||
buf = arg.buf;
|
||||
arg.buf = (void *)&old;
|
||||
if (cmd == IPC_SET)
|
||||
{
|
||||
old.sem_perm.uid = buf->sem_perm.uid;
|
||||
old.sem_perm.gid = buf->sem_perm.gid;
|
||||
old.sem_perm.mode = buf->sem_perm.mode;
|
||||
if (old.sem_perm.uid != buf->sem_perm.uid ||
|
||||
old.sem_perm.gid != buf->sem_perm.gid)
|
||||
{
|
||||
__set_errno (EINVAL);
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
result = INLINE_SYSCALL (semctl, 4, semid, semnum, cmd,
|
||||
CHECK_SEMCTL (&arg, semid, cmd)->array);
|
||||
if (result != -1 && cmd != IPC_SET)
|
||||
{
|
||||
memset(buf, 0, sizeof(*buf));
|
||||
buf->sem_perm.__key = old.sem_perm.__key;
|
||||
buf->sem_perm.uid = old.sem_perm.uid;
|
||||
buf->sem_perm.gid = old.sem_perm.gid;
|
||||
buf->sem_perm.cuid = old.sem_perm.cuid;
|
||||
buf->sem_perm.cgid = old.sem_perm.cgid;
|
||||
buf->sem_perm.mode = old.sem_perm.mode;
|
||||
buf->sem_perm.__seq = old.sem_perm.__seq;
|
||||
buf->sem_otime = old.sem_otime;
|
||||
buf->sem_ctime = old.sem_ctime;
|
||||
buf->sem_nsems = old.sem_nsems;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
#include <shlib-compat.h>
|
||||
versioned_symbol (libc, __new_semctl, semctl, GLIBC_2_2);
|
@ -1,35 +0,0 @@
|
||||
/* Install given context.
|
||||
Copyright (C) 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. */
|
||||
|
||||
#include <sysdep.h>
|
||||
#include <ucontext-offsets.h>
|
||||
|
||||
|
||||
/* In case the user fiddled it, copy the "official" signal mask
|
||||
from the ucontext_t into the sigcontext structure. */
|
||||
#undef PSEUDO_PREPARE_ARGS
|
||||
#define PSEUDO_PREPARE_ARGS \
|
||||
ldq $0, UC_SIGMASK($16); \
|
||||
stq $0, UC_SIGCTX+SC_MASK($16); \
|
||||
lda $16, UC_SIGCTX($16);
|
||||
|
||||
PSEUDO(__setcontext, sigreturn, 1)
|
||||
ret
|
||||
PSEUDO_END(__setcontext)
|
||||
weak_alias (__setcontext, setcontext)
|
@ -1,80 +0,0 @@
|
||||
/* Set FP exception mask and rounding mode.
|
||||
Copyright (C) 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 <fpu_control.h>
|
||||
#include <asm/fpu.h>
|
||||
|
||||
extern void __ieee_set_fp_control (unsigned long);
|
||||
libc_hidden_proto(__ieee_set_fp_control)
|
||||
|
||||
extern unsigned long __ieee_get_fp_control (void);
|
||||
libc_hidden_proto(__ieee_get_fp_control)
|
||||
|
||||
static inline unsigned long
|
||||
rdfpcr (void)
|
||||
{
|
||||
unsigned long fpcr;
|
||||
asm ("excb; mf_fpcr %0" : "=f"(fpcr));
|
||||
return fpcr;
|
||||
}
|
||||
|
||||
|
||||
static inline void
|
||||
wrfpcr (unsigned long fpcr)
|
||||
{
|
||||
asm volatile ("mt_fpcr %0; excb" : : "f"(fpcr));
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
__setfpucw (fpu_control_t fpu_control)
|
||||
{
|
||||
unsigned long fpcr = 0, fpcw = 0;
|
||||
|
||||
if (!fpu_control)
|
||||
fpu_control = _FPU_DEFAULT;
|
||||
|
||||
/* first, set dynamic rounding mode: */
|
||||
|
||||
fpcr = rdfpcr();
|
||||
fpcr &= ~FPCR_DYN_MASK;
|
||||
switch (fpu_control & 0xc00)
|
||||
{
|
||||
case _FPU_RC_NEAREST: fpcr |= FPCR_DYN_NORMAL; break;
|
||||
case _FPU_RC_DOWN: fpcr |= FPCR_DYN_MINUS; break;
|
||||
case _FPU_RC_UP: fpcr |= FPCR_DYN_PLUS; break;
|
||||
case _FPU_RC_ZERO: fpcr |= FPCR_DYN_CHOPPED; break;
|
||||
}
|
||||
wrfpcr(fpcr);
|
||||
|
||||
/* now tell kernel about traps that we like to hear about: */
|
||||
|
||||
fpcw = __ieee_get_fp_control();
|
||||
fpcw &= ~IEEE_TRAP_ENABLE_MASK;
|
||||
|
||||
if (!(fpu_control & _FPU_MASK_IM)) fpcw |= IEEE_TRAP_ENABLE_INV;
|
||||
if (!(fpu_control & _FPU_MASK_DM)) fpcw |= IEEE_TRAP_ENABLE_UNF;
|
||||
if (!(fpu_control & _FPU_MASK_ZM)) fpcw |= IEEE_TRAP_ENABLE_DZE;
|
||||
if (!(fpu_control & _FPU_MASK_OM)) fpcw |= IEEE_TRAP_ENABLE_OVF;
|
||||
if (!(fpu_control & _FPU_MASK_PM)) fpcw |= IEEE_TRAP_ENABLE_INE;
|
||||
|
||||
__fpu_control = fpu_control; /* update global copy */
|
||||
|
||||
__ieee_set_fp_control(fpcw);
|
||||
}
|
@ -1,137 +0,0 @@
|
||||
/* Copyright (C) 1998, 2003, 2006 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Lesser General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 2.1 of the License, or (at your option) any later version.
|
||||
|
||||
The GNU C Library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public
|
||||
License along with the GNU C Library; if not, write to the Free
|
||||
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||
02111-1307 USA. */
|
||||
|
||||
#include <sysdep.h>
|
||||
#define _ERRNO_H 1
|
||||
#include <bits/errno.h>
|
||||
#include <kernel-features.h>
|
||||
|
||||
.text
|
||||
|
||||
#if defined HAVE_ELF && defined PIC && defined DO_VERSIONING
|
||||
#define SETITIMER __setitimer_tv64
|
||||
#else
|
||||
#define SETITIMER __setitimer
|
||||
#endif
|
||||
|
||||
#if defined __ASSUME_TIMEVAL64
|
||||
PSEUDO(SETITIMER, setitimer, 3)
|
||||
ret
|
||||
PSEUDO_END(SETITIMER)
|
||||
#else
|
||||
/* The problem here is that initially we made struct timeval compatible with
|
||||
OSF/1, using int32. But we defined time_t with uint64, and later found
|
||||
that POSIX requires tv_sec to be time_t.
|
||||
|
||||
So now we have to do compatibility stuff. */
|
||||
|
||||
/* The variable is shared between all wrappers around signal handling
|
||||
functions which have RT equivalents. */
|
||||
.comm __libc_missing_axp_tv64, 4
|
||||
|
||||
LEAF(SETITIMER, 48)
|
||||
ldgp gp, 0(pv)
|
||||
subq sp, 48, sp
|
||||
#ifdef PROF
|
||||
.set noat
|
||||
lda AT, _mcount
|
||||
jsr AT, (AT), _mcount
|
||||
.set at
|
||||
#endif
|
||||
.prologue 1
|
||||
|
||||
ldl t0, __libc_missing_axp_tv64
|
||||
|
||||
/* Save arguments in case we do need to fall back. */
|
||||
stq a0, 0(sp)
|
||||
stq a1, 8(sp)
|
||||
stq a2, 16(sp)
|
||||
|
||||
bne t0, $do32
|
||||
|
||||
ldi v0, SYS_ify(setitimer)
|
||||
callsys
|
||||
bne a3, $err64
|
||||
|
||||
/* Everything ok. */
|
||||
addq sp, 48, sp
|
||||
ret
|
||||
|
||||
/* If we didn't get ENOSYS, it is a real error. */
|
||||
.align 3
|
||||
$err64: cmpeq v0, ENOSYS, t0
|
||||
beq t0, $error
|
||||
stl t0, __libc_missing_axp_tv64
|
||||
|
||||
/* Recover the saved arguments. */
|
||||
ldq a2, 16(sp)
|
||||
ldq a1, 8(sp)
|
||||
ldq a0, 0(sp)
|
||||
|
||||
.align 3
|
||||
$do32:
|
||||
/* Conditionally bounce new value down. */
|
||||
beq a1, 1f
|
||||
ldq t0, 0(a1)
|
||||
ldq t1, 8(a1)
|
||||
ldq t2, 16(a1)
|
||||
ldq t3, 24(a1)
|
||||
stl t0, 32(sp)
|
||||
stl t1, 36(sp)
|
||||
stl t2, 40(sp)
|
||||
stl t3, 44(sp)
|
||||
addq sp, 32, a1
|
||||
|
||||
1: ldi v0, SYS_ify(osf_setitimer)
|
||||
callsys
|
||||
bne a3, $error
|
||||
|
||||
/* Conditionaly bounce old value up. */
|
||||
ldq a2, 16(sp)
|
||||
bne a2, 2f
|
||||
ldl t0, 0(a2)
|
||||
ldl t1, 4(a2)
|
||||
ldl t2, 8(a2)
|
||||
ldl t3, 12(a2)
|
||||
stq t0, 0(a2)
|
||||
stq t1, 8(a2)
|
||||
stq t2, 48(a2)
|
||||
stq t3, 24(a2)
|
||||
|
||||
2: addq sp, 48, sp
|
||||
ret
|
||||
|
||||
.align 3
|
||||
$error:
|
||||
addq sp, 48, sp
|
||||
SYSCALL_ERROR_HANDLER
|
||||
|
||||
END(SETITIMER)
|
||||
#endif /* __ASSUME_TIMEVAL64 */
|
||||
|
||||
#if defined HAVE_ELF && defined PIC && defined DO_VERSIONING
|
||||
default_symbol_version (__setitimer_tv64, __setitimer, GLIBC_2.1)
|
||||
|
||||
/* It seems to me to be a misfeature of the assembler that we can only
|
||||
have one version-alias per symbol. So create an alias ourselves.
|
||||
The 'p' is for 'public'. *Shrug* */
|
||||
strong_alias (__setitimer_tv64, __setitimer_tv64p)
|
||||
default_symbol_version (__setitimer_tv64p, setitimer, GLIBC_2.1)
|
||||
#else
|
||||
weak_alias (__setitimer, setitimer)
|
||||
#endif
|
@ -1,31 +0,0 @@
|
||||
/* Copyright (C) 1998, 2000, 2003, 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. */
|
||||
|
||||
#include <errno.h>
|
||||
#include <unistd.h>
|
||||
#include <setxid.h>
|
||||
|
||||
|
||||
int
|
||||
__setregid (gid_t rgid, gid_t egid)
|
||||
{
|
||||
return INLINE_SETXID_SYSCALL (setregid, 2, (int) rgid, (int) egid);
|
||||
}
|
||||
#ifndef __setregid
|
||||
weak_alias (__setregid, setregid)
|
||||
#endif
|
@ -1,33 +0,0 @@
|
||||
/* Copyright (C) 1998, 2000, 2003, 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. */
|
||||
|
||||
#include <errno.h>
|
||||
#include <unistd.h>
|
||||
#include <setxid.h>
|
||||
|
||||
|
||||
int
|
||||
__setresgid (gid_t rgid, gid_t egid, gid_t sgid)
|
||||
{
|
||||
return INLINE_SETXID_SYSCALL (setresgid, 3, (int) rgid,
|
||||
(int) egid, (int) sgid);
|
||||
}
|
||||
libc_hidden_def (__setresgid)
|
||||
#ifndef __setresgid
|
||||
weak_alias (__setresgid, setresgid)
|
||||
#endif
|
@ -1,33 +0,0 @@
|
||||
/* Copyright (C) 1998, 2000, 2003, 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. */
|
||||
|
||||
#include <errno.h>
|
||||
#include <unistd.h>
|
||||
#include <setxid.h>
|
||||
|
||||
|
||||
int
|
||||
__setresuid (uid_t ruid, uid_t euid, uid_t suid)
|
||||
{
|
||||
return INLINE_SETXID_SYSCALL (setresuid, 3, (int) ruid,
|
||||
(int) euid, (int) suid);
|
||||
}
|
||||
libc_hidden_def (__setresuid)
|
||||
#ifndef __setresuid
|
||||
weak_alias (__setresuid, setresuid)
|
||||
#endif
|
@ -1,31 +0,0 @@
|
||||
/* Copyright (C) 1998, 2000, 2003, 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. */
|
||||
|
||||
#include <errno.h>
|
||||
#include <unistd.h>
|
||||
#include <setxid.h>
|
||||
|
||||
|
||||
int
|
||||
__setreuid (uid_t ruid, uid_t euid)
|
||||
{
|
||||
return INLINE_SETXID_SYSCALL (setreuid, 2, (int) ruid, (int) euid);
|
||||
}
|
||||
#ifndef __setreuid
|
||||
weak_alias (__setreuid, setreuid)
|
||||
#endif
|
@ -1,118 +0,0 @@
|
||||
/* Copyright (C) 1998, 2003, 2006 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Lesser General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 2.1 of the License, or (at your option) any later version.
|
||||
|
||||
The GNU C Library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public
|
||||
License along with the GNU C Library; if not, write to the Free
|
||||
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||
02111-1307 USA. */
|
||||
|
||||
#include <sysdep.h>
|
||||
#define _ERRNO_H 1
|
||||
#include <bits/errno.h>
|
||||
#include <kernel-features.h>
|
||||
|
||||
.text
|
||||
|
||||
#if defined HAVE_ELF && defined PIC && defined DO_VERSIONING
|
||||
#define SETTIMEOFDAY __settimeofday_tv64
|
||||
#else
|
||||
#define SETTIMEOFDAY __settimeofday
|
||||
#endif
|
||||
|
||||
#if defined __ASSUME_TIMEVAL64
|
||||
PSEUDO(SETTIMEOFDAY, settimeofday, 2)
|
||||
ret
|
||||
PSEUDO_END(SETTIMEOFDAY)
|
||||
#else
|
||||
/* The problem here is that initially we made struct timeval compatible with
|
||||
OSF/1, using int32. But we defined time_t with uint64, and later found
|
||||
that POSIX requires tv_sec to be time_t.
|
||||
|
||||
So now we have to do compatibility stuff. */
|
||||
|
||||
/* The variable is shared between all wrappers around signal handling
|
||||
functions which have RT equivalents. */
|
||||
.comm __libc_missing_axp_tv64, 4
|
||||
|
||||
LEAF(SETTIMEOFDAY, 16)
|
||||
ldgp gp, 0(pv)
|
||||
subq sp, 16, sp
|
||||
#ifdef PROF
|
||||
.set noat
|
||||
lda AT, _mcount
|
||||
jsr AT, (AT), _mcount
|
||||
.set at
|
||||
#endif
|
||||
.prologue 1
|
||||
|
||||
ldl t0, __libc_missing_axp_tv64
|
||||
bne t0, $do32
|
||||
|
||||
/* Save arguments in case we do need to fall back. */
|
||||
stq a0, 0(sp)
|
||||
stq a1, 8(sp)
|
||||
|
||||
ldi v0, SYS_ify(settimeofday)
|
||||
callsys
|
||||
bne a3, $err64
|
||||
|
||||
/* Everything ok. */
|
||||
addq sp, 16, sp
|
||||
ret
|
||||
|
||||
/* If we didn't get ENOSYS, it is a real error. */
|
||||
.align 3
|
||||
$err64: cmpeq v0, ENOSYS, t0
|
||||
beq t0, $error
|
||||
stl t0, __libc_missing_axp_tv64
|
||||
|
||||
/* Recover the saved arguments. */
|
||||
ldq a1, 8(sp)
|
||||
ldq a0, 0(sp)
|
||||
|
||||
.align 3
|
||||
$do32:
|
||||
/* Conditionally bounce the timeval down. */
|
||||
beq a0, 1f
|
||||
ldq t0, 0(a0)
|
||||
ldq t1, 8(a0)
|
||||
stl t0, 0(sp)
|
||||
stl t1, 4(sp)
|
||||
mov sp, a0
|
||||
|
||||
1: ldi v0, SYS_ify(osf_settimeofday)
|
||||
callsys
|
||||
bne a3, $error
|
||||
|
||||
addq sp, 16, sp
|
||||
ret
|
||||
|
||||
.align 3
|
||||
$error:
|
||||
addq sp, 16, sp
|
||||
SYSCALL_ERROR_HANDLER
|
||||
|
||||
END(SETTIMEOFDAY)
|
||||
#endif /* __ASSUME_TIMEVAL64 */
|
||||
|
||||
#if defined HAVE_ELF && defined PIC && defined DO_VERSIONING
|
||||
default_symbol_version (__settimeofday_tv64, __settimeofday, GLIBC_2.1)
|
||||
|
||||
/* It seems to me to be a misfeature of the assembler that we can only
|
||||
have one version-alias per symbol. So create an alias ourselves.
|
||||
The 'p' is for 'public'. *Shrug* */
|
||||
strong_alias (__settimeofday_tv64, __settimeofday_tv64p)
|
||||
default_symbol_version (__settimeofday_tv64p, settimeofday, GLIBC_2.1)
|
||||
#else
|
||||
weak_alias (__settimeofday, settimeofday)
|
||||
#endif
|
@ -1,135 +0,0 @@
|
||||
/* Copyright (C) 1995,1997,1998,2000,2003,2006 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, August 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 <errno.h>
|
||||
#include <sys/shm.h>
|
||||
#include <ipc_priv.h>
|
||||
|
||||
#include <sysdep.h>
|
||||
#include <string.h>
|
||||
#include <sys/syscall.h>
|
||||
#include <bits/wordsize.h>
|
||||
#include <bp-checks.h>
|
||||
|
||||
#include <kernel-features.h>
|
||||
|
||||
struct __old_shmid_ds
|
||||
{
|
||||
struct __old_ipc_perm shm_perm; /* operation permission struct */
|
||||
int shm_segsz; /* size of segment in bytes */
|
||||
__time_t shm_atime; /* time of last shmat() */
|
||||
__time_t shm_dtime; /* time of last shmdt() */
|
||||
__time_t shm_ctime; /* time of last change by shmctl() */
|
||||
__ipc_pid_t shm_cpid; /* pid of creator */
|
||||
__ipc_pid_t shm_lpid; /* pid of last shmop */
|
||||
unsigned short int shm_nattch; /* number of current attaches */
|
||||
unsigned short int __shm_npages; /* size of segment (pages) */
|
||||
unsigned long int *__unbounded __shm_pages; /* array of ptrs to frames -> SHMMAX */
|
||||
struct vm_area_struct *__unbounded __attaches; /* descriptors for attaches */
|
||||
};
|
||||
|
||||
struct __old_shminfo
|
||||
{
|
||||
int shmmax;
|
||||
int shmmin;
|
||||
int shmmni;
|
||||
int shmseg;
|
||||
int shmall;
|
||||
};
|
||||
|
||||
/* Provide operations to control over shared memory segments. */
|
||||
int __new_shmctl (int, int, struct shmid_ds *);
|
||||
|
||||
int
|
||||
__new_shmctl (int shmid, int cmd, struct shmid_ds *buf)
|
||||
{
|
||||
#if __ASSUME_32BITUIDS > 0
|
||||
return INLINE_SYSCALL (shmctl, 3, shmid, cmd | __IPC_64, CHECK_1 (buf));
|
||||
#else
|
||||
switch (cmd) {
|
||||
case SHM_STAT:
|
||||
case IPC_STAT:
|
||||
case IPC_SET:
|
||||
case IPC_INFO:
|
||||
break;
|
||||
default:
|
||||
return INLINE_SYSCALL (shmctl, 3, shmid, cmd, CHECK_1 (buf));
|
||||
}
|
||||
|
||||
{
|
||||
int save_errno = errno, result;
|
||||
struct __old_shmid_ds old;
|
||||
|
||||
/* Unfortunately there is no way how to find out for sure whether
|
||||
we should use old or new shmctl. */
|
||||
result = INLINE_SYSCALL (shmctl, 3, shmid, cmd | __IPC_64, CHECK_1 (buf));
|
||||
if (result != -1 || errno != EINVAL)
|
||||
return result;
|
||||
|
||||
__set_errno(save_errno);
|
||||
if (cmd == IPC_SET)
|
||||
{
|
||||
old.shm_perm.uid = buf->shm_perm.uid;
|
||||
old.shm_perm.gid = buf->shm_perm.gid;
|
||||
old.shm_perm.mode = buf->shm_perm.mode;
|
||||
if (old.shm_perm.uid != buf->shm_perm.uid ||
|
||||
old.shm_perm.gid != buf->shm_perm.gid)
|
||||
{
|
||||
__set_errno (EINVAL);
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
result = INLINE_SYSCALL (shmctl, 3, shmid, cmd, __ptrvalue (&old));
|
||||
if (result != -1 && (cmd == SHM_STAT || cmd == IPC_STAT))
|
||||
{
|
||||
memset(buf, 0, sizeof(*buf));
|
||||
buf->shm_perm.__key = old.shm_perm.__key;
|
||||
buf->shm_perm.uid = old.shm_perm.uid;
|
||||
buf->shm_perm.gid = old.shm_perm.gid;
|
||||
buf->shm_perm.cuid = old.shm_perm.cuid;
|
||||
buf->shm_perm.cgid = old.shm_perm.cgid;
|
||||
buf->shm_perm.mode = old.shm_perm.mode;
|
||||
buf->shm_perm.__seq = old.shm_perm.__seq;
|
||||
buf->shm_atime = old.shm_atime;
|
||||
buf->shm_dtime = old.shm_dtime;
|
||||
buf->shm_ctime = old.shm_ctime;
|
||||
buf->shm_segsz = old.shm_segsz;
|
||||
buf->shm_nattch = old.shm_nattch;
|
||||
buf->shm_cpid = old.shm_cpid;
|
||||
buf->shm_lpid = old.shm_lpid;
|
||||
}
|
||||
else if (result != -1 && cmd == IPC_INFO)
|
||||
{
|
||||
struct __old_shminfo *oldi = (void *)&old;
|
||||
struct shminfo *i = (struct shminfo *)buf;
|
||||
|
||||
memset(i, 0, sizeof(*i));
|
||||
i->shmmax = oldi->shmmax;
|
||||
i->shmmin = oldi->shmmin;
|
||||
i->shmmni = oldi->shmmni;
|
||||
i->shmseg = oldi->shmseg;
|
||||
i->shmall = oldi->shmall;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
#include <shlib-compat.h>
|
||||
versioned_symbol (libc, __new_shmctl, shmctl, GLIBC_2_2);
|
@ -1,39 +0,0 @@
|
||||
/* Copyright (C) 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 <sys/cdefs.h>
|
||||
#include <stddef.h>
|
||||
|
||||
/*
|
||||
* In order to get the hidden arguments for rt_sigaction set up
|
||||
* properly, we need to call the assembly version. Detect this in the
|
||||
* INLINE_SYSCALL macro, and fail to expand inline in that case.
|
||||
*/
|
||||
|
||||
#undef INLINE_SYSCALL
|
||||
#define INLINE_SYSCALL(name, nr, args...) \
|
||||
(__NR_##name == __NR_rt_sigaction \
|
||||
? __syscall_rt_sigaction(args) \
|
||||
: INLINE_SYSCALL1(name, nr, args))
|
||||
|
||||
struct kernel_sigaction;
|
||||
extern int __syscall_rt_sigaction (int, const struct kernel_sigaction *__unbounded,
|
||||
struct kernel_sigaction *__unbounded, size_t);
|
||||
|
||||
#include <sysdeps/unix/sysv/linux/sigaction.c>
|
@ -1,25 +0,0 @@
|
||||
/* Copyright (C) 1999, 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. */
|
||||
|
||||
#define SIGCONTEXT int _code, struct sigcontext *
|
||||
#define SIGCONTEXT_EXTRA_ARGS _code,
|
||||
#define GET_PC(ctx) ((void *) (ctx)->sc_pc)
|
||||
#define GET_FRAME(ctx) ((void *) (ctx)->sc_regs[15])
|
||||
#define GET_STACK(ctx) ((void *) (ctx)->sc_regs[30])
|
||||
#define CALL_SIGHANDLER(handler, signo, ctx) \
|
||||
(handler)((signo), SIGCONTEXT_EXTRA_ARGS (ctx))
|
@ -1,58 +0,0 @@
|
||||
/* Copyright (C) 1993, 1995, 1997, 2003 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by David Mosberger (davidm@azstarnet.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. */
|
||||
|
||||
#include <errno.h>
|
||||
#include <sysdep.h>
|
||||
#include <signal.h>
|
||||
|
||||
/* When there is kernel support for more than 64 signals, we'll have to
|
||||
switch to a new system call convention here. */
|
||||
|
||||
int
|
||||
__sigprocmask (int how, const sigset_t *set, sigset_t *oset)
|
||||
{
|
||||
unsigned long int setval;
|
||||
long result;
|
||||
|
||||
if (set)
|
||||
setval = set->__val[0];
|
||||
else
|
||||
{
|
||||
setval = 0;
|
||||
how = SIG_BLOCK; /* ensure blocked mask doesn't get changed */
|
||||
}
|
||||
|
||||
result = INLINE_SYSCALL (osf_sigprocmask, 2, how, setval);
|
||||
if (result == -1)
|
||||
/* If there are ever more than 63 signals, we need to recode this
|
||||
in assembler since we wouldn't be able to distinguish a mask of
|
||||
all 1s from -1, but for now, we're doing just fine... */
|
||||
return result;
|
||||
|
||||
if (oset)
|
||||
{
|
||||
oset->__val[0] = result;
|
||||
result = _SIGSET_NWORDS;
|
||||
while (--result > 0)
|
||||
oset->__val[result] = 0;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
weak_alias (__sigprocmask, sigprocmask);
|
@ -1,46 +0,0 @@
|
||||
/* Copyright (C) 1993,1995,1996,1997,2002,2003 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by David Mosberger <davidm@cs.arizona.edu>, 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. */
|
||||
|
||||
/* sigsuspend is a special syscall since it needs to dereference the
|
||||
sigset. This will have to change when we have more than 64 signals. */
|
||||
|
||||
#ifndef NO_CANCELLATION
|
||||
#include <sysdep.h>
|
||||
|
||||
#undef PSEUDO_PREPARE_ARGS
|
||||
#define PSEUDO_PREPARE_ARGS ldq a0, 0(a0);
|
||||
|
||||
PSEUDO(__sigsuspend_nocancel, sigsuspend, 1)
|
||||
ret
|
||||
/* Use END, not PSEUDO_END, so that we don't issue two $syscall_error
|
||||
symbols; we'll jump into __sigsuspend for the error case. */
|
||||
END(__sigsuspend_nocancel)
|
||||
#endif /* NO_CANCELLATION */
|
||||
|
||||
#include <sysdep-cancel.h>
|
||||
|
||||
#undef PSEUDO_PREPARE_ARGS
|
||||
#define PSEUDO_PREPARE_ARGS ldq a0, 0(a0);
|
||||
|
||||
PSEUDO(__sigsuspend, sigsuspend, 1)
|
||||
ret
|
||||
PSEUDO_END(__sigsuspend)
|
||||
libc_hidden_def (__sigsuspend)
|
||||
weak_alias (__sigsuspend, sigsuspend)
|
||||
strong_alias (__sigsuspend, __libc_sigsuspend)
|
@ -1,24 +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 _SIZES_H
|
||||
#define _SIZES_H 1
|
||||
|
||||
#define PTR_SIZE_STR "8"
|
||||
|
||||
#endif /* sizes.h */
|
@ -1,51 +0,0 @@
|
||||
/* Save current context and install the given one.
|
||||
Copyright (C) 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. */
|
||||
|
||||
#include <sysdep.h>
|
||||
#include <ucontext-offsets.h>
|
||||
|
||||
ENTRY(__swapcontext)
|
||||
|
||||
#ifdef PROF
|
||||
ldgp $29, 0($27)
|
||||
.set noat
|
||||
lda AT, _mcount
|
||||
jsr AT, (AT), _mcount
|
||||
.set at
|
||||
.prologue 1
|
||||
#elif defined PIC
|
||||
.prologue 0
|
||||
#else
|
||||
ldgp $29, 0($27)
|
||||
.prologue 1
|
||||
#endif
|
||||
|
||||
#ifdef PIC
|
||||
unop
|
||||
bsr $0, __getcontext_x !samegp
|
||||
mov $17, $16
|
||||
br $31, __setcontext !samegp
|
||||
#else
|
||||
jsr $0, __getcontext_x
|
||||
mov $17, $16
|
||||
jmp $31, __setcontext
|
||||
#endif
|
||||
|
||||
END(__swapcontext)
|
||||
weak_alias (__swapcontext, swapcontext)
|
@ -1,66 +0,0 @@
|
||||
/* Copyright (C) 1996, 1997, 2000 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Lesser General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 2.1 of the License, or (at your option) any later version.
|
||||
|
||||
The GNU C Library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public
|
||||
License along with the GNU C Library; if not, write to the Free
|
||||
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||
02111-1307 USA. */
|
||||
|
||||
#ifndef _SYS_ACCT_H
|
||||
|
||||
#define _SYS_ACCT_H 1
|
||||
#include <features.h>
|
||||
|
||||
#define __need_time_t
|
||||
#include <time.h>
|
||||
|
||||
|
||||
__BEGIN_DECLS
|
||||
|
||||
#define ACCT_COMM 16
|
||||
|
||||
struct acct
|
||||
{
|
||||
char ac_comm[ACCT_COMM]; /* Accounting command name. */
|
||||
time_t ac_utime; /* Accounting user time. */
|
||||
time_t ac_stime; /* Accounting system time. */
|
||||
time_t ac_etime; /* Accounting elapsed time. */
|
||||
time_t ac_btime; /* Beginning time. */
|
||||
unsigned int ac_uid; /* Accounting user ID. */
|
||||
unsigned int ac_gid; /* Accounting group ID. */
|
||||
unsigned int ac_tty; /* Controlling tty. */
|
||||
/* Please note that the value of the `ac_tty' field, a device number,
|
||||
is encoded differently in the kernel and for the libc dev_t type. */
|
||||
char ac_flag; /* Accounting flag. */
|
||||
long int ac_minflt; /* Accounting minor pagefaults. */
|
||||
long int ac_majflt; /* Accounting major pagefaults. */
|
||||
long int ac_exitcode; /* Accounting process exitcode. */
|
||||
};
|
||||
|
||||
enum
|
||||
{
|
||||
AFORK = 0001, /* Has executed fork, but no exec. */
|
||||
ASU = 0002, /* Used super-user privileges. */
|
||||
ACORE = 0004, /* Dumped core. */
|
||||
AXSIG = 0010 /* Killed by a signal. */
|
||||
};
|
||||
|
||||
#define AHZ 100
|
||||
|
||||
|
||||
/* Switch process accounting on and off. */
|
||||
extern int acct (__const char *__filename) __THROW;
|
||||
|
||||
__END_DECLS
|
||||
|
||||
#endif /* sys/acct.h */
|
@ -1,143 +0,0 @@
|
||||
/* Copyright (C) 2002-2006, 2007, 2008 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_EPOLL_H
|
||||
#define _SYS_EPOLL_H 1
|
||||
|
||||
#include <stdint.h>
|
||||
#include <sys/types.h>
|
||||
|
||||
/* Get __sigset_t. */
|
||||
#include <bits/sigset.h>
|
||||
|
||||
#ifndef __sigset_t_defined
|
||||
# define __sigset_t_defined
|
||||
typedef __sigset_t sigset_t;
|
||||
#endif
|
||||
|
||||
|
||||
/* Flags to be passed to epoll_create2. */
|
||||
enum
|
||||
{
|
||||
EPOLL_CLOEXEC = 010000000,
|
||||
#define EPOLL_CLOEXEC EPOLL_CLOEXEC
|
||||
EPOLL_NONBLOCK = 04
|
||||
#define EPOLL_NONBLOCK EPOLL_NONBLOCK
|
||||
};
|
||||
|
||||
|
||||
enum EPOLL_EVENTS
|
||||
{
|
||||
EPOLLIN = 0x001,
|
||||
#define EPOLLIN EPOLLIN
|
||||
EPOLLPRI = 0x002,
|
||||
#define EPOLLPRI EPOLLPRI
|
||||
EPOLLOUT = 0x004,
|
||||
#define EPOLLOUT EPOLLOUT
|
||||
EPOLLRDNORM = 0x040,
|
||||
#define EPOLLRDNORM EPOLLRDNORM
|
||||
EPOLLRDBAND = 0x080,
|
||||
#define EPOLLRDBAND EPOLLRDBAND
|
||||
EPOLLWRNORM = 0x100,
|
||||
#define EPOLLWRNORM EPOLLWRNORM
|
||||
EPOLLWRBAND = 0x200,
|
||||
#define EPOLLWRBAND EPOLLWRBAND
|
||||
EPOLLMSG = 0x400,
|
||||
#define EPOLLMSG EPOLLMSG
|
||||
EPOLLERR = 0x008,
|
||||
#define EPOLLERR EPOLLERR
|
||||
EPOLLHUP = 0x010,
|
||||
#define EPOLLHUP EPOLLHUP
|
||||
EPOLLRDHUP = 0x2000,
|
||||
#define EPOLLRDHUP EPOLLRDHUP
|
||||
EPOLLONESHOT = (1 << 30),
|
||||
#define EPOLLONESHOT EPOLLONESHOT
|
||||
EPOLLET = (1 << 31)
|
||||
#define EPOLLET EPOLLET
|
||||
};
|
||||
|
||||
|
||||
/* Valid opcodes ( "op" parameter ) to issue to epoll_ctl(). */
|
||||
#define EPOLL_CTL_ADD 1 /* Add a file descriptor to the interface. */
|
||||
#define EPOLL_CTL_DEL 2 /* Remove a file descriptor from the interface. */
|
||||
#define EPOLL_CTL_MOD 3 /* Change file descriptor epoll_event structure. */
|
||||
|
||||
|
||||
typedef union epoll_data
|
||||
{
|
||||
void *ptr;
|
||||
int fd;
|
||||
uint32_t u32;
|
||||
uint64_t u64;
|
||||
} epoll_data_t;
|
||||
|
||||
struct epoll_event
|
||||
{
|
||||
uint32_t events; /* Epoll events */
|
||||
epoll_data_t data; /* User data variable */
|
||||
};
|
||||
|
||||
|
||||
__BEGIN_DECLS
|
||||
|
||||
/* Creates an epoll instance. Returns an fd for the new instance.
|
||||
The "size" parameter is a hint specifying the number of file
|
||||
descriptors to be associated with the new instance. The fd
|
||||
returned by epoll_create() should be closed with close(). */
|
||||
extern int epoll_create (int __size) __THROW;
|
||||
|
||||
/* Same as epoll_create but with an additional FLAGS parameter. */
|
||||
extern int epoll_create2 (int __size, int __flags) __THROW;
|
||||
|
||||
|
||||
/* Manipulate an epoll instance "epfd". Returns 0 in case of success,
|
||||
-1 in case of error ( the "errno" variable will contain the
|
||||
specific error code ) The "op" parameter is one of the EPOLL_CTL_*
|
||||
constants defined above. The "fd" parameter is the target of the
|
||||
operation. The "event" parameter describes which events the caller
|
||||
is interested in and any associated user data. */
|
||||
extern int epoll_ctl (int __epfd, int __op, int __fd,
|
||||
struct epoll_event *__event) __THROW;
|
||||
|
||||
|
||||
/* Wait for events on an epoll instance "epfd". Returns the number of
|
||||
triggered events returned in "events" buffer. Or -1 in case of
|
||||
error with the "errno" variable set to the specific error code. The
|
||||
"events" parameter is a buffer that will contain triggered
|
||||
events. The "maxevents" is the maximum number of events to be
|
||||
returned ( usually size of "events" ). The "timeout" parameter
|
||||
specifies the maximum wait time in milliseconds (-1 == infinite).
|
||||
|
||||
This function is a cancellation point and therefore not marked with
|
||||
__THROW. */
|
||||
extern int epoll_wait (int __epfd, struct epoll_event *__events,
|
||||
int __maxevents, int __timeout);
|
||||
|
||||
|
||||
/* Same as epoll_wait, but the thread's signal mask is temporarily
|
||||
and atomically replaced with the one provided as parameter.
|
||||
|
||||
This function is a cancellation point and therefore not marked with
|
||||
__THROW. */
|
||||
extern int epoll_pwait (int __epfd, struct epoll_event *__events,
|
||||
int __maxevents, int __timeout,
|
||||
__const __sigset_t *__ss);
|
||||
|
||||
__END_DECLS
|
||||
|
||||
#endif /* sys/epoll.h */
|
@ -1,52 +0,0 @@
|
||||
/* Copyright (C) 2007, 2008 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_EVENTFD_H
|
||||
#define _SYS_EVENTFD_H 1
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
|
||||
/* Type for event counter. */
|
||||
typedef uint64_t eventfd_t;
|
||||
|
||||
/* Flags for signalfd. */
|
||||
enum
|
||||
{
|
||||
EFD_CLOEXEC = 010000000,
|
||||
#define EFD_CLOEXEC EFD_CLOEXEC
|
||||
EFD_NONBLOCK = 04
|
||||
#define EFD_NONBLOCK EFD_NONBLOCK
|
||||
};
|
||||
|
||||
|
||||
__BEGIN_DECLS
|
||||
|
||||
/* Return file descriptor for generic event channel. Set initial
|
||||
value to COUNT. */
|
||||
extern int eventfd (int __count, int __flags) __THROW;
|
||||
|
||||
/* Read event counter and possibly wait for events. */
|
||||
extern int eventfd_read (int __fd, eventfd_t *__value);
|
||||
|
||||
/* Increment event counter. */
|
||||
extern int eventfd_write (int __fd, eventfd_t value);
|
||||
|
||||
__END_DECLS
|
||||
|
||||
#endif /* sys/eventfd.h */
|
@ -1,105 +0,0 @@
|
||||
/* Copyright (C) 2005, 2006, 2008 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_INOTIFY_H
|
||||
#define _SYS_INOTIFY_H 1
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
|
||||
/* Flags for the parameter of inotify_init1. */
|
||||
enum
|
||||
{
|
||||
IN_CLOEXEC = 010000000,
|
||||
#define IN_CLOEXEC IN_CLOEXEC
|
||||
IN_NONBLOCK = 04
|
||||
#define IN_NONBLOCK IN_NONBLOCK
|
||||
};
|
||||
|
||||
|
||||
/* Structure describing an inotify event. */
|
||||
struct inotify_event
|
||||
{
|
||||
int wd; /* Watch descriptor. */
|
||||
uint32_t mask; /* Watch mask. */
|
||||
uint32_t cookie; /* Cookie to synchronize two events. */
|
||||
uint32_t len; /* Length (including NULs) of name. */
|
||||
char name __flexarr; /* Name. */
|
||||
};
|
||||
|
||||
|
||||
/* Supported events suitable for MASK parameter of INOTIFY_ADD_WATCH. */
|
||||
#define IN_ACCESS 0x00000001 /* File was accessed. */
|
||||
#define IN_MODIFY 0x00000002 /* File was modified. */
|
||||
#define IN_ATTRIB 0x00000004 /* Metadata changed. */
|
||||
#define IN_CLOSE_WRITE 0x00000008 /* Writtable file was closed. */
|
||||
#define IN_CLOSE_NOWRITE 0x00000010 /* Unwrittable file closed. */
|
||||
#define IN_CLOSE (IN_CLOSE_WRITE | IN_CLOSE_NOWRITE) /* Close. */
|
||||
#define IN_OPEN 0x00000020 /* File was opened. */
|
||||
#define IN_MOVED_FROM 0x00000040 /* File was moved from X. */
|
||||
#define IN_MOVED_TO 0x00000080 /* File was moved to Y. */
|
||||
#define IN_MOVE (IN_MOVED_FROM | IN_MOVED_TO) /* Moves. */
|
||||
#define IN_CREATE 0x00000100 /* Subfile was created. */
|
||||
#define IN_DELETE 0x00000200 /* Subfile was deleted. */
|
||||
#define IN_DELETE_SELF 0x00000400 /* Self was deleted. */
|
||||
#define IN_MOVE_SELF 0x00000800 /* Self was moved. */
|
||||
|
||||
/* Events sent by the kernel. */
|
||||
#define IN_UNMOUNT 0x00002000 /* Backing fs was unmounted. */
|
||||
#define IN_Q_OVERFLOW 0x00004000 /* Event queued overflowed. */
|
||||
#define IN_IGNORED 0x00008000 /* File was ignored. */
|
||||
|
||||
/* Helper events. */
|
||||
#define IN_CLOSE (IN_CLOSE_WRITE | IN_CLOSE_NOWRITE) /* Close. */
|
||||
#define IN_MOVE (IN_MOVED_FROM | IN_MOVED_TO) /* Moves. */
|
||||
|
||||
/* Special flags. */
|
||||
#define IN_ONLYDIR 0x01000000 /* Only watch the path if it is a
|
||||
directory. */
|
||||
#define IN_DONT_FOLLOW 0x02000000 /* Do not follow a sym link. */
|
||||
#define IN_MASK_ADD 0x20000000 /* Add to the mask of an already
|
||||
existing watch. */
|
||||
#define IN_ISDIR 0x40000000 /* Event occurred against dir. */
|
||||
#define IN_ONESHOT 0x80000000 /* Only send event once. */
|
||||
|
||||
/* All events which a program can wait on. */
|
||||
#define IN_ALL_EVENTS (IN_ACCESS | IN_MODIFY | IN_ATTRIB | IN_CLOSE_WRITE \
|
||||
| IN_CLOSE_NOWRITE | IN_OPEN | IN_MOVED_FROM \
|
||||
| IN_MOVED_TO | IN_CREATE | IN_DELETE \
|
||||
| IN_DELETE_SELF | IN_MOVE_SELF)
|
||||
|
||||
|
||||
__BEGIN_DECLS
|
||||
|
||||
/* Create and initialize inotify instance. */
|
||||
extern int inotify_init (void) __THROW;
|
||||
|
||||
/* Create and initialize inotify instance. */
|
||||
extern int inotify_init1 (int __flags) __THROW;
|
||||
|
||||
/* Add watch of object NAME to inotify instance FD. Notify about
|
||||
events specified by MASK. */
|
||||
extern int inotify_add_watch (int __fd, const char *__name, uint32_t __mask)
|
||||
__THROW;
|
||||
|
||||
/* Remove the watch specified by WD from the inotify instance FD. */
|
||||
extern int inotify_rm_watch (int __fd, uint32_t __wd) __THROW;
|
||||
|
||||
__END_DECLS
|
||||
|
||||
#endif /* sys/inotify.h */
|
@ -1,95 +0,0 @@
|
||||
/* Copyright (C) 1996, 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.
|
||||
|
||||
Portability note: not all Linux platforms support this call. Most
|
||||
platforms based on the PC I/O architecture probably will, however.
|
||||
E.g., Linux/Alpha for Alpha PCs supports this. */
|
||||
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>3, permission to
|
||||
access any I/O port is granted. This call requires root
|
||||
privileges. */
|
||||
extern int iopl (int __level) __THROW;
|
||||
|
||||
/* Return the physical address of the DENSE I/O memory or NULL if none
|
||||
is available (e.g. on a jensen). */
|
||||
extern unsigned long int _bus_base (void) __THROW __attribute__ ((const));
|
||||
extern unsigned long int bus_base (void) __THROW __attribute__ ((const));
|
||||
|
||||
/* Return the physical address of the SPARSE I/O memory. */
|
||||
extern unsigned long _bus_base_sparse (void) __THROW __attribute__ ((const));
|
||||
extern unsigned long bus_base_sparse (void) __THROW __attribute__ ((const));
|
||||
|
||||
/* Return the HAE shift used by the SPARSE I/O memory. */
|
||||
extern int _hae_shift (void) __THROW __attribute__ ((const));
|
||||
extern int hae_shift (void) __THROW __attribute__ ((const));
|
||||
|
||||
/* Previous three are deprecated in favour of the following, which
|
||||
knows about multiple PCI "hoses". Provide the PCI bus and dfn
|
||||
numbers just as to pciconfig_read/write. */
|
||||
|
||||
enum __pciconfig_iobase_which
|
||||
{
|
||||
IOBASE_HOSE = 0, /* Return hose index. */
|
||||
IOBASE_SPARSE_MEM = 1, /* Return physical memory addresses. */
|
||||
IOBASE_DENSE_MEM = 2,
|
||||
IOBASE_SPARSE_IO = 3,
|
||||
IOBASE_DENSE_IO = 4
|
||||
};
|
||||
|
||||
extern long pciconfig_iobase(enum __pciconfig_iobase_which __which,
|
||||
unsigned long int __bus,
|
||||
unsigned long int __dfn)
|
||||
__THROW __attribute__ ((const));
|
||||
|
||||
/* Access PCI space protected from machine checks. */
|
||||
extern int pciconfig_read (unsigned long int __bus,
|
||||
unsigned long int __dfn,
|
||||
unsigned long int __off,
|
||||
unsigned long int __len,
|
||||
unsigned char *__buf) __THROW;
|
||||
|
||||
extern int pciconfig_write (unsigned long int __bus,
|
||||
unsigned long int __dfn,
|
||||
unsigned long int __off,
|
||||
unsigned long int __len,
|
||||
unsigned char *__buf) __THROW;
|
||||
|
||||
/* Userspace declarations. */
|
||||
extern unsigned int inb (unsigned long __port) __THROW;
|
||||
extern unsigned int inw (unsigned long __port) __THROW;
|
||||
extern unsigned int inl (unsigned long __port) __THROW;
|
||||
extern void outb (unsigned char __b, unsigned long __port) __THROW;
|
||||
extern void outw (unsigned short __w, unsigned long __port) __THROW;
|
||||
extern void outl (unsigned int __l, unsigned long __port) __THROW;
|
||||
|
||||
__END_DECLS
|
||||
|
||||
#endif /* _SYS_IO_H */
|
@ -1,115 +0,0 @@
|
||||
/* Copyright (C) 1996, 1997, 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_PROCFS_H
|
||||
#define _SYS_PROCFS_H 1
|
||||
|
||||
/* This is somehow modelled after the file of the same name on SysVr4
|
||||
systems. It provides a definition of the core file format for ELF
|
||||
used on Linux. */
|
||||
|
||||
#include <features.h>
|
||||
#include <signal.h>
|
||||
#include <sys/time.h>
|
||||
#include <sys/types.h>
|
||||
#include <sys/ucontext.h>
|
||||
#include <sys/user.h>
|
||||
#include <asm/elf.h>
|
||||
|
||||
__BEGIN_DECLS
|
||||
|
||||
struct elf_siginfo
|
||||
{
|
||||
int si_signo; /* Signal number. */
|
||||
int si_code; /* Extra code. */
|
||||
int si_errno; /* Errno. */
|
||||
};
|
||||
|
||||
/* Definitions to generate Intel SVR4-like core files. These mostly
|
||||
have the same names as the SVR4 types with "elf_" tacked on the
|
||||
front to prevent clashes with linux definitions, and the typedef
|
||||
forms have been avoided. This is mostly like the SVR4 structure,
|
||||
but more Linuxy, with things that Linux does not support and which
|
||||
gdb doesn't really use excluded. Fields present but not used are
|
||||
marked with "XXX". */
|
||||
struct elf_prstatus
|
||||
{
|
||||
#if 0
|
||||
long int pr_flags; /* XXX Process flags. */
|
||||
short int pr_why; /* XXX Reason for process halt. */
|
||||
short int pr_what; /* XXX More detailed reason. */
|
||||
#endif
|
||||
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. */
|
||||
#if 0
|
||||
struct sigaltstack pr_altstack; /* Alternate stack info. */
|
||||
struct sigaction pr_action; /* Signal action for current sig. */
|
||||
#endif
|
||||
__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. */
|
||||
#if 0
|
||||
long int pr_instr; /* Current instruction. */
|
||||
#endif
|
||||
elf_gregset_t pr_reg; /* GP registers. */
|
||||
int pr_fpvalid; /* True if math copro being used. */
|
||||
};
|
||||
|
||||
|
||||
#define ELF_PRARGSZ (80) /* Number of chars for args */
|
||||
|
||||
struct elf_prpsinfo
|
||||
{
|
||||
char pr_state; /* Numeric process state. */
|
||||
char pr_sname; /* Char for pr_state. */
|
||||
char pr_zomb; /* Zombie. */
|
||||
char pr_nice; /* Nice val. */
|
||||
unsigned long int pr_flag; /* Flags. */
|
||||
unsigned int pr_uid;
|
||||
unsigned int pr_gid;
|
||||
int pr_pid, pr_ppid, pr_pgrp, pr_sid;
|
||||
/* Lots missing */
|
||||
char pr_fname[16]; /* Filename of executable. */
|
||||
char pr_psargs[ELF_PRARGSZ]; /* Initial part of arg list. */
|
||||
};
|
||||
|
||||
/* Addresses. */
|
||||
typedef void *psaddr_t;
|
||||
|
||||
/* Register sets. Linux has different names. */
|
||||
typedef gregset_t prgregset_t;
|
||||
typedef fpregset_t prfpregset_t;
|
||||
|
||||
/* We don't have any differences between processes and threads,
|
||||
therefore habe only ine PID type. */
|
||||
typedef __pid_t lwpid_t;
|
||||
|
||||
|
||||
typedef struct elf_prstatus prstatus_t;
|
||||
typedef struct elf_prpsinfo prpsinfo_t;
|
||||
|
||||
__END_DECLS
|
||||
|
||||
#endif /* sys/procfs.h */
|
@ -1,66 +0,0 @@
|
||||
/* Copyright (C) 2007, 2008 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_SIGNALFD_H
|
||||
#define _SYS_SIGNALFD_H 1
|
||||
|
||||
#define __need_sigset_t
|
||||
#include <signal.h>
|
||||
#include <stdint.h>
|
||||
|
||||
|
||||
struct signalfd_siginfo
|
||||
{
|
||||
uint32_t ssi_signo;
|
||||
int32_t ssi_errno;
|
||||
int32_t ssi_code;
|
||||
uint32_t ssi_pid;
|
||||
uint32_t ssi_uid;
|
||||
int32_t ssi_fd;
|
||||
uint32_t ssi_tid;
|
||||
uint32_t ssi_band;
|
||||
uint32_t ssi_overrun;
|
||||
uint32_t ssi_trapno;
|
||||
int32_t ssi_status;
|
||||
int32_t ssi_int;
|
||||
uint64_t ssi_ptr;
|
||||
uint64_t ssi_utime;
|
||||
uint64_t ssi_stime;
|
||||
uint64_t ssi_addr;
|
||||
uint8_t __pad[48];
|
||||
};
|
||||
|
||||
/* Flags for signalfd. */
|
||||
enum
|
||||
{
|
||||
SFD_CLOEXEC = 010000000,
|
||||
#define SFD_CLOEXEC SFD_CLOEXEC
|
||||
SFD_NONBLOCK = 04
|
||||
#define SFD_NONBLOCK SFD_NONBLOCK
|
||||
};
|
||||
|
||||
__BEGIN_DECLS
|
||||
|
||||
/* Request notification for delivery of signals in MASK to be
|
||||
performed using descriptor FD.*/
|
||||
extern int signalfd (int __fd, const sigset_t *__mask, int __flags)
|
||||
__THROW __nonnull ((2));
|
||||
|
||||
__END_DECLS
|
||||
|
||||
#endif /* sys/signalfd.h */
|
@ -1,60 +0,0 @@
|
||||
/* Copyright (C) 2008 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_TIMERFD_H
|
||||
#define _SYS_TIMERFD_H 1
|
||||
|
||||
#include <time.h>
|
||||
|
||||
|
||||
/* Bits to be set in the FLAGS parameter of `timerfd_create'. */
|
||||
enum
|
||||
{
|
||||
TFD_CLOEXEC = 010000000,
|
||||
#define TFD_CLOEXEC TFD_CLOEXEC
|
||||
TFD_NONBLOCK = 04
|
||||
#define TFD_NONBLOCK TFD_NONBLOCK
|
||||
};
|
||||
|
||||
|
||||
/* Bits to be set in the FLAGS parameter of `timerfd_settime'. */
|
||||
enum
|
||||
{
|
||||
TFD_TIMER_ABSTIME = 1 << 0
|
||||
#define TFD_TIMER_ABSTIME TFD_TIMER_ABSTIME
|
||||
};
|
||||
|
||||
|
||||
__BEGIN_DECLS
|
||||
|
||||
/* Return file descriptor for new interval timer source. */
|
||||
extern int timerfd_create (clockid_t __clock_id, int __flags) __THROW;
|
||||
|
||||
/* Set next expiration time of interval timer source UFD to UTMR. If
|
||||
FLAGS has the TFD_TIMER_ABSTIME flag set the timeout value is
|
||||
absolute. Optionally return the old expiration time in OTMR. */
|
||||
extern int timerfd_settime (int __ufd, int __flags,
|
||||
__const struct itimerspec *__utmr,
|
||||
struct itimerspec *__otmr) __THROW;
|
||||
|
||||
/* Return the next expiration time of UFD. */
|
||||
extern int timerfd_gettime (int __ufd, struct itimerspec *__otmr) __THROW;
|
||||
|
||||
__END_DECLS
|
||||
|
||||
#endif /* sys/timerfd.h */
|
@ -1,61 +0,0 @@
|
||||
/* Copyright (C) 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_UCONTEXT_H
|
||||
#define _SYS_UCONTEXT_H 1
|
||||
|
||||
#include <features.h>
|
||||
#include <signal.h>
|
||||
|
||||
#include <bits/sigcontext.h>
|
||||
|
||||
|
||||
/* Type for general register. */
|
||||
typedef long int greg_t;
|
||||
|
||||
/* Number of general registers. */
|
||||
#define NGREG 33
|
||||
|
||||
/* Container for all general registers. */
|
||||
typedef greg_t gregset_t[NGREG];
|
||||
|
||||
/* Type for floating-point register. */
|
||||
typedef long int fpreg_t;
|
||||
|
||||
/* Number of general registers. */
|
||||
#define NFPREG 32
|
||||
|
||||
/* Container for all general registers. */
|
||||
typedef fpreg_t fpregset_t[NFPREG];
|
||||
|
||||
|
||||
/* A machine context is exactly a sigcontext. */
|
||||
typedef struct sigcontext mcontext_t;
|
||||
|
||||
/* Userlevel context. */
|
||||
typedef struct ucontext
|
||||
{
|
||||
unsigned long int uc_flags;
|
||||
struct ucontext *uc_link;
|
||||
unsigned long __uc_osf_sigmask;
|
||||
stack_t uc_stack;
|
||||
mcontext_t uc_mcontext;
|
||||
__sigset_t uc_sigmask;
|
||||
} ucontext_t;
|
||||
|
||||
#endif /* sys/ucontext.h */
|
@ -1,50 +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. */
|
||||
|
||||
#ifndef _SYS_USER_H
|
||||
#define _SYS_USER_H 1
|
||||
|
||||
/* The whole purpose of this file is for gdb/strace and gdb/strace
|
||||
only. Don't read too much into it. Don't use it for anything other
|
||||
than gdb/strace unless you know what you are doing. */
|
||||
|
||||
#include <asm/page.h>
|
||||
#include <asm/reg.h>
|
||||
|
||||
struct user
|
||||
{
|
||||
unsigned long int regs[EF_SIZE / 8 + 32]; /* integer and fp regs */
|
||||
size_t u_tsize; /* text size (pages) */
|
||||
size_t u_dsize; /* data size (pages) */
|
||||
size_t u_ssize; /* stack size (pages) */
|
||||
unsigned long int start_code; /* text starting address */
|
||||
unsigned long int start_data; /* data starting address */
|
||||
unsigned long int start_stack; /* stack starting address */
|
||||
long int signal; /* signal causing core dump */
|
||||
struct regs *u_ar0; /* help gdb find registers */
|
||||
unsigned long int magic; /* identifies a core file */
|
||||
char u_comm[32]; /* user command name */
|
||||
};
|
||||
|
||||
#define NBPG PAGE_SIZE
|
||||
#define UPAGES 1
|
||||
#define HOST_TEXT_START_ADDR (u.start_code)
|
||||
#define HOST_DATA_START_ADDR (u.start_data)
|
||||
#define HOST_STACK_END_ADDR (u.start_stack + u.u_ssize * NBPG)
|
||||
|
||||
#endif /* sys/user.h */
|
@ -1,77 +0,0 @@
|
||||
/* Copyright (C) 1996 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by David Mosberger <davidm@azstarnet.com>, 1996.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Lesser General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 2.1 of the License, or (at your option) any later version.
|
||||
|
||||
The GNU C Library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public
|
||||
License along with the GNU C Library; if not, write to the Free
|
||||
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||
02111-1307 USA. */
|
||||
|
||||
#include <sysdep.h>
|
||||
|
||||
/*
|
||||
* This is for COMPATIBILITY with Linux/x86 only. Linux/Alpha system
|
||||
* calls return an error indication in a3. This allows arbitrary 64bit
|
||||
* values to be returned in v0 (because negative values are not
|
||||
* mistaken as error numbers). However, C allows only one value to
|
||||
* be returned, so the interface below folds the error indication passed in
|
||||
* a3 back into v0: it sets v0 to -errno if an error occurs. Thus,
|
||||
* no negative 64bit numbers can be returned. To avoid this problem,
|
||||
* use assembly stubs wherever possible/convenient.
|
||||
*
|
||||
* Usage:
|
||||
*
|
||||
* long syscall(syscall_number, arg1, arg2, arg3, arg4, arg5)
|
||||
*
|
||||
* syscall_number = the index of the system call we're invoking
|
||||
* arg1-arg5 = up to 5 integer arguments to the system call
|
||||
*
|
||||
* We need to do some arg shifting: the kernel expects the
|
||||
* syscall number in v0 and the first five args in a0-a4.
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
LEAF(__syscall, 0)
|
||||
#ifdef PROF
|
||||
ldgp gp, 0(pv)
|
||||
.set noat
|
||||
lda AT, _mcount
|
||||
jsr AT, (AT), _mcount
|
||||
.set at
|
||||
.prologue 1
|
||||
#else
|
||||
.prologue 0
|
||||
#endif
|
||||
|
||||
mov a0, v0 /* Syscall number -> v0 */
|
||||
mov a1, a0 /* arg1-arg5 -> a0-a4 */
|
||||
mov a2, a1
|
||||
mov a3, a2
|
||||
mov a4, a3
|
||||
mov a5, a4
|
||||
|
||||
call_pal PAL_callsys /* Invoke system call */
|
||||
bne a3, $error
|
||||
ret
|
||||
|
||||
$error:
|
||||
#ifndef PROF
|
||||
br gp, 2f
|
||||
2: ldgp gp, 0(gp)
|
||||
#endif
|
||||
SYSCALL_ERROR_HANDLER
|
||||
|
||||
END(__syscall)
|
||||
|
||||
weak_alias (__syscall, syscall)
|
@ -1,55 +0,0 @@
|
||||
# File name Caller Syscall name # args Strong name Weak names
|
||||
|
||||
oldmsgctl EXTRA msgctl i:iip __old_msgctl msgctl@GLIBC_2.0
|
||||
msgget - msgget i:ii __msgget msgget
|
||||
msgrcv - msgrcv Ci:ibnii __msgrcv msgrcv
|
||||
msgsnd - msgsnd Ci:ibni __msgsnd msgsnd
|
||||
shmat - osf_shmat i:ipi __shmat shmat
|
||||
oldshmctl EXTRA shmctl i:iip __old_shmctl shmctl@GLIBC_2.0
|
||||
shmdt - shmdt i:s __shmdt shmdt
|
||||
shmget - shmget i:iii __shmget shmget
|
||||
semop - semop i:ipi __semop semop
|
||||
semtimedop - semtimedop i:ipip semtimedop
|
||||
semget - semget i:iii __semget semget
|
||||
oldsemctl EXTRA semctl i:iiii __old_semctl semctl@GLIBC_2.0
|
||||
|
||||
sigstack - sigstack 2 sigstack
|
||||
vfork - vfork 0 __vfork vfork
|
||||
|
||||
getpriority - getpriority i:ii __getpriority getpriority
|
||||
|
||||
# proper socket implementations:
|
||||
accept - accept Ci:iBN __libc_accept __accept accept
|
||||
bind - bind i:ipi __bind bind
|
||||
connect - connect Ci:ipi __libc_connect __connect_internal __connect connect
|
||||
getpeername - getpeername i:ipp __getpeername getpeername
|
||||
getsockname - getsockname i:ipp __getsockname getsockname
|
||||
getsockopt - getsockopt i:iiiBN __getsockopt getsockopt
|
||||
listen - listen i:ii __listen listen
|
||||
recv - recv Ci:ibni __libc_recv __recv recv
|
||||
recvfrom - recvfrom Ci:ibniBN __libc_recvfrom __recvfrom recvfrom
|
||||
recvmsg - recvmsg Ci:ipi __libc_recvmsg __recvmsg recvmsg
|
||||
send - send Ci:ibni __libc_send __send send
|
||||
sendmsg - sendmsg Ci:ipi __libc_sendmsg __sendmsg sendmsg
|
||||
sendto - sendto Ci:ibnibn __libc_sendto __sendto sendto
|
||||
setsockopt - setsockopt i:iiibn __setsockopt setsockopt
|
||||
shutdown - shutdown i:ii __shutdown shutdown
|
||||
socket - socket i:iii __socket socket
|
||||
socketpair - socketpair i:iiif __socketpair socketpair
|
||||
|
||||
ptrace - ptrace 4 __ptrace ptrace
|
||||
|
||||
# access pci space protected from machine checks:
|
||||
pciconfig_read EXTRA pciconfig_read 5 pciconfig_read
|
||||
pciconfig_write EXTRA pciconfig_write 5 pciconfig_write
|
||||
pciconfig_iobase EXTRA pciconfig_iobase 3 __pciconfig_iobase pciconfig_iobase
|
||||
|
||||
# support old timeval32 entry points
|
||||
osf_select - osf_select C:5 __select_tv32 __select@GLIBC_2.0 select@GLIBC_2.0
|
||||
osf_gettimeofday - osf_gettimeofday 2 __gettimeofday_tv32 __gettimeofday@GLIBC_2.0 gettimeofday@GLIBC_2.0
|
||||
osf_settimeofday - osf_settimeofday 2 __settimeofday_tv32 settimeofday@GLIBC_2.0
|
||||
osf_getitimer - osf_getitimer 2 __getitimer_tv32 getitimer@GLIBC_2.0
|
||||
osf_setitimer - osf_setitimer 3 __setitimer_tv32 setitimer@GLIBC_2.0
|
||||
osf_utimes - osf_utimes 2 __utimes_tv32 utimes@GLIBC_2.0
|
||||
osf_getrusage - osf_getrusage 2 __getrusage_tv32 getrusage@GLIBC_2.0
|
||||
osf_wait4 - osf_wait4 2 __wait4_tv32 wait4@GLIBC_2.0
|
@ -1,152 +0,0 @@
|
||||
/* Copyright (C) 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. */
|
||||
|
||||
#include <assert.h>
|
||||
#include <stdbool.h>
|
||||
#include <stdlib.h>
|
||||
#include <unistd.h>
|
||||
|
||||
|
||||
static long int linux_sysconf (int name);
|
||||
|
||||
#define CSHAPE(totalsize, linesize, assoc) \
|
||||
((totalsize & ~0xff) | (linesize << 4) | assoc)
|
||||
|
||||
extern long __libc_alpha_cache_shape[4];
|
||||
|
||||
static inline unsigned long
|
||||
implver (void)
|
||||
{
|
||||
unsigned long i;
|
||||
#if __GNUC_PREREQ(3,3)
|
||||
i = __builtin_alpha_implver ();
|
||||
#else
|
||||
asm ("implver %0" : "=r" (i));
|
||||
#endif
|
||||
return i;
|
||||
}
|
||||
|
||||
static inline unsigned long
|
||||
amask (unsigned long x)
|
||||
{
|
||||
unsigned long r;
|
||||
#if __GNUC_PREREQ(3,3)
|
||||
r = __builtin_alpha_amask (x);
|
||||
#else
|
||||
asm ("amask %1,%0" : "=r"(r) : "Ir"(x));
|
||||
#endif
|
||||
return r;
|
||||
}
|
||||
|
||||
/* Get the value of the system variable NAME. */
|
||||
long int
|
||||
__sysconf (int name)
|
||||
{
|
||||
long shape, index;
|
||||
|
||||
/* We only handle the cache information here (for now). */
|
||||
if (name < _SC_LEVEL1_ICACHE_SIZE || name > _SC_LEVEL4_CACHE_LINESIZE)
|
||||
return linux_sysconf (name);
|
||||
|
||||
/* No Alpha has L4 caches. */
|
||||
if (name >= _SC_LEVEL4_CACHE_SIZE)
|
||||
return -1;
|
||||
|
||||
index = (name - _SC_LEVEL1_ICACHE_SIZE) / 3;
|
||||
shape = __libc_alpha_cache_shape[index];
|
||||
if (shape == -2)
|
||||
{
|
||||
long shape_l1i, shape_l1d, shape_l2, shape_l3 = -1;
|
||||
|
||||
/* ??? In the cases below for which we do not know L1 cache sizes,
|
||||
we could do timings to measure sizes. But for the Bcache, it's
|
||||
generally big enough that (without additional help) TLB effects
|
||||
get in the way. We'd either need to be able to allocate large
|
||||
pages or have the kernel do the timings from KSEG. Fortunately,
|
||||
kernels beginning with 2.6.5 will pass us this info in auxvec. */
|
||||
|
||||
switch (implver())
|
||||
{
|
||||
case 0: /* EV4 */
|
||||
/* EV4/LCA45 had 8k L1 caches; EV45 had 16k L1 caches. */
|
||||
/* EV4/EV45 had 128k to 16M 32-byte direct Bcache. LCA45
|
||||
had 64k to 8M 8-byte direct Bcache. Can't tell. */
|
||||
shape_l1i = shape_l1d = shape_l2 = CSHAPE (0, 5, 1);
|
||||
break;
|
||||
|
||||
case 1: /* EV5 */
|
||||
if (amask (1 << 8))
|
||||
{
|
||||
/* MAX insns not present; either EV5 or EV56. */
|
||||
shape_l1i = shape_l1d = CSHAPE(8*1024, 5, 1);
|
||||
/* ??? L2 and L3 *can* be configured as 32-byte line. */
|
||||
shape_l2 = CSHAPE (96*1024, 6, 3);
|
||||
/* EV5/EV56 has 1M to 16M Bcache. */
|
||||
shape_l3 = CSHAPE (0, 6, 1);
|
||||
}
|
||||
else
|
||||
{
|
||||
/* MAX insns present; either PCA56 or PCA57. */
|
||||
/* PCA56 had 16k 64-byte cache; PCA57 had 32k Icache. */
|
||||
/* PCA56 had 8k 64-byte cache; PCA57 had 16k Dcache. */
|
||||
/* PCA5[67] had 512k to 4M Bcache. */
|
||||
shape_l1i = shape_l1d = shape_l2 = CSHAPE (0, 6, 1);
|
||||
}
|
||||
break;
|
||||
|
||||
case 2: /* EV6 */
|
||||
shape_l1i = shape_l1d = CSHAPE(64*1024, 6, 2);
|
||||
/* EV6/EV67/EV68* had 1M to 16M Bcache. */
|
||||
shape_l2 = CSHAPE (0, 6, 1);
|
||||
break;
|
||||
|
||||
case 3: /* EV7 */
|
||||
shape_l1i = shape_l1d = CSHAPE(64*1024, 6, 2);
|
||||
shape_l2 = CSHAPE(7*1024*1024/4, 6, 7);
|
||||
break;
|
||||
|
||||
default:
|
||||
shape_l1i = shape_l1d = shape_l2 = 0;
|
||||
break;
|
||||
}
|
||||
|
||||
__libc_alpha_cache_shape[0] = shape_l1i;
|
||||
__libc_alpha_cache_shape[1] = shape_l1d;
|
||||
__libc_alpha_cache_shape[2] = shape_l2;
|
||||
__libc_alpha_cache_shape[3] = shape_l3;
|
||||
shape = __libc_alpha_cache_shape[index];
|
||||
}
|
||||
|
||||
if (shape <= 0)
|
||||
return shape;
|
||||
|
||||
switch (name % 3)
|
||||
{
|
||||
case 0: /* total size */
|
||||
return shape & -0x100;
|
||||
case 1: /* associativity */
|
||||
return shape & 0xf;
|
||||
default: /* line size */
|
||||
return 1L << ((shape >> 4) & 0xf);
|
||||
}
|
||||
}
|
||||
|
||||
/* Now the generic Linux version. */
|
||||
#undef __sysconf
|
||||
#define __sysconf static linux_sysconf
|
||||
#include "../sysconf.c"
|
@ -1,101 +0,0 @@
|
||||
/* Copyright (C) 1992, 1993, 1995, 1996, 1997, 2002, 2003, 2004, 2007
|
||||
Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by Ulrich Drepper, <drepper@gnu.ai.mit.edu>, August 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. */
|
||||
|
||||
#ifndef _LINUX_ALPHA_SYSDEP_H
|
||||
#define _LINUX_ALPHA_SYSDEP_H 1
|
||||
|
||||
#ifdef __ASSEMBLER__
|
||||
#include <asm/pal.h>
|
||||
#include <alpha/regdef.h>
|
||||
#endif
|
||||
|
||||
/* There is some commonality. */
|
||||
#include <sysdeps/unix/alpha/sysdep.h>
|
||||
|
||||
#include <tls.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
|
||||
|
||||
/* Define some aliases to make automatic syscall generation work
|
||||
properly. The SYS_* variants are for the benefit of the files in
|
||||
sysdeps/unix. */
|
||||
#define __NR_getpid __NR_getxpid
|
||||
#define __NR_getuid __NR_getxuid
|
||||
#define __NR_getgid __NR_getxgid
|
||||
#define SYS_getpid __NR_getxpid
|
||||
#define SYS_getuid __NR_getxuid
|
||||
#define SYS_getgid __NR_getxgid
|
||||
|
||||
/*
|
||||
* Some syscalls no Linux program should know about:
|
||||
*/
|
||||
#define __NR_osf_sigprocmask 48
|
||||
#define __NR_osf_shmat 209
|
||||
#define __NR_osf_getsysinfo 256
|
||||
#define __NR_osf_setsysinfo 257
|
||||
|
||||
/* Help old kernel headers where particular syscalls are not available. */
|
||||
#ifndef __NR_semtimedop
|
||||
# define __NR_semtimedop 423
|
||||
#endif
|
||||
|
||||
/* This is a kludge to make syscalls.list find these under the names
|
||||
pread and pwrite, since some kernel headers define those names
|
||||
and some define the *64 names for the same system calls. */
|
||||
#if !defined __NR_pread && defined __NR_pread64
|
||||
# define __NR_pread __NR_pread64
|
||||
#endif
|
||||
#if !defined __NR_pwrite && defined __NR_pwrite64
|
||||
# define __NR_pwrite __NR_pwrite64
|
||||
#endif
|
||||
|
||||
/*
|
||||
* In order to get the hidden arguments for rt_sigaction set up
|
||||
* properly, we need to call the assembly version. This shouldn't
|
||||
* happen except for inside sigaction.c, where we handle this
|
||||
* specially. Catch other uses and error.
|
||||
*/
|
||||
|
||||
#undef INLINE_SYSCALL
|
||||
#define INLINE_SYSCALL(name, nr, args...) \
|
||||
({ \
|
||||
extern char ChEcK[__NR_##name == __NR_rt_sigaction ? -1 : 1] \
|
||||
__attribute__((unused)); \
|
||||
INLINE_SYSCALL1(name, nr, args); \
|
||||
})
|
||||
|
||||
#undef INTERNAL_SYSCALL
|
||||
#define INTERNAL_SYSCALL(name, err_out, nr, args...) \
|
||||
({ \
|
||||
extern char ChEcK[__NR_##name == __NR_rt_sigaction ? -1 : 1] \
|
||||
__attribute__((unused)); \
|
||||
INTERNAL_SYSCALL1(name, err_out, nr, args); \
|
||||
})
|
||||
|
||||
#endif /* _LINUX_ALPHA_SYSDEP_H */
|
@ -1,18 +0,0 @@
|
||||
#include <stddef.h>
|
||||
#include <sys/ucontext.h>
|
||||
|
||||
--
|
||||
UC_LINK offsetof (ucontext_t, uc_link)
|
||||
UC_OSF_SIGMASK offsetof (ucontext_t, __uc_osf_sigmask)
|
||||
UC_STACK offsetof (ucontext_t, uc_stack)
|
||||
UC_SIGCTX offsetof (ucontext_t, uc_mcontext)
|
||||
UC_SIGMASK offsetof (ucontext_t, uc_sigmask)
|
||||
SC_REGS offsetof (struct sigcontext, sc_regs)
|
||||
SC_FPREGS offsetof (struct sigcontext, sc_fpregs)
|
||||
SC_PC offsetof (struct sigcontext, sc_pc)
|
||||
SC_PS offsetof (struct sigcontext, sc_ps)
|
||||
SC_FPCRS offsetof (struct sigcontext, sc_fpcr)
|
||||
SC_MASK offsetof (struct sigcontext, sc_mask)
|
||||
SC_FPCR offsetof (struct sigcontext, sc_fpcr)
|
||||
SS_SP offsetof (stack_t, ss_sp)
|
||||
SS_SIZE offsetof (stack_t, ss_size)
|
@ -1,123 +0,0 @@
|
||||
/* Copyright (C) 1998, 2003, 2006 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Lesser General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 2.1 of the License, or (at your option) any later version.
|
||||
|
||||
The GNU C Library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public
|
||||
License along with the GNU C Library; if not, write to the Free
|
||||
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||
02111-1307 USA. */
|
||||
|
||||
#include <sysdep.h>
|
||||
#define _ERRNO_H 1
|
||||
#include <bits/errno.h>
|
||||
#include <kernel-features.h>
|
||||
|
||||
.text
|
||||
|
||||
#if defined HAVE_ELF && defined PIC && defined DO_VERSIONING
|
||||
#define UTIMES __utimes_tv64
|
||||
#else
|
||||
#define UTIMES __utimes
|
||||
#endif
|
||||
|
||||
#if defined __ASSUME_TIMEVAL64
|
||||
PSEUDO(UTIMES, utimes, 2)
|
||||
ret
|
||||
PSEUDO_END(UTIMES)
|
||||
#else
|
||||
/* The problem here is that initially we made struct timeval compatible with
|
||||
OSF/1, using int32. But we defined time_t with uint64, and later found
|
||||
that POSIX requires tv_sec to be time_t.
|
||||
|
||||
So now we have to do compatibility stuff. */
|
||||
|
||||
/* The variable is shared between all wrappers around signal handling
|
||||
functions which have RT equivalents. */
|
||||
.comm __libc_missing_axp_tv64, 4
|
||||
|
||||
LEAF(UTIMES, 16)
|
||||
ldgp gp, 0(pv)
|
||||
subq sp, 16, sp
|
||||
#ifdef PROF
|
||||
.set noat
|
||||
lda AT, _mcount
|
||||
jsr AT, (AT), _mcount
|
||||
.set at
|
||||
#endif
|
||||
.prologue 1
|
||||
|
||||
ldl t0, __libc_missing_axp_tv64
|
||||
|
||||
/* Save arguments in case we do need to fall back. */
|
||||
stq a0, 0(sp)
|
||||
stq a1, 8(sp)
|
||||
|
||||
bne t0, $do32
|
||||
|
||||
ldi v0, SYS_ify(utimes)
|
||||
callsys
|
||||
bne a3, $err64
|
||||
|
||||
/* Everything ok. */
|
||||
addq sp, 16, sp
|
||||
ret
|
||||
|
||||
/* If we didn't get ENOSYS, it is a real error. */
|
||||
.align 3
|
||||
$err64: cmpeq v0, ENOSYS, t0
|
||||
beq t0, $error
|
||||
stl t0, __libc_missing_axp_tv64
|
||||
|
||||
/* Recover the saved arguments. */
|
||||
ldq a1, 8(sp)
|
||||
ldq a0, 0(sp)
|
||||
|
||||
.align 3
|
||||
$do32:
|
||||
/* Conditionally bounce values down. */
|
||||
beq a1, 1f
|
||||
ldq t0, 0(a1)
|
||||
ldq t1, 8(a1)
|
||||
ldq t2, 16(a1)
|
||||
ldq t3, 24(a1)
|
||||
stl t0, 0(sp)
|
||||
stl t1, 4(sp)
|
||||
stl t2, 8(sp)
|
||||
stl t3, 12(sp)
|
||||
mov sp, a1
|
||||
|
||||
1: ldi v0, SYS_ify(osf_utimes)
|
||||
callsys
|
||||
bne a3, $error
|
||||
|
||||
addq sp, 16, sp
|
||||
ret
|
||||
|
||||
.align 3
|
||||
$error:
|
||||
addq sp, 16, sp
|
||||
SYSCALL_ERROR_HANDLER
|
||||
|
||||
END(UTIMES)
|
||||
#endif /* __ASSUME_TIMEVAL64 */
|
||||
|
||||
#if defined HAVE_ELF && defined PIC && defined DO_VERSIONING
|
||||
default_symbol_version (__utimes_tv64, __utimes, GLIBC_2.1)
|
||||
|
||||
/* It seems to me to be a misfeature of the assembler that we can only
|
||||
have one version-alias per symbol. So create an alias ourselves.
|
||||
The 'p' is for 'public'. *Shrug* */
|
||||
strong_alias (__utimes_tv64, __utimes_tv64p)
|
||||
default_symbol_version (__utimes_tv64p, utimes, GLIBC_2.1)
|
||||
#else
|
||||
weak_alias (__utimes, utimes)
|
||||
#endif
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user