mirror of
git://sourceware.org/git/glibc.git
synced 2026-09-08 23:58:31 +08:00
Compare commits
43
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
f2e235b9b8 | ||
|
|
0ddc0d1604 | ||
|
|
bfc04a9ff1 | ||
|
|
be10a86854 | ||
|
|
1cbca0d93c | ||
|
|
7c97bb094e | ||
|
|
9b19f55dc8 | ||
|
|
9e3db9cd59 | ||
|
|
a1c46301bb | ||
|
|
de1b40af73 | ||
|
|
e335fa388a | ||
|
|
c6de696871 | ||
|
|
ae4c4dae36 | ||
|
|
d2c2312316 | ||
|
|
13987e686c | ||
|
|
46d7de1907 | ||
|
|
4eea716e2d | ||
|
|
2a072de4a1 | ||
|
|
363113d02a | ||
|
|
3585d6bf30 | ||
|
|
01f3e03bcd | ||
|
|
38334018ff | ||
|
|
dbdb6189d5 | ||
|
|
afced61c8f | ||
|
|
d592cd699d | ||
|
|
a7cb7644cf | ||
|
|
889a9677fd | ||
|
|
25f9784eb8 | ||
|
|
1fe58993bc | ||
|
|
63f8940402 | ||
|
|
808c413c90 | ||
|
|
47665862cd | ||
|
|
bdf2af37da | ||
|
|
186588d6bf | ||
|
|
3038e60115 | ||
|
|
932be5efa3 | ||
|
|
6a032d8158 | ||
|
|
56f778c958 | ||
|
|
a482b5a595 | ||
|
|
4ca84cff3b | ||
|
|
1ac3b08e93 | ||
|
|
c09ebb85ba | ||
|
|
b07c5668f6 |
@@ -1,3 +1,385 @@
|
||||
Mon Feb 19 18:31:59 1996 Roland McGrath <roland@charlie-brown.gnu.ai.mit.edu>
|
||||
|
||||
* time/zic.c, time/scheck.c, time/private.h, time/tzfile.h:
|
||||
Updated from ADO 96d.
|
||||
|
||||
Sun Feb 18 14:08:04 1996 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
|
||||
|
||||
* csu/initfini.c (_init): Remove bogus volatile declarations and
|
||||
extra variable, take the address of __gmon_start__ only implicitly
|
||||
to avoid the test being optimized out.
|
||||
|
||||
Sun Feb 18 15:08:10 1996 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
|
||||
|
||||
* sysdeps/posix/utimes.c (__utimes): There are 1000000 usecs in a
|
||||
sec.
|
||||
|
||||
Sun Feb 18 13:56:00 1996 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
|
||||
|
||||
* elf/Makefile, time/Makefile: Make `all' the default target.
|
||||
|
||||
Mon Feb 19 18:09:04 1996 Roland McGrath <roland@charlie-brown.gnu.ai.mit.edu>
|
||||
|
||||
* 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 <schwab@issan.informatik.uni-dortmund.de>
|
||||
|
||||
* 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 <davidm@AZStarNet.com>
|
||||
|
||||
* 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 <drepper@gnu.ai.mit.edu>
|
||||
|
||||
* 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.
|
||||
|
||||
Mon Feb 19 15:30:26 1996 Roland McGrath <roland@charlie-brown.gnu.ai.mit.edu>
|
||||
|
||||
* stdio-common/tstscanf.c (main): Add check for "0" as %d.
|
||||
|
||||
* sysdeps/stub/msync.c: Undo change of Jan 29; just two args.
|
||||
Only some systems have three args; let them define their own stub.
|
||||
|
||||
* sysdeps/generic/dl-sysdep.c: Declare _dl_secure.
|
||||
|
||||
* sysdeps/generic/machine-gmon.h: New file.
|
||||
* gmon/Makefile (distribute): Add machine-gmon.h.
|
||||
* gmon/mcount.c: Undo changes of Feb 13.
|
||||
Include "machine-gmon.h".
|
||||
|
||||
Sun Feb 18 13:24:06 1996 Roland McGrath <roland@charlie-brown.gnu.ai.mit.edu>
|
||||
|
||||
* sysdeps/unix/sysv/linux/direct.h: File removed, since it is
|
||||
identical to unix/common/direct.h.
|
||||
|
||||
* sysdeps/unix/Makefile [no_deps]: Don't include s-proto.d.
|
||||
|
||||
* sysdeps/unix/sysv/linux/Makefile (sysdep_routines): Don't add ipc.
|
||||
|
||||
* stdio-common/Makefile (tests): Remove scanf6.
|
||||
|
||||
* sysdeps/unix/sysv/linux/Makefile (non-lib.a): Append libieee.a.
|
||||
|
||||
* time/mktime.c (mktime): Move static variable localtime_offset to
|
||||
file scope.
|
||||
|
||||
* stdio-common/vfscanf.c: Put '0' in buffer before scanning for %i
|
||||
base indicator.
|
||||
|
||||
Thu Feb 15 16:56:17 1996 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
|
||||
|
||||
* sysdeps/m68k/dl-machine.h (elf_machine_load_address): Corrected.
|
||||
(ELF_MACHINE_BEFORE_RTLD_RELOC): Define.
|
||||
(_dl_runtime_resolve): Save %a1 as well.
|
||||
(ELF_MACHINE_RUNTIME_FIXUP_ARGS): Add second dummy arg.
|
||||
(elf_machine_relplt): Define.
|
||||
|
||||
* elf/dl-runtime.c: Include possible extra args in declaration of
|
||||
fixup.
|
||||
|
||||
Fri Feb 16 11:01:59 1996 Roland McGrath <roland@charlie-brown.gnu.ai.mit.edu>
|
||||
|
||||
* time/tzset.c: Limit hours to 23, not 12. From jaffer.
|
||||
|
||||
Fri Feb 16 10:14:05 1996 Roland McGrath <roland@charlie-brown.gnu.ai.mit.edu>
|
||||
|
||||
* Makeconfig (CFLAGS-.po): Use -pg instead of -p.
|
||||
|
||||
Thu Feb 15 13:57:08 1996 Roland McGrath <roland@charlie-brown.gnu.ai.mit.edu>
|
||||
|
||||
* mach/Machrules: Use -include for $(*.ir).
|
||||
|
||||
* hurd/hurd/ioctl.h (_HURD_HANDLE_IOCTLS): Mask off type bits in
|
||||
request values.
|
||||
* sysdeps/mach/hurd/ioctls.h (_IOC_NOTYPE): New macro.
|
||||
(_IOT_COUNT2): Field is 3 bits, not 2.
|
||||
* sysdeps/mach/hurd/ioctl.c: Ignore handler if it fails with ENOTTY.
|
||||
* hurd/hurdioctl.c (_hurd_lookup_ioctl_handler): Mask off type
|
||||
bits before looking up handler.
|
||||
(fioctl): Use __hurd_dfail.
|
||||
(fioctl, fioclex): Use ENOTTY for bogus request instead of EGRATUITOUS.
|
||||
|
||||
Thu Feb 15 11:49:45 1996 Roland McGrath <roland@charlie-brown.gnu.ai.mit.edu>
|
||||
|
||||
* sysdeps/unix/sysv/sysv4/Makefile [$(subdir)-signal]
|
||||
(sysdep_routines): Don't add sys-sig.
|
||||
|
||||
* sysdeps/unix/sysv/sysv4/solaris2/syscalls.list: New file.
|
||||
|
||||
Wed Feb 14 00:21:17 1996 David Mosberger-Tang <davidm@azstarnet.com>
|
||||
|
||||
* sysdeps/alpha/memchr.c (memchr): loop searching for matching
|
||||
character bailed out one too early; changed constant 6 to
|
||||
7 to fix this.
|
||||
|
||||
Wed Feb 14 01:08:58 1996 Roland McGrath <roland@charlie-brown.gnu.ai.mit.edu>
|
||||
|
||||
* posix/execvp.c: When executing shell on script, first arg is
|
||||
full file name, not argv[0].
|
||||
|
||||
* mach/Makefile [no_deps]: Inhibit inclusion of mach-syscalls.mk.
|
||||
* mach/Machrules [no_deps]: Inhibit interface rules.
|
||||
|
||||
* malloc/Makefile (distribute): Removed TODO.
|
||||
|
||||
Tue Feb 13 05:12:02 1996 Roland McGrath <roland@charlie-brown.gnu.ai.mit.edu>
|
||||
|
||||
* sysdeps/unix/sysv/linux/syscalls.list (ipc): Specify msgget in
|
||||
caller column.
|
||||
|
||||
* sysdeps/unix/common/syscalls.list: Add sigaction syscall.
|
||||
|
||||
* sysdeps/unix/sysv/linux/gnu/types.h: Moved from linux/i386.
|
||||
|
||||
* sysdeps/unix/sysv/linux/Makefile [$(subdir)=math]
|
||||
(sysdep_routines): Append setfpucw.
|
||||
(extra-objs): Append ieee-fpucw.o.
|
||||
(install-lib): Append libieee.a.
|
||||
(libieee.a): New target.
|
||||
* sysdeps/unix/sysv/linux/ieee-fpucw.c: New file.
|
||||
* sysdeps/unix/sysv/linux/i386/fpu_control.h
|
||||
(_FPU_GETCW, _FPU_SETCW): New macros.
|
||||
(fpu_control_t): New typedef.
|
||||
(__setfpucw): Use fpu_control_t for argument type.
|
||||
* sysdeps/unix/sysv/linux/fpu_control.c: Moved from linux/i386.
|
||||
|
||||
* sysdeps/unix/sysv/linux/init-first.c: Moved from linux/i386.
|
||||
|
||||
* sysdeps/unix/sysv/linux/syscalls.list: Add ipc syscall.
|
||||
* sysdeps/unix/sysv/linux/i386/syscalls.list: File removed.
|
||||
|
||||
Sat Feb 10 13:09:03 1996 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
|
||||
|
||||
* sysdeps/unix/sysv/linux/m68k/brk.c,
|
||||
sysdeps/unix/sysv/linux/m68k/mmap.S,
|
||||
sysdeps/unix/sysv/linux/m68k/select.S,
|
||||
sysdeps/unix/sysv/linux/m68k/sigcontext.h,
|
||||
sysdeps/unix/sysv/linux/m68k/sigreturn.S,
|
||||
sysdeps/unix/sysv/linux/m68k/socket.S,
|
||||
sysdeps/unix/sysv/linux/m68k/syscall.S,
|
||||
sysdeps/unix/sysv/linux/m68k/sysdep.S,
|
||||
sysdeps/unix/sysv/linux/m68k/sysdep.h: New files.
|
||||
|
||||
* sysdeps/unix/sysv/linux/m68k/fpu_control.h: New file.
|
||||
|
||||
* sysdeps/m68k/fpu/isinfl.c, sysdeps/m68k/fpu/isnanl.c,
|
||||
sysdeps/m68k/isinfl.c, sysdeps/m68k/isnanl.c: New files.
|
||||
|
||||
* sysdeps/unix/sysv/linux/sys/mman.h: Define MAP_ANON and
|
||||
MAP_FILE if not already defined.
|
||||
|
||||
* elf/elf.h: Add m68k reloc definitions.
|
||||
* sysdeps/m68k/dl-machine.h, sysdeps/m68k/elf/start.S: New files.
|
||||
|
||||
Tue Feb 13 00:12:12 1996 Roland McGrath <roland@charlie-brown.gnu.ai.mit.edu>
|
||||
|
||||
* elf/dl-runtime.c (fixup) [ELF_MACHINE_RUNTIME_FIXUP_ARGS]: Let
|
||||
this macro declare extra leading args.
|
||||
|
||||
* Makerules [$(elf)=yes] (ar-symtab-name): Define to empty.
|
||||
|
||||
* sysdeps/i386/dl-machine.h (ELF_MACHINE_RUNTIME_TRAMPOLINE,
|
||||
elf_machine_relplt): New macros.
|
||||
* elf/dl-runtime.c: New file.
|
||||
* sysdeps/i386/dl-runtime.c, sysdeps/stub/dl-runtime.c: Files removed.
|
||||
|
||||
* gmon/Makefile (headers): Remove machine-gmon.h.
|
||||
* sysdeps/stub/machine-gmon.h, sysdeps/i386/machine-gmon.h: Removed.
|
||||
* gmon/mcount.c [! NO_UNDERSCORES] (_mcount): Specify "mcount" as
|
||||
the asm name.
|
||||
(_mcount): Define normally, taking no args.
|
||||
Use __builtin_return_address to fetch PC values of caller and caller's
|
||||
caller.
|
||||
|
||||
* Makerules: Rewrote rules to update libc archives of all flavors.
|
||||
Define separate specific rules for each flavor using o-iterator.
|
||||
|
||||
* sysdeps/unix/Makefile: Include s-proto.d only ifdef subdir.
|
||||
|
||||
Sat Feb 10 11:35:16 1996 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
|
||||
|
||||
* Makerules (ar-symtab-name): New macro. Replace all occurences
|
||||
of __.SYMDEF by $(ar-symtab-name).
|
||||
* sysdeps/unix/sysv/Makefile (ar-symtab-name): Define as empty.
|
||||
|
||||
Mon Feb 12 03:10:41 1996 Roland McGrath <roland@charlie-brown.gnu.ai.mit.edu>
|
||||
|
||||
* Makefile (configure, %/configure): Depend on aclocal.m4.
|
||||
* Make-dist (configure, %/configure): Likewise.
|
||||
|
||||
* sysdeps/unix/Makefile: Include s-proto.d for its deps.
|
||||
|
||||
* gmon/sys/gmon.h: Don't include machine-gmon.h; those defns are
|
||||
only needed in the implementation, not for any users.
|
||||
|
||||
* time/northamerica: Updated from ADO 96c, new rules for Mexico in
|
||||
1996.
|
||||
|
||||
* sunrpc/pm_getport.c: #if 0 out gratuitous inclusion of <net/if.h>.
|
||||
* sunrpc/pm_getmaps.c: Likewise.
|
||||
|
||||
* sysdeps/unix/sysv/syscalls.list: Add setrlimit and settimeofday,
|
||||
so real syscalls override unix/sysv/*.c on sysv-derived systems
|
||||
that have them.
|
||||
* sysdeps/unix/common/syscalls.list: Add settimeofday here, to
|
||||
override unix/sysv/settimeofday.c since that overrides
|
||||
unix/syscalls.list.
|
||||
|
||||
* Makeconfig (+link): Put $(link-libc) after deps from $^,
|
||||
regardless of where libc.a appears in the deps.
|
||||
|
||||
* sysdeps/unix/sysv/sysv4/syscalls.list: Remove redundancies.
|
||||
Add __waitid.
|
||||
* sysdeps/unix/sysv/linux/syscalls.list: Remove redundancies.
|
||||
Define __ name for sigprocmask.
|
||||
* sysdeps/unix/bsd/ultrix4/syscalls.list: Remove redundancies.
|
||||
Add getsysinfo.
|
||||
* sysdeps/unix/bsd/sun/sunos4/syscalls.list: Remove redundancies.
|
||||
* sysdeps/unix/bsd/sun/syscalls.list: Remove redundancies.
|
||||
* sysdeps/unix/bsd/bsd4.4/syscalls.list: Remove redundancies.
|
||||
* sysdeps/unix/bsd/syscalls.list: Remove settimeofday, utimes.
|
||||
Add getdents, wait3, waitpid.
|
||||
* sysdeps/unix/syscalls.list: Add seteuid, setegid, setsid,
|
||||
settimeofday, sigsuspend, sstk, utimes.
|
||||
* sysdeps/unix/bsd/ultrix4/mips/sigvec.S: File removed.
|
||||
* sysdeps/unix/bsd/ultrix4/mips/syscalls.list: New file.
|
||||
* sysdeps/unix/bsd/ultrix4/mips/Makefile (sysdep_routines):
|
||||
Removed sigtramp.
|
||||
* sysdeps/unix/bsd/ultrix4/mips/sigvec.c: Renamed from sigtramp.c.
|
||||
* sysdeps/unix/bsd/bsd4.4/sstk.S: File removed.
|
||||
* sysdeps/unix/bsd/hp/m68k/syscalls.list: File removed.
|
||||
* sysdeps/unix/bsd/osf/alpha/getdents.S: File removed.
|
||||
* sysdeps/unix/bsd/ultrix4/getsysinfo.S: File removed.
|
||||
* sysdeps/unix/bsd/ultrix4/waitpid.S: File removed.
|
||||
* sysdeps/unix/bsd/ultrix4/mips/sigtramp.c: File removed.
|
||||
* sysdeps/unix/bsd/ultrix4/mips/sigvec.S: File removed.
|
||||
* sysdeps/unix/bsd/ultrix4/mips/sigvec.c: New file.
|
||||
* sysdeps/unix/bsd/ultrix4/mips/syscalls.list: New file.
|
||||
* sysdeps/unix/sysv/irix4/wait3.S: File removed.
|
||||
* sysdeps/unix/sysv/sysv4/__waitid.S: File removed.
|
||||
* sysdeps/unix/sysv/sysv4/fchdir.S: File removed.
|
||||
* sysdeps/unix/sysv/sysv4/setegid.S: File removed.
|
||||
* sysdeps/unix/sysv/sysv4/seteuid.S: File removed.
|
||||
* sysdeps/unix/sysv/sysv4/sigaltstack.S: File removed.
|
||||
* sysdeps/unix/sysv/sysv4/solaris2/utimes.S: File removed.
|
||||
|
||||
* hurd/hurdfault.c (_hurdsig_fault_init): Set qlimit on
|
||||
FORWARD_SIGEXC to one. Uncomment setting of thread exc port, and
|
||||
move it to last thing.
|
||||
|
||||
Sat Feb 10 05:57:08 1996 Roland McGrath <roland@charlie-brown.gnu.ai.mit.edu>
|
||||
|
||||
* sysdeps/generic/make_siglist.c: #undef _SIGNAL_H before defining it.
|
||||
|
||||
* sysdeps/unix/sysv/linux/syscalls.list: Add sigprocmask, sigsuspend.
|
||||
|
||||
Sat Feb 10 04:18:48 1996 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
|
||||
|
||||
* posix/execvp.c: If execv fails with ENOEXEC, run the shell on
|
||||
the file.
|
||||
|
||||
Fri Feb 9 11:46:45 1996 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
|
||||
|
||||
* time/Makefile (CFLAGS-zdump.c, CFLAGS-zic.c, CFLAGS-ialloc.c,
|
||||
CFLAGS-scheck.c): Use -DNOID instead of -Wno-unused.
|
||||
|
||||
* hurd/Makefile (user-interfaces): Added hurd/tioctl.
|
||||
|
||||
Thu Feb 8 18:55:27 1996 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
|
||||
|
||||
* hurd/hurdioctl.c (tiocsctty): Set the terminal's pgrp to our own.
|
||||
|
||||
Wed Feb 7 18:48:30 1996 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
|
||||
|
||||
* Makefile (subdirs): Added wcsmbs.
|
||||
* wcsmbs: New directory of wide char/multibyte char functions from
|
||||
drepper.
|
||||
|
||||
* hurd/hurdmsg.c (_S_msg_report_wait): Function removed.
|
||||
* hurd/report-wait.c: New file.
|
||||
* hurd/Makefile (routines): Added report-wait.
|
||||
|
||||
* sysdeps/mach/hurd/Makefile (inhibit-unix-syscalls): New variable.
|
||||
|
||||
* sysdeps/mach/hurd/i386/intr-msg.h (struct mach_msg_trap_args):
|
||||
New type.
|
||||
(SYSCALL_EXAMINE, MSG_EXAMINE): New inline functions.
|
||||
* sysdeps/mach/hurd/i386/trampoline.c (struct mach_msg_trap_args):
|
||||
Structure moved to intr-msg.h; include that.
|
||||
|
||||
* time/Makefile (CFLAGS-ialloc.c): Add -Wno-unused.
|
||||
(CFLAGS-scheck.c): New variable.
|
||||
|
||||
* sysdeps/mach/hurd/dl-sysdep.c (__hurd_sigthread_stack_base,
|
||||
__hurd_sigthread_stack_end, __hurd_sigthread_variables,
|
||||
__hurd_threadvar_stack_mask): New variables.
|
||||
|
||||
* sysdeps/mach/hurd/fork.c: Set the new task's exception port to
|
||||
its new message port.
|
||||
|
||||
* misc/init-misc.c: Put __init_misc in the __libc_subinit set.
|
||||
|
||||
* configure.in (uname): Add quoting.
|
||||
|
||||
* sysdeps/mach/hurd/fchdir.c: Don't consult errno unless lookup fails.
|
||||
* hurd/fchroot.c: Likewise.
|
||||
|
||||
* posix/sys/types.h [GCC >= 2.7]: Define intN_t/u_intN_t using
|
||||
__attribute__ ((__mode__ (__XX__))).
|
||||
|
||||
Wed Feb 7 03:24:05 1996 Torbjorn Granlund <tege@tmg.se>
|
||||
|
||||
* sysdeps/i386/i586/memcopy.h (WORD_COPY_FWD): Manually allocate
|
||||
destination cache lines.
|
||||
(WORD_COPY_BWD): Likewise.
|
||||
|
||||
Wed Feb 7 14:16:36 1996 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
|
||||
|
||||
* sysdeps/generic/Makefile (make_siglist): Get signum.h absolute
|
||||
file name first thing, before $(native-compile) changes directories.
|
||||
|
||||
From Gord Matzigkeit <gord@enci.ucalgary.ca>:
|
||||
* sysdeps/unix/make_errlist.c: Use strerror if available.
|
||||
* sysdeps/unix/configure.in: New file
|
||||
|
||||
* sysdeps/unix/bsd/sun/syscalls.list: Added sigvec.
|
||||
* sysdeps/unix/bsd/sun/sigvec.S: File removed.
|
||||
|
||||
* sysdeps/stub/sendto.c: Make sockaddr arg pointer to const.
|
||||
* sysdeps/stub/connect.c: Likewise.
|
||||
* sysdeps/stub/bind.c: Likewise.
|
||||
|
||||
* hurd/hurdlookup.c (__hurd_file_name_lookup_retry): RETRYNAME of
|
||||
"" is only special for FS_RETRY_NORMAL; for FS_RETRY_REAUTH, do
|
||||
another dir_lookup of "".
|
||||
|
||||
Fri Feb 2 13:09:18 1996 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
|
||||
|
||||
* sysdeps/mach/hurd/fork.c: Clear trace flag in child.
|
||||
|
||||
Wed Jan 31 20:08:26 1996 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
|
||||
|
||||
* hurd/intr-msg.c (_hurd_intr_rpc_mach_msg): Clear SS->intr_port
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# Copyright (C) 1991, 1992, 1993, 1994, 1995 Free Software Foundation, Inc.
|
||||
# Copyright (C) 1991, 92, 93, 94, 95, 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
|
||||
@@ -170,8 +170,8 @@ mv -f $@.new $@
|
||||
test ! -d CVS || cvs commit -m'Regenerated: autoconf $(ACFLAGS) $<' $@
|
||||
endef
|
||||
|
||||
configure: configure.in; $(autoconf-it)
|
||||
%/configure: %/configure.in; $(autoconf-it)
|
||||
configure: configure.in aclocal.m4; $(autoconf-it)
|
||||
%/configure: %/configure.in aclocal.m4; $(autoconf-it)
|
||||
|
||||
.PHONY: dist
|
||||
dist: $(tardir).tar.gz $(tardir)-crypt.tar.gz
|
||||
|
||||
+2
-2
@@ -281,7 +281,7 @@ ifndef +link
|
||||
+link = $(CC) -nostdlib -nostartfiles -o $@ \
|
||||
$(sysdep-LDFLAGS) $(config-LDFLAGS) $(LDFLAGS) \
|
||||
$(addprefix $(csu-objpfx),start.o $(+preinit)) \
|
||||
$(^:$(common-objpfx)libc%=$(link-libc)) \
|
||||
$(filter-out $(common-objpfx)libc%,$^) $(link-libc) \
|
||||
$(addprefix $(csu-objpfx),$(+postinit))
|
||||
endif
|
||||
ifndef config-LDFLAGS
|
||||
@@ -450,7 +450,7 @@ ifeq (yes,$(build-profile))
|
||||
# Under --enable-profile, we will build a static library of profiled objects.
|
||||
# The profiled object files are named foo.po.
|
||||
object-suffixes += .po
|
||||
CFLAGS-.po = -p
|
||||
CFLAGS-.po = -pg
|
||||
libtype.po = lib%_p.a
|
||||
endif
|
||||
ifeq (yes,$(build-omitfp))
|
||||
|
||||
@@ -36,8 +36,8 @@ mv -f $@.new $@
|
||||
test ! -d CVS || cvs commit -m'Regenerated: autoconf $(ACFLAGS) $<' $@
|
||||
endef
|
||||
|
||||
configure: configure.in; $(autoconf-it)
|
||||
%/configure: %/configure.in; $(autoconf-it)
|
||||
configure: configure.in aclocal.m4; $(autoconf-it)
|
||||
%/configure: %/configure.in aclocal.m4; $(autoconf-it)
|
||||
|
||||
include Makeconfig
|
||||
|
||||
@@ -52,7 +52,7 @@ endif
|
||||
|
||||
# These are the subdirectories containing the library source.
|
||||
subdirs = csu assert ctype db locale intl math setjmp signal stdlib \
|
||||
stdio-common $(stdio) malloc string time dirent grp pwd \
|
||||
stdio-common $(stdio) malloc string wcsmbs time dirent grp pwd\
|
||||
posix io termios resource misc socket sysvipc gmon gnulib \
|
||||
$(wildcard crypt) manual $(sysdep-subdirs) elf
|
||||
export subdirs := $(subdirs) # Benign, useless in GNU make before 3.63.
|
||||
|
||||
@@ -65,6 +65,15 @@ endif
|
||||
# Add -I switches to get the right sysdep directories.
|
||||
# `+includes' in Makeconfig references $(+sysdep-includes).
|
||||
+sysdep-includes := $(addprefix -I,$(+sysdep_dirs))
|
||||
|
||||
# The name of the symbol table archive member. The default is suitable for
|
||||
# BSD style archives. It can be overridden in sysdep Makefiles when SYSV
|
||||
# style archive are used.
|
||||
ifeq (no,$(elf))
|
||||
ar-symtab-name = __.SYMDEF
|
||||
else
|
||||
ar-symtab-name = # The null name is used in ELF archives.
|
||||
endif
|
||||
|
||||
# Include any system-specific makefiles.
|
||||
|
||||
@@ -349,7 +358,7 @@ ARFLAGS := r$(verbose)
|
||||
lib: lib-noranlib $(foreach l,$(libtypes),$(patsubst %,$(common-objpfx)$l,c))
|
||||
|
||||
# Pattern rule for libraries: depend on the __.SYMDEF member updated by ranlib.
|
||||
lib%.a: lib%.a(__.SYMDEF) ;
|
||||
lib%.a: lib%.a($(ar-symtab-name)) ;
|
||||
|
||||
libobjs: $(foreach o,$(object-suffixes),\
|
||||
$(common-objpfx)$(patsubst %,$(libtype$o),c)(\
|
||||
@@ -392,21 +401,18 @@ endif
|
||||
|
||||
endif
|
||||
|
||||
# Rules to update the __.SYMDEF member with ranlib.
|
||||
# To consolidate, each flavor library's __.SYMDEF member
|
||||
# depends on the imaginary intermediate file `symdef.SUFFIX',
|
||||
# where SUFFIX is that flavor's object suffix; then a pattern rule
|
||||
# "remakes" symdef.% depending on all the libc.a(foo.%) files in $(objects).
|
||||
$(common-objpfx)$(patsubst %,$(libtype.o),c)(__.SYMDEF): symdef.o
|
||||
$(common-objpfx)$(patsubst %,$(libtype.so),c)(__.SYMDEF): symdef.so
|
||||
$(common-objpfx)$(patsubst %,$(libtype.po),c)(__.SYMDEF): symdef.po
|
||||
$(common-objpfx)$(patsubst %,$(libtype.go),c)(__.SYMDEF): symdef.go
|
||||
symdef.%: $(foreach o,$(object-suffixes),\
|
||||
$(common-objpfx)$(patsubst %,$(libtype$o),c)(\
|
||||
$(patsubst $(objpfx)%.o,%.%,$(objects)))) \
|
||||
$(filter subdir_lib,$(firstword $(subdir) subdir_lib))
|
||||
# The last line above makes it also depend on subdir_lib for the parent.
|
||||
$(RANLIB) $(common-objpfx)$(patsubst %,$(libtype.$*),c)
|
||||
# Rules to update the $(ar-symtab-name) member with ranlib,
|
||||
# one for each object flavor.
|
||||
define o-iterator-doit
|
||||
$(common-objpfx)$(patsubst %,$(libtype$o),c)($(ar-symtab-name)): \
|
||||
$(common-objpfx)$(patsubst %,$(libtype$o),c)(\
|
||||
$(patsubst $(objpfx)%.o,%$o,$(objects))) \
|
||||
$(filter subdir_lib,$(firstword $(subdir) subdir_lib)); \
|
||||
$$(RANLIB) $$(common-objpfx)$$(patsubst %,$$(libtype$o),c)
|
||||
endef
|
||||
object-suffixes-left = $(object-suffixes)
|
||||
include $(o-iterator)
|
||||
|
||||
|
||||
# This makes all the object files.
|
||||
.PHONY: objects objs
|
||||
@@ -613,7 +619,7 @@ check: tests
|
||||
|
||||
.PHONY: TAGS
|
||||
TAGS: distinfo $(..)MakeTAGS
|
||||
$(MAKE) $(addprefix -f ,$^)
|
||||
$(MAKE) $(addprefix -f ,$^) $@
|
||||
|
||||
.PHONY: echo-headers
|
||||
echo-headers:
|
||||
|
||||
Vendored
+19
-5
@@ -51,9 +51,10 @@ trap 'rm -f dummy.c dummy.o dummy; exit 1' 1 2 15
|
||||
# Note: order is significant - the case branches are not exclusive.
|
||||
|
||||
case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
|
||||
alpha:OSF1:V*:*)
|
||||
alpha:OSF1:[VX]*:*)
|
||||
# After 1.2, OSF1 uses "V1.3" for uname -r.
|
||||
echo alpha-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^V//'`
|
||||
# After 4.x, OSF1 uses "X4.x" for uname -r.
|
||||
echo alpha-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[VX]//'`
|
||||
exit 0 ;;
|
||||
alpha:OSF1:*:*)
|
||||
# 1.2 uses "1.2" for uname -r.
|
||||
@@ -62,6 +63,9 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
|
||||
21064:Windows_NT:50:3)
|
||||
echo alpha-dec-winnt3.5
|
||||
exit 0 ;;
|
||||
Amiga*:UNIX_System_V:4.0:*)
|
||||
echo m68k-cbm-sysv4
|
||||
exit 0;;
|
||||
amiga:NetBSD:*:*)
|
||||
echo m68k-cbm-netbsd${UNAME_RELEASE}
|
||||
exit 0 ;;
|
||||
@@ -320,6 +324,12 @@ EOF
|
||||
*:NetBSD:*:*)
|
||||
echo ${UNAME_MACHINE}-unknown-netbsd`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
|
||||
exit 0 ;;
|
||||
i*:CYGWIN*:*)
|
||||
echo i386-unknown-cygwin32
|
||||
exit 0 ;;
|
||||
p*:CYGWIN*:*)
|
||||
echo powerpcle-unknown-cygwin32
|
||||
exit 0 ;;
|
||||
*:GNU:*:*)
|
||||
echo `echo ${UNAME_MACHINE}|sed -e 's,/.*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`
|
||||
exit 0 ;;
|
||||
@@ -327,12 +337,16 @@ EOF
|
||||
# The BFD linker knows what the default object file format is, so
|
||||
# first see if it will tell us.
|
||||
ld_help_string=`ld --help 2>&1`
|
||||
if echo $ld_help_string | grep >/dev/null 2>&1 "supported emulations: elf_i[345]86"; then
|
||||
if echo "$ld_help_string" | grep >/dev/null 2>&1 "supported emulations: elf_i[345]86"; then
|
||||
echo "${UNAME_MACHINE}-unknown-linux" ; exit 0
|
||||
elif echo $ld_help_string | grep >/dev/null 2>&1 "supported emulations: i[345]86linux"; then
|
||||
elif echo "$ld_help_string" | grep >/dev/null 2>&1 "supported emulations: i[345]86linux"; then
|
||||
echo "${UNAME_MACHINE}-unknown-linuxaout" ; exit 0
|
||||
elif echo $ld_help_string | grep >/dev/null 2>&1 "supported emulations: i[345]86coff"; then
|
||||
elif echo "$ld_help_string" | grep >/dev/null 2>&1 "supported emulations: i[345]86coff"; then
|
||||
echo "${UNAME_MACHINE}-unknown-linuxcoff" ; exit 0
|
||||
elif echo "$ld_help_string" | grep >/dev/null 2>&1 "supported emulations: m68kelf"; then
|
||||
echo "${UNAME_MACHINE}-unknown-linux" ; exit 0
|
||||
elif echo "$ld_help_string" | grep >/dev/null 2>&1 "supported emulations: m68klinux"; then
|
||||
echo "${UNAME_MACHINE}-unknown-linuxaout" ; exit 0
|
||||
elif test "${UNAME_MACHINE}" = "alpha" ; then
|
||||
echo alpha-unknown-linux ; exit 0
|
||||
else
|
||||
|
||||
Vendored
+8
-4
@@ -127,6 +127,9 @@ case $os in
|
||||
-windowsnt*)
|
||||
os=`echo $os | sed -e 's/windowsnt/winnt/'`
|
||||
;;
|
||||
-psos*)
|
||||
os=-psos
|
||||
;;
|
||||
esac
|
||||
|
||||
# Decode aliases for certain CPU-COMPANY combinations.
|
||||
@@ -136,10 +139,10 @@ case $basic_machine in
|
||||
tahoe | i[3456]86 | i860 | m68k | m68000 | m88k | ns32k | arm \
|
||||
| arme[lb] | pyramid \
|
||||
| tron | a29k | 580 | i960 | h8300 | hppa1.0 | hppa1.1 \
|
||||
| alpha | we32k | ns16k | clipper | sparclite | i370 | sh \
|
||||
| powerpc | powerpcle | sparc64 | 1750a | dsp16xx | mips64 | mipsel \
|
||||
| alpha | we32k | ns16k | clipper | i370 | sh \
|
||||
| powerpc | powerpcle | 1750a | dsp16xx | mips64 | mipsel \
|
||||
| pdp11 | mips64el | mips64orion | mips64orionel \
|
||||
| sparc)
|
||||
| sparc | sparclet | sparclite | sparc64)
|
||||
basic_machine=$basic_machine-unknown
|
||||
;;
|
||||
# Object if more than one company name word.
|
||||
@@ -653,7 +656,8 @@ case $os in
|
||||
| -hiux* | -386bsd* | -netbsd* | -freebsd* | -riscix* \
|
||||
| -lynxos* | -bosx* | -nextstep* | -cxux* | -aout* | -elf* \
|
||||
| -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
|
||||
| -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux*)
|
||||
| -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
|
||||
| -cygwin32* | -pe* | -psos*)
|
||||
# Remember, each alternative MUST END IN *, to match a version number.
|
||||
;;
|
||||
-sunos5*)
|
||||
|
||||
@@ -520,12 +520,9 @@ fi
|
||||
|
||||
ac_ext=c
|
||||
# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
|
||||
ac_cpp='echo $CPP $CPPFLAGS 1>&5;
|
||||
$CPP $CPPFLAGS'
|
||||
ac_compile='echo ${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5;
|
||||
${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5 2>&5'
|
||||
ac_link='echo ${CC-cc} -o conftest $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5;
|
||||
${CC-cc} -o conftest $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5 2>&5'
|
||||
ac_cpp='$CPP $CPPFLAGS'
|
||||
ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
|
||||
ac_link='${CC-cc} -o conftest $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
|
||||
|
||||
if (echo "testing\c"; echo 1,2,3) | grep c >/dev/null; then
|
||||
# Stardent Vistra SVR4 grep lacks -e, says ghazi@caip.rutgers.edu.
|
||||
@@ -1150,12 +1147,13 @@ else
|
||||
# On the NeXT, cc -E runs the code through the compiler's parser,
|
||||
# not just through cpp.
|
||||
cat > conftest.$ac_ext <<EOF
|
||||
#line 1154 "configure"
|
||||
#line 1151 "configure"
|
||||
#include "confdefs.h"
|
||||
#include <assert.h>
|
||||
Syntax Error
|
||||
EOF
|
||||
eval "$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
|
||||
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
|
||||
{ (eval echo configure:1157: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
|
||||
ac_err=`grep -v '^ *+' conftest.out`
|
||||
if test -z "$ac_err"; then
|
||||
:
|
||||
@@ -1164,12 +1162,13 @@ else
|
||||
rm -rf conftest*
|
||||
CPP="${CC-cc} -E -traditional-cpp"
|
||||
cat > conftest.$ac_ext <<EOF
|
||||
#line 1168 "configure"
|
||||
#line 1166 "configure"
|
||||
#include "confdefs.h"
|
||||
#include <assert.h>
|
||||
Syntax Error
|
||||
EOF
|
||||
eval "$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
|
||||
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
|
||||
{ (eval echo configure:1172: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
|
||||
ac_err=`grep -v '^ *+' conftest.out`
|
||||
if test -z "$ac_err"; then
|
||||
:
|
||||
@@ -1218,7 +1217,7 @@ if eval "test \"`echo '$''{'libc_cv_friendly_stddef'+set}'`\" = set"; then
|
||||
echo $ac_n "(cached) $ac_c" 1>&4
|
||||
else
|
||||
cat > conftest.$ac_ext <<EOF
|
||||
#line 1222 "configure"
|
||||
#line 1221 "configure"
|
||||
#include "confdefs.h"
|
||||
#define __need_size_t
|
||||
#define __need_wchar_t
|
||||
@@ -1234,7 +1233,7 @@ size_t size; wchar_t wchar;
|
||||
if (&size == NULL || &wchar == NULL) abort ();
|
||||
; return 0; }
|
||||
EOF
|
||||
if eval $ac_compile; then
|
||||
if { (eval echo configure:1237: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
|
||||
rm -rf conftest*
|
||||
libc_cv_friendly_stddef=yes
|
||||
else
|
||||
@@ -1341,7 +1340,7 @@ if eval "test \"`echo '$''{'libc_cv_have_initfini'+set}'`\" = set"; then
|
||||
echo $ac_n "(cached) $ac_c" 1>&4
|
||||
else
|
||||
cat > conftest.$ac_ext <<EOF
|
||||
#line 1345 "configure"
|
||||
#line 1344 "configure"
|
||||
#include "confdefs.h"
|
||||
|
||||
int main() { return 0; }
|
||||
@@ -1350,7 +1349,7 @@ asm (".section .init");
|
||||
asm (".section .fini");
|
||||
; return 0; }
|
||||
EOF
|
||||
if eval $ac_compile; then
|
||||
if { (eval echo configure:1353: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
|
||||
rm -rf conftest*
|
||||
libc_cv_have_initfini=yes
|
||||
else
|
||||
@@ -1382,9 +1381,14 @@ for dir in $sysnames; do
|
||||
echo "$ac_t""running configure fragment for $dir" 1>&4
|
||||
. $sysdep_dir/$dir/configure
|
||||
fi
|
||||
|
||||
if test -z "$uname"; then
|
||||
{ test -r $sysdep_dir/$dir/uname.c || test -r $sysdep_dir/$dir/uname.S; } \
|
||||
&& uname=$dir
|
||||
if test -r $sysdep_dir/$dir/uname.c ||
|
||||
test -r $sysdep_dir/$dir/uname.S ||
|
||||
{ test -r $sysdep_dir/$dir/syscalls.list &&
|
||||
grep '^uname[ ]' $sysdep_dir/$dir/syscalls.list >/dev/null; }; then
|
||||
uname=$dir
|
||||
fi
|
||||
fi
|
||||
done
|
||||
|
||||
|
||||
@@ -418,13 +418,16 @@ for dir in $sysnames; do
|
||||
AC_MSG_RESULT(running configure fragment for $dir)
|
||||
. $sysdep_dir/$dir/configure
|
||||
fi
|
||||
[
|
||||
if test -z "$uname"; then
|
||||
if test -r $sysdep_dir/$dir/uname.c ||
|
||||
test -r $sysdep_dir/$dir/uname.S ||
|
||||
{ test -r $sysdep_dir/$dir/syscalls.list &&
|
||||
grep '^uname[ ]' $sysdep_dir/$dir/syscalls.list >/dev/null; }; then
|
||||
uname=$dir
|
||||
fi
|
||||
fi
|
||||
]dnl
|
||||
done
|
||||
|
||||
AC_LINK_FILES(`echo $libc_link_sources`, `echo $libc_link_dests`)
|
||||
|
||||
+3
-6
@@ -70,13 +70,10 @@ _init (void)
|
||||
gcrt1.o to reference a symbol which would be defined by some library
|
||||
module which has a constructor; but then user code's constructors
|
||||
would come first, and not be profiled. */
|
||||
extern volatile void __gmon_start__ (void) __attribute__ ((weak));
|
||||
/* This volatile variable is necessary to avoid GCC optimizing
|
||||
out the test. */
|
||||
register volatile void (*g) (void) = &__gmon_start__;
|
||||
extern void __gmon_start__ (void) __attribute__ ((weak));
|
||||
weak_symbol (__gmon_start__)
|
||||
if (g)
|
||||
(*g) ();
|
||||
if (__gmon_start__)
|
||||
__gmon_start__ ();
|
||||
|
||||
/* End the here document containing the .init prologue code.
|
||||
Then fetch the .section directive just written and append that
|
||||
|
||||
@@ -0,0 +1,5 @@
|
||||
*.gz *.Z *.tar *.tgz
|
||||
=*
|
||||
TODO COPYING* AUTHORS copyr-* copying.*
|
||||
glibc-*
|
||||
distinfo
|
||||
@@ -33,6 +33,8 @@ rtld-routines := rtld $(addprefix dl-,minimal load lookup object reloc \
|
||||
distribute = $(rtld-routines:=.c) dynamic-link.h do-rel.h \
|
||||
soinit.c sofini.c ldd.sh.in linux-compat.c
|
||||
|
||||
all: # Make this the default target; it will be defined in Rules.
|
||||
|
||||
include ../Makeconfig
|
||||
|
||||
ifeq (yes,$(build-shared))
|
||||
|
||||
@@ -0,0 +1,108 @@
|
||||
/* On-demand PLT fixup for shared objects.
|
||||
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., 675 Mass Ave,
|
||||
Cambridge, MA 02139, USA. */
|
||||
|
||||
#include <link.h>
|
||||
#include "dynamic-link.h"
|
||||
|
||||
/* Figure out the right type, Rel or Rela. */
|
||||
#define elf_machine_rel 1
|
||||
#define elf_machine_rela 2
|
||||
#if elf_machine_relplt == elf_machine_rel
|
||||
#define PLTREL Elf32_Rel
|
||||
#elif elf_machine_relplt == elf_machine_rela
|
||||
#define PLTREL Elf32_Rela
|
||||
#else
|
||||
#error "dl-machine.h bug: elf_machine_relplt not rel or rela"
|
||||
#endif
|
||||
#undef elf_machine_rel
|
||||
#undef elf_machine_rela
|
||||
|
||||
/* We need to define the function as a local symbol so that the reference
|
||||
in the trampoline code will be a local PC-relative call. Tell the
|
||||
compiler not to worry that the function appears not to be called. */
|
||||
|
||||
static Elf32_Addr fixup (
|
||||
#ifdef ELF_MACHINE_RUNTIME_FIXUP_ARGS
|
||||
ELF_MACHINE_RUNTIME_FIXUP_ARGS,
|
||||
#endif
|
||||
struct link_map *l, Elf32_Word reloc_offset)
|
||||
__attribute__ ((unused));
|
||||
|
||||
/* This function is called through a special trampoline from the PLT the
|
||||
first time each PLT entry is called. We must perform the relocation
|
||||
specified in the PLT of the given shared object, and return the resolved
|
||||
function address to the trampoline, which will restart the original call
|
||||
to that address. Future calls will bounce directly from the PLT to the
|
||||
function. */
|
||||
|
||||
static Elf32_Addr
|
||||
fixup (
|
||||
#ifdef ELF_MACHINE_RUNTIME_FIXUP_ARGS
|
||||
ELF_MACHINE_RUNTIME_FIXUP_ARGS,
|
||||
#endif
|
||||
struct link_map *l, Elf32_Word reloc_offset)
|
||||
{
|
||||
const Elf32_Sym *const symtab
|
||||
= (const Elf32_Sym *) (l->l_addr + l->l_info[DT_SYMTAB]->d_un.d_ptr);
|
||||
const char *strtab =
|
||||
(const char *) (l->l_addr + l->l_info[DT_STRTAB]->d_un.d_ptr);
|
||||
|
||||
const PLTREL *const reloc
|
||||
= (const void *) (l->l_addr + l->l_info[DT_JMPREL]->d_un.d_ptr +
|
||||
reloc_offset);
|
||||
|
||||
const Elf32_Sym *definer;
|
||||
Elf32_Addr loadbase;
|
||||
struct link_map *scope, *real_next;
|
||||
|
||||
/* Look up the symbol's run-time value. */
|
||||
|
||||
real_next = l->l_next;
|
||||
if (l->l_info[DT_SYMBOLIC])
|
||||
{
|
||||
l->l_next = _dl_loaded;
|
||||
if (l->l_prev)
|
||||
l->l_prev->l_next = real_next;
|
||||
scope = l;
|
||||
}
|
||||
else
|
||||
scope = _dl_loaded;
|
||||
|
||||
definer = &symtab[ELF32_R_SYM (reloc->r_info)];
|
||||
loadbase = _dl_lookup_symbol (strtab + definer->st_name, &definer,
|
||||
scope, l->l_name, 0);
|
||||
|
||||
/* Restore list frobnication done above for DT_SYMBOLIC. */
|
||||
l->l_next = real_next;
|
||||
if (l->l_prev)
|
||||
l->l_prev->l_next = l;
|
||||
|
||||
/* Apply the relocation with that value. */
|
||||
elf_machine_relplt (l, reloc, loadbase, definer);
|
||||
|
||||
return *(Elf32_Addr *) (l->l_addr + reloc->r_offset);
|
||||
}
|
||||
|
||||
|
||||
/* This macro is defined in dl-machine.h to define the entry point called
|
||||
by the PLT. The `fixup' function above does the real work, but a little
|
||||
more twiddling is needed to get the stack right and jump to the address
|
||||
finally resolved. */
|
||||
|
||||
ELF_MACHINE_RUNTIME_TRAMPOLINE
|
||||
+2
-2
@@ -1,5 +1,5 @@
|
||||
/* Inline functions for dynamic linking.
|
||||
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
|
||||
@@ -43,7 +43,7 @@ elf_get_dynamic_info (Elf32_Dyn *dyn, Elf32_Dyn *info[DT_NUM + DT_PROCNUM])
|
||||
dyn->d_tag < DT_LOPROC + DT_PROCNUM)
|
||||
info[dyn->d_tag - DT_LOPROC + DT_NUM] = dyn;
|
||||
else
|
||||
assert (! "bad dynamic tag");
|
||||
assert (! "bad dynamic tag");
|
||||
dyn++;
|
||||
}
|
||||
|
||||
|
||||
@@ -439,6 +439,34 @@ typedef struct
|
||||
#define AT_GID 13 /* Real gid */
|
||||
#define AT_EGID 14 /* Effective gid */
|
||||
|
||||
/* Motorola 68k specific definitions. */
|
||||
|
||||
/* m68k relocs. */
|
||||
|
||||
#define R_68K_NONE 0 /* No reloc */
|
||||
#define R_68K_32 1 /* Direct 32 bit */
|
||||
#define R_68K_16 2 /* Direct 16 bit */
|
||||
#define R_68K_8 3 /* Direct 8 bit */
|
||||
#define R_68K_PC32 4 /* PC relative 32 bit */
|
||||
#define R_68K_PC16 5 /* PC relative 16 bit */
|
||||
#define R_68K_PC8 6 /* PC relative 8 bit */
|
||||
#define R_68K_GOT32 7 /* 32 bit PC relative GOT entry */
|
||||
#define R_68K_GOT16 8 /* 16 bit PC relative GOT entry */
|
||||
#define R_68K_GOT8 9 /* 8 bit PC relative GOT entry */
|
||||
#define R_68K_GOT32O 10 /* 32 bit GOT offset */
|
||||
#define R_68K_GOT16O 11 /* 16 bit GOT offset */
|
||||
#define R_68K_GOT8O 12 /* 8 bit GOT offset */
|
||||
#define R_68K_PLT32 13 /* 32 bit PC relative PLT address */
|
||||
#define R_68K_PLT16 14 /* 16 bit PC relative PLT address */
|
||||
#define R_68K_PLT8 15 /* 8 bit PC relative PLT address */
|
||||
#define R_68K_PLT32O 16 /* 32 bit PLT offset */
|
||||
#define R_68K_PLT16O 17 /* 16 bit PLT offset */
|
||||
#define R_68K_PLT8O 18 /* 8 bit PLT offset */
|
||||
#define R_68K_COPY 19 /* Copy symbol at runtime */
|
||||
#define R_68K_GLOB_DAT 20 /* Create GOT entry */
|
||||
#define R_68K_JMP_SLOT 21 /* Create PLT entry */
|
||||
#define R_68K_RELATIVE 22 /* Adjust by program base */
|
||||
|
||||
/* Intel 80386 specific definitions. */
|
||||
|
||||
/* i386 relocs. */
|
||||
|
||||
+2
-2
@@ -21,8 +21,8 @@
|
||||
#
|
||||
subdir := gmon
|
||||
|
||||
headers := sys/gmon.h machine-gmon.h
|
||||
|
||||
headers := sys/gmon.h
|
||||
distribute := machine-gmon.h
|
||||
routines := gmon mcount profil
|
||||
|
||||
include ../Rules
|
||||
|
||||
+6
-2
@@ -38,6 +38,10 @@ static char sccsid[] = "@(#)mcount.c 8.1 (Berkeley) 6/4/93";
|
||||
#include <sys/param.h>
|
||||
#include <sys/gmon.h>
|
||||
|
||||
/* This file provides the machine-dependent definitions of the _MCOUNT_DECL
|
||||
and MCOUNT macros. */
|
||||
#include "machine-gmon.h"
|
||||
|
||||
/*
|
||||
* mcount is called on entry to each function compiled with the profiling
|
||||
* switch set. _mcount(), which is declared in a machine-dependent way
|
||||
@@ -48,7 +52,7 @@ static char sccsid[] = "@(#)mcount.c 8.1 (Berkeley) 6/4/93";
|
||||
* _mcount updates data structures that represent traversals of the
|
||||
* program's call graph edges. frompc and selfpc are the return
|
||||
* address and function address that represents the given call graph edge.
|
||||
*
|
||||
*
|
||||
* Note: the original BSD code used the same variable (frompcindex) for
|
||||
* both frompcindex and frompc. Any reasonable, modern compiler will
|
||||
* perform this optimization.
|
||||
@@ -154,7 +158,7 @@ _MCOUNT_DECL(frompc, selfpc) /* _mcount; may be static, inline, etc */
|
||||
*frompcindex = toindex;
|
||||
goto done;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
done:
|
||||
#ifdef KERNEL
|
||||
|
||||
@@ -37,7 +37,6 @@
|
||||
#define _SYS_GMON_H_
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
#include <machine-gmon.h>
|
||||
|
||||
/*
|
||||
* Structure prepended to gmon.out profiling data file.
|
||||
|
||||
+2
-2
@@ -37,7 +37,7 @@ user-interfaces := $(addprefix hurd/,\
|
||||
process process_request \
|
||||
msg msg_reply msg_request \
|
||||
exec exec_startup crash interrupt \
|
||||
fs fsys io term socket ifsock)
|
||||
fs fsys io term tioctl socket ifsock)
|
||||
server-interfaces := hurd/msg
|
||||
|
||||
routines = hurdstartup hurdinit \
|
||||
@@ -51,7 +51,7 @@ routines = hurdstartup hurdinit \
|
||||
fopenport \
|
||||
vpprintf \
|
||||
ports-get ports-set hurdports hurdmsg \
|
||||
$(sig) $(dtable) hurdinline port-cleanup # report-wait
|
||||
$(sig) $(dtable) hurdinline port-cleanup report-wait
|
||||
sig = hurdsig hurdfault faultexc siginfo hurd-raise preempt-sig \
|
||||
trampoline longjmp-ts catch-exc exc2signal hurdkill sigunwind \
|
||||
thread-self thread-cancel intr-msg catch-signal
|
||||
|
||||
+6
-4
@@ -1,4 +1,4 @@
|
||||
/* Copyright (C) 1991, 1992, 1993, 1994, 1995 Free Software Foundation, Inc.
|
||||
/* Copyright (C) 1991, 92, 93, 94, 95, 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
|
||||
@@ -29,9 +29,11 @@ DEFUN(fchroot, (fd), int fd)
|
||||
error_t err;
|
||||
file_t dir;
|
||||
|
||||
err = HURD_DPORT_USE (fd, (dir = __file_name_lookup_under (port, "",
|
||||
O_EXEC, 0),
|
||||
errno));
|
||||
err = HURD_DPORT_USE (fd,
|
||||
({
|
||||
dir = __file_name_lookup_under (port, "", O_EXEC, 0);
|
||||
dir == MACH_PORT_NULL ? errno : 0;
|
||||
}));
|
||||
|
||||
if (! err)
|
||||
_hurd_port_set (&_hurd_ports[INIT_PORT_CRDIR], dir);
|
||||
|
||||
+6
-3
@@ -1,5 +1,5 @@
|
||||
/* User-registered handlers for specific `ioctl' requests.
|
||||
Copyright (C) 1993, 1994, 1995 Free Software Foundation, Inc.
|
||||
Copyright (C) 1993, 1994, 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
|
||||
@@ -22,6 +22,7 @@ Cambridge, MA 02139, USA. */
|
||||
|
||||
#define __need___va_list
|
||||
#include <stdarg.h>
|
||||
#include <ioctls.h>
|
||||
|
||||
|
||||
/* Type of handler function, called like ioctl to do its entire job. */
|
||||
@@ -30,7 +31,8 @@ typedef int (*ioctl_handler_t) (int fd, int request, void *arg);
|
||||
/* Structure that records an ioctl handler. */
|
||||
struct ioctl_handler
|
||||
{
|
||||
int first_request, last_request; /* Range of handled request values. */
|
||||
/* Range of handled _IOC_NOTYPE (REQUEST) values. */
|
||||
int first_request, last_request;
|
||||
|
||||
/* Handler function, called like ioctl to do its entire job. */
|
||||
ioctl_handler_t handler;
|
||||
@@ -54,7 +56,8 @@ extern int hurd_register_ioctl_handler (int first_request, int last_request,
|
||||
#define _HURD_HANDLE_IOCTLS(handler, first, last) \
|
||||
static const struct ioctl_handler handler##_ioctl_handler \
|
||||
__attribute__ ((__unused__)) = \
|
||||
{ (first), (last), (int (*) (int, int, void *)) (handler), NULL }; \
|
||||
{ _IOC_NOTYPE (first), _IOC_NOTYPE (last), \
|
||||
(int (*) (int, int, void *)) (handler), NULL }; \
|
||||
text_set_element (_hurd_ioctl_handler_lists, ##handler##_ioctl_handler)
|
||||
|
||||
/* Define a library-internal handler for a single ioctl command. */
|
||||
|
||||
+17
-5
@@ -113,6 +113,8 @@ _hurdsig_fault_init (void)
|
||||
struct machine_thread_state state;
|
||||
mach_port_t sigexc;
|
||||
|
||||
/* Allocate a port to receive signal thread exceptions.
|
||||
We will move this receive right to the proc server. */
|
||||
err = __mach_port_allocate (__mach_task_self (),
|
||||
MACH_PORT_RIGHT_RECEIVE, &sigexc);
|
||||
assert_perror (err);
|
||||
@@ -120,16 +122,20 @@ _hurdsig_fault_init (void)
|
||||
MACH_PORT_RIGHT_RECEIVE, &forward_sigexc);
|
||||
assert_perror (err);
|
||||
|
||||
/* Allocate a port to receive the exception msgs forwarded
|
||||
from the proc server. */
|
||||
err = __mach_port_insert_right (__mach_task_self (), sigexc,
|
||||
sigexc, MACH_MSG_TYPE_MAKE_SEND);
|
||||
assert_perror (err);
|
||||
#if 0 /* XXX gdb bites */
|
||||
err = __thread_set_special_port (_hurd_msgport_thread,
|
||||
THREAD_EXCEPTION_PORT, sigexc);
|
||||
#endif
|
||||
__mach_port_deallocate (__mach_task_self (), sigexc);
|
||||
|
||||
/* Set the queue limit for this port to just one. The proc server will
|
||||
notice if we ever get a second exception while one remains queued and
|
||||
unreceived, and decide we are hopelessly buggy. */
|
||||
err = __mach_port_set_qlimit (__mach_task_self (), forward_sigexc, 1);
|
||||
assert_perror (err);
|
||||
|
||||
/* This state will be restored when we fault.
|
||||
It runs the function above. */
|
||||
memset (&state, 0, sizeof state);
|
||||
MACHINE_THREAD_STATE_SET_PC (&state, faulted);
|
||||
MACHINE_THREAD_STATE_SET_SP (&state, faultstack, sizeof faultstack);
|
||||
@@ -143,5 +149,11 @@ _hurdsig_fault_init (void)
|
||||
(natural_t *) &state,
|
||||
MACHINE_THREAD_STATE_COUNT));
|
||||
assert_perror (err);
|
||||
|
||||
/* Direct signal thread exceptions to the proc server. */
|
||||
err = __thread_set_special_port (_hurd_msgport_thread,
|
||||
THREAD_EXCEPTION_PORT, sigexc);
|
||||
__mach_port_deallocate (__mach_task_self (), sigexc);
|
||||
assert_perror (err);
|
||||
}
|
||||
|
||||
|
||||
+16
-6
@@ -1,5 +1,5 @@
|
||||
/* ioctl commands which must be done in the C library.
|
||||
Copyright (C) 1994, 1995 Free Software Foundation, Inc.
|
||||
Copyright (C) 1994, 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
|
||||
@@ -36,6 +36,10 @@ _hurd_lookup_ioctl_handler (int request)
|
||||
void *const *ptr;
|
||||
const struct ioctl_handler *h;
|
||||
|
||||
/* Mask off the type bits, so that we see requests in a single group as a
|
||||
contiguous block of values. */
|
||||
request = _IOC_NOTYPE (request);
|
||||
|
||||
for (ptr = symbol_set_first_element (_hurd_ioctl_handler_lists);
|
||||
!symbol_set_end_p (_hurd_ioctl_handler_lists, ptr);
|
||||
++ptr)
|
||||
@@ -62,7 +66,7 @@ fioctl (int fd,
|
||||
switch (request)
|
||||
{
|
||||
default:
|
||||
err = EGRATUITOUS;
|
||||
err = ENOTTY;
|
||||
break;
|
||||
|
||||
case FIONREAD:
|
||||
@@ -97,7 +101,7 @@ fioctl (int fd,
|
||||
break;
|
||||
}
|
||||
|
||||
return err ? __hurd_fail (err) : 0;
|
||||
return err ? __hurd_dfail (fd, err) : 0;
|
||||
}
|
||||
|
||||
_HURD_HANDLE_IOCTLS (fioctl, FIOGETOWN, FIONREAD);
|
||||
@@ -112,7 +116,7 @@ fioclex (int fd,
|
||||
switch (request)
|
||||
{
|
||||
default:
|
||||
return __hurd_fail (EGRATUITOUS);
|
||||
return __hurd_fail (ENOTTY);
|
||||
case FIOCLEX:
|
||||
flag = FD_CLOEXEC;
|
||||
break;
|
||||
@@ -126,12 +130,13 @@ fioclex (int fd,
|
||||
_HURD_HANDLE_IOCTLS (fioclex, FIOCLEX, FIONCLEX);
|
||||
|
||||
#include <hurd/term.h>
|
||||
#include <hurd/tioctl.h>
|
||||
|
||||
static void
|
||||
rectty_dtable (mach_port_t cttyid)
|
||||
{
|
||||
int i;
|
||||
|
||||
|
||||
HURD_CRITICAL_BEGIN;
|
||||
__mutex_lock (&_hurd_dtable_lock);
|
||||
|
||||
@@ -222,6 +227,11 @@ tiocsctty (int fd,
|
||||
else if (err)
|
||||
return __hurd_fail (err);
|
||||
|
||||
/* Change the terminal's pgrp to ours. */
|
||||
err = HURD_DPORT_USE (fd, __tioctl_tiocspgrp (port, _hurd_pgrp));
|
||||
if (err)
|
||||
return __hurd_fail (err);
|
||||
|
||||
/* Make it our own. */
|
||||
_hurd_port_set (&_hurd_ports[INIT_PORT_CTTYID], cttyid);
|
||||
|
||||
@@ -256,7 +266,7 @@ tiocnotty (int fd,
|
||||
_hurd_port_set (&_hurd_ports[INIT_PORT_CTTYID], MACH_PORT_NULL);
|
||||
|
||||
/* Reset all the ctty ports in all the descriptors. */
|
||||
|
||||
|
||||
__USEPORT (CTTYID, (rectty_dtable (MACH_PORT_NULL), 0));
|
||||
|
||||
return 0;
|
||||
|
||||
+4
-1
@@ -133,7 +133,10 @@ __hurd_file_name_lookup_retry (error_t (*use_init_port)
|
||||
#endif
|
||||
|
||||
/* An empty RETRYNAME indicates we have the final port. */
|
||||
if (retryname[0] == '\0')
|
||||
if (retryname[0] == '\0' &&
|
||||
/* If reauth'd, we must do one more retry on "" to give the new
|
||||
translator a chance to make a new port for us. */
|
||||
doretry == FS_RETRY_NORMAL)
|
||||
{
|
||||
/* We got a successful translation. Now apply any open-time
|
||||
action flags we were passed. */
|
||||
|
||||
@@ -449,10 +449,3 @@ _S_msg_set_dtable (mach_port_t process,
|
||||
kern_return_t
|
||||
_S_msg_startup_dosync (mach_port_t process)
|
||||
{ return EOPNOTSUPP; }
|
||||
|
||||
kern_return_t
|
||||
_S_msg_report_wait (mach_port_t process,
|
||||
mach_port_t thread,
|
||||
string_t wait_desc,
|
||||
int *wait_rpc)
|
||||
{ return EOPNOTSUPP; }
|
||||
|
||||
@@ -0,0 +1,146 @@
|
||||
/* Report on what a thread in our task is waiting for.
|
||||
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. */
|
||||
|
||||
#include <hurd.h>
|
||||
#include <hurd/signal.h>
|
||||
#include <hurd/fd.h>
|
||||
#include <string.h>
|
||||
#include <assert.h>
|
||||
#include <hurd/msg_server.h>
|
||||
#include "thread_state.h"
|
||||
#include "intr-msg.h"
|
||||
|
||||
static void
|
||||
describe_number (string_t description, const char *flavor, int i)
|
||||
{
|
||||
char *p = __stpcpy (description, flavor);
|
||||
p += i / 10 + 1;
|
||||
*p = '\0';
|
||||
do
|
||||
{
|
||||
*--p = '0' + i % 10;
|
||||
i /= 10;
|
||||
} while (i != 0);
|
||||
assert (p[-1] == '#');
|
||||
}
|
||||
|
||||
static void
|
||||
describe_port (string_t description, mach_port_t port)
|
||||
{
|
||||
int i;
|
||||
|
||||
if (port == __mach_task_self ())
|
||||
{
|
||||
strcpy (description, "task-self");
|
||||
return;
|
||||
}
|
||||
|
||||
for (i = 0; i < _hurd_nports; ++i)
|
||||
if (port == _hurd_ports[i].port)
|
||||
{
|
||||
describe_number (description, "init#", i);
|
||||
return;
|
||||
}
|
||||
|
||||
if (_hurd_init_dtable)
|
||||
{
|
||||
for (i = 0; i < _hurd_init_dtablesize; ++i)
|
||||
if (port == _hurd_init_dtable[i])
|
||||
{
|
||||
describe_number (description, "fd#", i);
|
||||
return;
|
||||
}
|
||||
}
|
||||
else if (_hurd_dtable)
|
||||
{
|
||||
for (i = 0; i < _hurd_dtablesize; ++i)
|
||||
if (_hurd_dtable[i] == NULL)
|
||||
continue;
|
||||
else if (port == _hurd_dtable[i]->port.port)
|
||||
{
|
||||
describe_number (description, "fd#", i);
|
||||
return;
|
||||
}
|
||||
else if (port == _hurd_dtable[i]->ctty.port)
|
||||
{
|
||||
describe_number (description, "bgfd#", i);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
describe_number (description, "port#", port);
|
||||
}
|
||||
|
||||
|
||||
kern_return_t
|
||||
_S_msg_report_wait (mach_port_t msgport, thread_t thread,
|
||||
string_t description, int *msgid)
|
||||
{
|
||||
*msgid = 0;
|
||||
|
||||
if (thread == _hurd_msgport_thread)
|
||||
/* Cute. */
|
||||
strcpy (description, "msgport");
|
||||
else
|
||||
{
|
||||
/* Make sure this is really one of our threads. */
|
||||
|
||||
struct hurd_sigstate *ss;
|
||||
|
||||
__mutex_lock (&_hurd_siglock);
|
||||
for (ss = _hurd_sigstates; ss != NULL; ss = ss->next)
|
||||
if (ss->thread == thread)
|
||||
break;
|
||||
__mutex_unlock (&_hurd_siglock);
|
||||
if (ss == NULL)
|
||||
/* To hell with you. */
|
||||
return EINVAL;
|
||||
|
||||
if (ss->suspended != MACH_PORT_NULL)
|
||||
strcpy (description, "sigsuspend");
|
||||
else
|
||||
{
|
||||
/* Examine the thread's state to see if it is blocked in an RPC. */
|
||||
|
||||
struct machine_thread_state state;
|
||||
mach_msg_type_number_t count = MACHINE_THREAD_STATE_COUNT;
|
||||
error_t err;
|
||||
|
||||
err = __thread_get_state (thread, MACHINE_THREAD_STATE_FLAVOR,
|
||||
(integer_t *) &state, &count);
|
||||
if (err)
|
||||
return err;
|
||||
assert (count == MACHINE_THREAD_STATE_COUNT);
|
||||
if (SYSCALL_EXAMINE (&state, msgid))
|
||||
{
|
||||
/* Blocked in a system call. */
|
||||
if (*msgid == -25)
|
||||
/* mach_msg system call. Examine its parameters. */
|
||||
describe_port (description, MSG_EXAMINE (&state, msgid));
|
||||
else
|
||||
strcpy (description, "kernel");
|
||||
}
|
||||
else
|
||||
description[0] = '\0';
|
||||
}
|
||||
}
|
||||
|
||||
__mach_port_deallocate (__mach_task_self (), thread);
|
||||
return 0;
|
||||
}
|
||||
+3
-3
@@ -31,9 +31,9 @@ CPPFLAGS += -D'GNULOCALEDIR="$(localedir)"' \
|
||||
|
||||
ifdef gettext-srcdir
|
||||
|
||||
%:: $(gettext-srcdir)/intl/%.glibc; $(copysrc)
|
||||
%:: $(gettext-srcdir)/intl/%.c; $(copysrc)
|
||||
%:: $(gettext-srcdir)/intl/%.h; $(copysrc)
|
||||
%.h:: $(gettext-srcdir)/intl/%.glibc; $(copysrc)
|
||||
%.c:: $(gettext-srcdir)/intl/%.c; $(copysrc)
|
||||
%.h:: $(gettext-srcdir)/intl/%.h; $(copysrc)
|
||||
|
||||
define copysrc
|
||||
cp -f $< $@.new
|
||||
|
||||
+26
-15
@@ -1,5 +1,5 @@
|
||||
/* dcgettext.c -- implemenatation of the dcgettext(3) function
|
||||
Copyright (C) 1995 Software Foundation, Inc.
|
||||
/* dcgettext.c -- implementation of the dcgettext(3) function
|
||||
Copyright (C) 1995 Free Software Foundation, Inc.
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
@@ -24,7 +24,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
|
||||
#ifdef __GNUC__
|
||||
# define alloca __builtin_alloca
|
||||
#else
|
||||
# ifdef HAVE_ALLOCA_H || defined _LIBC
|
||||
# if defined HAVE_ALLOCA_H || defined _LIBC
|
||||
# include <alloca.h>
|
||||
# else
|
||||
# ifdef _AIX
|
||||
@@ -151,10 +151,11 @@ const char _nl_default_dirname[] = GNULOCALEDIR;
|
||||
struct binding *_nl_domain_bindings;
|
||||
|
||||
/* Prototypes for local functions. */
|
||||
static char *find_msg __P ((struct loaded_domain *domain, const char *msgid));
|
||||
static const char *category_to_name __P((int category));
|
||||
static const char *guess_category_value __P((int category,
|
||||
const char *categoryname));
|
||||
static char *find_msg PARAMS ((struct loaded_domain *domain,
|
||||
const char *msgid));
|
||||
static const char *category_to_name PARAMS ((int category));
|
||||
static const char *guess_category_value PARAMS ((int category,
|
||||
const char *categoryname));
|
||||
|
||||
|
||||
/* Names for the libintl functions are a problem. They must not clash
|
||||
@@ -182,6 +183,7 @@ DCGETTEXT (domainname, msgid, category)
|
||||
char *dirname, *xdomainname;
|
||||
char *single_locale;
|
||||
char *retval;
|
||||
int saved_errno = errno;
|
||||
|
||||
/* If no real MSGID is given return NULL. */
|
||||
if (msgid == NULL)
|
||||
@@ -233,9 +235,12 @@ DCGETTEXT (domainname, msgid, category)
|
||||
}
|
||||
|
||||
if (ret == NULL)
|
||||
/* We cannot get the current working directory. Don't signal an
|
||||
error but simply return the default string. */
|
||||
return (char *) msgid;
|
||||
{
|
||||
/* We cannot get the current working directory. Don't signal an
|
||||
error but simply return the default string. */
|
||||
errno = saved_errno;
|
||||
return (char *) msgid;
|
||||
}
|
||||
|
||||
/* We don't want libintl.a to depend on any other library. So
|
||||
we avoid the non-standard function stpcpy. In GNU C Library
|
||||
@@ -302,7 +307,10 @@ DCGETTEXT (domainname, msgid, category)
|
||||
domain. Return the MSGID. */
|
||||
if (strcmp (single_locale, "C") == 0
|
||||
|| strcmp (single_locale, "POSIX") == 0)
|
||||
return (char *) msgid;
|
||||
{
|
||||
errno = saved_errno;
|
||||
return (char *) msgid;
|
||||
}
|
||||
|
||||
|
||||
/* Find structure describing the message catalog matching the
|
||||
@@ -317,7 +325,7 @@ DCGETTEXT (domainname, msgid, category)
|
||||
{
|
||||
int cnt;
|
||||
|
||||
for (cnt = 0; domain->successor[cnt] != NULL; --cnt)
|
||||
for (cnt = 0; domain->successor[cnt] != NULL; ++cnt)
|
||||
{
|
||||
retval = find_msg (domain->successor[cnt], msgid);
|
||||
|
||||
@@ -327,7 +335,10 @@ DCGETTEXT (domainname, msgid, category)
|
||||
}
|
||||
|
||||
if (retval != NULL)
|
||||
return retval;
|
||||
{
|
||||
errno = saved_errno;
|
||||
return retval;
|
||||
}
|
||||
}
|
||||
}
|
||||
/* NOTREACHED */
|
||||
@@ -375,8 +386,8 @@ find_msg (domain, msgid)
|
||||
|
||||
while (1)
|
||||
{
|
||||
if (idx >= W (domain->must_swap, domain->hash_size) - incr)
|
||||
idx -= W (domain->must_swap, domain->hash_size) - incr;
|
||||
if (idx >= domain->hash_size - incr)
|
||||
idx -= domain->hash_size - incr;
|
||||
else
|
||||
idx += incr;
|
||||
|
||||
|
||||
+13
-13
@@ -1,5 +1,5 @@
|
||||
/* finddomain.c -- handle list of needed message catalogs
|
||||
Copyright (C) 1995 Software Foundation, Inc.
|
||||
Copyright (C) 1995 Free Software Foundation, Inc.
|
||||
Written by Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1995.
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
@@ -83,21 +83,21 @@ void free ();
|
||||
static struct loaded_domain *_nl_loaded_domains;
|
||||
|
||||
/* Prototypes for local functions. */
|
||||
static struct loaded_domain *make_entry_rec __P ((const char *dirname,
|
||||
int mask,
|
||||
const char *language,
|
||||
const char *territory,
|
||||
const char *codeset,
|
||||
const char *modifier,
|
||||
const char *special,
|
||||
const char *sponsor,
|
||||
const char *revision,
|
||||
const char *domainname,
|
||||
int do_allocate));
|
||||
static struct loaded_domain *make_entry_rec PARAMS ((const char *dirname,
|
||||
int mask,
|
||||
const char *language,
|
||||
const char *territory,
|
||||
const char *codeset,
|
||||
const char *modifier,
|
||||
const char *special,
|
||||
const char *sponsor,
|
||||
const char *revision,
|
||||
const char *domainname,
|
||||
int do_allocate));
|
||||
|
||||
/* Substitution for systems lacking this function in their C library. */
|
||||
#if !_LIBC && !HAVE_STPCPY
|
||||
static char *stpcpy __P ((char *dest, const char *src));
|
||||
static char *stpcpy PARAMS ((char *dest, const char *src));
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
+12
-9
@@ -1,5 +1,5 @@
|
||||
/* gettextP.h -- header describing internals of gettext library
|
||||
Copyright (C) 1995 Software Foundation, Inc.
|
||||
Copyright (C) 1995 Free Software Foundation, Inc.
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
@@ -20,11 +20,11 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
|
||||
|
||||
/* @@ end of prolog @@ */
|
||||
|
||||
#ifndef __P
|
||||
#ifndef PARAMS
|
||||
# if __STDC__
|
||||
# define __P(args) args
|
||||
# define PARAMS(args) args
|
||||
# else
|
||||
# define __P(args) ()
|
||||
# define PARAMS(args) ()
|
||||
# endif
|
||||
#endif
|
||||
|
||||
@@ -32,6 +32,9 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
|
||||
# define W(flag, data) ((flag) ? SWAP (data) : (data))
|
||||
#endif
|
||||
|
||||
|
||||
static nls_uint32 SWAP PARAMS ((nls_uint32 i));
|
||||
|
||||
static inline nls_uint32
|
||||
SWAP (i)
|
||||
nls_uint32 i;
|
||||
@@ -64,12 +67,12 @@ struct binding
|
||||
char *dirname;
|
||||
};
|
||||
|
||||
struct loaded_domain *_nl_find_domain __P ((const char *__dirname,
|
||||
char *__locale,
|
||||
const char *__domainname));
|
||||
void _nl_load_domain __P ((struct loaded_domain *__domain));
|
||||
struct loaded_domain *_nl_find_domain PARAMS ((const char *__dirname,
|
||||
char *__locale,
|
||||
const char *__domainname));
|
||||
void _nl_load_domain PARAMS ((struct loaded_domain *__domain));
|
||||
|
||||
const char *_nl_expand_alias __P ((const char *__name));
|
||||
const char *_nl_expand_alias PARAMS ((const char *__name));
|
||||
|
||||
/* @@ begin of epilog @@ */
|
||||
|
||||
|
||||
+16
-10
@@ -1,5 +1,5 @@
|
||||
/* hash-string - Implements a string hashing function.
|
||||
Copyright (C) 1995 Software Foundation, Inc.
|
||||
Copyright (C) 1995 Free Software Foundation, Inc.
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
@@ -21,22 +21,28 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
|
||||
|
||||
/* @@ end of prolog @@ */
|
||||
|
||||
#ifndef BITSPERBYTE
|
||||
# define BITSPERBYTE 8
|
||||
#ifndef PARAMS
|
||||
# if __STDC__
|
||||
# define PARAMS(Args) Args
|
||||
# else
|
||||
# define PARAMS(Args) ()
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#ifndef LONGBITS
|
||||
# define LONGBITS (sizeof (long) * BITSPERBYTE)
|
||||
#endif /* LONGBITS */
|
||||
/* We assume to have `unsigned long int' value with at least 32 bits. */
|
||||
#define HASHWORDBITS 32
|
||||
|
||||
|
||||
/* Defines the so called `hashpjw' function by P.J. Weinberger
|
||||
[see Aho/Sethi/Ullman, COMPILERS: Principles, Techniques and Tools,
|
||||
1986, 1987 Bell Telephone Laboratories, Inc.] */
|
||||
1986, 1987 Bell Telephone Laboratories, Inc.] */
|
||||
static unsigned long hash_string PARAMS ((const char *__str_param));
|
||||
|
||||
static inline unsigned long
|
||||
hash_string (str_param)
|
||||
const char *str_param;
|
||||
{
|
||||
unsigned long hval, g;
|
||||
unsigned long int hval, g;
|
||||
const char *str = str_param;
|
||||
|
||||
/* Compute the hash value for the given string. */
|
||||
@@ -45,10 +51,10 @@ hash_string (str_param)
|
||||
{
|
||||
hval <<= 4;
|
||||
hval += (unsigned long) *str++;
|
||||
g = hval & ((unsigned long) 0xf << (LONGBITS - 4));
|
||||
g = hval & ((unsigned long) 0xf << (HASHWORDBITS - 4));
|
||||
if (g != 0)
|
||||
{
|
||||
hval ^= g >> (LONGBITS - 8);
|
||||
hval ^= g >> (HASHWORDBITS - 8);
|
||||
hval ^= g;
|
||||
}
|
||||
}
|
||||
|
||||
+18
-16
@@ -37,34 +37,36 @@ __BEGIN_DECLS
|
||||
/* Look up MSGID in the current default message catalog for the current
|
||||
LC_MESSAGES locale. If not found, returns MSGID itself (the default
|
||||
text). */
|
||||
extern char *gettext __P ((const char *__msgid));
|
||||
extern char *__gettext __P ((const char *__msgid));
|
||||
extern char *gettext __P ((__const char *__msgid));
|
||||
extern char *__gettext __P ((__const char *__msgid));
|
||||
|
||||
/* Look up MSGID in the DOMAINNAME message catalog for the current
|
||||
LC_MESSAGES locale. */
|
||||
extern char *dgettext __P ((const char *__domainname, const char *__msgid));
|
||||
extern char *__dgettext __P ((const char *__domainname, const char *__msgid));
|
||||
extern char *dgettext __P ((__const char *__domainname,
|
||||
__const char *__msgid));
|
||||
extern char *__dgettext __P ((__const char *__domainname,
|
||||
__const char *__msgid));
|
||||
|
||||
/* Look up MSGID in the DOMAINNAME message catalog for the current CATEGORY
|
||||
locale. */
|
||||
extern char *dcgettext __P ((const char *__domainname, const char *__msgid,
|
||||
int __category));
|
||||
extern char *__dcgettext __P ((const char *__domainname, const char *__msgid,
|
||||
int __category));
|
||||
extern char *dcgettext __P ((__const char *__domainname,
|
||||
__const char *__msgid, int __category));
|
||||
extern char *__dcgettext __P ((__const char *__domainname,
|
||||
__const char *__msgid, int __category));
|
||||
|
||||
|
||||
/* Set the current default message catalog to DOMAINNAME.
|
||||
If DOMAINNAME is null, return the current default.
|
||||
If DOMAINNAME is "", reset to the default of "messages". */
|
||||
extern char *textdomain __P ((const char *__domainname));
|
||||
extern char *__textdomain __P ((const char *__domainname));
|
||||
extern char *textdomain __P ((__const char *__domainname));
|
||||
extern char *__textdomain __P ((__const char *__domainname));
|
||||
|
||||
/* Specify that the DOMAINNAME message catalog will be found
|
||||
in DIRNAME rather than in the system locale data base. */
|
||||
extern char *bindtextdomain __P ((const char *__domainname,
|
||||
const char *__dirname));
|
||||
extern char *__bindtextdomain __P ((const char *__domainname,
|
||||
const char *__dirname));
|
||||
extern char *bindtextdomain __P ((__const char *__domainname,
|
||||
__const char *__dirname));
|
||||
extern char *__bindtextdomain __P ((__const char *__domainname,
|
||||
__const char *__dirname));
|
||||
|
||||
|
||||
/* Optimized version of the function above. */
|
||||
@@ -73,9 +75,9 @@ extern char *__bindtextdomain __P ((const char *__domainname,
|
||||
`__builtin_constant_p' predicate in dcgettext would always return
|
||||
false. */
|
||||
|
||||
# define gettext (msgid) dgettext (NULL, msgid)
|
||||
# define gettext(msgid) dgettext (NULL, msgid)
|
||||
|
||||
# define dgettext (domainname, msgid) \
|
||||
# define dgettext(domainname, msgid) \
|
||||
dcgettext (domainname, msgid, LC_MESSAGES)
|
||||
|
||||
# if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 7)
|
||||
|
||||
+11
-9
@@ -1,5 +1,5 @@
|
||||
/* localealias.c -- handle aliases for locale names
|
||||
Copyright (C) 1995 Free Software Foundation, Inc.
|
||||
Copyright (C) 1995, 1996 Free Software Foundation, Inc.
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
@@ -86,10 +86,10 @@ static size_t maxmap = 0;
|
||||
|
||||
|
||||
/* Prototypes for local functions. */
|
||||
static size_t read_alias_file __P ((const char *fname, int fname_len));
|
||||
static void extend_alias_table __P ((void));
|
||||
static int alias_compare __P ((const struct alias_map *map1,
|
||||
const struct alias_map *map2));
|
||||
static size_t read_alias_file PARAMS ((const char *fname, int fname_len));
|
||||
static void extend_alias_table PARAMS ((void));
|
||||
static int alias_compare PARAMS ((const struct alias_map *map1,
|
||||
const struct alias_map *map2));
|
||||
|
||||
|
||||
const char *
|
||||
@@ -109,9 +109,9 @@ _nl_expand_alias (name)
|
||||
if (nmap > 0)
|
||||
retval = (struct alias_map *) bsearch (&item, map, nmap,
|
||||
sizeof (struct alias_map),
|
||||
(int (*) (const void *,
|
||||
const void *))
|
||||
alias_compare);
|
||||
(int (*) PARAMS ((const void *,
|
||||
const void *))
|
||||
) alias_compare);
|
||||
else
|
||||
retval = NULL;
|
||||
|
||||
@@ -257,7 +257,7 @@ read_alias_file (fname, fname_len)
|
||||
|
||||
if (added > 0)
|
||||
qsort (map, nmap, sizeof (struct alias_map),
|
||||
(int (*) (const void *, const void *)) alias_compare);
|
||||
(int (*) PARAMS ((const void *, const void *))) alias_compare);
|
||||
|
||||
return added;
|
||||
}
|
||||
@@ -309,6 +309,8 @@ alias_compare (map1, map2)
|
||||
c2 = isupper (*p2) ? tolower (*p2) : *p2;
|
||||
if (c1 == '\0')
|
||||
break;
|
||||
++p1;
|
||||
++p2;
|
||||
}
|
||||
while (c1 == c2);
|
||||
|
||||
|
||||
+4
-2
@@ -1,6 +1,6 @@
|
||||
# Rules for MiG interfaces that want to go into the C library.
|
||||
|
||||
# Copyright (C) 1991, 1992, 1993, 1994, 1995 Free Software Foundation, Inc.
|
||||
# Copyright (C) 1991, 92, 93, 94, 95, 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
|
||||
@@ -58,8 +58,10 @@ define nl # This is needed by *.ir.
|
||||
endef
|
||||
ifdef user-interfaces
|
||||
*.ir := $(addprefix $(objpfx),$(foreach if,$(user-interfaces),$(if).ir))
|
||||
ifndef no_deps
|
||||
ifndef inhibit_interface_rules
|
||||
include $(*.ir)
|
||||
-include $(*.ir)
|
||||
endif
|
||||
endif
|
||||
ifneq "$(*.ir)" "$(wildcard $(*.ir))"
|
||||
# If any .ir file is missing, we will be unable to make all the deps.
|
||||
|
||||
+4
-2
@@ -1,4 +1,4 @@
|
||||
# Copyright (C) 1991, 1992, 1993, 1994, 1995 Free Software Foundation, Inc.
|
||||
# Copyright (C) 1991, 92, 93, 94, 95, 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
|
||||
@@ -45,7 +45,7 @@ user-interfaces := $(addprefix mach/,mach_interface mach_port mach_host \
|
||||
default_pager default_pager_helper \
|
||||
)\
|
||||
$(addprefix device/,device device_request)
|
||||
server-interfaces := mach/exc
|
||||
server-interfaces := mach/exc
|
||||
tests := hello
|
||||
# It is important that we do not use the wildcard function to expand
|
||||
# `err_*.sub'. Leaving the wildcard allows Make-dist to find all matching
|
||||
@@ -98,9 +98,11 @@ install-others += $(includedir)/mach/version.h
|
||||
$(includedir)/mach/version.h: $(mach-srcdir)/sys/version.h; $(do-install)
|
||||
|
||||
# Define mach-syscalls and sysno-*.
|
||||
ifndef no_deps
|
||||
ifndef inhibit_mach_syscalls
|
||||
include $(objpfx)mach-syscalls.mk
|
||||
endif
|
||||
endif
|
||||
$(objpfx)mach-syscalls.mk: mach/syscall_sw.h syscalls.awk
|
||||
# Go kludges!!!
|
||||
sed -n -e '/Unix server implement them/,$$d' \
|
||||
|
||||
+4
-4
@@ -1,6 +1,6 @@
|
||||
# Makefile for the GNU C Library manual.
|
||||
|
||||
# Copyright (C) 1992, 1993, 1994, 1995 Free Software Foundation, Inc.
|
||||
# Copyright (C) 1992, 1993, 1994, 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
|
||||
@@ -148,7 +148,7 @@ ETAGS = etags -T
|
||||
endif
|
||||
TAGS: $(minimal-dist)
|
||||
$(ETAGS) -o $@ $^
|
||||
|
||||
|
||||
# These are targets that each glibc subdirectory is expected to understand.
|
||||
# ../Rules defines them for code subdirectories; for us, they are no-ops.
|
||||
glibc-targets := subdir_lib objects objs others tests subdir_lint.out \
|
||||
@@ -157,13 +157,13 @@ glibc-targets := subdir_lib objects objs others tests subdir_lint.out \
|
||||
$(glibc-targets):
|
||||
|
||||
stubs: $(common-objpfx)stub-manual
|
||||
$(common-objpfx)stub-manual:
|
||||
$(common-objpfx)stub-manual ../po/manual.pot:
|
||||
cp /dev/null $@
|
||||
|
||||
# The top-level glibc Makefile expects subdir_install to update the stubs file.
|
||||
subdir_install: stubs
|
||||
|
||||
|
||||
|
||||
# Get rid of these variables if they came from the parent.
|
||||
routines =
|
||||
aux =
|
||||
|
||||
@@ -38,3 +38,7 @@ __init_misc (int argc, char **argv, char **envp)
|
||||
__progname_full = argv[0];
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef HAVE_GNU_LD
|
||||
text_set_element (__libc_subinit, __init_misc);
|
||||
#endif
|
||||
|
||||
+64
-12
@@ -1,4 +1,4 @@
|
||||
/* Copyright (C) 1991, 1992, 1995 Free Software Foundation, Inc.
|
||||
/* Copyright (C) 1991, 1992, 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
|
||||
@@ -21,6 +21,7 @@ Cambridge, MA 02139, USA. */
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <errno.h>
|
||||
#include <paths.h>
|
||||
|
||||
/* Execute FILE, searching in the `PATH' environment variable if it contains
|
||||
no slashes, with arguments ARGV and environment from `environ'. */
|
||||
@@ -29,9 +30,42 @@ execvp (file, argv)
|
||||
const char *file;
|
||||
char *const argv[];
|
||||
{
|
||||
int got_eacces = 0;
|
||||
|
||||
void execute (const char *file, char *const argv[])
|
||||
{
|
||||
execv (file, argv);
|
||||
|
||||
if (errno == ENOEXEC)
|
||||
{
|
||||
/* The file is accessible but it is not an executable file.
|
||||
Invoke the shell to interpret it as a script. */
|
||||
|
||||
/* Count the arguments. */
|
||||
int argc = 0;
|
||||
while (argv[argc++])
|
||||
;
|
||||
|
||||
/* Construct an argument list for the shell. */
|
||||
{
|
||||
char *new_argv[argc + 1];
|
||||
new_argv[0] = (char *) _PATH_BSHELL;
|
||||
new_argv[1] = (char *) file;
|
||||
while (argc > 1)
|
||||
{
|
||||
new_argv[argc] = argv[argc - 1];
|
||||
--argc;
|
||||
}
|
||||
|
||||
/* Execute the shell. */
|
||||
execv (new_argv[0], new_argv);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (strchr (file, '/') != NULL)
|
||||
/* Don't search when it contains a slash. */
|
||||
return execv (file, argv);
|
||||
execute (file, argv);
|
||||
else
|
||||
{
|
||||
char *path, *p, *name;
|
||||
@@ -72,19 +106,37 @@ execvp (file, argv)
|
||||
}
|
||||
|
||||
/* Try to execute this name. If it works, execv will not return. */
|
||||
execv (name, argv);
|
||||
if (errno != ENOENT && errno != EACCES)
|
||||
/* Those errors indicate the file is missing or not executable
|
||||
by us, in which case we want to just try the next path
|
||||
directory. Some other error means we found an executable
|
||||
file, but something went wrong executing it; return the
|
||||
error to our caller. */
|
||||
return -1;
|
||||
execute (name, argv);
|
||||
|
||||
switch (errno)
|
||||
{
|
||||
case EACCES:
|
||||
/* Record the we got a `Permission denied' error. If we end
|
||||
up finding no executable we can use, we want to diagnose
|
||||
that we did find one but were denied access. */
|
||||
got_eacces = 1;
|
||||
case ENOENT:
|
||||
/* Those errors indicate the file is missing or not executable
|
||||
by us, in which case we want to just try the next path
|
||||
directory. */
|
||||
break;
|
||||
|
||||
default:
|
||||
/* Some other error means we found an executable file, but
|
||||
something went wrong executing it; return the error to our
|
||||
caller. */
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
while (*p++ != '\0');
|
||||
}
|
||||
|
||||
/* We tried every element and none of them worked.
|
||||
Return the error from the last attempt (probably ENOENT). */
|
||||
/* We tried every element and none of them worked. */
|
||||
|
||||
if (got_eacces)
|
||||
/* At least one failure was due to permissions, so report that error. */
|
||||
errno = EACCES;
|
||||
|
||||
/* Return the error from the last attempt (probably ENOENT). */
|
||||
return -1;
|
||||
}
|
||||
|
||||
+39
-4
@@ -3,7 +3,7 @@
|
||||
"Keep this file name-space clean" means, talk to roland@gnu.ai.mit.edu
|
||||
before changing it!
|
||||
|
||||
Copyright (C) 1987, 88, 89, 90, 91, 92, 93, 94, 95
|
||||
Copyright (C) 1987, 88, 89, 90, 91, 92, 93, 94, 95, 1996
|
||||
Free Software Foundation, Inc.
|
||||
|
||||
This file is part of the GNU C Library. Its master source is NOT part of
|
||||
@@ -61,6 +61,7 @@ Cambridge, MA 02139, USA. */
|
||||
/* Don't include stdlib.h for non-GNU C libraries because some of them
|
||||
contain conflicting prototypes for getopt. */
|
||||
#include <stdlib.h>
|
||||
#include <unistd.h>
|
||||
#endif /* GNU C library. */
|
||||
|
||||
#ifndef _
|
||||
@@ -221,6 +222,12 @@ extern int strlen (const char *);
|
||||
static int first_nonopt;
|
||||
static int last_nonopt;
|
||||
|
||||
/* Bash 2.0 gives us an environment variable containing flags
|
||||
indicating ARGV elements that should not be considered arguments. */
|
||||
|
||||
static const char *nonoption_flags;
|
||||
static int nonoption_flags_len;
|
||||
|
||||
/* Exchange two adjacent subsequences of ARGV.
|
||||
One subsequence is elements [first_nonopt,last_nonopt)
|
||||
which contains all the non-options that have been skipped so far.
|
||||
@@ -326,6 +333,21 @@ _getopt_initialize (optstring)
|
||||
else
|
||||
ordering = PERMUTE;
|
||||
|
||||
if (posixly_correct == NULL)
|
||||
{
|
||||
/* Bash 2.0 puts a special variable in the environment for each
|
||||
command it runs, specifying which ARGV elements are the results of
|
||||
file name wildcard expansion and therefore should not be
|
||||
considered as options. */
|
||||
char var[100];
|
||||
sprintf (var, "_%d_GNU_nonoption_argv_flags_", getpid ());
|
||||
nonoption_flags = getenv (var);
|
||||
if (nonoption_flags == NULL)
|
||||
nonoption_flags_len = 0;
|
||||
else
|
||||
nonoption_flags_len = strlen (nonoption_flags);
|
||||
}
|
||||
|
||||
return optstring;
|
||||
}
|
||||
|
||||
@@ -402,10 +424,24 @@ _getopt_internal (argc, argv, optstring, longopts, longind, long_only)
|
||||
optind = 1; /* Don't scan ARGV[0], the program name. */
|
||||
}
|
||||
|
||||
/* Test whether ARGV[optind] points to a non-option argument.
|
||||
Either it does not have option syntax, or there is an environment flag
|
||||
from the shell indicating it is not an option. */
|
||||
#define NONOPTION_P (argv[optind][0] != '-' || argv[optind][1] == '\0' \
|
||||
|| (optind < nonoption_flags_len \
|
||||
&& nonoption_flags[optind] == '1'))
|
||||
|
||||
if (nextchar == NULL || *nextchar == '\0')
|
||||
{
|
||||
/* Advance to the next ARGV-element. */
|
||||
|
||||
/* Give FIRST_NONOPT & LAST_NONOPT rational values if OPTIND has been
|
||||
moved back by the user (who may also have changed the arguments). */
|
||||
if (last_nonopt > optind)
|
||||
last_nonopt = optind;
|
||||
if (first_nonopt > optind)
|
||||
first_nonopt = optind;
|
||||
|
||||
if (ordering == PERMUTE)
|
||||
{
|
||||
/* If we have just processed some options following some non-options,
|
||||
@@ -419,8 +455,7 @@ _getopt_internal (argc, argv, optstring, longopts, longind, long_only)
|
||||
/* Skip any additional non-options
|
||||
and extend the range of non-options previously skipped. */
|
||||
|
||||
while (optind < argc
|
||||
&& (argv[optind][0] != '-' || argv[optind][1] == '\0'))
|
||||
while (optind < argc && NONOPTION_P)
|
||||
optind++;
|
||||
last_nonopt = optind;
|
||||
}
|
||||
@@ -458,7 +493,7 @@ _getopt_internal (argc, argv, optstring, longopts, longind, long_only)
|
||||
/* If we have come to a non-option and did not permute it,
|
||||
either stop the scan or describe it to the caller and pass it by. */
|
||||
|
||||
if ((argv[optind][0] != '-' || argv[optind][1] == '\0'))
|
||||
if (NONOPTION_P)
|
||||
{
|
||||
if (ordering == REQUIRE_ORDER)
|
||||
return EOF;
|
||||
|
||||
@@ -71,6 +71,8 @@ typedef unsigned int uint;
|
||||
#ifdef __USE_BSD
|
||||
/* These size-specific names are used by some of the inet code. */
|
||||
|
||||
#if !defined (__GNUC__) || __GNUC__ < 2 || __GNUC_MINOR__ < 7
|
||||
|
||||
typedef char int8_t;
|
||||
typedef unsigned char u_int8_t;
|
||||
typedef short int int16_t;
|
||||
@@ -83,6 +85,27 @@ typedef unsigned long long int u_int64_t;
|
||||
typedef int register_t __attribute__ ((__mode__ (word)));
|
||||
#endif
|
||||
|
||||
#else
|
||||
|
||||
/* For GCC 2.7 and later, we can use specific type-size attributes. */
|
||||
#define __intN_t(N, MODE) \
|
||||
typedef int int##N##_t __attribute__ ((__mode__ (MODE)))
|
||||
#define __u_intN_t(N, MODE) \
|
||||
typedef unsigned int u_int##N##_t __attribute__ ((__mode__ (MODE)))
|
||||
|
||||
__intN_t (8, __QI__);
|
||||
__u_intN_t (8, __QI__);
|
||||
__intN_t (16, __HI__);
|
||||
__u_intN_t (16, __HI__);
|
||||
__intN_t (32, __SI__);
|
||||
__u_intN_t (32, __SI__);
|
||||
__intN_t (64, __DI__);
|
||||
__u_intN_t (64, __DI__);
|
||||
|
||||
typedef int register_t __attribute__ ((__mode__ (__word__)));
|
||||
|
||||
#endif
|
||||
|
||||
/* Some code from BIND tests this macro to see if the types above are
|
||||
defined. */
|
||||
#define __BIT_TYPES_DEFINED__ 1
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# Copyright (C) 1991, 1992, 1993, 1994, 1995 Free Software Foundation, Inc.
|
||||
# Copyright (C) 1991, 92, 93, 94, 95, 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
|
||||
@@ -41,7 +41,7 @@ tests := tst-printf tstscanf test_rdwr test-popen tstgetln test-fseek \
|
||||
xbug errnobug \
|
||||
bug1 bug2 bug3 bug4 bug5 bug6 bug7 bug8 bug9 bug10 bug11 \
|
||||
tfformat tiformat tstdiomisc \
|
||||
scanf1 scanf2 scanf3 scanf4 scanf5 scanf6 scanf7 scanf8 scanf9
|
||||
scanf1 scanf2 scanf3 scanf4 scanf5 scanf7 scanf8 scanf9
|
||||
|
||||
|
||||
include ../Rules
|
||||
|
||||
@@ -382,8 +382,9 @@ __printf_fp (FILE *fp,
|
||||
else
|
||||
{
|
||||
cy = __mpn_mul (tmp, scale, scalesize,
|
||||
tens->array + 2, tens->arraysize - 2);
|
||||
tmpsize = scalesize + tens->arraysize - 2;
|
||||
&tens->array[_FPIO_CONST_OFFSET],
|
||||
tens->arraysize - _FPIO_CONST_OFFSET);
|
||||
tmpsize = scalesize + tens->arraysize - _FPIO_CONST_OFFSET;
|
||||
if (cy == 0)
|
||||
--tmpsize;
|
||||
}
|
||||
@@ -513,13 +514,15 @@ __printf_fp (FILE *fp,
|
||||
|
||||
/* The __mpn_mul function expects the first argument to be
|
||||
bigger than the second. */
|
||||
if (fracsize < tens->arraysize - 2)
|
||||
cy = __mpn_mul (tmp, &tens->array[2], tens->arraysize - 2,
|
||||
if (fracsize < tens->arraysize - _FPIO_CONST_OFFSET)
|
||||
cy = __mpn_mul (tmp, &tens->array[_FPIO_CONST_OFFSET],
|
||||
tens->arraysize - _FPIO_CONST_OFFSET,
|
||||
frac, fracsize);
|
||||
else
|
||||
cy = __mpn_mul (tmp, frac, fracsize,
|
||||
&tens->array[2], tens->arraysize - 2);
|
||||
tmpsize = fracsize + tens->arraysize - 2;
|
||||
&tens->array[_FPIO_CONST_OFFSET],
|
||||
tens->arraysize - _FPIO_CONST_OFFSET);
|
||||
tmpsize = fracsize + tens->arraysize - _FPIO_CONST_OFFSET;
|
||||
if (cy == 0)
|
||||
--tmpsize;
|
||||
|
||||
@@ -536,11 +539,12 @@ __printf_fp (FILE *fp,
|
||||
if (cnt_h <= BITS_PER_MP_LIMB - 4)
|
||||
{
|
||||
topval[0] = 0;
|
||||
topval[1] = 10 << (BITS_PER_MP_LIMB - 4 - cnt_h);
|
||||
topval[1]
|
||||
= ((mp_limb) 10) << (BITS_PER_MP_LIMB - 4 - cnt_h);
|
||||
}
|
||||
else
|
||||
{
|
||||
topval[0] = 10 << (BITS_PER_MP_LIMB - 4);
|
||||
topval[0] = ((mp_limb) 10) << (BITS_PER_MP_LIMB - 4);
|
||||
topval[1] = 0;
|
||||
(void) __mpn_lshift (topval, topval, 2,
|
||||
BITS_PER_MP_LIMB - cnt_h);
|
||||
|
||||
@@ -31,6 +31,10 @@ DEFUN(main, (argc, argv), int argc AND char **argv)
|
||||
{
|
||||
char buf[BUFSIZ];
|
||||
FILE *in = stdin, *out = stdout;
|
||||
int x;
|
||||
|
||||
if (sscanf ("0", "%d", &x) != 1)
|
||||
exit (EXIT_FAILURE);
|
||||
|
||||
if (argc == 2 && !strcmp (argv[1], "-opipe"))
|
||||
{
|
||||
|
||||
@@ -528,6 +528,7 @@ __vfscanf (FILE *s, const char *format, va_list argptr)
|
||||
if (width > 0)
|
||||
--width;
|
||||
|
||||
ADDW (c);
|
||||
(void) inchar ();
|
||||
|
||||
if (width != 0 && tolower (c) == 'x')
|
||||
|
||||
+8
-1
@@ -1,5 +1,5 @@
|
||||
/* Header file for constants used in floating point <-> decimal conversions.
|
||||
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
|
||||
@@ -48,5 +48,12 @@ struct mp_power
|
||||
};
|
||||
extern const struct mp_power _fpioconst_pow10[LDBL_MAX_10_EXP_LOG + 1];
|
||||
|
||||
/* The constants in the array `_fpioconst_pow10' have an offset. */
|
||||
#if BITS_PER_MP_LIMB == 32
|
||||
# define _FPIO_CONST_OFFSET 2
|
||||
#else
|
||||
# define _FPIO_CONST_OFFSET 1
|
||||
#endif
|
||||
|
||||
|
||||
#endif /* fpioconst.h */
|
||||
|
||||
+25
-19
@@ -65,10 +65,10 @@ extern FLOAT MPN2FLOAT (mp_srcptr mpn, int exponent, int negative);
|
||||
/* Definitions according to limb size used. */
|
||||
#if BITS_PER_MP_LIMB == 32
|
||||
# define MAX_DIG_PER_LIMB 9
|
||||
# define MAX_FAC_PER_LIMB 1000000000L
|
||||
# define MAX_FAC_PER_LIMB 1000000000UL
|
||||
#elif BITS_PER_MP_LIMB == 64
|
||||
# define MAX_DIG_PER_LIMB 19
|
||||
# define MAX_FAC_PER_LIMB 10000000000000000000L
|
||||
# define MAX_FAC_PER_LIMB 10000000000000000000UL
|
||||
#else
|
||||
# error "mp_limb size " BITS_PER_MP_LIMB "not accounted for"
|
||||
#endif
|
||||
@@ -84,7 +84,7 @@ static const mp_limb _tens_in_limb[MAX_DIG_PER_LIMB + 1] =
|
||||
, 10000000000, 100000000000,
|
||||
1000000000000, 10000000000000, 100000000000000,
|
||||
1000000000000000, 10000000000000000, 100000000000000000,
|
||||
1000000000000000000, 10000000000000000000
|
||||
1000000000000000000, 10000000000000000000U
|
||||
#endif
|
||||
#if BITS_PER_MP_LIMB > 64
|
||||
#error "Need to expand tens_in_limb table to" MAX_DIG_PER_LIMB
|
||||
@@ -128,7 +128,7 @@ round_and_return (mp_limb *retval, int exponent, int negative,
|
||||
return 0.0;
|
||||
}
|
||||
|
||||
more_bits |= (round_limb & ((1 << round_bit) - 1)) != 0;
|
||||
more_bits |= (round_limb & ((((mp_limb) 1) << round_bit) - 1)) != 0;
|
||||
if (shift == MANT_DIG)
|
||||
/* This is a special case to handle the very seldom case where
|
||||
the mantissa will be empty after the shift. */
|
||||
@@ -166,25 +166,26 @@ round_and_return (mp_limb *retval, int exponent, int negative,
|
||||
exponent = MIN_EXP - 2;
|
||||
}
|
||||
|
||||
if ((round_limb & (1 << round_bit)) != 0
|
||||
if ((round_limb & (((mp_limb) 1) << round_bit)) != 0
|
||||
&& (more_bits || (retval[0] & 1) != 0
|
||||
|| (round_limb & ((1 << round_bit) - 1)) != 0))
|
||||
|| (round_limb & ((((mp_limb) 1) << round_bit) - 1)) != 0))
|
||||
{
|
||||
mp_limb cy = __mpn_add_1 (retval, retval, RETURN_LIMB_SIZE, 1);
|
||||
|
||||
if (((MANT_DIG % BITS_PER_MP_LIMB) == 0 && cy) ||
|
||||
((MANT_DIG % BITS_PER_MP_LIMB) != 0 &&
|
||||
(retval[RETURN_LIMB_SIZE - 1]
|
||||
& (1 << (MANT_DIG % BITS_PER_MP_LIMB))) != 0))
|
||||
& (((mp_limb) 1) << (MANT_DIG % BITS_PER_MP_LIMB))) != 0))
|
||||
{
|
||||
++exponent;
|
||||
(void) __mpn_rshift (retval, retval, RETURN_LIMB_SIZE, 1);
|
||||
retval[RETURN_LIMB_SIZE - 1] |= 1 << ((MANT_DIG - 1)
|
||||
% BITS_PER_MP_LIMB);
|
||||
retval[RETURN_LIMB_SIZE - 1]
|
||||
|= ((mp_limb) 1) << ((MANT_DIG - 1) % BITS_PER_MP_LIMB);
|
||||
}
|
||||
else if (exponent == MIN_EXP - 2
|
||||
&& (retval[RETURN_LIMB_SIZE - 1]
|
||||
& (1 << ((MANT_DIG - 1) % BITS_PER_MP_LIMB))) != 0)
|
||||
& (((mp_limb) 1) << ((MANT_DIG - 1) % BITS_PER_MP_LIMB)))
|
||||
!= 0)
|
||||
/* The number was denormalized but now normalized. */
|
||||
exponent = MIN_EXP - 1;
|
||||
}
|
||||
@@ -628,14 +629,15 @@ INTERNAL (STRTOF) (nptr, endptr, group)
|
||||
/* FIXME: not the whole multiplication has to be done.
|
||||
If we have the needed number of bits we only need the
|
||||
information whether more non-zero bits follow. */
|
||||
if (numsize >= ttab->arraysize - 2)
|
||||
if (numsize >= ttab->arraysize - _FPIO_CONST_OFFSET)
|
||||
cy = __mpn_mul (pdest, psrc, numsize,
|
||||
&ttab->array[2], ttab->arraysize - 2);
|
||||
&ttab->array[_FPIO_CONST_OFFSET],
|
||||
ttab->arraysize - _FPIO_CONST_OFFSET);
|
||||
else
|
||||
cy = __mpn_mul (pdest, &ttab->array[2],
|
||||
ttab->arraysize - 2,
|
||||
cy = __mpn_mul (pdest, &ttab->array[_FPIO_CONST_OFFSET],
|
||||
ttab->arraysize - _FPIO_CONST_OFFSET,
|
||||
psrc, numsize);
|
||||
numsize += ttab->arraysize - 2;
|
||||
numsize += ttab->arraysize - _FPIO_CONST_OFFSET;
|
||||
if (cy == 0)
|
||||
--numsize;
|
||||
SWAP (psrc, pdest);
|
||||
@@ -788,13 +790,17 @@ INTERNAL (STRTOF) (nptr, endptr, group)
|
||||
neg_exp ^= expbit;
|
||||
|
||||
if (densize == 0)
|
||||
memcpy (psrc, &ttab->array[2],
|
||||
(densize = ttab->arraysize - 2) * sizeof (mp_limb));
|
||||
{
|
||||
densize = ttab->arraysize - _FPIO_CONST_OFFSET;
|
||||
memcpy (psrc, &ttab->array[_FPIO_CONST_OFFSET],
|
||||
densize * sizeof (mp_limb));
|
||||
}
|
||||
else
|
||||
{
|
||||
cy = __mpn_mul (pdest, &ttab->array[2], ttab->arraysize - 2,
|
||||
cy = __mpn_mul (pdest, &ttab->array[_FPIO_CONST_OFFSET],
|
||||
ttab->arraysize - _FPIO_CONST_OFFSET,
|
||||
psrc, densize);
|
||||
densize += ttab->arraysize - 2;
|
||||
densize += ttab->arraysize - _FPIO_CONST_OFFSET;
|
||||
if (cy == 0)
|
||||
--densize;
|
||||
SWAP (psrc, pdest);
|
||||
|
||||
+8
-7
@@ -6,23 +6,23 @@
|
||||
* may copy or modify Sun RPC without charge, but are not authorized
|
||||
* to license or distribute it to anyone else except as part of a product or
|
||||
* program developed by the user.
|
||||
*
|
||||
*
|
||||
* SUN RPC IS PROVIDED AS IS WITH NO WARRANTIES OF ANY KIND INCLUDING THE
|
||||
* WARRANTIES OF DESIGN, MERCHANTIBILITY AND FITNESS FOR A PARTICULAR
|
||||
* PURPOSE, OR ARISING FROM A COURSE OF DEALING, USAGE OR TRADE PRACTICE.
|
||||
*
|
||||
*
|
||||
* Sun RPC is provided with no support and without any obligation on the
|
||||
* part of Sun Microsystems, Inc. to assist in its use, correction,
|
||||
* modification or enhancement.
|
||||
*
|
||||
*
|
||||
* SUN MICROSYSTEMS, INC. SHALL HAVE NO LIABILITY WITH RESPECT TO THE
|
||||
* INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY SUN RPC
|
||||
* OR ANY PART THEREOF.
|
||||
*
|
||||
*
|
||||
* In no event will Sun Microsystems, Inc. be liable for any lost revenue
|
||||
* or profits or other special, indirect and consequential damages, even if
|
||||
* Sun has been advised of the possibility of such damages.
|
||||
*
|
||||
*
|
||||
* Sun Microsystems, Inc.
|
||||
* 2550 Garcia Avenue
|
||||
* Mountain View, California 94043
|
||||
@@ -46,12 +46,13 @@ static char sccsid[] = "@(#)pmap_getmaps.c 1.10 87/08/11 Copyr 1984 Sun Micro";
|
||||
#include <netdb.h>
|
||||
#include <stdio.h>
|
||||
#include <errno.h>
|
||||
#undef _POSIX_SOURCE /* Ultrix <sys/param.h> needs --roland@gnu */
|
||||
#include <sys/param.h> /* Ultrix needs before net/if --roland@gnu */
|
||||
|
||||
#if 0 /* these seem to be gratuitous --roland@gnu */
|
||||
#include <net/if.h>
|
||||
#include <sys/ioctl.h>
|
||||
#define NAMELEN 255
|
||||
#define MAX_BROADCAST_SIZE 1400
|
||||
#endif
|
||||
|
||||
extern int errno;
|
||||
|
||||
|
||||
+8
-7
@@ -6,23 +6,23 @@
|
||||
* may copy or modify Sun RPC without charge, but are not authorized
|
||||
* to license or distribute it to anyone else except as part of a product or
|
||||
* program developed by the user.
|
||||
*
|
||||
*
|
||||
* SUN RPC IS PROVIDED AS IS WITH NO WARRANTIES OF ANY KIND INCLUDING THE
|
||||
* WARRANTIES OF DESIGN, MERCHANTIBILITY AND FITNESS FOR A PARTICULAR
|
||||
* PURPOSE, OR ARISING FROM A COURSE OF DEALING, USAGE OR TRADE PRACTICE.
|
||||
*
|
||||
*
|
||||
* Sun RPC is provided with no support and without any obligation on the
|
||||
* part of Sun Microsystems, Inc. to assist in its use, correction,
|
||||
* modification or enhancement.
|
||||
*
|
||||
*
|
||||
* SUN MICROSYSTEMS, INC. SHALL HAVE NO LIABILITY WITH RESPECT TO THE
|
||||
* INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY SUN RPC
|
||||
* OR ANY PART THEREOF.
|
||||
*
|
||||
*
|
||||
* In no event will Sun Microsystems, Inc. be liable for any lost revenue
|
||||
* or profits or other special, indirect and consequential damages, even if
|
||||
* Sun has been advised of the possibility of such damages.
|
||||
*
|
||||
*
|
||||
* Sun Microsystems, Inc.
|
||||
* 2550 Garcia Avenue
|
||||
* Mountain View, California 94043
|
||||
@@ -42,9 +42,10 @@ static char sccsid[] = "@(#)pmap_getport.c 1.9 87/08/11 Copyr 1984 Sun Micro";
|
||||
#include <rpc/pmap_prot.h>
|
||||
#include <rpc/pmap_clnt.h>
|
||||
#include <sys/socket.h>
|
||||
#undef _POSIX_SOURCE /* Ultrix <sys/param.h> needs --roland@gnu */
|
||||
#include <sys/param.h> /* Ultrix needs before net/if --roland@gnu */
|
||||
|
||||
#if 0 /* these seem to be gratuitous --roland@gnu */
|
||||
#include <net/if.h>
|
||||
#endif
|
||||
|
||||
static struct timeval timeout = { 5, 0 };
|
||||
static struct timeval tottimeout = { 60, 0 };
|
||||
|
||||
@@ -1 +0,0 @@
|
||||
#include <misc/sys/ptrace.h>
|
||||
@@ -72,7 +72,7 @@ memchr (const void *s, int c, size_t n)
|
||||
unsigned char *cp = (unsigned char *) (longword_ptr - 1);
|
||||
int i;
|
||||
|
||||
for (i = 0; i < 6; i++)
|
||||
for (i = 0; i < 7; i++)
|
||||
if (cp[i] == c)
|
||||
return &cp[i];
|
||||
return &cp[7];
|
||||
|
||||
@@ -53,9 +53,10 @@ $(objpfx)siglist.c: $(objpfx)make_siglist
|
||||
mv $@-tmp $@
|
||||
|
||||
$(objpfx)make_siglist: $(sysdep_dir)/generic/make_siglist.c
|
||||
signum_h=`cd $(dir $(firstword $(wildcard \
|
||||
$(+sysdep_dirs:%=%/signum.h)))); pwd`/signum.h; \
|
||||
$(native-compile) \
|
||||
-DSIGNUM_H=\"`cd $(dir $(firstword $(wildcard \
|
||||
$(+sysdep_dirs:%=%/signum.h)))); pwd`/signum.h\"
|
||||
-DSIGNUM_H=\"$${signum_h}\"
|
||||
|
||||
generated := $(generated) make_siglist siglist.c
|
||||
endif
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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 <sysdep.h>
|
||||
#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)); \
|
||||
}
|
||||
@@ -19,6 +19,7 @@ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
|
||||
#include <signal.h>
|
||||
|
||||
/* Get this configuration's defns of the signal numbers. */
|
||||
#undef _SIGNAL_H
|
||||
#define _SIGNAL_H 1
|
||||
#include SIGNUM_H
|
||||
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
/* Copyright (C) 1991, 1992 Free Software Foundation, Inc.
|
||||
/* `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
|
||||
@@ -157,8 +157,20 @@ elf_machine_runtime_setup (struct link_map *l, int lazy)
|
||||
the offset on the stack, and then jump to the resolved address. */
|
||||
got[2] = (Elf32_Addr) &_dl_runtime_resolve;
|
||||
}
|
||||
}
|
||||
|
||||
/* This code is used in dl-runtime.c to call the `fixup' function
|
||||
and then redirect to the address it returns. */
|
||||
#define ELF_MACHINE_RUNTIME_TRAMPOLINE asm ("\
|
||||
.globl _dl_runtime_resolve
|
||||
.type _dl_runtime_resolve, @function
|
||||
_dl_runtime_resolve:
|
||||
call fixup # Args pushed by PLT.
|
||||
addl $8, %esp # Pop args.
|
||||
jmp *%eax # Jump to function address.
|
||||
");
|
||||
/* The PLT uses Elf32_Rel relocs. */
|
||||
#define elf_machine_relplt elf_machine_rel
|
||||
}
|
||||
|
||||
/* Mask identifying addresses reserved for the user program,
|
||||
where the dynamic linker should not map anything. */
|
||||
|
||||
@@ -1,94 +0,0 @@
|
||||
/* On-demand PLT fixup for shared objects. i386 version.
|
||||
Copyright (C) 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 <link.h>
|
||||
#include "dynamic-link.h"
|
||||
|
||||
/* This function is not called in the normal way. The PLT jumps here, not
|
||||
using a call. The stack looks like this:
|
||||
|
||||
-->8(%esp) address to return to the caller of the function in the PLT
|
||||
4(%esp) relocation offset for this PLT entry
|
||||
0(%esp) identifier for this shared object (struct link_map *)
|
||||
|
||||
The user expects the real function the PLT refers to to be entered
|
||||
with 8(%esp) as the top of stack. */
|
||||
|
||||
void
|
||||
_dl_runtime_resolve (Elf32_Word reloc_offset)
|
||||
{
|
||||
__label__ return_insn;
|
||||
struct link_map *l = (void *) (&reloc_offset)[-1];
|
||||
|
||||
const Elf32_Sym *const symtab
|
||||
= (const Elf32_Sym *) (l->l_addr + l->l_info[DT_SYMTAB]->d_un.d_ptr);
|
||||
const char *strtab =
|
||||
(const char *) (l->l_addr + l->l_info[DT_STRTAB]->d_un.d_ptr);
|
||||
|
||||
const Elf32_Rel *const reloc
|
||||
= (const void *) (l->l_addr + l->l_info[DT_JMPREL]->d_un.d_ptr +
|
||||
reloc_offset);
|
||||
|
||||
const Elf32_Sym *definer;
|
||||
Elf32_Addr loadbase;
|
||||
struct link_map *scope, *real_next;
|
||||
|
||||
/* Look up the symbol's run-time value. */
|
||||
|
||||
real_next = l->l_next;
|
||||
if (l->l_info[DT_SYMBOLIC])
|
||||
{
|
||||
l->l_next = _dl_loaded;
|
||||
if (l->l_prev)
|
||||
l->l_prev->l_next = real_next;
|
||||
scope = l;
|
||||
}
|
||||
else
|
||||
scope = _dl_loaded;
|
||||
|
||||
definer = &symtab[ELF32_R_SYM (reloc->r_info)];
|
||||
loadbase = _dl_lookup_symbol (strtab + definer->st_name, &definer,
|
||||
scope, l->l_name, 0);
|
||||
|
||||
/* Restore list frobnication done above for DT_SYMBOLIC. */
|
||||
l->l_next = real_next;
|
||||
if (l->l_prev)
|
||||
l->l_prev->l_next = l;
|
||||
|
||||
/* Apply the relocation with that value. */
|
||||
elf_machine_rel (l, reloc, loadbase, definer);
|
||||
|
||||
/* The top of the stack is the word we set L from; but this location
|
||||
holds the address we will return to. Store there the address of a
|
||||
"ret" instruction, which will pop the stack and run the code at the
|
||||
address in the next stack word. */
|
||||
(&reloc_offset)[-1] = (Elf32_Word) &&return_insn;
|
||||
|
||||
/* The next stack word is our argument RELOC_OFFSET; but that "ret" will
|
||||
pop and jump to this location, and the next stack word is the user's
|
||||
return address. So store here the resolved address of the function
|
||||
referred to by this PLT entry; once "ret" pops this address, the
|
||||
function in the shared object will run with the stack arranged just as
|
||||
when the user entered the PLT. */
|
||||
(&reloc_offset)[0] = *(Elf32_Word *) (l->l_addr + reloc->r_offset);
|
||||
|
||||
return;
|
||||
|
||||
return_insn: asm volatile ("ret");
|
||||
}
|
||||
+15
-11
@@ -1,5 +1,5 @@
|
||||
/* memcopy.h -- definitions for memory copy functions. Pentium version.
|
||||
Copyright (C) 1994, 1995 Free Software Foundation, Inc.
|
||||
Copyright (C) 1994, 1995, 1996 Free Software Foundation, Inc.
|
||||
Contributed by Torbjorn Granlund (tege@sics.se).
|
||||
|
||||
This file is part of the GNU C Library.
|
||||
@@ -33,11 +33,14 @@ Cambridge, MA 02139, USA. */
|
||||
{ \
|
||||
asm volatile ("subl $32,%2\n" \
|
||||
"js 2f\n" \
|
||||
"movl 0(%0),%%edx\n" /* alloc dest line */ \
|
||||
"1:\n" \
|
||||
"movl 0(%1),%%eax\n" \
|
||||
"movl 4(%1),%%edx\n" \
|
||||
"movl %%eax,0(%0)\n" \
|
||||
"movl %%edx,4(%0)\n" \
|
||||
"movl 28(%0),%%eax\n" /* alloc dest line */ \
|
||||
"subl $32,%2\n" /* decr loop count */ \
|
||||
"movl 0(%1),%%eax\n" /* U pipe */ \
|
||||
"movl 4(%1),%%edx\n" /* V pipe */ \
|
||||
"movl %%eax,0(%0)\n" /* U pipe */ \
|
||||
"movl %%edx,4(%0)\n" /* V pipe */ \
|
||||
"movl 8(%1),%%eax\n" \
|
||||
"movl 12(%1),%%edx\n" \
|
||||
"movl %%eax,8(%0)\n" \
|
||||
@@ -50,9 +53,8 @@ Cambridge, MA 02139, USA. */
|
||||
"movl 28(%1),%%edx\n" \
|
||||
"movl %%eax,24(%0)\n" \
|
||||
"movl %%edx,28(%0)\n" \
|
||||
"addl $32,%1\n" \
|
||||
"addl $32,%0\n" \
|
||||
"subl $32,%2\n" \
|
||||
"leal 32(%1),%1\n" /* update src ptr */ \
|
||||
"leal 32(%0),%0\n" /* update dst ptr */ \
|
||||
"jns 1b\n" \
|
||||
"2: addl $32,%2" : \
|
||||
"=r" (dst_bp), "=r" (src_bp), "=r" (nbytes_left) : \
|
||||
@@ -66,7 +68,10 @@ Cambridge, MA 02139, USA. */
|
||||
{ \
|
||||
asm volatile ("subl $32,%2\n" \
|
||||
"js 2f\n" \
|
||||
"movl -4(%0),%%edx\n" \
|
||||
"1:\n" \
|
||||
"movl -32(%0),%%eax\n" \
|
||||
"subl $32,%2\n" \
|
||||
"movl -4(%1),%%eax\n" \
|
||||
"movl -8(%1),%%edx\n" \
|
||||
"movl %%eax,-4(%0)\n" \
|
||||
@@ -83,9 +88,8 @@ Cambridge, MA 02139, USA. */
|
||||
"movl -32(%1),%%edx\n" \
|
||||
"movl %%eax,-28(%0)\n" \
|
||||
"movl %%edx,-32(%0)\n" \
|
||||
"subl $32,%1\n" \
|
||||
"subl $32,%0\n" \
|
||||
"subl $32,%2\n" \
|
||||
"leal -32(%1),%1\n" \
|
||||
"leal -32(%0),%0\n" \
|
||||
"jns 1b\n" \
|
||||
"2: addl $32,%2" : \
|
||||
"=r" (dst_ep), "=r" (src_ep), "=r" (nbytes_left) : \
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -0,0 +1,247 @@
|
||||
/* Machine-dependent ELF dynamic relocation inline functions. m68k 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. */
|
||||
|
||||
#define ELF_MACHINE_NAME "m68k"
|
||||
|
||||
#include <assert.h>
|
||||
#include <string.h>
|
||||
#include <link.h>
|
||||
|
||||
|
||||
/* Return nonzero iff E_MACHINE is compatible with the running host. */
|
||||
static inline int
|
||||
elf_machine_matches_host (Elf32_Half e_machine)
|
||||
{
|
||||
switch (e_machine)
|
||||
{
|
||||
case EM_68K:
|
||||
return 1;
|
||||
default:
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/* Return the run-time address of the _GLOBAL_OFFSET_TABLE_.
|
||||
Must be inlined in a function which uses global data. */
|
||||
static inline Elf32_Addr *
|
||||
elf_machine_got (void)
|
||||
{
|
||||
register Elf32_Addr *got asm ("%a5");
|
||||
return got;
|
||||
}
|
||||
|
||||
|
||||
/* Return the run-time load address of the shared object. */
|
||||
static inline Elf32_Addr
|
||||
elf_machine_load_address (void)
|
||||
{
|
||||
Elf32_Addr addr;
|
||||
asm ("here: lea here(%%pc), %0\n"
|
||||
" sub.l %#here, %0"
|
||||
: "=a" (addr));
|
||||
return addr;
|
||||
}
|
||||
|
||||
/* The `subl' insn above will contain an R_68K_RELATIVE relocation
|
||||
entry intended to insert the run-time address of the label `here'.
|
||||
This will be the first relocation in the text of the dynamic
|
||||
linker; we skip it to avoid trying to modify read-only text in this
|
||||
early stage. */
|
||||
#define ELF_MACHINE_BEFORE_RTLD_RELOC(dynamic_info) \
|
||||
((dynamic_info)[DT_RELA]->d_un.d_ptr += sizeof (Elf32_Rela), \
|
||||
(dynamic_info)[DT_RELASZ]->d_un.d_val -= sizeof (Elf32_Rela))
|
||||
|
||||
/* Perform the relocation specified by RELOC and SYM (which is fully resolved).
|
||||
MAP is the object containing the reloc. */
|
||||
|
||||
static inline void
|
||||
elf_machine_rela (struct link_map *map,
|
||||
const Elf32_Rela *reloc,
|
||||
Elf32_Addr sym_loadaddr, const Elf32_Sym *sym)
|
||||
{
|
||||
Elf32_Addr *const reloc_addr = (void *) (map->l_addr + reloc->r_offset);
|
||||
const Elf32_Addr sym_value = sym ? sym_loadaddr + sym->st_value : 0;
|
||||
|
||||
switch (ELF32_R_TYPE (reloc->r_info))
|
||||
{
|
||||
case R_68K_COPY:
|
||||
memcpy (reloc_addr, (void *) sym_value, sym->st_size);
|
||||
break;
|
||||
case R_68K_GLOB_DAT:
|
||||
case R_68K_JMP_SLOT:
|
||||
*reloc_addr = sym_value;
|
||||
break;
|
||||
case R_68K_8:
|
||||
*(char *) reloc_addr = sym_value + reloc->r_addend;
|
||||
break;
|
||||
case R_68K_16:
|
||||
*(short *) reloc_addr = sym_value + reloc->r_addend;
|
||||
break;
|
||||
case R_68K_32:
|
||||
*reloc_addr = sym_value + reloc->r_addend;
|
||||
break;
|
||||
case R_68K_RELATIVE:
|
||||
*reloc_addr = map->l_addr + reloc->r_addend;
|
||||
break;
|
||||
case R_68K_PC8:
|
||||
*(char *) reloc_addr = (sym_value + reloc->r_addend
|
||||
- (Elf32_Addr) reloc_addr);
|
||||
break;
|
||||
case R_68K_PC16:
|
||||
*(short *) reloc_addr = (sym_value + reloc->r_addend
|
||||
- (Elf32_Addr) reloc_addr);
|
||||
break;
|
||||
case R_68K_PC32:
|
||||
*reloc_addr = sym_value + reloc->r_addend - (Elf32_Addr) reloc_addr;
|
||||
break;
|
||||
case R_68K_NONE: /* Alright, Wilbur. */
|
||||
break;
|
||||
default:
|
||||
assert (! "unexpected dynamic reloc type");
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static inline void
|
||||
elf_machine_lazy_rel (struct link_map *map, const Elf32_Rela *reloc)
|
||||
{
|
||||
Elf32_Addr *const reloc_addr = (void *) (map->l_addr + reloc->r_offset);
|
||||
switch (ELF32_R_TYPE (reloc->r_info))
|
||||
{
|
||||
case R_68K_NONE:
|
||||
break;
|
||||
case R_68K_JMP_SLOT:
|
||||
*reloc_addr += map->l_addr;
|
||||
break;
|
||||
default:
|
||||
assert (! "unexpected PLT reloc type");
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/* The m68k never uses Elf32_Rel relocations. */
|
||||
#define ELF_MACHINE_NO_REL 1
|
||||
|
||||
|
||||
/* Set up the loaded object described by L so its unrelocated PLT
|
||||
entries will jump to the on-demand fixup code in dl-runtime.c. */
|
||||
|
||||
static inline void
|
||||
elf_machine_runtime_setup (struct link_map *l, int lazy)
|
||||
{
|
||||
Elf32_Addr *got;
|
||||
extern void _dl_runtime_resolve (Elf32_Word);
|
||||
|
||||
if (l->l_info[DT_JMPREL] && lazy)
|
||||
{
|
||||
/* The GOT entries for functions in the PLT have not yet been
|
||||
filled in. Their initial contents will arrange when called
|
||||
to push an offset into the .rela.plt section, push
|
||||
_GLOBAL_OFFSET_TABLE_[1], and then jump to
|
||||
_GLOBAL_OFFSET_TABLE_[2]. */
|
||||
got = (Elf32_Addr *) (l->l_addr + l->l_info[DT_PLTGOT]->d_un.d_ptr);
|
||||
got[1] = (Elf32_Addr) l; /* Identify this shared object. */
|
||||
/* This function will get called to fix up the GOT entry
|
||||
indicated by the offset on the stack, and then jump to the
|
||||
resolved address. */
|
||||
got[2] = (Elf32_Addr) &_dl_runtime_resolve;
|
||||
}
|
||||
|
||||
/* This code is used in dl-runtime.c to call the `fixup' function
|
||||
and then redirect to the address it returns. */
|
||||
#define ELF_MACHINE_RUNTIME_TRAMPOLINE asm ("\
|
||||
| Trampoline for _dl_runtime_resolver
|
||||
.globl _dl_runtime_resolve
|
||||
.type _dl_runtime_resolve, @function
|
||||
_dl_runtime_resolve:
|
||||
| Save %a0 (struct return address) and %a1.
|
||||
move.l %a0, -(%sp)
|
||||
move.l %a1, -(%sp)
|
||||
| Call the real address resolver.
|
||||
jbsr fixup
|
||||
| Restore register %a0 and %a1.
|
||||
move.l (%sp)+, %a1
|
||||
move.l (%sp)+, %a0
|
||||
| Pop parameters
|
||||
addq.l #8, %sp
|
||||
| Call real function.
|
||||
jmp (%d0)
|
||||
.size _dl_runtime_resolve, . - _dl_runtime_resolve
|
||||
");
|
||||
#define ELF_MACHINE_RUNTIME_FIXUP_ARGS long int save_a0, long int save_a1
|
||||
/* The PLT uses Elf32_Rela relocs. */
|
||||
#define elf_machine_relplt elf_machine_rela
|
||||
}
|
||||
|
||||
|
||||
/* Mask identifying addresses reserved for the user program,
|
||||
where the dynamic linker should not map anything. */
|
||||
#define ELF_MACHINE_USER_ADDRESS_MASK 0x80000000UL
|
||||
|
||||
/* Initial entry point code for the dynamic linker.
|
||||
The C function `_dl_start' is the real entry point;
|
||||
its return value is the user program's entry point. */
|
||||
|
||||
#define RTLD_START asm ("\
|
||||
.text
|
||||
.globl _start
|
||||
.globl _dl_start_user
|
||||
_start:
|
||||
jbsr _dl_start
|
||||
_dl_start_user:
|
||||
| Save the user entry point address in %a4.
|
||||
move.l %d0, %a4
|
||||
| Point %a5 at the GOT.
|
||||
lea _GLOBAL_OFFSET_TABLE_@GOTPC(%pc), %a5
|
||||
| See if we were run as a command with the executable file
|
||||
| name as an extra leading argument.
|
||||
move.l ([_dl_skip_args@GOT, %a5]), %d0
|
||||
jeq 0f
|
||||
| Pop the original argument count
|
||||
move.l (%sp)+, %d1
|
||||
| Subtract _dl_skip_args from it.
|
||||
sub.l %d0, %d1
|
||||
| Adjust the stack pointer to skip _dl_skip_args words.
|
||||
lea (%sp, %d0*4), %sp
|
||||
| Push back the modified argument count.
|
||||
move.l %d1, -(%sp)
|
||||
| Call _dl_init_next to return the address of an initializer
|
||||
| function to run.
|
||||
0: bsr.l _dl_init_next@PLTPC
|
||||
| Check for zero return, when out of initializers.
|
||||
tst.l %d0
|
||||
jeq 1f
|
||||
| Call the shared object initializer function.
|
||||
| NOTE: We depend only on the registers (%a4 and %a5)
|
||||
| and the return address pushed by this call;
|
||||
| the initializer is called with the stack just
|
||||
| as it appears on entry, and it is free to move
|
||||
| the stack around, as long as it winds up jumping to
|
||||
| the return address on the top of the stack.
|
||||
move.l %d0, %a0
|
||||
jsr (%a0)
|
||||
| Loop to call _dl_init_next for the next initializer.
|
||||
jra 0b
|
||||
1: | Pass our finalizer function to the user in %a1.
|
||||
move.l _dl_fini@GOT(%a5), %a1
|
||||
| Initialize %fp with the stack pointer.
|
||||
move.l %sp, %fp
|
||||
| Jump to the user's entry point.
|
||||
jmp (%a4)");
|
||||
@@ -0,0 +1,90 @@
|
||||
/* Startup code compliant to the ELF m68k ABI.
|
||||
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. */
|
||||
|
||||
/* This is the canonical entry point, usually the first thing in the text
|
||||
segment. The SVR4/m68k ABI says that when the entry point runs,
|
||||
most registers' values are unspecified, except for:
|
||||
|
||||
%a1 Contains a function pointer to be registered with `atexit'.
|
||||
This is how the dynamic linker arranges to have DT_FINI
|
||||
functions called for shared libraries that have been loaded
|
||||
before this code runs.
|
||||
|
||||
%sp The stack contains the arguments and environment:
|
||||
0(%sp) argc
|
||||
4(%sp) argv[0]
|
||||
...
|
||||
(4*argc)(%sp) NULL
|
||||
(4*(argc+1))(%sp) envp[0]
|
||||
...
|
||||
NULL
|
||||
*/
|
||||
|
||||
.text
|
||||
.globl _start
|
||||
_start:
|
||||
/* Clear the frame pointer. The ABI suggests this be done, to mark
|
||||
the outermost frame obviously. */
|
||||
sub.l %fp, %fp
|
||||
|
||||
/* %a1 contains the address of the shared library termination
|
||||
function, which we will register with `atexit' to be called by
|
||||
`exit'. */
|
||||
tstl %a1
|
||||
jbeq 1f
|
||||
move.l %a1, -(%sp)
|
||||
jbsr atexit
|
||||
addql #4, %sp
|
||||
1:
|
||||
|
||||
/* Do essential libc initialization. In statically linked
|
||||
programs under the GNU Hurd, this is what sets up the
|
||||
arguments on the stack for the code below. */
|
||||
jbsr __libc_init_first
|
||||
|
||||
/* Extract the arguments and environment as encoded on the stack
|
||||
and set up the arguments for `main': argc, argv, envp. */
|
||||
move.l (%sp)+, %d0 /* Pop the argument count. */
|
||||
lea (4,%sp,%d0*4), %a0 /* envp = &argv[argc + 1] */
|
||||
move.l %a0, _environ /* Store it in the global variable. */
|
||||
pea (%a0) /* Push third argument: envp. */
|
||||
pea 4(%sp) /* Push second argument: argv. */
|
||||
move.l %d0, -(%sp) /* Push first argument: argc. */
|
||||
|
||||
/* Call `_init', which is the entry point to our own `.init'
|
||||
section; and register with `atexit' to have `exit' call
|
||||
`_fini', which is the entry point to our own `.fini' section. */
|
||||
jbsr _init
|
||||
move.l #_fini, -(%sp)
|
||||
jbsr atexit
|
||||
addq.l #4, %sp
|
||||
|
||||
/* Call the user's main function, and exit with its value. */
|
||||
jbsr main
|
||||
move.l %d0, (%sp)
|
||||
1: jbsr exit /* This should never return. */
|
||||
jbra 1b /* Try again if somehow it does return. */
|
||||
|
||||
/* Define a symbol for the first piece of initialized data. */
|
||||
.data
|
||||
.globl __data_start
|
||||
__data_start:
|
||||
.long 0
|
||||
.weak data_start
|
||||
data_start = __data_start
|
||||
@@ -0,0 +1,4 @@
|
||||
#define FUNC __isinfl
|
||||
#include <isinf.c>
|
||||
|
||||
weak_alias (__isinfl, isinfl)
|
||||
@@ -0,0 +1,4 @@
|
||||
#define FUNC __isnanl
|
||||
#include <isinf.c>
|
||||
|
||||
weak_alias (__isnanl, isnanl)
|
||||
@@ -0,0 +1,45 @@
|
||||
/* Copyright (C) 1991, 1992, 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 <math.h>
|
||||
#include "ieee754.h"
|
||||
|
||||
#undef __isinfl
|
||||
#undef isinfl
|
||||
|
||||
|
||||
/* Return 0 if VALUE is finite or NaN, +1 if it
|
||||
is +Infinity, -1 if it is -Infinity. */
|
||||
int
|
||||
__isinfl (long double value)
|
||||
{
|
||||
union ieee854_long_double u;
|
||||
|
||||
u.d = value;
|
||||
|
||||
/* An IEEE 854 infinity has an exponent with the
|
||||
maximum possible value and a zero mantissa.
|
||||
In Motorola's interpretation the integer bit is ignored. */
|
||||
if ((u.ieee.exponent & 0x7fff) == 0x7fff &&
|
||||
(u.ieee.mantissa0 & 0x7fffffff) == 0 && u.ieee.mantissa1 == 0)
|
||||
return u.ieee.negative ? -1 : 1;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
weak_alias (__isinfl, isinfl);
|
||||
@@ -0,0 +1,41 @@
|
||||
/* Copyright (C) 1991, 1992, 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 <math.h>
|
||||
#include "ieee754.h"
|
||||
|
||||
#undef __isnanl
|
||||
#undef isnanl
|
||||
|
||||
|
||||
/* Return nonzero if VALUE is not a number. */
|
||||
int
|
||||
__isnanl (long double value)
|
||||
{
|
||||
union ieee854_long_double u;
|
||||
|
||||
u.d = value;
|
||||
|
||||
/* IEEE 854 NaN's have the maximum possible
|
||||
exponent and a nonzero mantissa. In Motorola's
|
||||
interpretation the integer bit is ignored. */
|
||||
return ((u.ieee.exponent & 0x7fff) == 0x7fff &&
|
||||
((u.ieee.mantissa0 & 0x7fffffff) != 0 || u.ieee.mantissa1 != 0));
|
||||
}
|
||||
|
||||
weak_alias (__isnanl, isnanl);
|
||||
@@ -1,4 +1,4 @@
|
||||
# Copyright (C) 1993, 1994, 1995 Free Software Foundation, Inc.
|
||||
# Copyright (C) 1993, 1994, 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
|
||||
@@ -65,6 +65,7 @@ vpath hurd/%.h $(hurd-srcdir)
|
||||
# This bypasses all the system call stubs and uses any existing posix or
|
||||
# generic C files instead.
|
||||
inhibit-sysdep-asm += unix*
|
||||
inhibit-unix-syscalls = yes
|
||||
|
||||
# Don't try to generate anything from the installed Unix system and its
|
||||
# libraries. That is only of use when building for a Unix system, so as to
|
||||
|
||||
@@ -48,14 +48,18 @@ unsigned int __hurd_threadvar_max = _HURD_THREADVAR_MAX;
|
||||
static unsigned long int threadvars[_HURD_THREADVAR_MAX];
|
||||
unsigned long int __hurd_threadvar_stack_offset
|
||||
= (unsigned long int) &threadvars;
|
||||
unsigned long int __hurd_sigthread_stack_base;
|
||||
unsigned long int __hurd_sigthread_stack_end;
|
||||
unsigned long int *__hurd_sigthread_variables;
|
||||
unsigned long int __hurd_threadvar_stack_mask;
|
||||
|
||||
|
||||
/* XXX loser kludge for vm_map kernel bug */
|
||||
static vm_address_t fmha;
|
||||
static vm_size_t fmhs;
|
||||
static void unfmh(){
|
||||
static void unfmh(void){
|
||||
__vm_deallocate(__mach_task_self(),fmha,fmhs);}
|
||||
static void fmh() {
|
||||
static void fmh(void) {
|
||||
error_t err;int x;mach_port_t p;
|
||||
vm_address_t a=0x08000000U,max=VM_MAX_ADDRESS;
|
||||
while (!(err=__vm_region(__mach_task_self(),&a,&fmhs,&x,&x,&x,&x,&p,&x))){
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/* This file generated by gawk ../manual/errno.texi ../../mach/mach/message.h ../../mach/mach/kern_return.h ../../mach/mach/mig_errors.h ../../mach/device/device_types.h. */
|
||||
/* This file generated by gawk ../manual/errno.texi /gd4/gnu/mach/mach/message.h /gd4/gnu/mach/mach/kern_return.h /gd4/gnu/mach/mach/mig_errors.h /gd4/gnu/mach/device/device_types.h. */
|
||||
|
||||
/* The Hurd uses Mach error system 0x10, currently only subsystem 0. */
|
||||
#ifndef _HURD_ERRNO
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/* Copyright (C) 1991, 1992, 1993, 1994, 1995 Free Software Foundation, Inc.
|
||||
/* Copyright (C) 1991, 92, 93, 94, 95, 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
|
||||
@@ -31,9 +31,11 @@ DEFUN(fchdir, (fd), int fd)
|
||||
error_t err;
|
||||
file_t dir;
|
||||
|
||||
err = HURD_DPORT_USE (fd, (dir = __file_name_lookup_under (port, "",
|
||||
O_EXEC, 0),
|
||||
errno));
|
||||
err = HURD_DPORT_USE (fd,
|
||||
({
|
||||
dir = __file_name_lookup_under (port, "", O_EXEC, 0);
|
||||
dir == MACH_PORT_NULL ? errno : 0;
|
||||
}));
|
||||
|
||||
if (! err)
|
||||
_hurd_port_set (&_hurd_ports[INIT_PORT_CWDIR], dir);
|
||||
|
||||
@@ -252,6 +252,12 @@ __fork (void)
|
||||
if (old != MACH_PORT_NULL)
|
||||
/* XXX what to do here? */
|
||||
__mach_port_deallocate (__mach_task_self (), old);
|
||||
/* The new task will receive its own exceptions
|
||||
on its message port. */
|
||||
if (err = __task_set_special_port (newtask,
|
||||
TASK_EXCEPTION_PORT,
|
||||
port))
|
||||
LOSE;
|
||||
}
|
||||
if (err = __mach_port_insert_right (newtask,
|
||||
portnames[i],
|
||||
@@ -596,6 +602,9 @@ __fork (void)
|
||||
err = __USEPORT (PROC, __proc_getpids (port, &_hurd_pid, &_hurd_ppid,
|
||||
&_hurd_orphaned));
|
||||
|
||||
/* Forking clears the trace flag. */
|
||||
_hurd_exec_flags &= ~EXEC_TRACED;
|
||||
|
||||
/* Run things that want to run in the child task to set up. */
|
||||
RUN_HOOK (_hurd_fork_child_hook, ());
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/* Machine-dependent details of interruptible RPC messaging. i386 version.
|
||||
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
|
||||
@@ -45,3 +45,56 @@ INTR_MSG_BACK_OUT (struct i386_thread_state *state)
|
||||
else
|
||||
state->ecx = state->uesp;
|
||||
}
|
||||
|
||||
#include "hurdfault.h"
|
||||
|
||||
static inline int
|
||||
SYSCALL_EXAMINE (struct i386_thread_state *state, int *callno)
|
||||
{
|
||||
struct { unsigned int c[2]; } *p = (void *) (state->eip - 7);
|
||||
int result;
|
||||
if (_hurdsig_catch_memory_fault (p))
|
||||
return 0;
|
||||
if (result = p->c[0] == 0x0000009a && (p->c[1] & 0x00ffffff) == 0x00000700)
|
||||
/* The PC is just after an `lcall $7,$0' instruction.
|
||||
This is a system call in progress; %eax holds the call number. */
|
||||
*callno = state->eax;
|
||||
_hurdsig_end_catch_fault ();
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
struct mach_msg_trap_args
|
||||
{
|
||||
void *retaddr; /* Address mach_msg_trap will return to. */
|
||||
/* This is the order of arguments to mach_msg_trap. */
|
||||
mach_msg_header_t *msg;
|
||||
mach_msg_option_t option;
|
||||
mach_msg_size_t send_size;
|
||||
mach_msg_size_t rcv_size;
|
||||
mach_port_t rcv_name;
|
||||
mach_msg_timeout_t timeout;
|
||||
mach_port_t notify;
|
||||
};
|
||||
|
||||
|
||||
static inline mach_port_t
|
||||
MSG_EXAMINE (struct i386_thread_state *state, int *msgid)
|
||||
{
|
||||
const struct mach_msg_trap_args *args = (const void *) state->uesp;
|
||||
mach_msg_header_t *msg;
|
||||
mach_port_t send_port;
|
||||
|
||||
if (_hurdsig_catch_memory_fault (args))
|
||||
return MACH_PORT_NULL;
|
||||
msg = args->msg;
|
||||
_hurdsig_end_catch_fault ();
|
||||
|
||||
if (_hurdsig_catch_memory_fault (msg))
|
||||
return MACH_PORT_NULL;
|
||||
send_port = msg->msgh_remote_port;
|
||||
*msgid = msg->msgh_id;
|
||||
_hurdsig_end_catch_fault ();
|
||||
|
||||
return send_port;
|
||||
}
|
||||
|
||||
@@ -23,21 +23,9 @@ Cambridge, MA 02139, USA. */
|
||||
#include <assert.h>
|
||||
#include <errno.h>
|
||||
#include "hurdfault.h"
|
||||
#include "intr-msg.h"
|
||||
|
||||
|
||||
struct mach_msg_trap_args
|
||||
{
|
||||
void *retaddr; /* Address mach_msg_trap will return to. */
|
||||
/* This is the order of arguments to mach_msg_trap. */
|
||||
mach_msg_header_t *msg;
|
||||
mach_msg_option_t option;
|
||||
mach_msg_size_t send_size;
|
||||
mach_msg_size_t rcv_size;
|
||||
mach_port_t rcv_name;
|
||||
mach_msg_timeout_t timeout;
|
||||
mach_port_t notify;
|
||||
};
|
||||
|
||||
struct sigcontext *
|
||||
_hurd_setup_sighandler (struct hurd_sigstate *ss, __sighandler_t handler,
|
||||
int signo, long int sigcode,
|
||||
@@ -94,7 +82,7 @@ _hurd_setup_sighandler (struct hurd_sigstate *ss, __sighandler_t handler,
|
||||
per-thread variables, cthreads. */
|
||||
}
|
||||
/* This code has intimate knowledge of the special mach_msg system call
|
||||
done in intr-msg.c; that code does:
|
||||
done in intr-msg.c; that code does (see intr-msg.h):
|
||||
movl %esp, %ecx
|
||||
leal ARGS, %esp
|
||||
_hurd_intr_rpc_msg_cx_sp: movl $-25, %eax
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/* Copyright (C) 1992, 1993, 1994, 1995 Free Software Foundation, Inc.
|
||||
/* Copyright (C) 1992, 1993, 1994, 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
|
||||
@@ -129,8 +129,17 @@ DEFUN(__ioctl, (fd, request),
|
||||
/* Check for a registered handler for REQUEST. */
|
||||
ioctl_handler_t handler = _hurd_lookup_ioctl_handler (request);
|
||||
if (handler)
|
||||
/* This handler groks REQUEST. Se lo puntamonos. */
|
||||
return (*handler) (fd, request, arg);
|
||||
{
|
||||
/* This handler groks REQUEST. Se lo puntamonos. */
|
||||
int save = errno;
|
||||
int result = (*handler) (fd, request, arg);
|
||||
if (result != -1 || errno != ENOTTY)
|
||||
return result;
|
||||
|
||||
/* The handler doesn't really grok this one.
|
||||
Try the normal RPC translation. */
|
||||
errno = save;
|
||||
}
|
||||
}
|
||||
|
||||
/* Compute the Mach message ID for the RPC from the group and command
|
||||
|
||||
+18
-13
@@ -1,4 +1,4 @@
|
||||
/* Copyright (C) 1992, 1993 Free Software Foundation, Inc.
|
||||
/* Copyright (C) 1992, 1993, 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
|
||||
@@ -21,16 +21,20 @@ Cambridge, MA 02139, USA. */
|
||||
#define _IOCTLS_H 1
|
||||
|
||||
/* Hurd ioctl request are made up of several fields:
|
||||
bits 31-30: inout direction (enum __ioctl_dir)
|
||||
bits 29-12: type encoding as follows; zero count indicates omitted datum
|
||||
29-28: datum #0 type (enum __ioctl_datum)
|
||||
27-26: datum #1 type (enum __ioctl_datum)
|
||||
25-24: datum #2 type (enum __ioctl_datum)
|
||||
23-19: datum #0 count [0..31]
|
||||
18-14: datum #1 count [0..31]
|
||||
13-12: datum #2 count [0..3]
|
||||
bits 11- 8: group (letter - 'f': ['f'..'v'])
|
||||
bits 7- 0: command [0..127]
|
||||
|
||||
10987654321098765432109876543210
|
||||
IOt0t1t2cc0c0cc1c1cc2ggggccccccc
|
||||
|
||||
bits [31,30]: inout direction (enum __ioctl_dir)
|
||||
bits [29,11]: type encoding as follows; zero count indicates omitted datum
|
||||
[29,28]: datum #0 type (enum __ioctl_datum)
|
||||
[27,26]: datum #1 type (enum __ioctl_datum)
|
||||
[24,25]: datum #2 type (enum __ioctl_datum)
|
||||
[23,19]: datum #0 count [0,31]
|
||||
[18,14]: datum #1 count [0,31]
|
||||
[13,11]: datum #2 count [0,3]
|
||||
bits [07,10]: group (letter - 'f': ['f','v'])
|
||||
bits [00,06]: command [0,127]
|
||||
|
||||
The following macros construct and dissect these fields. */
|
||||
|
||||
@@ -50,9 +54,10 @@ enum __ioctl_datum { IOC_8, IOC_16, IOC_32 };
|
||||
|
||||
/* Dissect an ioctl into its component fields. */
|
||||
#define _IOC_INOUT(request) (((unsigned int) (request) >> 30) & IOC_INOUT)
|
||||
#define _IOC_GROUP(request) ('f' + (((unsigned int) (request) >> 7) & 15))
|
||||
#define _IOC_GROUP(request) ('f' + (((unsigned int) (request) >> 7) & 0xf))
|
||||
#define _IOC_COMMAND(request) ((unsigned int) (request) & 0x7f)
|
||||
#define _IOC_TYPE(request) (((unsigned int) (request) >> 11) & 0x7ffff)
|
||||
#define _IOC_NOTYPE(request) ((unsigned int) (request) & 0x3ff)
|
||||
|
||||
/* Construct a type information field from
|
||||
the broken-out type and count fields. */
|
||||
@@ -65,7 +70,7 @@ enum __ioctl_datum { IOC_8, IOC_16, IOC_32 };
|
||||
#define _IOT_TYPE2(type) (((unsigned int) (type) >> 13) & 3)
|
||||
#define _IOT_COUNT0(type) (((unsigned int) (type) >> 8) & 0x1f)
|
||||
#define _IOT_COUNT1(type) (((unsigned int) (type) >> 3) & 0x1f)
|
||||
#define _IOT_COUNT2(type) (((unsigned int) (type) >> 0) & 3)
|
||||
#define _IOT_COUNT2(type) (((unsigned int) (type) >> 0) & 7)
|
||||
|
||||
/* Construct an ioctl from all the broken-out fields. */
|
||||
#define _IOCT(inout, group, num, t0, c0, t1, c1, t2, c2) \
|
||||
|
||||
@@ -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;
|
||||
|
||||
+2
-2
@@ -1,4 +1,4 @@
|
||||
/* Copyright (C) 1991, 1995 Free Software Foundation, Inc.
|
||||
/* Copyright (C) 1991, 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,7 +23,7 @@ Cambridge, MA 02139, USA. */
|
||||
/* Give the socket FD the local address ADDR (which is LEN bytes long). */
|
||||
int
|
||||
DEFUN(bind, (fd, addr, len),
|
||||
int fd AND struct sockaddr *addr AND size_t len)
|
||||
int fd AND const struct sockaddr *addr AND size_t len)
|
||||
{
|
||||
errno = ENOSYS;
|
||||
return -1;
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/* Copyright (C) 1991, 1995 Free Software Foundation, Inc.
|
||||
/* Copyright (C) 1991, 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
|
||||
@@ -26,7 +26,7 @@ Cambridge, MA 02139, USA. */
|
||||
Return 0 on success, -1 for errors. */
|
||||
int
|
||||
DEFUN(connect, (fd, addr, len),
|
||||
int fd AND struct sockaddr *addr AND size_t len)
|
||||
int fd AND const struct sockaddr *addr AND size_t len)
|
||||
{
|
||||
errno = ENOSYS;
|
||||
return -1;
|
||||
|
||||
@@ -1,64 +0,0 @@
|
||||
/* On-demand PLT fixup for shared objects. Stub version.
|
||||
Copyright (C) 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 <link.h>
|
||||
#include "dynamic-link.h"
|
||||
|
||||
/* This function is not called in the normal way. The PLT jumps here, not
|
||||
using a call. */
|
||||
void
|
||||
_dl_runtime_resolve ()
|
||||
{
|
||||
struct link_map *l = ???;
|
||||
Elf32_Word reloc_offset = ???;
|
||||
|
||||
const Elf32_Sym *const symtab
|
||||
= (const Elf32_Sym *) l->l_info[DT_SYMTAB]->d_un.d_ptr;
|
||||
const char *strtab
|
||||
= ((void *) l->l_addr + l->l_info[DT_STRTAB]->d_un.d_ptr);
|
||||
|
||||
const Elf32_Rel *const reloc = (void *) (l->l_info[DT_JMPREL]->d_un.d_ptr
|
||||
+ reloc_offset);
|
||||
|
||||
const Elf32_Sym *definer;
|
||||
Elf32_Addr loadbase;
|
||||
struct link_map *scope, *real_next;
|
||||
|
||||
/* Look up the symbol's run-time value. */
|
||||
|
||||
real_next = l->l_next;
|
||||
if (l->l_info[DT_SYMBOLIC])
|
||||
{
|
||||
l->l_prev->l_next = real_next;
|
||||
l->l_next = _dl_loaded;
|
||||
scope = l;
|
||||
}
|
||||
else
|
||||
scope = _dl_loaded;
|
||||
|
||||
definer = &symtab[ELF32_R_SYM (reloc->r_info)];
|
||||
loadbase = _dl_lookup_symbol (strtab + definer->st_name, &definer, scope);
|
||||
|
||||
/* Restore list frobnication done above for DT_SYMBOLIC. */
|
||||
l->l_next = real_next;
|
||||
l->l_prev->l_next = l;
|
||||
|
||||
/* Apply the relocation with that value. */
|
||||
elf_machine_rel (l->l_addr, l->l_info, reloc, loadbase, definer);
|
||||
}
|
||||
@@ -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;
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/* Copyright (C) 1991, 1995 Free Software Foundation, Inc.
|
||||
/* Copyright (C) 1991, 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
|
||||
@@ -25,7 +25,7 @@ Cambridge, MA 02139, USA. */
|
||||
int
|
||||
DEFUN(sendto, (fd, buf, n, flags, addr, addr_len),
|
||||
int fd AND PTR buf AND size_t n AND int flags AND
|
||||
struct sockaddr *addr AND size_t addr_len)
|
||||
const struct sockaddr *addr AND size_t addr_len)
|
||||
{
|
||||
errno = ENOSYS;
|
||||
return -1;
|
||||
|
||||
@@ -292,4 +292,14 @@ $(objpfx)sysd-syscalls: $(..)sysdeps/unix/make-syscalls.sh \
|
||||
done > $@T
|
||||
mv -f $@T $@
|
||||
|
||||
# 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
|
||||
|
||||
@@ -2,11 +2,7 @@
|
||||
|
||||
chflags - chflags 2 chflags
|
||||
fchflags - fchflags 2 fchflags
|
||||
getdents - getdirentries 4 __getdirentries getdirentries
|
||||
revoke - revoke 1 revoke
|
||||
setegid - setegid 1 setegid
|
||||
seteuid - seteuid 1 seteuid
|
||||
setlogin - setlogin 2 setlogin
|
||||
setsid - setsid 0 __setsid setsid
|
||||
sigaltstack - sigaltstack 2 sigaltstack
|
||||
wait4 - wait4 4 __wait4 wait4
|
||||
|
||||
@@ -1,3 +0,0 @@
|
||||
# File name Caller Syscall name # args Strong name Weak names
|
||||
|
||||
getdents - getdirentries 4 __getdirentries getdirentries
|
||||
@@ -2,7 +2,5 @@
|
||||
|
||||
msync - msync 3 msync
|
||||
poll - poll 3 poll
|
||||
setsid - setsid 0 __setsid setsid
|
||||
sys_mmap mmap mmap 5 __mmap_syscall
|
||||
sys_wait4 wait4 wait4 4 __wait4_syscall
|
||||
uname - uname 1 uname
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
# File name Caller Syscall name # args Strong name Weak names
|
||||
|
||||
getdents - getdirentries 4 __getdirentries getdirentries
|
||||
sigvec - sigvec 3 __raw_sigvec
|
||||
|
||||
@@ -1,13 +1,14 @@
|
||||
# File name Caller Syscall name # args Strong name Weak names
|
||||
|
||||
flock - flock 2 __flock flock
|
||||
getdents - getdirentries 4 __getdirentries getdirentries
|
||||
getdtsz - getdtablesize 0 __getdtablesize getdtablesize
|
||||
getpagesize - getpagesize 0 __getpagesize getpagesize
|
||||
killpg - killpg 2 killpg
|
||||
settimeofday - settimeofday 2 __settimeofday settimeofday
|
||||
sigblock - sigblock 1 __sigblock sigblock
|
||||
sigpause - sigpause 1 __sigpause sigpause
|
||||
sigsetmask - sigsetmask 1 __sigsetmask sigsetmask
|
||||
sigstack - sigstack 2 sigstack
|
||||
sigvec - sigvec 3 __sigvec sigvec
|
||||
utimes - utimes 2 __utimes utimes
|
||||
wait3 - wait3 3 __wait3 wait3
|
||||
waitpid - waitpid 3 __waitpid waitpid
|
||||
|
||||
@@ -1,26 +0,0 @@
|
||||
/* Copyright (C) 1992 Free Software Foundation, Inc.
|
||||
Contributed by Ian Lance Taylor (ian@airs.com).
|
||||
|
||||
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. */
|
||||
|
||||
/* Get various sorts of information about the system.
|
||||
This is an Ultrix only call. */
|
||||
|
||||
#include <sysdep.h>
|
||||
|
||||
SYSCALL__ (getsysinfo, 5)
|
||||
ret
|
||||
.end __getsysinfo
|
||||
@@ -1,3 +1,3 @@
|
||||
ifeq ($(subdir),signal)
|
||||
sysdep_routines := $(sysdep_routines) sigtramp __handler
|
||||
sysdep_routines := $(sysdep_routines) __handler
|
||||
endif
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/* Copyright (C) 1992 Free Software Foundation, Inc.
|
||||
/* Copyright (C) 1992, 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
|
||||
@@ -36,7 +36,6 @@ Cambridge, MA 02139, USA. */
|
||||
/* The user's signal handler is called with three arguments. */
|
||||
typedef void (*handler_type) (int sig, int code, struct sigcontext *);
|
||||
|
||||
/* Defined in __raw_sigvec.S. */
|
||||
extern int EXFUN(__raw_sigvec, (int sig, CONST struct sigvec *vec,
|
||||
struct sigvec *ovec,
|
||||
void (*)(int sig, int code,
|
||||
+1
-1
@@ -1,3 +1,3 @@
|
||||
# File name Caller Syscall name # args Strong name Weak names
|
||||
|
||||
ipc - ipc 5 __ipc
|
||||
raw-sigvec sigvec sigvec 4 __raw_sigvec
|
||||
@@ -1,5 +1,3 @@
|
||||
# File name Caller Syscall name # args Strong name Weak names
|
||||
|
||||
getdents - getdirentries 4 __getdirentries getdirentries
|
||||
setsid - setsid 0 __setsid setsid
|
||||
uname - uname 1 uname
|
||||
getsysinfo sysconf getsysinfo 5 __getsysinfo
|
||||
|
||||
@@ -1,25 +0,0 @@
|
||||
/* Copyright (C) 1992, 1995 Free Software Foundation, Inc.
|
||||
Contributed by Brendan Kehoe (brendan@zen.org).
|
||||
|
||||
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>
|
||||
|
||||
SYSCALL__ (waitpid, 3)
|
||||
ret
|
||||
.end __waitpid
|
||||
|
||||
weak_alias (__waitpid, waitpid)
|
||||
@@ -7,9 +7,11 @@ ftruncate - ftruncate 2 ftruncate
|
||||
getpgid - getpgrp 1 __getpgid getpgid
|
||||
getrusage - getrusage 2 __getrusage getrusage
|
||||
gettimeofday - gettimeofday 2 __gettimeofday gettimeofday
|
||||
settimeofday - settimeofday 2 __settimeofday settimeofday
|
||||
setpgid - setpgrp 2 __setpgid setpgid setpgrp
|
||||
setregid - setregid 2 __setregid setregid
|
||||
setreuid - setreuid 2 __setreuid setreuid
|
||||
sigaction - sigaction 3 __sigaction sigaction
|
||||
sys_lstat lxstat lstat 2 __syscall_lstat
|
||||
truncate - truncate 2 truncate
|
||||
vhangup - vhangup 1 vhangup
|
||||
|
||||
@@ -0,0 +1,8 @@
|
||||
sinclude(./aclocal.m4)dnl Autoconf lossage
|
||||
GLIBC_PROVIDES dnl See aclocal.m4 in the top level source directory.
|
||||
# Local configure fragment for sysdeps/unix.
|
||||
|
||||
if test -z "$inhibit_glue"; then
|
||||
# For make_errlist.c, used in make_errlist.
|
||||
AC_CHECK_FUNCS(strerror)
|
||||
fi
|
||||
@@ -21,7 +21,9 @@ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
|
||||
/* Make a definition for sys_errlist. */
|
||||
|
||||
extern int sys_nerr;
|
||||
#ifndef HAVE_STRERROR
|
||||
extern char *sys_errlist[];
|
||||
#endif
|
||||
|
||||
int
|
||||
main ()
|
||||
@@ -35,7 +37,13 @@ main ()
|
||||
puts ("CONST char *CONST _sys_errlist[] =\n {");
|
||||
|
||||
for (i = 0; i < sys_nerr; ++i)
|
||||
printf (" \"%s\",\n", sys_errlist[i]);
|
||||
printf (" \"%s\",\n",
|
||||
#ifdef HAVE_STRERROR
|
||||
strerror (i)
|
||||
#else /* ! HAVE_STRERROR */
|
||||
sys_errlist[i]
|
||||
#endif /* HAVE_STRERROR */
|
||||
);
|
||||
|
||||
puts (" NULL\n };\n");
|
||||
|
||||
|
||||
@@ -36,12 +36,18 @@ rename - rename 2 rename
|
||||
rmdir - rmdir 1 __rmdir rmdir
|
||||
select - select 5 __select select
|
||||
setdomain - setdomainname 2 setdomainname
|
||||
setegid - setegid 1 __setegid setegid
|
||||
seteuid - seteuid 1 __seteuid seteuid
|
||||
setgid - setgid 1 __setgid setgid
|
||||
setgroups - setgroups 2 setgroups
|
||||
setitimer - setitimer 3 __setitimer setitimer
|
||||
setpriority - setpriority 3 setpriority
|
||||
setrlimit - setrlimit 2 setrlimit
|
||||
setsid - setsid 0 __setsid setsid
|
||||
settimeofday - settimeofday 2 __settimeofday settimeofday
|
||||
setuid - setuid 1 __setuid setuid
|
||||
sigsuspend - sigsuspend 1 sigsuspend
|
||||
sstk - sstk 1 sstk
|
||||
swapon - swapon 1 swapon
|
||||
symlink - symlink 2 __symlink symlink
|
||||
sync - sync 0 sync
|
||||
@@ -51,5 +57,6 @@ sys_stat xstat stat 2 __syscall_stat
|
||||
umask - umask 1 __umask umask
|
||||
uname - uname 1 uname
|
||||
unlink - unlink 1 __unlink unlink
|
||||
utimes - utimes 2 __utimes utimes
|
||||
write - write 3 __write write
|
||||
writev - writev 3 writev
|
||||
|
||||
@@ -40,3 +40,6 @@ ifeq ($(subdir),dirent)
|
||||
sysdep_routines := $(sysdep_routines) s_getdents
|
||||
|
||||
endif
|
||||
|
||||
# In SYSV style archives the symbol table member has an empty name.
|
||||
ar-symtab-name =
|
||||
|
||||
@@ -1 +0,0 @@
|
||||
#include <sysdeps/unix/bsd/ultrix4/wait3.S>
|
||||
@@ -1,3 +1,15 @@
|
||||
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 $@
|
||||
ln $< $@
|
||||
endif
|
||||
|
||||
ifeq ($(subdir), io)
|
||||
sysdep_routines += fxstat lxstat xstat
|
||||
endif
|
||||
@@ -7,19 +19,11 @@ sysdep_routines += xmknod mount umount s_ptrace
|
||||
headers += sys/mount.h
|
||||
endif
|
||||
|
||||
#ifeq ($(subdir), posix)
|
||||
#sysdep_routines := $(sysdep_routines) setpgrp
|
||||
#endif
|
||||
|
||||
ifeq ($(subdir), time)
|
||||
sysdep_routines := $(sysdep_routines) adjtimex
|
||||
sysdep_routines += adjtimex
|
||||
headers += sys/timex.h
|
||||
endif
|
||||
|
||||
ifeq ($(subdir), sysvipc)
|
||||
sysdep_routines := $(sysdep_routines) ipc
|
||||
endif
|
||||
|
||||
ifeq ($(subdir), socket)
|
||||
headers += sys/socketcall.h
|
||||
endif
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user