From bfc04a9ff126ea5fdbe08e281bfc61b93f31429b Mon Sep 17 00:00:00 2001 From: Roland McGrath Date: Mon, 19 Feb 1996 23:14:44 +0000 Subject: Sun Feb 18 15:08:10 1996 Andreas Schwab * sysdeps/posix/utimes.c (__utimes): There are 1000000 usecs in a sec. Sun Feb 18 13:56:00 1996 Andreas Schwab * elf/Makefile, time/Makefile: Make `all' the default target. Mon Feb 19 18:09:04 1996 Roland McGrath * misc/sys/ptrace.h: Moved to ... * sysdeps/generic/sys/ptrace.h: ... here. * sys/ptrace.h: File removed. Sun Feb 18 12:13:07 1996 Andreas Schwab * sysdeps/unix/sysv/linux/Makefile (headers): Add fpu_control.h. * sysdeps/unix/sysv/linux/i386/sysdep.S (errno): Put it into .bss so that the symbol alias works. * sysdeps/unix/sysv/linux/m68k/fpu_control.h (_FPU_SETCW): Corrected. * sysdeps/unix/sysv/linux/resourcebits.h: New file. * sysdeps/unix/sysv/linux/sys/ptrace.h: New file. * sysdeps/unix/sysv/linux/syscalls.list: Add getegid, geteuid, getppid and reboot. * sysdeps/unix/sysv/linux/sysconf.c: Special version that does not use getdtablesize. Sat Feb 17 10:30:21 1996 David Mosberger-Tang * stdio-common/printf_fp.c, stdlib/strtod.c, sysdeps/ieee754/dbl2mpn.c, sysdeps/ieee754/ldbl2mpn.c, sysdeps/ieee754/mpn2dbl.c, sysdeps/ieee754/mpn2ldbl.c: Cast left operands of shift instructions to `long' where necessary. Thu Feb 15 20:04:50 1996 Ulrich Drepper * stdlib/fpioconst.h: Introduce new constant _FPIO_CONST_OFFSET. * stdio-common/printf_fp.c, stdlib/strtod.c: Use _FPIO_CONST_OFFSET to correctly access MPN array depending on architecture. --- sysdeps/generic/dl-sysdep.c | 3 +- sysdeps/generic/machine-gmon.h | 44 +++++++ sysdeps/generic/sys/ptrace.h | 138 ++++++++++++++++++++ sysdeps/ieee754/mpn2ldbl.c | 8 +- sysdeps/m68k/bsd-_setjmp.S | 2 +- sysdeps/m68k/bsd-setjmp.S | 2 +- sysdeps/posix/utimes.c | 4 +- sysdeps/stub/msync.c | 2 +- sysdeps/unix/Makefile | 2 + sysdeps/unix/closedir.c | 6 +- sysdeps/unix/dirstream.h | 7 +- sysdeps/unix/opendir.c | 26 ++-- sysdeps/unix/readdir.c | 4 +- sysdeps/unix/seekdir.c | 6 +- sysdeps/unix/sysv/linux/Makefile | 6 +- sysdeps/unix/sysv/linux/direct.h | 43 ------- sysdeps/unix/sysv/linux/i386/sysdep.S | 9 +- sysdeps/unix/sysv/linux/m68k/fpu_control.h | 2 +- sysdeps/unix/sysv/linux/resourcebits.h | 50 ++++++++ sysdeps/unix/sysv/linux/sys/ptrace.h | 98 ++++++++++++++ sysdeps/unix/sysv/linux/syscalls.list | 4 + sysdeps/unix/sysv/linux/sysconf.c | 198 ++++++++++++++++++++++++++++- sysdeps/unix/telldir.c | 4 +- 23 files changed, 582 insertions(+), 86 deletions(-) create mode 100644 sysdeps/generic/machine-gmon.h create mode 100644 sysdeps/generic/sys/ptrace.h delete mode 100644 sysdeps/unix/sysv/linux/direct.h create mode 100644 sysdeps/unix/sysv/linux/resourcebits.h create mode 100644 sysdeps/unix/sysv/linux/sys/ptrace.h (limited to 'sysdeps') diff --git a/sysdeps/generic/dl-sysdep.c b/sysdeps/generic/dl-sysdep.c index 5337ed6936..546993dbd1 100644 --- a/sysdeps/generic/dl-sysdep.c +++ b/sysdeps/generic/dl-sysdep.c @@ -1,5 +1,5 @@ /* Operating system support for run-time dynamic linker. Generic Unix version. -Copyright (C) 1995 Free Software Foundation, Inc. +Copyright (C) 1995, 96 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 @@ -27,6 +27,7 @@ extern int _dl_argc; extern char **_dl_argv; extern char **_environ; extern void _start (void); +extern int _dl_secure; Elf32_Addr _dl_sysdep_start (void **start_argptr, diff --git a/sysdeps/generic/machine-gmon.h b/sysdeps/generic/machine-gmon.h new file mode 100644 index 0000000000..24101f34f0 --- /dev/null +++ b/sysdeps/generic/machine-gmon.h @@ -0,0 +1,44 @@ +/* Machine-dependent definitions for profiling support. Generic GCC 2 version. +Copyright (C) 1996 Free Software Foundation, Inc. +This file is part of the GNU C Library. + +The GNU C Library is free software; you can redistribute it and/or +modify it under the terms of the GNU Library General Public License as +published by the Free Software Foundation; either version 2 of the +License, or (at your option) any later version. + +The GNU C Library is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +Library General Public License for more details. + +You should have received a copy of the GNU Library General Public +License along with the GNU C Library; see the file COPYING.LIB. If +not, write to the Free Software Foundation, Inc., 675 Mass Ave, +Cambridge, MA 02139, USA. */ + +/* GCC version 2 gives us a perfect magical function to get + just the information we need: + void *__builtin_return_address (unsigned int N) + returns the return address of the frame N frames up. */ + +#if __GNUC__ < 2 + #error "This file uses __builtin_return_address, a GCC 2 extension." +#endif + +#include +#ifndef NO_UNDERSCORES +/* The asm symbols for C functions are `_function'. + The canonical name for the counter function is `mcount', no _. */ +void _mcount (void) asm ("mcount"); +#endif + +#define _MCOUNT_DECL(frompc, selfpc) \ +static inline void mcount_internal (frompc, selfpc) + +#define MCOUNT \ +void _mcount (void) \ +{ \ + mcount_internal ((u_long) __builtin_return_address (0), \ + (u_long) __builtin_return_address (1)); \ +} diff --git a/sysdeps/generic/sys/ptrace.h b/sysdeps/generic/sys/ptrace.h new file mode 100644 index 0000000000..a342e62d64 --- /dev/null +++ b/sysdeps/generic/sys/ptrace.h @@ -0,0 +1,138 @@ +/* `ptrace' debugger support interface. Generic version; constants are common. +Copyright (C) 1991, 1992 Free Software Foundation, Inc. +This file is part of the GNU C Library. + +The GNU C Library is free software; you can redistribute it and/or +modify it under the terms of the GNU Library General Public License as +published by the Free Software Foundation; either version 2 of the +License, or (at your option) any later version. + +The GNU C Library is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +Library General Public License for more details. + +You should have received a copy of the GNU Library General Public +License along with the GNU C Library; see the file COPYING.LIB. If +not, write to the, 1992 Free Software Foundation, Inc., 675 Mass Ave, +Cambridge, MA 02139, USA. */ + +#ifndef _PTRACE_H + +#define _PTRACE_H 1 +#include + +__BEGIN_DECLS + + +/* Type of the REQUEST argument to `ptrace.' */ +enum __ptrace_request +{ + /* Indicate that the process making this request should be traced. + All signals received by this process can be intercepted by its + parent, and its parent can use the other `ptrace' requests. */ + PTRACE_TRACEME = 0, +#define PT_TRACE_ME PTRACE_TRACEME + + /* Return the word in the process's text space at address ADDR. */ + PTRACE_PEEKTEXT, +#define PT_READ_I PTRACE_PEEKTEXT + + /* Return the word in the process's data space at address ADDR. */ + PTRACE_PEEKDATA, +#define PT_READ_D PTRACE_PEEKDATA + + /* Return the word in the process's user area at offset ADDR. */ + PTRACE_PEEKUSER, +#define PT_READ_U PTRACE_PEEKUSER + + /* Write the word DATA into the process's text space at address ADDR. */ + PTRACE_POKETEXT, +#define PT_WRITE_I PTRACE_POKETEXT + + /* Write the word DATA into the process's data space at address ADDR. */ + PTRACE_POKEDATA, +#define PT_WRITE_D PTRACE_POKEDATA + + /* Write the word DATA into the process's user space at offset ADDR. */ + PTRACE_POKEUSER, +#define PT_WRITE_U PTRACE_POKEUSER + + /* Continue the process. */ + PTRACE_CONT, +#define PT_CONTINUE PTRACE_CONT + + /* Kill the process. */ + PTRACE_KILL, +#define PT_KILL PTRACE_KILL + + /* Single step the process. + This is not supported on all machines. */ + PTRACE_SINGLESTEP, +#define PT_STEP PTRACE_SINGLESTEP + + /* Attach to a process that is already running. */ + PTRACE_ATTACH, +#define PT_ATTACH PTRACE_ATTACH + + /* Detach from a process attached to with PTRACE_ATTACH. */ + PTRACE_DETACH, +#define PT_DETACH PTRACE_DETACH + + /* Get the process's registers (not including floating-point registers) + and put them in the `struct regs' (see ) at ADDR. */ + PTRACE_GETREGS = 12, + + /* Set the process's registers (not including floating-point registers) + to the contents of the `struct regs' (see ) at ADDR. */ + PTRACE_SETREGS, + + /* Get the process's floating point registers and put them + in the `struct fp_status' (see ) at ADDR. */ + PTRACE_GETFPREGS = 14, + + /* Set the process's floating point registers to the contents + of the `struct fp_status' (see ) at ADDR. */ + PTRACE_SETFPREGS, + + /* Read DATA bytes from the process's data space at address ADDR. + Put the result starting at address ADDR2 in the caller's + address space. */ + PTRACE_READDATA = 16, + + /* Write DATA bytes from ADDR2 in the caller's address space into + the process's data space at address ADDR. */ + PTRACE_WRITEDATA, + + /* Read DATA bytes from the process's text space at address ADDR. + Put the result starting at address ADDR2 in the caller's + address space. */ + PTRACE_READTEXT = 18, + + /* Write DATA bytes from ADDR2 in the caller's address space into + the process's text space at address ADDR. */ + PTRACE_WRITETEXT, + + /* Read the floating-point accelerator unit registers and + put them into the `struct fpa_regs' (see ) at ADDR. */ + PTRACE_GETFPAREGS = 20, + + /* Write the floating-point accelerator unit registers from + the contents of the `struct fpa_regs' at ADDR. */ + PTRACE_SETFPAREGS, +}; + +/* Perform process tracing functions. REQUEST is one of the values + above, and determines the action to be taken. + For all requests except PTRACE_TRACEME, PID specifies the process to be + traced. + + PID and the other arguments described above for the various requests should + appear (those that are used for the particular request) as: + pid_t PID, void *ADDR, int DATA, void *ADDR2 + after REQUEST. */ +extern int ptrace __P ((enum __ptrace_request __request __DOTS)); + +__END_DECLS + +#endif /* ptrace.h */ diff --git a/sysdeps/ieee754/mpn2ldbl.c b/sysdeps/ieee754/mpn2ldbl.c index 9142f97e89..03774a33c3 100644 --- a/sysdeps/ieee754/mpn2ldbl.c +++ b/sysdeps/ieee754/mpn2ldbl.c @@ -1,4 +1,4 @@ -/* Copyright (C) 1995 Free Software Foundation, Inc. +/* Copyright (C) 1995, 1996 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or @@ -23,20 +23,20 @@ Cambridge, MA 02139, USA. */ /* Convert a multi-precision integer of the needed number of bits (64 for long double) and an integral power of two to a `long double' in IEEE854 - extended-precision format. */ + extended-precision format. */ long double __mpn_construct_long_double (mp_srcptr frac_ptr, int expt, int sign) { union ieee854_long_double u; - + u.ieee.negative = sign; u.ieee.exponent = expt + IEEE854_LONG_DOUBLE_BIAS; #if BITS_PER_MP_LIMB == 32 u.ieee.mantissa1 = frac_ptr[0]; u.ieee.mantissa0 = frac_ptr[1]; #elif BITS_PER_MP_LIMB == 64 - u.ieee.mantissa1 = frac_ptr[0] & ((1 << 32) - 1); + u.ieee.mantissa1 = frac_ptr[0] & ((1L << 32) - 1); u.ieee.mantissa0 = frac_ptr[0] >> 32; #else #error "mp_limb size " BITS_PER_MP_LIMB "not accounted for" diff --git a/sysdeps/m68k/bsd-_setjmp.S b/sysdeps/m68k/bsd-_setjmp.S index db777cf67d..69aa7de04c 100644 --- a/sysdeps/m68k/bsd-_setjmp.S +++ b/sysdeps/m68k/bsd-_setjmp.S @@ -23,7 +23,7 @@ Cambridge, MA 02139, USA. */ #include -#if defined (MOTOROLA_SYNTAX) || defined (ELF_SYNTAX) +#ifdef MOTOROLA_SYNTAX #define d0 %d0 #define d1 %d1 #define PUSH(reg) move.l reg, -(%sp) diff --git a/sysdeps/m68k/bsd-setjmp.S b/sysdeps/m68k/bsd-setjmp.S index c1794978bc..c853516824 100644 --- a/sysdeps/m68k/bsd-setjmp.S +++ b/sysdeps/m68k/bsd-setjmp.S @@ -23,7 +23,7 @@ Cambridge, MA 02139, USA. */ #include -#if defined (MOTOROLA_SYNTAX) || defined (ELF_SYNTAX) +#ifdef MOTOROLA_SYNTAX #define d0 %d0 #define d1 %d1 #define PUSH(reg) move.l reg, -(%sp) diff --git a/sysdeps/posix/utimes.c b/sysdeps/posix/utimes.c index 2c92803cbc..ba2f0bde9d 100644 --- a/sysdeps/posix/utimes.c +++ b/sysdeps/posix/utimes.c @@ -31,8 +31,8 @@ __utimes (const char *file, struct timeval tvp[2]) if (tvp) { times = &buf; - times->actime = tvp[0].tv_sec + tvp[0].tv_usec / 1000; - times->modtime = tvp[1].tv_sec + tvp[1].tv_usec / 1000; + times->actime = tvp[0].tv_sec + tvp[0].tv_usec / 1000000; + times->modtime = tvp[1].tv_sec + tvp[1].tv_usec / 1000000; } else times = NULL; diff --git a/sysdeps/stub/msync.c b/sysdeps/stub/msync.c index 01cc4dd410..a01c474422 100644 --- a/sysdeps/stub/msync.c +++ b/sysdeps/stub/msync.c @@ -25,7 +25,7 @@ Cambridge, MA 02139, USA. */ unpredictable before this is done. */ int -msync (caddr_t addr, size_t len, int flags) +msync (caddr_t addr, size_t len) { errno = ENOSYS; return -1; diff --git a/sysdeps/unix/Makefile b/sysdeps/unix/Makefile index fd4166615d..0496cf8272 100644 --- a/sysdeps/unix/Makefile +++ b/sysdeps/unix/Makefile @@ -295,9 +295,11 @@ $(objpfx)sysd-syscalls: $(..)sysdeps/unix/make-syscalls.sh \ # This syscall objects depend on s-proto.d, which is generated to # specify dependencies generated syscalls with have on headers. ifdef subdir +ifndef no_deps # These deps use file names relative to a subdir, so don't # include them in the parent directory. -include $(objpfx)s-proto.d endif +endif endif diff --git a/sysdeps/unix/closedir.c b/sysdeps/unix/closedir.c index 6acbb62e87..5f1ac7439a 100644 --- a/sysdeps/unix/closedir.c +++ b/sysdeps/unix/closedir.c @@ -1,4 +1,4 @@ -/* Copyright (C) 1991, 1993, 1995, 1996 Free Software Foundation, Inc. +/* Copyright (C) 1991, 1993, 1995 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 @@ -37,9 +37,9 @@ DEFUN(closedir, (dirp), DIR *dirp) return -1; } - fd = dirp->fd; + fd = dirp->__fd; - free ((PTR) dirp->data); + free ((PTR) dirp->__data); free ((PTR) dirp); return __close (fd); diff --git a/sysdeps/unix/dirstream.h b/sysdeps/unix/dirstream.h index 52d2337125..72fd67c722 100644 --- a/sysdeps/unix/dirstream.h +++ b/sysdeps/unix/dirstream.h @@ -1,4 +1,4 @@ -/* Copyright (C) 1993, 1995, 1996 Free Software Foundation, Inc. +/* Copyright (C) 1993, 1995 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 @@ -20,7 +20,8 @@ Cambridge, MA 02139, USA. */ #define _DIRSTREAM_H 1 -#include +#define __need_size_t +#include /* Directory stream type. @@ -36,7 +37,7 @@ struct __dirstream size_t __offset; /* Current offset into the block. */ size_t __size; /* Total valid data in the block. */ - off_t pos; /* Position of next entry to read. */ + struct dirent __entry; /* Returned by `readdir'. */ }; #define _DIR_dirfd(dirp) ((dirp)->__fd) diff --git a/sysdeps/unix/opendir.c b/sysdeps/unix/opendir.c index 31111e8c50..5cd620676a 100644 --- a/sysdeps/unix/opendir.c +++ b/sysdeps/unix/opendir.c @@ -1,4 +1,4 @@ -/* Copyright (C) 1991, 92, 93, 94, 95, 96 Free Software Foundation, Inc. +/* Copyright (C) 1991, 1992, 1993, 1994, 1995 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 @@ -16,6 +16,7 @@ License along with the GNU C Library; see the file COPYING.LIB. If not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ +#include #include #include #include @@ -27,11 +28,12 @@ Cambridge, MA 02139, USA. */ #include #include +#include "direct.h" /* This file defines `struct direct'. */ #include "dirstream.h" /* Open a directory stream on NAME. */ DIR * -opendir (const char *name) +DEFUN(opendir, (name), CONST char *name) { DIR *dirp; struct stat statbuf; @@ -60,7 +62,7 @@ opendir (const char *name) goto lose; } - dirp = (DIR *) calloc (1, sizeof (DIR)); /* Zero-fill. */ + dirp = (DIR *) calloc (1, sizeof (DIR) + NAME_MAX); /* Zero-fill. */ if (dirp == NULL) lose: { @@ -71,24 +73,24 @@ opendir (const char *name) } #ifdef _STATBUF_ST_BLKSIZE - if (statbuf.st_blksize < sizeof (struct dirent)) - dirp->allocation = sizeof (struct dirent); + if (statbuf.st_blksize < sizeof (struct direct)) + dirp->__allocation = sizeof (struct direct); else - dirp->allocation = statbuf.st_blksize; + dirp->__allocation = statbuf.st_blksize; #else - dirp->allocation = (BUFSIZ < sizeof (struct dirent) ? - sizeof (struct dirent) : BUFSIZ); + dirp->__allocation = (BUFSIZ < sizeof (struct direct) ? + sizeof (struct direct) : BUFSIZ); #endif - dirp->data = (char *) malloc (dirp->allocation); - if (dirp->data == NULL) + dirp->__data = (char *) malloc (dirp->__allocation); + if (dirp->__data == NULL) { int save = errno; - free (dirp); + free ((PTR) dirp); (void) __close (fd); errno = save; return NULL; } - dirp->fd = fd; + dirp->__fd = fd; return dirp; } diff --git a/sysdeps/unix/readdir.c b/sysdeps/unix/readdir.c index b1d7e43231..1842948a35 100644 --- a/sysdeps/unix/readdir.c +++ b/sysdeps/unix/readdir.c @@ -1,4 +1,4 @@ -/* Copyright (C) 1991, 92, 93, 94, 95, 96 Free Software Foundation, Inc. +/* Copyright (C) 1991, 1992, 1993, 1994, 1995 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 @@ -77,8 +77,6 @@ DEFUN(readdir, (dirp), DIR *dirp) p = memchr ((PTR) dp->d_name, '\0', D_NAMLEN (dp) + 1); d->d_namlen = (p != NULL) ? p - dp->d_name : D_NAMLEN (dp); memcpy (d->d_name, dp->d_name, d->d_namlen + 1); - d->d_type = DT_UNKNOWN; - d->d_reclen = &d->d_name[d->d_namlen + 1] - (char *) d; return d; } } diff --git a/sysdeps/unix/seekdir.c b/sysdeps/unix/seekdir.c index 02390d7854..018f697c21 100644 --- a/sysdeps/unix/seekdir.c +++ b/sysdeps/unix/seekdir.c @@ -27,7 +27,7 @@ Cambridge, MA 02139, USA. */ void DEFUN(seekdir, (dirp, pos), DIR *dirp AND __off_t pos) { - (void) __lseek(dirp->fd, pos, SEEK_SET); - dirp->size = 0; - dirp->offset = 0; + (void) __lseek(dirp->__fd, pos, SEEK_SET); + dirp->__size = 0; + dirp->__offset = 0; } diff --git a/sysdeps/unix/sysv/linux/Makefile b/sysdeps/unix/sysv/linux/Makefile index c96d0827e3..79334e6425 100644 --- a/sysdeps/unix/sysv/linux/Makefile +++ b/sysdeps/unix/sysv/linux/Makefile @@ -1,7 +1,9 @@ ifeq ($(subdir), math) sysdep_routines += setfpucw extra-objs += ieee-fpucw.o +headers += fpu_control.h install-lib += libieee.a +non-lib.a += libieee.a $(objpfx)libieee.a: $(objpfx)ieee-fpucw.o rm -f $@ @@ -22,10 +24,6 @@ sysdep_routines += adjtimex headers += sys/timex.h endif -ifeq ($(subdir), sysvipc) -sysdep_routines += ipc -endif - ifeq ($(subdir), socket) headers += sys/socketcall.h endif diff --git a/sysdeps/unix/sysv/linux/direct.h b/sysdeps/unix/sysv/linux/direct.h deleted file mode 100644 index ef88147d81..0000000000 --- a/sysdeps/unix/sysv/linux/direct.h +++ /dev/null @@ -1,43 +0,0 @@ -/* Copyright (C) 1992, 1993 Free Software Foundation, Inc. -This file is part of the GNU C Library. - -The GNU C Library is free software; you can redistribute it and/or -modify it under the terms of the GNU Library General Public License as -published by the Free Software Foundation; either version 2 of the -License, or (at your option) any later version. - -The GNU C Library is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -Library General Public License for more details. - -You should have received a copy of the GNU Library General Public -License along with the GNU C Library; see the file COPYING.LIB. If -not, write to the Free Software Foundation, Inc., 675 Mass Ave, -Cambridge, MA 02139, USA. */ - -#ifndef _BSDDIR_H -#define _BSDDIR_H 1 - -#include - -/* This is what system V calls a "struct dirent". */ - -struct direct - { - unsigned long int d_fileno; - long int d_off; - unsigned short int d_reclen; - char d_name[NAME_MAX + 1]; - }; - -#include - -/* We calculate the length of the name by taking the length of the whole - `struct direct' record, subtracting the size of everything before the - name, and subtracting one for the terminating null. */ - -#define D_NAMLEN(d) \ - ((d)->d_reclen - offsetof (struct direct, d_name) - 1) - -#endif diff --git a/sysdeps/unix/sysv/linux/i386/sysdep.S b/sysdeps/unix/sysv/linux/i386/sysdep.S index 42f4854797..0130ad02a9 100644 --- a/sysdeps/unix/sysv/linux/i386/sysdep.S +++ b/sysdeps/unix/sysv/linux/i386/sysdep.S @@ -23,8 +23,15 @@ Cambridge, MA 02139, USA. */ it somewhere else. ...and this place is here. */ -.comm errno,4,4 + .bss + .globl errno + .type errno,@object + .size errno,4 +errno: .space 4 + .globl _errno + .type _errno,@object _errno = errno /* This name is expected by hj libc.so.5 startup code. */ + .text /* The following code is not used at all in the shared library. The PIC system call stubs set errno themselves. */ diff --git a/sysdeps/unix/sysv/linux/m68k/fpu_control.h b/sysdeps/unix/sysv/linux/m68k/fpu_control.h index 0bbbb08916..0b3623d9a3 100644 --- a/sysdeps/unix/sysv/linux/m68k/fpu_control.h +++ b/sysdeps/unix/sysv/linux/m68k/fpu_control.h @@ -95,7 +95,7 @@ typedef unsigned int fpu_control_t __attribute__ ((__mode__ (__SI__))); /* Macros for accessing the hardware control word. */ #define _FPU_GETCW(cw) __asm__ ("fmove%.l %!, %0" : "=dm" (cw)) -#define _FPU_SETCW(cw) __asm__ ("fmove%.l %0, %!" : "dm" (cw)) +#define _FPU_SETCW(cw) __asm__ volatile ("fmove%.l %0, %!" : : "dm" (cw)) /* Default control word set at startup. */ extern fpu_control_t __fpu_control; diff --git a/sysdeps/unix/sysv/linux/resourcebits.h b/sysdeps/unix/sysv/linux/resourcebits.h new file mode 100644 index 0000000000..9cd6ab46d8 --- /dev/null +++ b/sysdeps/unix/sysv/linux/resourcebits.h @@ -0,0 +1,50 @@ +/* Bit values for resource limits. Linux version. +Copyright (C) 1996 Free Software Foundation, Inc. +This file is part of the GNU C Library. + +The GNU C Library is free software; you can redistribute it and/or +modify it under the terms of the GNU Library General Public License as +published by the Free Software Foundation; either version 2 of the +License, or (at your option) any later version. + +The GNU C Library is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +Library General Public License for more details. + +You should have received a copy of the GNU Library General Public +License along with the GNU C Library; see the file COPYING.LIB. If +not, write to the Free Software Foundation, Inc., 675 Mass Ave, +Cambridge, MA 02139, USA. */ + +/* These are the values for Linux. */ + +/* Kinds of resource limit. */ +enum __rlimit_resource + { + /* Per-process CPU limit, in seconds. */ + RLIMIT_CPU, + /* Largest file that can be created, in bytes. */ + RLIMIT_FSIZE, + /* Maximum size of data segment, in bytes. */ + RLIMIT_DATA, + /* Maximum size of stack segment, in bytes. */ + RLIMIT_STACK, + /* Largest core file that can be created, in bytes. */ + 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, + /* Number of processes. */ + RLIMIT_NPROC, + /* Number of open files. */ + RLIMIT_OFILE, + RLIMIT_NOFILE = RLIMIT_OFILE, /* Another name for the same thing. */ + /* Locked-in-memory address space. */ + RLIMIT_MEMLOCK, + + RLIMIT_NLIMITS, /* Number of limit flavors. */ + RLIM_NLIMITS = RLIMIT_NLIMITS /* Traditional name for same. */ + }; diff --git a/sysdeps/unix/sysv/linux/sys/ptrace.h b/sysdeps/unix/sysv/linux/sys/ptrace.h new file mode 100644 index 0000000000..51d3317af2 --- /dev/null +++ b/sysdeps/unix/sysv/linux/sys/ptrace.h @@ -0,0 +1,98 @@ +/* `ptrace' debugger support interface. Linux version. +Copyright (C) 1996 Free Software Foundation, Inc. +This file is part of the GNU C Library. + +The GNU C Library is free software; you can redistribute it and/or +modify it under the terms of the GNU Library General Public License as +published by the Free Software Foundation; either version 2 of the +License, or (at your option) any later version. + +The GNU C Library is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +Library General Public License for more details. + +You should have received a copy of the GNU Library General Public +License along with the GNU C Library; see the file COPYING.LIB. If +not, write to the, 1992 Free Software Foundation, Inc., 675 Mass Ave, +Cambridge, MA 02139, USA. */ + +#ifndef _SYS_PTRACE_H +#define _SYS_PTRACE_H + +#include + +__BEGIN_DECLS + +/* Type of the REQUEST argument to `ptrace.' */ +enum __ptrace_request +{ + /* Indicate that the process making this request should be traced. + All signals received by this process can be intercepted by its + parent, and its parent can use the other `ptrace' requests. */ + PTRACE_TRACEME = 0, +#define PT_TRACE_ME PTRACE_TRACEME + + /* Return the word in the process's text space at address ADDR. */ + PTRACE_PEEKTEXT, +#define PT_READ_I PTRACE_PEEKTEXT + + /* Return the word in the process's data space at address ADDR. */ + PTRACE_PEEKDATA, +#define PT_READ_D PTRACE_PEEKDATA + + /* Return the word in the process's user area at offset ADDR. */ + PTRACE_PEEKUSER, +#define PT_READ_U PTRACE_PEEKUSER + + /* Write the word DATA into the process's text space at address ADDR. */ + PTRACE_POKETEXT, +#define PT_WRITE_I PTRACE_POKETEXT + + /* Write the word DATA into the process's data space at address ADDR. */ + PTRACE_POKEDATA, +#define PT_WRITE_D PTRACE_POKEDATA + + /* Write the word DATA into the process's user area at offset ADDR. */ + PTRACE_POKEUSER, +#define PT_WRITE_U PTRACE_POKEUSER + + /* Continue the process. */ + PTRACE_CONT, +#define PT_CONTINUE PTRACE_CONT + + /* Kill the process. */ + PTRACE_KILL, +#define PT_KILL PTRACE_KILL + + /* Single step the process. + This is not supported on all machines. */ + PTRACE_SINGLESTEP, +#define PT_STEP PTRACE_SINGLESTEP + + /* Attach to a process that is already running. */ + PTRACE_ATTACH = 0x10, +#define PT_ATTACH PTRACE_ATTACH + + /* Detach from a process attached to with PTRACE_ATTACH. */ + PTRACE_DETACH, +#define PT_DETACH PTRACE_DETACH + + /* Continue and stop at the next (return from) syscall. */ + PTRACE_SYSCALL = 24, +}; + +/* Perform process tracing functions. REQUEST is one of the values + above, and determines the action to be taken. + For all requests except PTRACE_TRACEME, PID specifies the process to be + traced. + + PID and the other arguments described above for the various requests should + appear (those that are used for the particular request) as: + pid_t PID, void *ADDR, int DATA, void *ADDR2 + after REQUEST. */ +extern int ptrace __P ((enum __ptrace_request __request __DOTS)); + +__END_DECLS + +#endif /* sys/ptrace.h */ diff --git a/sysdeps/unix/sysv/linux/syscalls.list b/sysdeps/unix/sysv/linux/syscalls.list index 7ed7282a70..9601f0651e 100644 --- a/sysdeps/unix/sysv/linux/syscalls.list +++ b/sysdeps/unix/sysv/linux/syscalls.list @@ -2,8 +2,11 @@ adjtimex adjtime adjtimex 1 __adjtimex fork - fork 0 __fork fork +getegid - getegid 0 __getegid getegid +geteuid - geteuid 0 __geteuid geteuid getpgid - getpgid 1 getpgid getpgrp - getpgrp 0 getpgrp +getppid - getppid 0 __getppid getppid getsid - getsid 1 getsid gtty - gtty 2 gtty ipc msgget ipc 5 __ipc @@ -13,6 +16,7 @@ mount - mount 5 __mount mount munlock - munlock 2 __munlock munlock munlockall - munlockall 0 __munlockall munlockall pipe - pipe 1 __pipe pipe +reboot - reboot 3 reboot s_ptrace ptrace ptrace 4 __syscall_ptrace setpgid - setpgid 2 setpgid sigpending - sigpending 1 sigpending diff --git a/sysdeps/unix/sysv/linux/sysconf.c b/sysdeps/unix/sysv/linux/sysconf.c index e366d04a8b..447cfd46ae 100644 --- a/sysdeps/unix/sysv/linux/sysconf.c +++ b/sysdeps/unix/sysv/linux/sysconf.c @@ -1 +1,197 @@ -#include +/* Copyright (C) 1991, 1993, 1995 Free Software Foundation, Inc. +This file is part of the GNU C Library. + +The GNU C Library is free software; you can redistribute it and/or +modify it under the terms of the GNU Library General Public License as +published by the Free Software Foundation; either version 2 of the +License, or (at your option) any later version. + +The GNU C Library is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +Library General Public License for more details. + +You should have received a copy of the GNU Library General Public +License along with the GNU C Library; see the file COPYING.LIB. If +not, write to the Free Software Foundation, Inc., 675 Mass Ave, +Cambridge, MA 02139, USA. */ + +#include +#include +#include +#include +#include +#include +#include + +extern size_t EXFUN(__getpagesize, (NOARGS)); + +/* Get the value of the system variable NAME. */ +long int +DEFUN(__sysconf, (name), int name) +{ + switch (name) + { + default: + errno = EINVAL; + return -1; + + case _SC_ARG_MAX: +#ifdef ARG_MAX + return ARG_MAX; +#else + return -1; +#endif + + case _SC_CHILD_MAX: +#ifdef CHILD_MAX + return CHILD_MAX; +#else + return -1; +#endif + + case _SC_CLK_TCK: +#ifdef CLK_TCK + return CLK_TCK; +#else + return 60; +#endif + + case _SC_NGROUPS_MAX: +#ifdef NGROUPS_MAX + return NGROUPS_MAX; +#else + return -1; +#endif + + case _SC_OPEN_MAX: + return OPEN_MAX; + + case _SC_STREAM_MAX: +#ifdef STREAM_MAX + return STREAM_MAX; +#else + return FOPEN_MAX; +#endif + + case _SC_TZNAME_MAX: + return __tzname_max (); + + case _SC_JOB_CONTROL: +#ifdef _POSIX_JOB_CONTROL + return 1; +#else + return -1; +#endif + case _SC_SAVED_IDS: +#ifdef _POSIX_SAVED_IDS + return 1; +#else + return -1; +#endif + case _SC_VERSION: + return _POSIX_VERSION; + + case _SC_PAGESIZE: + return __getpagesize (); + + case _SC_BC_BASE_MAX: +#ifdef BC_BASE_MAX + return BC_BASE_MAX; +#else + return -1; +#endif + + case _SC_BC_DIM_MAX: +#ifdef BC_DIM_MAX + return BC_DIM_MAX; +#else + return -1; +#endif + + case _SC_BC_SCALE_MAX: +#ifdef BC_SCALE_MAX + return BC_SCALE_MAX; +#else + return -1; +#endif + + case _SC_BC_STRING_MAX: +#ifdef BC_STRING_MAX + return BC_STRING_MAX; +#else + return -1; +#endif + + case _SC_EQUIV_CLASS_MAX: +#ifdef EQUIV_CLASS_MAX + return EQUIV_CLASS_MAX; +#else + return -1; +#endif + + case _SC_EXPR_NEST_MAX: +#ifdef EXPR_NEST_MAX + return EXPR_NEST_MAX; +#else + return -1; +#endif + + case _SC_LINE_MAX: +#ifdef LINE_MAX + return LINE_MAX; +#else + return -1; +#endif + + case _SC_RE_DUP_MAX: +#ifdef RE_DUP_MAX + return RE_DUP_MAX; +#else + return -1; +#endif + + + case _SC_2_VERSION: + /* This is actually supposed to return the version + of the 1003.2 utilities on the system {POSIX2_VERSION}. */ + return _POSIX2_C_VERSION; + + case _SC_2_C_BIND: +#ifdef _POSIX2_C_BIND + return _POSIX2_C_BIND; +#else + return -1; +#endif + + case _SC_2_C_DEV: +#ifdef _POSIX2_C_DEV + return _POSIX2_C_DEV; +#else + return -1; +#endif + + case _SC_2_FORT_DEV: +#ifdef _POSIX2_FORT_DEV + return _POSIX2_FORT_DEV; +#else + return -1; +#endif + + case _SC_2_LOCALEDEF: +#ifdef _POSIX2_LOCALEDEF + return _POSIX2_LOCALEDEF; +#else + return -1; +#endif + + case _SC_2_SW_DEV: +#ifdef _POSIX2_SW_DEV + return _POSIX2_SW_DEV; +#else + return -1; +#endif + } +} + +weak_alias (__sysconf, sysconf) diff --git a/sysdeps/unix/telldir.c b/sysdeps/unix/telldir.c index c319d71df7..2b611b0fca 100644 --- a/sysdeps/unix/telldir.c +++ b/sysdeps/unix/telldir.c @@ -36,8 +36,8 @@ DEFUN(telldir, (dirp), DIR *dirp) return (off_t) -1; } - pos = __lseek(dirp->fd, (off_t) 0, SEEK_CUR); + pos = __lseek(dirp->__fd, (off_t) 0, SEEK_CUR); if (pos == (off_t) -1) return (off_t) -1; - return pos + dirp->size - dirp->offset; + return pos + dirp->__size - dirp->__offset; } -- cgit v1.2.3