diff options
author | Ulrich Drepper <drepper@redhat.com> | 1997-05-21 01:48:59 +0000 |
---|---|---|
committer | Ulrich Drepper <drepper@redhat.com> | 1997-05-21 01:48:59 +0000 |
commit | 1f205a479b43e5e40672fe5b4ae8f717b28c41b1 (patch) | |
tree | 0611b2d3503d81c55b27b235119ae999f1271178 /sysdeps/unix | |
parent | 43b0e40f85770cd1f362c3abbad41e09bd9f0b17 (diff) | |
download | glibc-1f205a479b43e5e40672fe5b4ae8f717b28c41b1.zip glibc-1f205a479b43e5e40672fe5b4ae8f717b28c41b1.tar.gz glibc-1f205a479b43e5e40672fe5b4ae8f717b28c41b1.tar.bz2 |
Update.cvs/libc-ud-970520
1997-05-21 02:49 Ulrich Drepper <drepper@cygnus.com>
* gnu-versions.h (_GNU_OBSTACK_INTERFACE_VERSION): Set to 2 since
interface was changed with addition of _obstack_memory_used.
Suggested by Ian Taylor <ian@cygnus.com>.
* malloc/obstack.c: Include <config.h>. Include <stdlib.h> only
if __GNU_LIBRARY__ or HAVE_STDLIB_H is defined.
Reported by Ian Taylor <ian@cygnus.com>.
* dirent/Makefile (routines): Add versionsort.
* dirent/dirent.h: Add prototype for versionsort.
* dirent/versionsort.c: New file.
* manual/filesys.texi: Add documentation for versionsort.
* manual/string.texi: Add documentation for strverscmp.
* string/Makefile (routines): Add strverscmp.
(tests): Add tst-svc.
* string/string.h: Add prototype for strverscmp.
* string/strverscmp.c: New file.
* string/tst-svc.c: New file. Test for strverscmp.
* string/tst-svc.input: New file. Input data for tst-svc.
* string/tst-svc.expect: New file. Expected out from tst-svc.
* math/Makefile (calls): Add s_signbit.
* po/sv.po: Update.
* resolv/nss_dns/dns-host.c: Add casts to prevent warnings.
* sunrpc/pmap_rmt.c: Likewise.
* string/basename.c: Don't use ISO C definition style.
Include <config.h> is HAVE_CONFIG_H is defined.
* sunrpc/proto.h: Add `const' wherever possible.
* sunrpc/rpc_cout.c: Likewise.
* sunrpc/rpc_svcout.c: Likewise.
* sunrpc/xdr_mem.c: Likewise.
* sunrpc/xdr_rec.c: Likewise.
* sunrpc/xdr_stdio.c: Likewise.
* sunrpc/rpc_parse.c: Delete comma from end of enum definition.
* sunrpc/xdr.c: Little code cleanups.
* sunrpc/xdr_flaot.c: Likewise.
Patches by Matthew Wilcox <matthew.wilcox@chbs.mhs.ciba.com>.
* sysdeps/i386/fpu/__math.h (__finite): Fix typo.
* sysdeps/unix/sysv/linux/shmdt.c: Add cast to prevent warning.
* time/europe: Update from tzdata1997f.
* time/zic.c: Update from tzcode1997e.
1997-05-20 19:20 Miguel de Icaza <miguel@athena.nuclecu.unam.mx>
* sysdeps/sparc/setjmp.S: Flush windows.
Bug found by Richard Henderson.
1997-05-19 12:54 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* misc/efgcvt_r.c (fcvt_r, ecvt_r): Rewritten as to fit the specs.
1997-05-19 18:41 Thorsten Kukuk <kukuk@uni-paderborn.de>
* nis/nss_nisplus/nisplus-spwd.c (_nss_nisplus_parse_spent): Use
atol instead of atoi.
1997-05-18 00:22 Philip Blundell <pjb27@cam.ac.uk>
* inet/Makefile (routines): Add if_index.
* sysdeps/unix/sysv/linux/if_index.c: New file.
* sysdeps/stub/if_index.c: New file.
* sysdeps/unix/sysv/linux/net/if.h: Add prototypes for routines in
if_index.c (required by IPv6 basic API).
* sysdeps/unix/sysv/linux/netinet/in.h: Add struct ipv6_pktinfo.
1997-05-17 23:29 Philip Blundell <pjb27@cam.ac.uk>
* sysdeps/unix/sysv/linux/netinet/in.h: Update IPv6 definitions
for new advanced API draft.
1997-05-13 21:33 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* stdio-common/printf_fp.c: Only use the field width for deciding
on padding when printing special values.
* stdio-common/printf_fphex.c: Likewise.
1997-05-15 13:14 Miles Bader <miles@gnu.ai.mit.edu>
Changes by Thomas Bushnell <thomas@gnu.ai.mit.edu>:
* hurd/hurdauth.c (_S_msg_add_auth): Implement correctly.
1997-05-12 14:50 Thomas Bushnell, n/BSG <thomas@gnu.ai.mit.edu>
* hurd/hurdsig.c (_hurdsig_init): Double size of sigthread stack;
msg_add_auth was overflowing it.
1997-05-12 21:20 Richard Henderson <rth@tamu.edu>
* elf/dl-lookup.c (_dl_lookup_symbol_skip): Call _dl_signal_error
when we can't find the symbol.
1997-05-12 16:54 Ulrich Drepper <drepper@cygnus.com>
* posix/regex.c: Fix handling of 32-bit Windog environments.
Patch by Arnold Robbins <arnold@skeeve.atl.ga.us>.
1997-05-10 23:26 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* sysdeps/unix/sysv/linux/m68k/syscalls.list: Add cacheflush.
1997-05-10 11:40 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* elf/ldd.bash.in: Remove spurious quote character from version
message.
1997-05-10 08:49 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* locale/programs/locale.c (write_charmaps): Don't get stuck in a
loop if the file ends in a long line without newline.
* locale/programs/charmap.c (charmap_read): Likewise.
1997-05-12 03:47 Ulrich Drepper <drepper@cygnus.com>
* sunrpc/rpc/xdr.h: Include more headers to be self-contained.
* sunrpc/rpc/svc_auth.h: Likewise.
* sunrpc/rpc/svc.h: Likewise.
* sunrpc/rpc/rpc_msg.h: Likewise.
* sunrpc/rpc/pmap_rmt.h: Likewise.
* sunrpc/rpc/pmap_clnt.h: Likewise.
* sunrpc/rpc/clnt.h: Likewise.
* sunrpc/rpc/auth_unix.h: Likewise.
* sysdeps/generic/rpc/auth.h: Likewise.
Patches by Michael Deutschmann <ldeutsch@mail.netshop.net>.
1997-05-11 15:29 Philip Blundell <pjb27@cam.ac.uk>
* sysdeps/stub/sigaction.c (__sigaction): Correct typo.
* sysdeps/standalone/arm/errnos.h: New file.
* sysdeps/stub/sys/param.h: Add dummy definition of MAXSYMLINKS.
* sysdeps/unix/arm/fork.S: New file.
* sysdeps/unix/sysv/linux/arm/sysdep.h: New file.
* sysdeps/stub/tempname.c (__stdio_gen_tempname): Add missing
`streamptr' argument.
* sysdeps/stub/vdprintf.c: Remove second copy of file (!), include
<stdarg.h> to get va_list defined, return 0 not NULL.
* sysdeps/unix/sysv/linux/statfsbuf.h: Include <gnu/types.h>.
* sysdeps/unix/sysv/linux/arm/syscall.S: New file.
* sysdeps/stub/direntry.h (struct dirent): Add missing ';'.
* sysdeps/stub/seekdir.c (seekdir): Likewise.
* sysdeps/stub/dirfd.c (dirfd): Argument dirp is DIR*, not FILE*.
* sysdeps/standalone/dirstream.h: Define struct __dirstream
not DIR; <dirent.h> provides typedef.
* sysdeps/unix/sysv/linux/arm/clone.S: New file.
* sysdeps/unix/sysv/linux/arm/socket.S: New file.
* sysdeps/stub/sysconf.c (__sysconf): Fix typos.
1997-05-01 06:35 Geoff Keating <geoffk@ozemail.com.au>
* sysdeps/powerpc/Dist: New file.
* sysdeps/powerpc/Makefile: New file.
* sysdeps/powerpc/fclrexcpt.c: New file.
* sysdeps/powerpc/fegetenv.c: New file.
* sysdeps/powerpc/fegetround.c: New file.
* sysdeps/powerpc/feholdexcpt.c: New file.
* sysdeps/powerpc/fenvbits.h: New file.
* sysdeps/powerpc/fenv_const.c: New file.
* sysdeps/powerpc/fenv_libc.h: New file.
* sysdeps/powerpc/fesetenv.c: New file.
* sysdeps/powerpc/fesetround.c: New file.
* sysdeps/powerpc/feupdateenv.c: New file.
* sysdeps/powerpc/fgetexcptflg.c: New file.
* sysdeps/powerpc/fraiseexcpt.c: New file.
* sysdeps/powerpc/fsetexcptflg.c: New file.
* sysdeps/powerpc/ftestexcept.c: New file.
* sysdeps/powerpc/mathbits.h: New file.
* sysdeps/powerpc/dl-machine.h: Wrap in #ifndef dl_machine_h;
define elf_machine_lookup_noexec_p, elf_machine_lookup_noplt_p,
ELF_MACHINE_RELOC_NOPLT; consequent changes to elf_machine_rela.
* sysdeps/powerpc/__math.h: Remove definition for hypot and __sgn.
* sysdep/powerpc/fpu_control.h: Correct IEEE default mode.
* sysdeps/unix/sysv/linux/powerpc/sysdep.h: Don't use .text, but
instead .section ".text".
1997-04-25 05:06 Geoff Keating <geoffk@ozemail.com.au>
* sysdeps/powerpc/__longjmp.S: Use symbolic register numbering.
* sysdeps/powerpc/bsd-_setjmp.S: Likewise.
* sysdeps/powerpc/bsd-setjmp.S: Likewise.
* sysdeps/powerpc/setjmp.S: Likewise.
* sysdeps/unix/sysv/linux/clone.S: Likewise.
* sysdeps/unix/sysv/linux/socket.S: Likewise.
* sysdeps/unix/sysv/linux/syscall.S: Likewise.
1997-04-20 04:37 Geoff Keating <geoffk@ozemail.com.au>
* sysdeps/powerpc/strchr.s: New file.
* sysdeps/powerpc/strcmp.s: New (ugly) file.
* sysdeps/powerpc/memset.s: New file.
* string/tester.c: Include prototype and _GNU_SOURCE to make
standalone compilation possible. Give strcmp a better
test. Give memset a better test.
1997-04-05 06:34 Geoff Keating <geoffk@ozemail.com.au>
* sysdeps/powerpc/strlen.s: Fixed bugs (how did it ever pass its
tests before?). Changed to symbolic register numbering as an
experiment.
* sysdeps/powerpc/ffs.c: Don't include bstring.h, it doesn't
exist.
* sysdeps/rs6000/ffs.c: Likewise.
1997-05-12 02:28 Ulrich Drepper <drepper@cygnus.com>
* time/sys/time.h: Make second argument of setitimer const.
Patch by Michael Deutschmann <ldeutsch@mail.netshop.net>.
* sysdeps/stub/setitimer.c: Likewise.
* sysdeps/mach/hurd/setitimer.c: Likewise.
Diffstat (limited to 'sysdeps/unix')
-rw-r--r-- | sysdeps/unix/arm/fork.S | 33 | ||||
-rw-r--r-- | sysdeps/unix/arm/sysdep.h | 5 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/arm/clone.S | 33 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/arm/socket.S | 49 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/arm/syscall.S | 47 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/arm/sysdep.h | 73 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/if_index.c | 140 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/m68k/syscalls.list | 2 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/net/if.h | 19 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/netinet/in.h | 12 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/powerpc/clone.S | 42 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/powerpc/socket.S | 24 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/powerpc/syscall.S | 12 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/powerpc/sysdep.h | 2 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/shmdt.c | 2 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/statfsbuf.h | 2 |
16 files changed, 453 insertions, 44 deletions
diff --git a/sysdeps/unix/arm/fork.S b/sysdeps/unix/arm/fork.S new file mode 100644 index 0000000..baa33e3 --- /dev/null +++ b/sysdeps/unix/arm/fork.S @@ -0,0 +1,33 @@ +/* Copyright (C) 1991, 1992, 1994, 1995, 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., 675 Mass Ave, +Cambridge, MA 02139, USA. */ + +#include <sysdep.h> + +/* ARM version. */ + +SYSCALL__ (fork, 0) + /* R1 is now 0 for the parent and 1 for the child. Decrement it to + make it -1 (all bits set) for the parent, and 0 (no bits set) + for the child. Then AND it with R0, so the parent gets + R0&-1==R0, and the child gets R0&0==0. */ + sub r1, r1, $1 + and r0, r0, r1 + RETINSTR(mov, pc, r14) +PSEUDO_END(fork) + +weak_alias (__fork, fork) diff --git a/sysdeps/unix/arm/sysdep.h b/sysdeps/unix/arm/sysdep.h index 18e812b..1c58073 100644 --- a/sysdeps/unix/arm/sysdep.h +++ b/sysdeps/unix/arm/sysdep.h @@ -19,3 +19,8 @@ Cambridge, MA 02139, USA. */ #include <sysdeps/unix/sysdep.h> #include <sysdeps/arm/sysdep.h> +/* Some definitions to allow the assembler in sysdeps/unix/*.S to build + without needing ARM-specific versions of all the files. */ + +#define ret RETINSTR(mov, pc, r14) +#define MOVE(a,b) mov b,a diff --git a/sysdeps/unix/sysv/linux/arm/clone.S b/sysdeps/unix/sysv/linux/arm/clone.S new file mode 100644 index 0000000..c7e7aed --- /dev/null +++ b/sysdeps/unix/sysv/linux/arm/clone.S @@ -0,0 +1,33 @@ +/* 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. */ + +/* 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 <errnos.h> + +/* int clone(int (*fn)(void *arg), void *child_stack, int flags, void *arg); */ + + .text +ENTRY(__clone) + /* Somebody needs to write this. */ +PSEUDO_END (__clone) + +weak_alias (__clone, clone) diff --git a/sysdeps/unix/sysv/linux/arm/socket.S b/sysdeps/unix/sysv/linux/arm/socket.S new file mode 100644 index 0000000..e8db072 --- /dev/null +++ b/sysdeps/unix/sysv/linux/arm/socket.S @@ -0,0 +1,49 @@ +/* Copyright (C) 1995, 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. */ + +#include <sysdep.h> +#include <sys/socketcall.h> + +#define P(a, b) P2(a, b) +#define P2(a, b) a##b + + .text +/* The socket-oriented system calls are handled unusally in Linux. + They are all gated through the single `socketcall' system call number. + `socketcall' takes two arguments: the first is the subcode, specifying + which socket function is being called; and the second is a pointer to + the arguments to the specific function. + + The .S files for the other calls just #define socket and #include this. */ + +.globl P(__,socket) +ENTRY (P(__,socket)) + + /* Do the system call trap. */ + swi SYS_ify(socketcall) + + /* %eax is < 0 if there was an error. */ + cmn r0, $124 + bge syscall_error + + /* Successful; return the syscall's value. */ + RETINSTR(mov,pc,r14) + +PSEUDO_END (P(__,socket)) + +weak_alias (P(__,socket), socket) diff --git a/sysdeps/unix/sysv/linux/arm/syscall.S b/sysdeps/unix/sysv/linux/arm/syscall.S new file mode 100644 index 0000000..7a87278 --- /dev/null +++ b/sysdeps/unix/sysv/linux/arm/syscall.S @@ -0,0 +1,47 @@ +/* Copyright (C) 1995, 1996 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU 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. */ + +#include <sysdep.h> + +/* Please consult the file sysdeps/unix/sysv/linux/arm/sysdep.h for + more information about the value -4095 used below.*/ + + .text +ENTRY (syscall) + + /* Normally encoding the system call number in the instruction is + good. But we pay the price here. */ + + sub sp, sp, $0xc @ get 3 words on the stack + orr r0, r0, $0xef000000 @ make up a SWI instruction + orr r0, r0, $SWI_BASE + str r0, [sp] + ldr r0, _reti + str r0, [sp, $4] + adr r0, _ret + str r0, [sp, $8] + mov r0, r1 + mov r1, r2 + mov r2, r3 + mov pc, sp +_ret: add sp, sp, $0xc + RETINSTR(mov, pc, r14) + +_reti: .word 0xe51ff004 @ ldr pc, [pc, $4] + +PSEUDO_END (syscall) diff --git a/sysdeps/unix/sysv/linux/arm/sysdep.h b/sysdeps/unix/sysv/linux/arm/sysdep.h new file mode 100644 index 0000000..6478a5d --- /dev/null +++ b/sysdeps/unix/sysv/linux/arm/sysdep.h @@ -0,0 +1,73 @@ +/* Copyright (C) 1992, 93, 95, 96, 97 Free Software Foundation, Inc. +This file is part of the GNU C Library. +Contributed by Ulrich Drepper, <drepper@gnu.ai.mit.edu>, August 1995. +ARM changes by Philip Blundell, <pjb27@cam.ac.uk>, May 1997. + +The GNU C Library is free software; you can redistribute it and/or +modify it under the terms of the GNU 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 _LINUX_ARM_SYSDEP_H +#define _LINUX_ARM_SYSDEP_H 1 + +/* There is some commonality. */ +#include <sysdeps/unix/arm/sysdep.h> + +/* For Linux we can use the system call table in the header file + /usr/include/asm/unistd.h + of the kernel. But these symbols do not follow the SYS_* syntax + so we have to redefine the `SYS_ify' macro here. */ +#undef SYS_ify +#define SWI_BASE (9 << 20) +#define SYS_ify(syscall_name) (SWI_BASE + __NR_##syscall_name) + + +#ifdef ASSEMBLER + +/* Linux uses a negative return value to indicate syscall errors, + unlike most Unices, which use the condition codes' carry flag. + + Since version 2.1 the return value of a system call might be + negative even if the call succeeded. E.g., the `lseek' system call + might return a large offset. Therefore we must not anymore test + for < 0, but test for a real error by making sure the value in %eax + is a real error number. Linus said he will make sure the no syscall + returns a value in -1 .. -4095 as a valid result so we can savely + test with -4095. */ +#undef PSEUDO +#define PSEUDO(name, syscall_name, args) \ + .text; \ + ENTRY (name) \ + DO_CALL (args, syscall_name); \ + cmn r0, $4096; \ + bge syscall_error; + +#undef PSEUDO_END +#define PSEUDO_END(name) \ + SYSCALL_ERROR_HANDLER \ + END (name) + +#ifndef PIC +#define SYSCALL_ERROR_HANDLER /* Nothing here; code in sysdep.S is used. */ +#else +#error Aiee +#endif /* PIC */ + +#undef DO_CALL +#define DO_CALL(args, syscall_name) \ + swi SYS_ify (syscall_name); + +#endif /* ASSEMBLER */ + +#endif /* linux/arm/sysdep.h */ diff --git a/sysdeps/unix/sysv/linux/if_index.c b/sysdeps/unix/sysv/linux/if_index.c new file mode 100644 index 0000000..3f5a890 --- /dev/null +++ b/sysdeps/unix/sysv/linux/if_index.c @@ -0,0 +1,140 @@ +/* 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 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 <string.h> +#include <stdio.h> +#include <stdlib.h> +#include <net/if.h> + +#define IF_INET6_FILENAME "/proc/net/if_inet6" + +/* /proc/net/if_inet6 contains lines that look like this: + * + * fe8000000000000000000000836fc168 0b 00 20 80 sit7 + * + * | | | | | | + * address --' | | | | | + * index --------' | | | | + * prefix length ---' | | | + * scope --------------' | | + * flags -----------------' | + * name -------------------------' + * + */ + +static int get_one_interface(FILE *fd, char *interface, int iflen, unsigned int *index) +{ + char buffer[80]; + static char seps[] = " \012"; + char *c = buffer; + char *sp; + if (!fgets(buffer, 80, fd)) + return 1; + if (strtok_r(buffer, seps, &sp) == NULL) return 1; + if (c = strtok_r(NULL, seps, &sp), c == NULL) return 1; + *index = strtoul(c, NULL, 16); + if (strtok_r(NULL, seps, &sp) == NULL) return 1; + if (strtok_r(NULL, seps, &sp) == NULL) return 1; + if (strtok_r(NULL, seps, &sp) == NULL) return 1; + if (c = strtok_r(NULL, seps, &sp), c == NULL) return 1; + strncpy(interface, c, iflen); + return 0; +} + +unsigned int if_nametoindex(const char *ifname) +{ + FILE *fd = fopen(IF_INET6_FILENAME, "r"); + char this_ifname[IFNAMSIZ]; + unsigned int this_index; + if (!fd) return 0; + while (get_one_interface(fd, this_ifname, IFNAMSIZ, &this_index) == 0) { + if (!strcmp(this_ifname, ifname)) { + fclose(fd); + return this_index; + } + } + fclose(fd); + return 0; +} + +char *if_indextoname(unsigned int ifindex, char *ifname) +{ + FILE *fd = fopen(IF_INET6_FILENAME, "r"); + unsigned int this_index; + if (!fd) return NULL; + while (get_one_interface(fd, ifname, IFNAMSIZ, &this_index) == 0) { + if (this_index == ifindex) { + fclose(fd); + return ifname; + } + } + fclose(fd); + return NULL; +} + +void if_freenameindex(struct if_nameindex *ifn) +{ + struct if_nameindex *ptr = ifn; + while (ptr->if_name || ptr->if_index) + { + if (ptr->if_name) + free(ptr->if_name); + ptr++; + } + free(ifn); +} + +struct if_nameindex *if_nameindex(void) +{ + FILE *fd = fopen(IF_INET6_FILENAME, "r"); + struct if_nameindex *ifn = NULL; + int nifs = 0; + if (!fd) return NULL; + do + { + struct if_nameindex *newifn; + nifs++; + newifn = realloc(ifn, nifs*sizeof(struct if_nameindex)); + if (!newifn) + { + /* We ran out of memory. */ + if (--nifs) + { + free(ifn[nifs-1].if_name); + ifn[nifs-1].if_name = 0; + ifn[nifs-1].if_index = 0; + if_freenameindex(ifn); + } + return NULL; + } + ifn = newifn; + ifn[nifs-1].if_index = 0; + ifn[nifs-1].if_name = malloc(IFNAMSIZ); + if (ifn[nifs-1].if_name == NULL) + { + if_freenameindex(ifn); + return NULL; + } + } + while (get_one_interface(fd, ifn[nifs-1].if_name, IFNAMSIZ, + &ifn[nifs-1].if_index) == 0); + free(ifn[nifs-1].if_name); + ifn[nifs-1].if_name = NULL; + fclose(fd); + return ifn; +} diff --git a/sysdeps/unix/sysv/linux/m68k/syscalls.list b/sysdeps/unix/sysv/linux/m68k/syscalls.list index 9a3e4d0..473c2ec 100644 --- a/sysdeps/unix/sysv/linux/m68k/syscalls.list +++ b/sysdeps/unix/sysv/linux/m68k/syscalls.list @@ -1,5 +1,7 @@ # File name Caller Syscall name # args Strong name Weak names +cacheflush EXTRA cacheflush 4 __cacheflush cacheflush + s_getgroups getgroups getgroups 2 __syscall_getgroups s_llseek llseek _llseek 5 __sys_llseek s_setgroups setgroups setgroups 2 __syscall_setgroups diff --git a/sysdeps/unix/sysv/linux/net/if.h b/sysdeps/unix/sysv/linux/net/if.h index db86d20..01e9f00 100644 --- a/sysdeps/unix/sysv/linux/net/if.h +++ b/sysdeps/unix/sysv/linux/net/if.h @@ -144,4 +144,23 @@ struct ifconf #define ifc_buf ifc_ifcu.ifcu_buf /* Buffer address. */ #define ifc_req ifc_ifcu.ifcu_req /* Array of structures. */ + +/* Convert an interface name to an index, and vice versa. */ + +unsigned int if_nametoindex(const char *ifname); +char *if_indextoname(unsigned int ifindex, char *ifname); + +/* Return a list of all interfaces and their indices. */ + +struct if_nameindex { + unsigned int if_index; /* 1, 2, ... */ + char *if_name; /* null terminated name: "eth0", ... */ +}; + +struct if_nameindex *if_nameindex(void); + +/* Free the data returned from if_nameindex. */ + +void if_freenameindex(struct if_nameindex *ptr); + #endif /* net/if.h */ diff --git a/sysdeps/unix/sysv/linux/netinet/in.h b/sysdeps/unix/sysv/linux/netinet/in.h index bbc6254..451f8f5 100644 --- a/sysdeps/unix/sysv/linux/netinet/in.h +++ b/sysdeps/unix/sysv/linux/netinet/in.h @@ -259,7 +259,7 @@ extern u_int16_t htons __P ((u_int16_t __hostshort)); /* IPV6 socket options. */ #define IPV6_ADDRFORM 1 -#define IPV6_RXINFO 2 +#define IPV6_PKTINFO 2 #define IPV6_RXHOPOPTS 3 #define IPV6_RXDSTOPTS 4 #define IPV6_RXSRCRT 5 @@ -267,8 +267,6 @@ extern u_int16_t htons __P ((u_int16_t __hostshort)); #define IPV6_CHECKSUM 7 #define IPV6_HOPLIMIT 8 -#define IPV6_TXINFO IPV6_RXINFO -#define SCM_SRCINFO IPV6_TXINFO #define SCM_SRCRT IPV6_RXSRCRT #define IPV6_UNICAST_HOPS 16 @@ -306,6 +304,14 @@ extern u_int16_t htons __P ((u_int16_t __hostshort)); /* Bind socket to a priviledged IP port. */ extern int bindresvport __P ((int __sockfd, struct sockaddr_in *__sin)); + +/* IPv6 packet information. */ +struct in6_pktinfo + { + struct in6_addr ipi6_addr; /* src/dst IPv6 address */ + int ipi6_ifindex; /* send/recv interface index */ + }; + __END_DECLS #endif /* netinet/in.h */ diff --git a/sysdeps/unix/sysv/linux/powerpc/clone.S b/sysdeps/unix/sysv/linux/powerpc/clone.S index d255abf..068b14c 100644 --- a/sysdeps/unix/sysv/linux/powerpc/clone.S +++ b/sysdeps/unix/sysv/linux/powerpc/clone.S @@ -29,45 +29,45 @@ ENTRY(__clone) /* Set up stack frame, save registers. */ - stwu 1,-32(1) - stw 31,16(1) - stw 30,20(1) + stwu %r1,-32(%r1) + stw %r31,16(%r1) + stw %r30,20(%r1) /* Check for child_stack == NULL || fn == NULL. */ - cmpwi 0,4,0 - cmpwi 1,3,0 - cror 2+0*4,2+0*4,2+1*4 - beq- 0,badargs + cmpwi %cr0,%r4,0 + beq- %cr0,badargs + cmpwi %cr1,%r3,0 + beq- %cr1,badargs /* Set up stack frame for child. */ - addi 4,4,-16 - clrrwi 4,4,4 - li 0,0 - stw 0,0(4) + addi %r4,%r4,-16 + clrrwi %r4,%r4,4 + li %r0,0 + stw %r0,0(%r4) /* Save new stack, fn, args across syscall. */ - mr 30,3 /* Function in r30. */ - mr 31,6 /* Arguments in r31. */ + mr %r30,%r3 /* Function in r30. */ + mr %r31,%r6 /* Arguments in r31. */ /* 'flags' argument is first parameter to clone syscall. (The other argument is the stack pointer, already in r4.) */ - mr 3,5 + mr %r3,%r5 /* Do the call. */ DO_CALL(SYS_ify(clone)) - bso- error - beq child + bso- error + beq child /* Parent. Restore registers & return. */ - lwz 31,16(1) - lwz 30,20(1) - addi 1,1,32 + lwz %r31,16(%r1) + lwz %r30,20(%r1) + addi %r1,%r1,32 blr child: /* Call procedure. */ - mtlr 30 - mr 3,31 + mtlr %r30 + mr %r3,%r31 blrl /* Call _exit with result from procedure. */ #ifdef PIC diff --git a/sysdeps/unix/sysv/linux/powerpc/socket.S b/sysdeps/unix/sysv/linux/powerpc/socket.S index 12417fa..305aba9 100644 --- a/sysdeps/unix/sysv/linux/powerpc/socket.S +++ b/sysdeps/unix/sysv/linux/powerpc/socket.S @@ -43,38 +43,38 @@ .text ENTRY(P(__,socket)) - stwu 1,-48(1) + stwu %r1,-48(%r1) #if NARGS >= 1 - stw 3,stackblock(1) + stw %r3,stackblock(%r1) #endif #if NARGS >= 2 - stw 4,4+stackblock(1) + stw %r4,4+stackblock(%r1) #endif #if NARGS >= 3 - stw 5,8+stackblock(1) + stw %r5,8+stackblock(%r1) #endif #if NARGS >= 4 - stw 6,12+stackblock(1) + stw %r6,12+stackblock(%r1) #endif #if NARGS >= 5 - stw 7,16+stackblock(1) + stw %r7,16+stackblock(%r1) #endif #if NARGS >= 6 - stw 8,20+stackblock(1) + stw %r8,20+stackblock(%r1) #endif #if NARGS >= 7 - stw 9,24+stackblock(1) + stw %r9,24+stackblock(%r1) #endif #if NARGS >= 8 - stw 10,28+stackblock(1) + stw %r10,28+stackblock(%r1) #endif #if NARGS >= 9 #error too many arguments! #endif - li 3,P(SOCKOP_,socket) - addi 4,1,stackblock + li %r3,P(SOCKOP_,socket) + addi %r4,%r1,stackblock DO_CALL(SYS_ify(socketcall)) - addi 1,1,48 + addi %r1,%r1,48 bnslr #ifdef PIC b __syscall_error@plt diff --git a/sysdeps/unix/sysv/linux/powerpc/syscall.S b/sysdeps/unix/sysv/linux/powerpc/syscall.S index 441dd5d..2cb5482 100644 --- a/sysdeps/unix/sysv/linux/powerpc/syscall.S +++ b/sysdeps/unix/sysv/linux/powerpc/syscall.S @@ -20,12 +20,12 @@ .text ENTRY (syscall) - mr 0,3 - mr 3,4 - mr 4,5 - mr 5,6 - mr 6,7 - mr 7,8 + mr %r0,%r3 + mr %r3,%r4 + mr %r4,%r5 + mr %r5,%r6 + mr %r6,%r7 + mr %r7,%r8 sc bnslr #ifdef PIC diff --git a/sysdeps/unix/sysv/linux/powerpc/sysdep.h b/sysdeps/unix/sysv/linux/powerpc/sysdep.h index 6cad9ae..577809a 100644 --- a/sysdeps/unix/sysv/linux/powerpc/sysdep.h +++ b/sysdeps/unix/sysv/linux/powerpc/sysdep.h @@ -50,7 +50,7 @@ b __syscall_error@plt #else #define PSEUDO(name, syscall_name, args) \ - .text; \ + .section ".text"; \ ENTRY (name) \ DO_CALL (SYS_ify (syscall_name)); \ bnslr; \ diff --git a/sysdeps/unix/sysv/linux/shmdt.c b/sysdeps/unix/sysv/linux/shmdt.c index dcda701..70526e6 100644 --- a/sysdeps/unix/sysv/linux/shmdt.c +++ b/sysdeps/unix/sysv/linux/shmdt.c @@ -26,5 +26,5 @@ int shmdt (shmaddr) const void *shmaddr; { - return __ipc (IPCOP_shmdt, 0, 0, 0, shmaddr); + return __ipc (IPCOP_shmdt, 0, 0, 0, (void *) shmaddr); } diff --git a/sysdeps/unix/sysv/linux/statfsbuf.h b/sysdeps/unix/sysv/linux/statfsbuf.h index 1d1bbda..7e1aa55 100644 --- a/sysdeps/unix/sysv/linux/statfsbuf.h +++ b/sysdeps/unix/sysv/linux/statfsbuf.h @@ -19,6 +19,8 @@ #ifndef _STATFSBUF_H #define _STATFSBUF_H +#include <gnu/types.h> /* for __fsid_t */ + struct statfs { int f_type; |