diff options
author | Ulrich Drepper <drepper@redhat.com> | 1997-01-23 04:24:20 +0000 |
---|---|---|
committer | Ulrich Drepper <drepper@redhat.com> | 1997-01-23 04:24:20 +0000 |
commit | 8d57beeab10d2afd72e2e3bc6b1ad4695b791955 (patch) | |
tree | 1c9bfe3e425125543b2b90c93945576267ffe44e /sysdeps/unix/sysv/linux | |
parent | 1ef32c3dc40295020b91220399d24435f6a78e48 (diff) | |
download | glibc-8d57beeab10d2afd72e2e3bc6b1ad4695b791955.tar.gz glibc-8d57beeab10d2afd72e2e3bc6b1ad4695b791955.tar.xz glibc-8d57beeab10d2afd72e2e3bc6b1ad4695b791955.zip |
update from main archive 970121 cvs/libc-970123
Thu Jan 23 04:06:42 1997 Ulrich Drepper <drepper@cygnus.com> * Make-dist (.PHONY: dist): Remove duplicate declaration. (README): Depend on version.h not version.c. * Makefile (README): Depend on version.h not version.c. * Makeconfig (inst_libdir, inst_slibdir, inst_includedir, inst_datadir, inst_zonedir, inst_localedir, inst_i18ndir, inst_bindir, inst_sbindir, inst_infodir, inst_sysconfdir): New variables. Same as variable withough inst_ but prepended with $(install_root). (localtime-time): Use $(inst_sysconfdir) not $(sysconfdir). * Makefile (install-others): Use $(inst_includedir). (gnu/stabs.h, gnu/lib-names.h): Use $(inst_includedir). * Makerules (tons of install rules): Use inst_% variables. * elf/Makefile: Likewise. * hurd/Makefile: Likewise. * intl/Makefile: Likewise. * manual/Makefile: Likewise. * po/Makefile: Likewise. * sunrpc/Makefile: Likewise. * sysdeps/mach/hurd/Makefile: Likewise. * sysdeps/standalone/i386/force_cpu386/Makefile: Likewise. * time/Makefile: Likewise. * config.make.in: Revert patch from Sat Jan 18 22:15:26 1997, leave install_root in place. * gnu-versions.h (_GNU_GETOPT_INTERFACE_VERSION): Define to 2. * posix/getopt.c (GETOPT_INTERFACE_VERSION): Define to 2. * posix/getopt1.c (GETOPT_INTERFACE_VERSION): Define to 2. * elf/Makefile [yes==$(has-ldconfig)]: Correct dependencies of ldconfig. (CFLAGS-dl-load.c): New variable, avoid gcc warning. * sysdeps/mach/hurd/configure.in: Add _LIBC_REENTRENT to DEFINES. * sysdeps/mach/hurd/getdents.c: Update copyright. De-ANSI-declfy. * sysdeps/stub/getdents.c: Likewise. Correct return value. * sysdeps/unix/getdents.c: Likewise. * sysdeps/unix/sysv/getdents.c: Likewise. * sysdeps/unix/readdir.c: Update copyright. * sysdeps/unix/bsd/sony/newsos4/Makefile: Correct ifeq arguments. * sysdeps/unix/bsd/sun/sunos4/Makefile: Likewise. * sysdeps/unix/sysv/Makefile: Likewise. * sysdeps/unix/sysv/linux/Makefile: Likewise. * sysdeps/unix/sysv/linux/alpha/Makefile: Likewise. * sysdeps/unix/sysv/linux/i386/Makefile: Likewise. * sysdeps/unix/sysv/linux/Dist: Don't distribute kernel_termios.h, but sys/kernel_termios.h. * sysdeps/unix/sysv/linux/alpha/Dist: Likewise. * sysdeps/unix/sysv/linux/Makefile [$(subdir)==termios] (sysdep_headers): Add sys/kernel_termios.h. * sysdeps/unix/sysv/linux/kernel_termios.h: Moved to... * sysdeps/unix/sysv/linux/sys/kernel_termios.h: ...here. * sysdeps/unix/sysv/linux/sys/tcgetattr.c: Use __kernel_termios and __KERNEL_NCCS instead of kernel_termios and KERNEL_NCCS resp. * sysdeps/unix/sysv/linux/alpha/ioctls.h: New file. * sysdeps/unix/sysv/linux/getdents.c: Correct problems with alignment. * sysdeps/unix/sysv/linux/alpha/syscalls.list: Remove getdents. Reported by Eirik Fuller <eirik@netcom.com>. * time/Banner: Removed. Wrong and unnecessary information. It's now in... * time/README: New file. * time/Makefile (distribute): Remove Banner, add README. Wed Jan 22 13:19:56 1997 Richard Henderson <rth@tamu.edu> * sysdeps/unix/sysv/linux/alpha/ioperm.c (platforms): Add Sable. (init_iosys): Recognize /etc/alpha_systype as a four-tuple for the purpose of supporting brand new systems. (*): The type of iosys variables should be iosys_t. 1997-01-22 Paul Eggert <eggert@twinsun.com> * strftime.c (_strftime_copytm): New function, to work around Solaris 2.5 tzset bug. Wed Jan 22 23:05:14 1997 Ulrich Drepper <drepper@cygnus.com> * sysdeps/mach/hurd/vdprintf.c: Complete de-ANSI-declfication. * sysdeps/posix/pipestream.c (writedecl): Fix typo. Reported by Marcus G. Daniels <marcus@shannon.sysc.pdx.edu>. Wed Jan 22 13:58:56 1997 Andreas Jaeger <aj@arthur.pfalz.de> * elf/Makefile (CFLAGS-dl-load.c): New Variable to keep gcc silent since name_copy is initialized. Wed Jan 22 16:58:12 1997 Ulrich Drepper <drepper@cygnus.com> * stdio-common/Makefile (tests): Remove scanf11. * stdio-common/scanf11.c: Removed. * stdio-common/vfscanf.c Revert patch of Thu Jan 16 23:39:25 1997. Although the Corrigendum 1 describes the result as implemented the even more recent Amendement 1 seconds the position of ISO C:1990 where the %n directive has no effect on the assignment count. * stdio-common/bug10.c: Likewise. * stdio-common/scanf1.c: Likewise. * stdio-common/scanf3.c: Likewise. * stdio-common/scanf10.c: Likewise. * stdio-common/tstdiomisc.c: Likewise. * new-malloc/obstack.h: Don't define malloc using bcopy if malloc is not available. This leads to problems since bcopy does not return a value. Instead define _obstack_memcpy based on memcpy or bcopy. This name isn't used outside obstack.h and so no problems from using the memcpy function in a file including obstack.h can result. Reported by Martin Trapp <trapp@ipd.info.uni-karlsruhe.de>. Tue Jan 21 18:35:55 1997 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de> * misc/regexp.h (compile): Fix typos. Tue Jan 21 01:01:59 1997 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de> * sysdeps/unix/sysv/linux/sys/procfs.h (struct elf_prpsinfo): Fix type of pr_{pid,ppid,pgrp,sid} fields. * sysdeps/unix/sysv/linux/alpha/sys/procfs.h (struct elf_prpsinfo): Likewise.
Diffstat (limited to 'sysdeps/unix/sysv/linux')
-rw-r--r-- | sysdeps/unix/sysv/linux/Dist | 2 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/Makefile | 18 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/alpha/Dist | 2 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/alpha/Makefile | 2 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/alpha/ioctls.h | 39 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/alpha/ioperm.c | 194 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/alpha/sys/kernel_termios.h (renamed from sysdeps/unix/sysv/linux/alpha/kernel_termios.h) | 6 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/alpha/sys/procfs.h | 2 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/alpha/syscalls.list | 1 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/configure | 2 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/getdents.c | 26 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/i386/Makefile | 2 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/sys/kernel_termios.h (renamed from sysdeps/unix/sysv/linux/kernel_termios.h) | 6 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/sys/procfs.h | 2 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/tcgetattr.c | 6 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/tcsetattr.c | 6 |
16 files changed, 189 insertions, 127 deletions
diff --git a/sysdeps/unix/sysv/linux/Dist b/sysdeps/unix/sysv/linux/Dist index b96d1dfcf6..c5a2f179ee 100644 --- a/sysdeps/unix/sysv/linux/Dist +++ b/sysdeps/unix/sysv/linux/Dist @@ -1,6 +1,5 @@ init-first.h kernel_sigaction.h -kernel_termios.h llseek.c siglist.h sysctl.c @@ -18,6 +17,7 @@ sys/debugreg.h sys/io.h sys/kd.h sys/kdaemon.h +sys/kernel_termios.h sys/klog.h sys/module.h sys/mount.h diff --git a/sysdeps/unix/sysv/linux/Makefile b/sysdeps/unix/sysv/linux/Makefile index 97fb5f14a5..ae2e294785 100644 --- a/sysdeps/unix/sysv/linux/Makefile +++ b/sysdeps/unix/sysv/linux/Makefile @@ -1,10 +1,10 @@ -ifeq ($(subdir), csu) +ifeq ($(subdir),csu) CFLAGS-init-first.c = -fkeep-inline-functions sysdep_routines += errno-loc endif -ifeq ($(subdir), misc) +ifeq ($(subdir),misc) sysdep_routines += sysctl clone llseek sysdep_headers += sys/mount.h sys/acct.h sys/sysctl.h sys/mtio.h \ @@ -28,29 +28,29 @@ $(objpfx)syscall-%.h $(objpfx)syscall-%.d: ../sysdeps/unix/sysv/linux/sys/syscal generated += syscall-list.h syscall-list.d endif -ifeq ($(subdir), time) +ifeq ($(subdir),time) sysdep_headers += sys/timex.h endif -ifeq ($(subdir), socket) +ifeq ($(subdir),socket) sysdep_headers += sys/socketcall.h net/if.h net/if_ppp.h net/ppp-comp.h \ net/ppp_defs.h net/if_arp.h net/route.h endif -ifeq ($(subdir), sunrpc) +ifeq ($(subdir),sunrpc) sysdep_headers += nfs/nfs.h endif -ifeq ($(subdir), termios) -sysdep_headers += termio.h +ifeq ($(subdir),termios) +sysdep_headers += termio.h sys/kernel_termios.h endif -ifeq ($(subdir), stdio-common) +ifeq ($(subdir),stdio-common) # Just disable the auto generation in sysdeps/generic inhibit-siglist := yes endif -ifeq ($(subdir), inet) +ifeq ($(subdir),inet) sysdep_headers += netinet/in_systm.h sys/socketvar.h endif diff --git a/sysdeps/unix/sysv/linux/alpha/Dist b/sysdeps/unix/sysv/linux/alpha/Dist index cdb11e98d0..f3c4cb92d6 100644 --- a/sysdeps/unix/sysv/linux/alpha/Dist +++ b/sysdeps/unix/sysv/linux/alpha/Dist @@ -4,7 +4,7 @@ ioperm.c init-first.h clone.S sys/io.h -kernel_sigaction.h kernel_termios.h sys/acct.h +sys/kernel_sigaction.h sys/procfs.h diff --git a/sysdeps/unix/sysv/linux/alpha/Makefile b/sysdeps/unix/sysv/linux/alpha/Makefile index 3908b5703c..fa2c078664 100644 --- a/sysdeps/unix/sysv/linux/alpha/Makefile +++ b/sysdeps/unix/sysv/linux/alpha/Makefile @@ -1,4 +1,4 @@ -ifeq ($(subdir), misc) +ifeq ($(subdir),misc) sysdep_headers += alpha/ptrace.h alpha/regdef.h sysdep_routines += ieee_get_fp_control ieee_set_fp_control \ diff --git a/sysdeps/unix/sysv/linux/alpha/ioctls.h b/sysdeps/unix/sysv/linux/alpha/ioctls.h new file mode 100644 index 0000000000..80b2e62e77 --- /dev/null +++ b/sysdeps/unix/sysv/linux/alpha/ioctls.h @@ -0,0 +1,39 @@ +/* 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 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., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + +#ifndef _IOCTLS_H +#define _IOCTLS_H 1 + +/* Use the definitions from the kernel header files. */ +#include <asm/ioctls.h> +#include <sys/kernel_termios.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, struct __kernel_termios) +#define TCSETS _IOW ('t', 20, struct __kernel_termios) +#define TCSETSW _IOW ('t', 21, struct __kernel_termios) +#define TCSETSF _IOW ('t', 22, struct __kernel_termios) + +#include <linux/sockios.h> + +#endif /* ioctls.h */ diff --git a/sysdeps/unix/sysv/linux/alpha/ioperm.c b/sysdeps/unix/sysv/linux/alpha/ioperm.c index 924fc473b2..488265a069 100644 --- a/sysdeps/unix/sysv/linux/alpha/ioperm.c +++ b/sysdeps/unix/sysv/linux/alpha/ioperm.c @@ -1,36 +1,36 @@ -/* Copyright (C) 1992, 1996 Free Software Foundation, Inc. -This file is part of the GNU C Library. -Contributed by David Mosberger. +/* Copyright (C) 1992, 1996, 1997 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 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 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. + 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. */ + 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., 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. + Modern devices hopefully are sane enough not to put any performance + critical registers in i/o space. -On the first call to ioperm() or _sethae(), 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). + On the first call to ioperm() or _sethae(), 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!). */ + 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!). */ #include <errno.h> #include <fcntl.h> @@ -66,27 +66,30 @@ I/O address space that's 512MB large!). */ #define CIA_SPARSE_MEM (0xfffffc8000000000UL) #define CIA_DENSE_MEM (0xfffffc8600000000UL) +#define T2_IO_BASE (0xfffffc03a0000000UL) +#define T2_SPARSE_BASE (0xfffffc0200000000UL) +#define T2_DENSE_BASE (0xfffffc03c0000000UL) -enum { - IOSYS_JENSEN = 0, IOSYS_APECS = 1, IOSYS_CIA = 2 +typedef enum { + IOSYS_UNKNOWN, IOSYS_JENSEN, IOSYS_APECS, IOSYS_CIA, IOSYS_T2 } iosys_t; struct ioswtch { - void (*sethae)(unsigned long addr); - void (*outb)(unsigned char b, unsigned long port); - void (*outw)(unsigned short b, unsigned long port); - void (*outl)(unsigned int b, unsigned long port); - unsigned int (*inb)(unsigned long port); - unsigned int (*inw)(unsigned long port); - unsigned int (*inl)(unsigned long port); + 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 platform { - const char *name; - int io_sys; - int hae_shift; - unsigned long bus_memory_base; - unsigned long sparse_bus_memory_base; + const char *name; + int io_sys; + iosys_t hae_shift; + unsigned long int bus_memory_base; + unsigned long int sparse_bus_memory_base; } platform[] = { {"Alcor", IOSYS_CIA, 5, CIA_DENSE_MEM, CIA_SPARSE_MEM}, {"Avanti", IOSYS_APECS, 5, APECS_DENSE_MEM, APECS_SPARSE_MEM}, @@ -99,27 +102,29 @@ static struct platform { {"Mikasa", IOSYS_APECS, 5, APECS_DENSE_MEM, APECS_SPARSE_MEM}, {"Mustang", IOSYS_APECS, 5, APECS_DENSE_MEM, APECS_SPARSE_MEM}, {"Noname", IOSYS_APECS, 5, APECS_DENSE_MEM, APECS_SPARSE_MEM}, + {"Sable", IOSYS_T2, 5, T2_DENSE_MEM, T2_SPARSE_MEM}, }; static struct { struct hae { - unsigned long cache; - unsigned long * reg; + unsigned long int cache; + unsigned long int * reg; } hae; - unsigned long base; + unsigned long int base; struct ioswtch * swp; - int sys; + unsigned long int bus_memory_base; + unsigned long int sparse_bus_memory_base; + unsigned long int io_base; + iosys_t sys; int hae_shift; - unsigned long bus_memory_base; - unsigned long sparse_bus_memory_base; } io; -extern void __sethae (unsigned long); /* we can't use asm/io.h */ +extern void __sethae (unsigned long int); /* we can't use asm/io.h */ -static inline unsigned long -port_to_cpu_addr (unsigned long port, int iosys, int size) +static inline unsigned long int +port_to_cpu_addr (unsigned long int port, iosys_t iosys, int size) { if (iosys == IOSYS_JENSEN) return (port << 7) + ((size - 1) << 5) + io.base; @@ -129,7 +134,7 @@ port_to_cpu_addr (unsigned long port, int iosys, int size) static inline void -inline_sethae (unsigned long addr, int iosys) +inline_sethae (unsigned long int addr, iosys_t iosys) { if (iosys == IOSYS_JENSEN) { @@ -143,7 +148,7 @@ inline_sethae (unsigned long addr, int iosys) } else { - unsigned long msb; + unsigned long int msb; /* no need to set hae if msb is 0: */ msb = addr & 0xf8000000; @@ -157,10 +162,10 @@ inline_sethae (unsigned long addr, int iosys) static inline void -inline_outb (unsigned char b, unsigned long port, int iosys) +inline_outb (unsigned char b, unsigned long int port, iosys_t iosys) { unsigned int w; - unsigned long addr = port_to_cpu_addr (port, iosys, 1); + unsigned long int addr = port_to_cpu_addr (port, iosys, 1); inline_sethae (0, iosys); asm ("insbl %2,%1,%0" : "r=" (w) : "ri" (port & 0x3), "r" (b)); @@ -170,10 +175,10 @@ inline_outb (unsigned char b, unsigned long port, int iosys) static inline void -inline_outw (unsigned short b, unsigned long port, int iosys) +inline_outw (unsigned short int b, unsigned long int port, iosys_t iosys) { unsigned int w; - unsigned long addr = port_to_cpu_addr (port, iosys, 2); + unsigned long int addr = port_to_cpu_addr (port, iosys, 2); inline_sethae (0, iosys); asm ("inswl %2,%1,%0" : "r=" (w) : "ri" (port & 0x3), "r" (b)); @@ -183,9 +188,9 @@ inline_outw (unsigned short b, unsigned long port, int iosys) static inline void -inline_outl (unsigned int b, unsigned long port, int iosys) +inline_outl (unsigned int b, unsigned long int port, iosys_t iosys) { - unsigned long addr = port_to_cpu_addr (port, iosys, 4); + unsigned long int addr = port_to_cpu_addr (port, iosys, 4); if (port >= MAX_PORT) return; @@ -197,9 +202,9 @@ inline_outl (unsigned int b, unsigned long port, int iosys) static inline unsigned int -inline_inb (unsigned long port, int iosys) +inline_inb (unsigned long int port, iosys_t iosys) { - unsigned long result, addr = port_to_cpu_addr (port, iosys, 1); + unsigned long int result, addr = port_to_cpu_addr (port, iosys, 1); inline_sethae (0, iosys); result = *(vuip) addr; @@ -209,9 +214,9 @@ inline_inb (unsigned long port, int iosys) static inline unsigned int -inline_inw (unsigned long port, int iosys) +inline_inw (unsigned long int port, iosys_t iosys) { - unsigned long result, addr = port_to_cpu_addr (port, iosys, 2); + unsigned long int result, addr = port_to_cpu_addr (port, iosys, 2); inline_sethae (0, iosys); result = *(vuip) addr; @@ -221,9 +226,9 @@ inline_inw (unsigned long port, int iosys) static inline unsigned int -inline_inl (unsigned long port, int iosys) +inline_inl (unsigned long int port, iosys_t iosys) { - unsigned long addr = port_to_cpu_addr (port, iosys, 4); + unsigned long int addr = port_to_cpu_addr (port, iosys, 4); inline_sethae (0, iosys); return *(vuip) addr; @@ -232,14 +237,14 @@ inline_inl (unsigned long port, int iosys) #define DCL_SETHAE(name, iosys) \ static void \ -name##_sethae (unsigned long addr) \ +name##_sethae (unsigned long int addr) \ { \ inline_sethae (addr, IOSYS_##iosys); \ } #define DCL_OUT(name, func, type, iosys) \ static void \ -name##_##func (unsigned type b, unsigned long addr) \ +name##_##func (unsigned type b, unsigned long int addr) \ { \ inline_##func (b, addr, IOSYS_##iosys); \ } @@ -247,7 +252,7 @@ name##_##func (unsigned type b, unsigned long addr) \ #define DCL_IN(name, func, iosys) \ static unsigned int \ -name##_##func (unsigned long addr) \ +name##_##func (unsigned long int addr) \ { \ return inline_##func (addr, IOSYS_##iosys); \ } @@ -255,7 +260,7 @@ name##_##func (unsigned long addr) \ DCL_SETHAE(jensen, JENSEN) DCL_OUT(jensen, outb, char, JENSEN) -DCL_OUT(jensen, outw, short, JENSEN) +DCL_OUT(jensen, outw, short int, JENSEN) DCL_OUT(jensen, outl, int, JENSEN) DCL_IN(jensen, inb, JENSEN) DCL_IN(jensen, inw, JENSEN) @@ -266,7 +271,7 @@ DCL_IN(jensen, inl, JENSEN) DCL_SETHAE(apecs, APECS) DCL_OUT(apecs, outb, char, APECS) -DCL_OUT(apecs, outw, short, APECS) +DCL_OUT(apecs, outw, short int, APECS) DCL_OUT(apecs, outl, int, APECS) DCL_IN(apecs, inb, APECS) DCL_IN(apecs, inw, APECS) @@ -291,6 +296,10 @@ struct ioswtch ioswtch[] = { * with, we first try to read the value of symlink PATH_ALPHA_SYSTYPE, * if that fails, we lookup the "system type" field in /proc/cpuinfo. * If that fails as well, we give up. + * + * If the value received from PATH_ALPHA_SYSTYPE begins with a number, + * assume this is a previously unsupported system and the values encode, + * in order, "<io_base>,<hae_shift>,<dense_base>,<sparse_base>". */ static int init_iosys (void) @@ -298,10 +307,21 @@ init_iosys (void) char systype[256]; int i, n; - n = readlink(PATH_ALPHA_SYSTYPE, systype, sizeof(systype) - 1); + n = readlink (PATH_ALPHA_SYSTYPE, systype, sizeof (systype) - 1); if (n > 0) { systype[n] = '\0'; + if (isdigit (systype[0])) + { + if (sscanf (systype, "%li,%i,%li,%li", &io.io_base, &io.hae_shift, + &io.bus_memory_base, &io.sparse_bus_memory_base) == 4) + { + io.sys = IOSYS_UNKNOWN; + io.swp = &ioswtch[1]; + return 0; + } + /* else we're likely going to fail with the system match below */ + } } else { @@ -318,14 +338,14 @@ init_iosys (void) else fgets (systype, 256, fp); } - fclose(fp); + fclose (fp); if (n == EOF) { /* 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"); + fprintf (stderr, + "ioperm.init_iosys(): Unable to determine system type.\n" + "\t(May need " PATH_ALPHA_SYSTYPE " symlink?)\n"); __set_errno (ENODEV); return -1; } @@ -355,9 +375,9 @@ init_iosys (void) int -_ioperm (unsigned long from, unsigned long num, int turn_on) +_ioperm (unsigned long int from, unsigned long int num, int turn_on) { - unsigned long addr, len; + unsigned long int addr, len; int prot; if (!io.swp && init_iosys () < 0) @@ -374,7 +394,7 @@ _ioperm (unsigned long from, unsigned long num, int turn_on) { if (!io.base) { - unsigned long base; + unsigned long int base; int fd; io.hae.reg = 0; /* not used in user-level */ @@ -387,6 +407,7 @@ _ioperm (unsigned long from, unsigned long num, int turn_on) switch (io.sys) { + case IOSYS_UNKNOWN: base = io.io_base; break; case IOSYS_JENSEN: base = JENSEN_IO_BASE; break; case IOSYS_APECS: base = APECS_IO_BASE; break; case IOSYS_CIA: base = CIA_IO_BASE; break; @@ -398,7 +419,8 @@ _ioperm (unsigned long from, unsigned long num, int turn_on) addr &= PAGE_MASK; len = port_to_cpu_addr (MAX_PORT, io.sys, 1) - addr; io.base = - (unsigned long) __mmap (0, len, PROT_NONE, MAP_SHARED, fd, base); + (unsigned long int) __mmap (0, len, PROT_NONE, MAP_SHARED, + fd, base); close (fd); if ((long) io.base == -1) return -1; @@ -437,7 +459,7 @@ _iopl (unsigned int level) void -_sethae (unsigned long addr) +_sethae (unsigned long int addr) { if (!io.swp && init_iosys () < 0) return; @@ -447,7 +469,7 @@ _sethae (unsigned long addr) void -_outb (unsigned char b, unsigned long port) +_outb (unsigned char b, unsigned long int port) { if (port >= MAX_PORT) return; @@ -457,7 +479,7 @@ _outb (unsigned char b, unsigned long port) void -_outw (unsigned short b, unsigned long port) +_outw (unsigned short b, unsigned long int port) { if (port >= MAX_PORT) return; @@ -467,7 +489,7 @@ _outw (unsigned short b, unsigned long port) void -_outl (unsigned int b, unsigned long port) +_outl (unsigned int b, unsigned long int port) { if (port >= MAX_PORT) return; @@ -477,27 +499,27 @@ _outl (unsigned int b, unsigned long port) unsigned int -_inb (unsigned long port) +_inb (unsigned long int port) { return io.swp->inb (port); } unsigned int -_inw (unsigned long port) +_inw (unsigned long int port) { return io.swp->inw (port); } unsigned int -_inl (unsigned long port) +_inl (unsigned long int port) { return io.swp->inl (port); } -unsigned long +unsigned long int _bus_base(void) { if (!io.swp && init_iosys () < 0) @@ -505,7 +527,7 @@ _bus_base(void) return io.bus_memory_base; } -unsigned long +unsigned long int _bus_base_sparse(void) { if (!io.swp && init_iosys () < 0) diff --git a/sysdeps/unix/sysv/linux/alpha/kernel_termios.h b/sysdeps/unix/sysv/linux/alpha/sys/kernel_termios.h index cb030e4de4..eebe976ce1 100644 --- a/sysdeps/unix/sysv/linux/alpha/kernel_termios.h +++ b/sysdeps/unix/sysv/linux/alpha/sys/kernel_termios.h @@ -1,14 +1,14 @@ /* The following corresponds to the values from the Linux 2.1.20 kernel. */ -#define KERNEL_NCCS 19 +#define __KERNEL_NCCS 19 -struct kernel_termios +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_cc[__KERNEL_NCCS]; /* control characters */ cc_t c_line; /* line discipline */ speed_t c_ispeed; /* input speed */ speed_t c_ospeed; /* output speed */ diff --git a/sysdeps/unix/sysv/linux/alpha/sys/procfs.h b/sysdeps/unix/sysv/linux/alpha/sys/procfs.h index 03af029254..7bd6e6958d 100644 --- a/sysdeps/unix/sysv/linux/alpha/sys/procfs.h +++ b/sysdeps/unix/sysv/linux/alpha/sys/procfs.h @@ -94,7 +94,7 @@ struct elf_prpsinfo unsigned long int pr_flag; /* Flags. */ unsigned int pr_uid; unsigned int pr_gid; - unsigned int pr_pid, pr_ppid, pr_pgrp, pr_sid; + 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. */ diff --git a/sysdeps/unix/sysv/linux/alpha/syscalls.list b/sysdeps/unix/sysv/linux/alpha/syscalls.list index cf5f439bc4..71407062fb 100644 --- a/sysdeps/unix/sysv/linux/alpha/syscalls.list +++ b/sysdeps/unix/sysv/linux/alpha/syscalls.list @@ -17,7 +17,6 @@ semctl - semctl 4 __semctl semctl osf_sigprocmask - osf_sigprocmask 2 __osf_sigprocmask -getdents - getdents 3 __getdirentries getdirentries getpeername - getpeername 3 __getpeername getpeername getpriority - getpriority 2 __getpriority getpriority mmap - mmap 6 __mmap mmap diff --git a/sysdeps/unix/sysv/linux/configure b/sysdeps/unix/sysv/linux/configure index 20923215ae..a6137d9ba8 100644 --- a/sysdeps/unix/sysv/linux/configure +++ b/sysdeps/unix/sysv/linux/configure @@ -20,7 +20,7 @@ else #include "confdefs.h" #include <linux/version.h> int main() { -#if LINUX_VERSION_CODE < ( *65536+ 0 *256+ 10) /* .0.10 */ +#if LINUX_VERSION_CODE < (2 *65536+ 0 *256+ 10) /* 2.0.10 */ eat flaming death #endif ; return 0; } diff --git a/sysdeps/unix/sysv/linux/getdents.c b/sysdeps/unix/sysv/linux/getdents.c index 0504393e67..40b31617ef 100644 --- a/sysdeps/unix/sysv/linux/getdents.c +++ b/sysdeps/unix/sysv/linux/getdents.c @@ -16,10 +16,12 @@ write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ +#include <alloca.h> #include <dirent.h> #include <stddef.h> #include <string.h> #include <unistd.h> +#include <sys/param.h> #include <sys/types.h> #include <linux/posix_types.h> @@ -52,8 +54,7 @@ struct kernel_dirent in the buffer. Taking this number allows us to specify a correct number of bytes to read. If we should be wrong, we can reset the file descriptor. */ -int __getdirentries __P ((int fd, char *buf, size_t nbytes, off_t *basep)); -int +ssize_t __getdirentries (fd, buf, nbytes, basep) int fd; char *buf; @@ -62,32 +63,33 @@ __getdirentries (fd, buf, nbytes, basep) { off_t base = __lseek (fd, (off_t) 0, SEEK_CUR); size_t red_nbytes; - struct kernel_dirent *kdp; + struct kernel_dirent *skdp, *kdp; struct dirent *dp; int retval; red_nbytes = nbytes - (nbytes / (offsetof (struct dirent, d_name) + 3)); dp = (struct dirent *) buf; - kdp = (struct kernel_dirent *) (buf + (nbytes - red_nbytes)); + skdp = kdp = __alloca (red_nbytes); retval = __getdents (fd, (char *) kdp, red_nbytes); - while ((char *) kdp < buf + (nbytes - red_nbytes) + retval) + while ((char *) kdp < (char *) skdp + retval) { + const size_t size_diff = MAX (offsetof (struct dirent, d_name) + - offsetof (struct kernel_dirent, d_name), + __alignof__ (struct dirent)); dp->d_ino = kdp->d_ino; dp->d_off = kdp->d_off; - dp->d_reclen = (kdp->d_reclen - + (offsetof (struct dirent, d_name) - - offsetof (struct kernel_dirent, d_name))); + dp->d_reclen = kdp->d_reclen + size_diff; dp->d_type = DT_UNKNOWN; - memmove (dp->d_name, kdp->d_name, - kdp->d_reclen - offsetof (struct kernel_dirent, d_name)); + memcpy (dp->d_name, kdp->d_name, + kdp->d_reclen - offsetof (struct kernel_dirent, d_name)); dp = (struct dirent *) (((char *) dp) + dp->d_reclen); kdp = (struct kernel_dirent *) (((char *) kdp) + kdp->d_reclen); - if ((char *) dp >= (char *) kdp) + if ((char *) dp >= buf + nbytes) { /* Our heuristic failed. We read too many entries. Reset the stream. */ @@ -99,7 +101,7 @@ __getdirentries (fd, buf, nbytes, basep) if (basep) *basep = base; - return (char *) dp - (char *) buf; + return (char *) dp - buf; } weak_alias (__getdirentries, getdirentries) diff --git a/sysdeps/unix/sysv/linux/i386/Makefile b/sysdeps/unix/sysv/linux/i386/Makefile index 77c9ad3e85..2ecedd4b15 100644 --- a/sysdeps/unix/sysv/linux/i386/Makefile +++ b/sysdeps/unix/sysv/linux/i386/Makefile @@ -1,4 +1,4 @@ -ifeq ($(subdir), misc) +ifeq ($(subdir),misc) sysdep_routines += ioperm iopl vm86 sysdep_headers += sys/perm.h sys/vm86.h endif diff --git a/sysdeps/unix/sysv/linux/kernel_termios.h b/sysdeps/unix/sysv/linux/sys/kernel_termios.h index 3b2653b2cd..95349760f0 100644 --- a/sysdeps/unix/sysv/linux/kernel_termios.h +++ b/sysdeps/unix/sysv/linux/sys/kernel_termios.h @@ -1,13 +1,13 @@ /* The following corresponds to the values from the Linux 2.1.20 kernel. */ -#define KERNEL_NCCS 19 +#define __KERNEL_NCCS 19 -struct kernel_termios +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_line; /* line discipline */ - cc_t c_cc[KERNEL_NCCS]; /* control characters */ + cc_t c_cc[__KERNEL_NCCS]; /* control characters */ }; diff --git a/sysdeps/unix/sysv/linux/sys/procfs.h b/sysdeps/unix/sysv/linux/sys/procfs.h index e8d32390fa..a1190a348f 100644 --- a/sysdeps/unix/sysv/linux/sys/procfs.h +++ b/sysdeps/unix/sysv/linux/sys/procfs.h @@ -94,7 +94,7 @@ struct elf_prpsinfo unsigned long int pr_flag; /* Flags. */ unsigned short int pr_uid; unsigned short int pr_gid; - unsigned short int pr_pid, pr_ppid, pr_pgrp, pr_sid; + 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. */ diff --git a/sysdeps/unix/sysv/linux/tcgetattr.c b/sysdeps/unix/sysv/linux/tcgetattr.c index 2e8cb1cf79..9578c4b772 100644 --- a/sysdeps/unix/sysv/linux/tcgetattr.c +++ b/sysdeps/unix/sysv/linux/tcgetattr.c @@ -23,7 +23,7 @@ /* The difference here is that the termios structure used in the kernel is not the same as we use in the libc. Therefore we must translate it here. */ -#include <kernel_termios.h> +#include <sys/kernel_termios.h> /* Put the state of FD into *TERMIOS_P. */ int @@ -31,7 +31,7 @@ __tcgetattr (fd, termios_p) int fd; struct termios *termios_p; { - struct kernel_termios k_termios; + struct __kernel_termios k_termios; int retval; size_t cnt; @@ -48,7 +48,7 @@ __tcgetattr (fd, termios_p) #ifdef _HAVE_C_OSPEED termios_p->c_ospeed = k_termios.c_ospeed; #endif - for (cnt = 0; cnt < KERNEL_NCCS; ++cnt) + for (cnt = 0; cnt < __KERNEL_NCCS; ++cnt) termios_p->c_cc[cnt] = k_termios.c_cc[cnt]; return retval; diff --git a/sysdeps/unix/sysv/linux/tcsetattr.c b/sysdeps/unix/sysv/linux/tcsetattr.c index 3bb3e9f5ec..6c128110f6 100644 --- a/sysdeps/unix/sysv/linux/tcsetattr.c +++ b/sysdeps/unix/sysv/linux/tcsetattr.c @@ -24,7 +24,7 @@ /* The difference here is that the termios structure used in the kernel is not the same as we use in the libc. Therefore we must translate it here. */ -#include <kernel_termios.h> +#include <sys/kernel_termios.h> /* Set the state of FD to *TERMIOS_P. */ @@ -34,7 +34,7 @@ tcsetattr (fd, optional_actions, termios_p) int optional_actions; const struct termios *termios_p; { - struct kernel_termios k_termios; + struct __kernel_termios k_termios; unsigned long int cmd; size_t cnt; @@ -65,7 +65,7 @@ tcsetattr (fd, optional_actions, termios_p) #ifdef _HAVE_C_OSPEED k_termios.c_ospeed = termios_p->c_ospeed; #endif - for (cnt = 0; cnt < KERNEL_NCCS; ++cnt) + for (cnt = 0; cnt < __KERNEL_NCCS; ++cnt) k_termios.c_cc[cnt] = termios_p->c_cc[cnt]; return __ioctl (fd, cmd, &k_termios); |