2009-02-27  Denys Vlasenko  <dvlasenk@redhat.com>

	AVR32 support by Hans-Christian Egtvedt
	(hans-christian.egtvedt AT atmel.com).
	* configure.ac: Make it recognize avr32.
	* defs.h: Define LINUX_AVR32.
	* linux/avr32/syscallent.h: New file.
	* Makefile.am: Reference linux/avr32/syscallent.h.
	* proc.c (change_syscall, setarg): Add support for avr32.
	(struct xlat struct_user_offsets[]): Ditto.
	* syscall.c (get_scno): Ditto.
	(get_error, force_result, syscall_enter): Ditto.
	* util.c (getpc, printcall): Ditto.

2009-02-25  Denys Vlasenko  <dvlasenk@redhat.com>

	CRIS support by Hinko Kocevar (hinko.kocevar AT cetrtapot.si)
	* configure.ac: Make it recognize cris.
	* process.c: Define ARG_xxx constants for cris.
	(change_syscall): Add support for cris.
	(struct_user_offsets): Add cris-specific data.
	* signal.c (sys_sigreturn): Add support for cris.
	* syscall.c (get_scno): Add support for cris.
	(syscall_fixup): Add support for cris.
	(get_error): Add support for cris.
	(syscall_enter): Add support for cris.
	(force_result): While at it, fix cpp directives indentation.
	* util.c (printcall): Add support for cris.

2009-02-24  Denys Vlasenko  <dvlasenk@redhat.com>

	Replace many more bare ptrace calls with calls to wrappers
	which do proper error-checking and set tcp->ptrace_errno.
	In some cases, missing error checking is added.
	Error handling for trace_syscall() failures and other cases
	where tcp->ptrace_errno is nonzero is cleaned up a bit
	and made more verbose if we see error other than ESRC.
	Some comments are added or expanded.
	* defs.h: Declare ptrace_cmds[]. Modify do_ptrace
	declaration (last parameter is long, not void *).
	* process.c: Make ptrace_cmds[] non-static.
	(change_syscall): Use do_ptrace() instead of bare ptrace().
	* signal.c: Use do_ptrace() instead of bare ptrace().
	* strace.c: Update trace_syscall() failure handling.
	* syscall.c: Use do_ptrace() instead of bare ptrace().
	* util.c: Use do_ptrace() instead of bare ptrace().
	Update do_ptrace() wrapper.
	(str_PTRACE_xxx): New function - helper returning "PTRACE_xxx".
	(do_ptrace_peekdata): New function - wrapper for PTRACE_PEEKDATA
	(do_ptrace5): New function - wrapper for 5-argument ptrace calls.

2009-02-24  Denys Vlasenko  <dvlasenk@redhat.com>

	* process.c: Indent preprocessor directives so that nesting
	can be figured out. Add PTRACE_SET_SYSCALL to ptrace_cmds[].
	* ioctlent.sh: Improved by Mike Frysinger.
	* HACKING-scripts: New file by Mike Frysinger.

2009-02-20  Denys Vlasenko  <dvlasenk@redhat.com>

	Further signalent.h cleanup.
	* linux/ia64/signalent.h: Remove, it is identical to common signalent.h
	sans "SIGRTnn" definitions which are redundant.
	* linux/powerpc/signalent.h: Remove, it is identical to common signalent.h
	sans outdated "SIGUNUSED" which should be "SIGSYS".
	* linux/s390/signalent.h: Ditto.
	* linux/s390x/signalent.h: Ditto.
	* Makefile.am: Remove references to the above files.

2009-02-20  Denys Vlasenko  <dvlasenk@redhat.com>

	Patch by Mike Frysinger (vapier AT gentoo.org).
	* linux/ioctlent.sh: Update sed machinery to parse _IOC() macros
	with two constants.

2009-02-20  Denys Vlasenko  <dvlasenk@redhat.com>

	Patch by Mike Frysinger (vapier AT gentoo.org).
	* Makefile.am: Remove reference to linux/sh/signalent.h.
	* linux/sh/signalent.h: Remove, it is identical to common signalent.h.

2009-02-20  Denys Vlasenko  <dvlasenk@redhat.com>

	Patch by Mike Frysinger (vapier AT gentoo.org).
	* linux/errnoent.h: Make ERRNO_58 show EDEADLOCK for POWERPC.
	* Makefile.am: Remove reference to linux/powerpc/errnoent.h.
	* linux/powerpc/errnoent.h: Remove, we can use common errnoent.h now.

2009-02-20  Denys Vlasenko  <dvlasenk@redhat.com>

	Patch by Mike Frysinger (vapier AT gentoo.org).
	Removing redundant errnoent.h files.
	* Makefile.am: Remove reference to linux/ia64/errnoent.h,
	linux/s390/errnoent.h, linux/s390x/errnoent.h and linux/sh/errnoent.h.
	* linux/ia64/errnoent.h: Remove, this arch uses common errnoent.h.
	* linux/s390/errnoent.h: Ditto.
	* linux/s390x/errnoent.h: Ditto.
	* linux/sh/errnoent.h: Ditto.

2009-02-10  Roland McGrath  <roland@redhat.com>

	* configure.ac: Check for struct sigcontext.
	* signal.c [LINUX] [M68K] (struct sigcontext): Don't define it if
	[HAVE_STRUCT_SIGCONTEXT].
	From Muttley Meen <muttley.meen@gmail.com>.

2009-02-10  Denys Vlasenko  <dvlasenk@redhat.com>

	Cleanup after tcb table expansion simplification.
	There was code which was trying to continue tracing
	even if table expansion fails. Now we treat it as fatal
	failure, so this code is removed by this change.
	* defs.h: Delete TCB_FOLLOWFORK constant.
	* process.c: Delete fork_tcb() and all calls of it.
	* strace.c (startup_attach): Remove usage of TCB_FOLLOWFORK.
	* syscall.c: Indent preprocessor directives.

2009-02-09  Denys Vlasenko  <dvlasenk@redhat.com>

	* defs.h: Correct the comment about TCB_SUSPENDED.
	* strace.c: Fix misplaced #endif.
	* util.c: Indent preprocessor directives, mark code parts
	which can never be reached by compilation because of
	the combination of #if directives. These are likely dead code,
	I want to remove them later.

2009-01-29  Denys Vlasenko  <dvlasenk@redhat.com>

	* strace.c (newoutf): Prevent -o FILENAME overflowing the stack.
	(startup_attach): Fix wrong pid in "Process <PID> attached".
	(handle_group_exit): Do not consider exit to be spurious if
	tcb has TCB_STARTUP bit set - we can attach to the task
	right before its death, it can legitimately happen.
	(handle_stopped_tcbs): Ditto.

2009-01-28  Denys Vlasenko  <dvlasenk@redhat.com>

	* process.c (internal_clone): Check and complain if pid value
	looks insane.
	* strace.c (alloc_tcb): Clear *all* fields in reused tcb.
	(main): Query and remember uname() info on startup.
	(handle_stopped_tcbs): Do not use PTRACE_SETOPTIONS on Linux < 2.6.29.
	(printleader): Correct printing of "<unavailable>" markers.

2009-01-27  Denys Vlasenko  <dvlasenk@redhat.com>

	* strace.c (collect_stopped_tcbs): Guard against the case when
	waitpid() reports the same task multiple times.

2009-01-26  Denys Vlasenko  <dvlasenk@redhat.com>

	* process.c (printwaitn): Add comment about wait4() pid expansion.
	Use #ifdef ALPHA instead of LINUX_64BIT, it was misleading
	(by implying "any 64-bit platform").
	* defs.h: Remove now-unused LINUX_64BIT define.
	* resource.c (sys_osf_getrusage): Fix indentation.

2009-01-26  Denys Vlasenko  <dvlasenk@redhat.com>

	* process.c (internal_clone): Fix fallout from tcb table expansion
	simplification. Due to overlooked else, I forgot to group
	fork_tcb(tcp) and alloctcb(pid) in a block.

2009-01-23  Michal Nowak  <mnowak@redhat.com>

	* syscall.c (get_scno): Fix warnings about unused variable 'pid'.

2009-01-23  Michal Nowak  <mnowak@redhat.com>

	* mem.c (print_ldt_entry): Fix warning:
	Format '%#08lx' expects type 'long unsigned int', but
	argument 2 was type 'unsigned int'.

2009-01-21  Denys Vlasenko  <dvlasenk@redhat.com>

	* strace.c (collect_stopped_tcbs): Do not return NULL when ECHILD
	is detected, return collected list instead. Fixes symptom when
	the last "+++ killed by SIGxxx +++" is not printed.

2009-01-17  Denys Vlasenko  <dvlasenk@redhat.com>

	Two cleanups: tcb table expansion failure is not really a survivable
	event, we do not have any viable way to continue. No wonder most
	places where that is detected have FIXMEs.
	It's way simpler to treat as fatal failure, and handle it inside
	tcb table expansion finctions.
	Second cleanup: tidy up haphazard locations of a few externs.

	* defs.h: Change return type of expand_tcbtab() to void.
	Declare change_syscall().
	* process.c: Change all callsites of alloctcb(), alloc_tcb() and
	fork_tcb(), removing now-redundant error checks.
	(fork_tcb): Change return type to void - it can't fail now.
	* strace.c: Move extern declarations out of function bodies.
	Change all callsites of alloctcb(), alloc_tcb() and
        fork_tcb(), removing now-redundant error checks.
	(expand_tcbtab): Change return type to void - it can't fail now.
	On failure to expand, print a message, clean up, and exit.
	(alloc_tcb): On failure to expand, print a message, clean up, and exit.
	* util.c (setbpt): Remove extern declaration from function body.

2009-01-17  Denys Vlasenko  <dvlasenk@redhat.com>

	* defs.h: Update a comment. No code changes.
	* strace.c (handle_stopped_tcbs): Discard all execve stops
	and clear TCB_WAITEXECVE bit.
	* syscall.c (get_scno): Add the code to not mistakenly
	treat ptrace stop as execve stop (execve stops can be blocked
	by traced program).
	Fixes RH#477775 "strace hangs if the target process blocks SIGTRAP".

2009-01-17  Denys Vlasenko  <dvlasenk@redhat.com>

	* process.c: Add a comment. No code changes.
	* strace.c (collect_stopped_tcbs): Stop reversing list of stopped
	tcp's. I'm not totally convinced it is crucial, but this is surely
	fits the concept of "least surprise".
	Do not collect TCB_SUSPENDED tcp's (this is closer to how
	it was before).
	(handle_stopped_tcbs): Remove the code to reject TCB_SUSPENDED tcp's,
	it's done earlier now. In an unobvious way, this was causing
	SIGSTOPs from freshly attached children to be misinterpreted.

2009-01-14  Denys Vlasenko  <dvlasenk@redhat.com>

	* linux/bfin/syscallent.h: sys_futex has 6 parameters, not 5.

2009-01-13  Denys Vlasenko  <dvlasenk@redhat.com>

	Fixes for ptrace() argument parsing.
	* process.c: Add parsing of PTRACE_SETOPTIONS, PTRACE_GETEVENTMSG,
	PTRACE_GETSIGINFO, PTRACE_SETSIGINFO.
	* strace.c (handle_stopped_tcbs): Make PTRACE_SETOPTIONS
	define check more robust.
	* defs.h: Declare several "extern const struct xlat" arrays here.
	* desc.c: Remove open_mode_flags[] and open_access_modes[]
	extern declarations.
	* net.c: Remove open_mode_flags[] extern declaration.
	* sock.c: Remove addrfams[] extern declaration.
	* util.c: Remove struct_user_offsets[] extern declaration.
	* signal.c: Remove open_mode_flags[] extern declaration.

2009-01-09  Denys Vlasenko  <dvlasenk@redhat.com>

	* defs.h: Add new struct tcb fields: wait_status, next_need_service.
	make flags field wider (ints are easier to work with on many CPUs).
	* strace.c (trace): Split this function into two:
	collect_stopped_tcbs() and handle_stopped_tcbs().
	Now we collect *all* waitable tasks, then handle them all,
	then repeat.
	Fixes RH#478419 "Some threads stop when strace with -f option
	is executed on a multi-thread process"
	* test/many_looping_threads.c: example program which cna't be straced
	successfully without this fix.

2009-01-06  Denys Vlasenko  <dvlasenk@redhat.com>

	Output format fixes, improving the situation after recent
	change which added beeter handling of processes suddenly
	disappearing. Now we often do not finish last line
	before exiting in those cases.
	The only change affecting something other than output
	is change in umovestr where we were calling
	abort() on ptrace error.

	* strace.c (trace): If trace_syscall() failed with ESRCH,
	finish current output line with " <unfinished ...>".
	(mp_ioctl): While we are at it, fix gross style mismatch
	in this function definition. No code chages.
	* syscall.c (trace_syscall): If decode fails on syscall exit,
	finish current output line with "= ? <unavailable>".
	* util.c (umoven): Do not complain if error is ESRCH.
	(umovestr): Do not complain and do not abort() if error is ESRCH.
	* defs.h: Remove unused tcp parameter from printtrailer().
	* process.c: Adjust printtrailer() calls accordingly.
	* strace.c: Adjust printtrailer() calls accordingly.
	* syscall.c: Adjust printtrailer() calls accordingly.

2009-01-06  Denys Vlasenko  <dvlasenk@redhat.com>

	* desc.c (printflock): Fix display of fcntl(F_SETLK) on
	non-native 32-bit architecture.
	Fixes RH#471169 "format fcntl64() system calls for
	32 bit application incorrect".
	* desc.c: const'ify two static struct xlat vector[]'s,
	convert all remaining old style C parameter declarations
	in this file.

2009-01-02  Denys Vlasenko  <dvlasenk@redhat.com>

	* strace.c: Fix compile failure: on some systems PTRACE_O_xxx
	and PTRACE_EVENT_xxx constants are not defined because
	those system have old kernel headers.
	OTOH, if PT_SETOPTIONS is not defined too,
	I don't risk using ptrace options, the kernel is too old.
	I've seen problems on RHEL4 ia64 when I tried to.

2008-11-13  Kirill A. Shutemov  <kirill@shutemov.name>

	* linux/arm/syscallent.h: Update syscalls.
	Based on patch by Enrico Scholz.

	* linux/arm/syscallent.h: Fix build on ARM EABI which does not
	provide syscalls socketcall and ipc.

2009-01-01  Andreas Schwab  <schwab@suse.de>

	* net.c (sys_accept): Properly decode third argument as pointer to
	int.

2008-12-30  Denys Vlasenko  <dvlasenk@redhat.com>

	Experimental support for -D option.
	Unlike normal case, with -D *grandparent* process exec's,
	becoming a traced process. Child exits (this prevents traced process
	from having children it doesn't expect to have), and grandchild
	attaches to grandparent similarly to strace -p PID.
	This allows for more transparent interaction in cases
	when process and its parent are communicating via signals,
	wait() etc. Without -D, strace process gets lodged in between,
	disrupting parent<->child link.
	* strace.c: Add global flag variable daemonized_tracer for -D option.
	(startup_attach): If -D, fork and block parent in pause().
	In this case we are already a child, we in fact created a grandchild.
	After attaching to grandparent, grandchild SIGKILLs parent.
	(startup_child): If -D, parent blocks in wait(), then
	execs the program to strace. Normally (w/o -D), it is child
	who execs the program.
	(main): Detect -D option, call startup_attach() if it is given.

2008-12-30  Kirill A. Shutemov  <kirill@shutemov.name>

	Fix some warnings on ARM build.
	* defs.h: include <sys/ptrace.h> on arm too.
	* syscall.c: EABI arm does not need decode_subcall(),
	ifdef it out.

2008-12-29  Nick Black  <dankamongmen@acm.org>

	* linux/syscallent.h: Mark sendfile(2) as network syscall.
	* linux/*/syscallent.h: Same, for all architectures.

2008-12-29  Denys Vlasenko  <dvlasenk@redhat.com>

	* defs.h: Remove sigtrap80 field from struct tcb.
	* strace.c: Add ptrace_stop_sig static variable
	and use it in place of tcp->sigtrap80.
	Add ptrace_opts_set static flag variable.
	(trace): Set ptrace options once, not per-process.
	If unexpected SIGTRAP is later received,
	revert back to using SIGTRAP
	(assume old, broken kernel).

2008-12-22  Denys Vlasenko  <dvlasenk@redhat.com>

	Make strace correctly handle SIGTRAP produced by e.g.
	kill(2) and by trapping instruction.
	* defs.h: Add sigtrap80 field to struct tcb.
	* strace.c (alloc_tcb): Initialize it to SIGTRAP.
	(detach): Use tcp->sigtrap80 instead of SIGTRAP constant.
	(trace): Attempt to set PTRACE_O_TRACESYSGOOD and
	PTRACE_O_TRACEEXEC options on each newly attached process,
	distinquish between SIGTRAP and (SIGTRAP | 0x80) stops.
	Fixes RH#162774 "strace ignores int3 SIGTRAP".

2008-12-17  Denys Vlasenko  <dvlasenk@redhat.com>

	Make strace detect when traced process suddenly disappeared
	(prime example is randomly arriving SIGKILL).
	* defs.h (do_ptrace, ptrace_restart): Declare new functions
	* process.c: Use ptrace_restart instead of bare ptrace.
	This catches and records ESRCH errors.
	Print "<unavailable>" if syscall decode or result can't be
	determined because of an earlier error in ptrace()
	* syscall.c (trace_syscall): Stop indiscriminately bailing out
	on errors, print "syscall(????" or even "????(????" but continue.
	* util.c (do_ptrace, ptrace_restart): Define new functions.
	(upeek): use do_ptrace in order to catch and record ESRCH.
	Do not print error message in this case.
	Fixes RH#472053.

2008-12-17  Denys Vlasenko  <dvlasenk@redhat.com>

	* signal.c (sys_sigaction, sys_rt_sigaction): Fix typo
	in (sa_handler == SIG_IGN) comparison, it was using SIG_DFL
	instead.

2008-12-16  Denys Vlasenko  <dvlasenk@redhat.com>

	* defs.h: Modify declaration of upeek to take struct tcb *
	parameter instead of pid_t.
	* process.c: Change all upeek calls accordingly.
	* signal.c: Likewise.
	* strace.c: Likewise.
	* syscall.c: Likewise.
	* util.c: Likewise.

2008-11-11  Dmitry V. Levin  <ldv@altlinux.org>

	* sock.c [LINUX] (sock_ioctl): Parse more SIOCS* ioctls.

2008-12-09  Roland McGrath  <roland@redhat.com>

	* strace.1 (DIAGNOSTICS): New section, describe exit behavior.

2008-11-09  Dmitry V. Levin  <ldv@altlinux.org>

	* process.c (prctl_options): Update constants from linux 2.6.27.
	* system.c (capabilities): Add more capability values.

	* util.c (string_quote): Fix support for NUL-terminated string.
	Add comments.
	(printpathn): Fix the case when "..." was appended to the output
	but no truncation was actually made.  Add comments.
	(printstr): Fix memory allocation.  Fix two cases when "..." was
	appended to the output but no truncation was actually made.
	Add comments.
	Fixes RH#470529.

2008-10-23  Dmitry V. Levin  <ldv@altlinux.org>

	Implement parsers for new linux syscalls.
	* desc.c (do_dup2, [LINUX] sys_dup3): New functions.
	(sys_dup2): Use do_dup2.
	[LINUX] (sys_epoll_create1): New function.
	[LINUX] (do_eventfd, sys_eventfd2): New functions.
	[LINUX] (sys_eventfd): Use do_eventfd.
	* net.c (do_pipe, [LINUX] sys_pipe2): New functions.
	(sys_pipe): Use do_pipe.
	* signal.c [LINUX] (do_signalfd, sys_signalfd4): New functions.
	[LINUX] (sys_signalfd): Use do_signalfd.
	* linux/syscall.h: Declare new sys_* functions.
	* linux/syscallent.h: Hook up signalfd4, eventfd2, epoll_create1,
	dup3, pipe2, inotify_init1.
	* linux/x86_64/syscallent.h: Hook up paccept, signalfd4, eventfd2,
	epoll_create1, dup3, pipe2, inotify_init1.

2008-10-23  Mike Frysinger  <vapier@gentoo.org>

	Port strace to the Blackfin architecture.
	* configure.ac: Add bfin to supported architectures.
	* process.c: Skip u_fpvalid/u_fpstate for Blackfin architecture.
	(change_syscall): Support Blackfin architecture.
	* syscall.c: Declare r0 for Blackfin architecture.
	(get_scno): Decode Blackfin syscall number.
	(syscall_fixup): Extract Blackfin return value.
	(get_error): Decode Blackfin return value.
	(force_result): Poke Blackfin return value.
	(syscall_enter): Extract Blackfin syscall arguments.
	* defs.h: Define TCB_WAITEXECVE for Blackfin architecture.
	* linux/syscall.h (sys_sram_alloc): Declare for Blackfin
	architecture.
	* system.c (sys_sram_alloc): Decode Blackfin sram_alloc() syscall.
	* util.c (getpc): Handle PC on Blackfin architecture.
	(printcall): Likewise.
	* linux/bfin/ioctlent.h, linux/bfin/syscallent.h: New Blackfin
	headers.
	* Makefile.am (EXTRA_DIST): Add linux/bfin/ioctlent.h and
	linux/bfin/syscallent.h.

2008-09-18  Mike Frysinger  <vapier@gentoo.org>

	* configure.ac: Accept uclinux hosts as linux.

2008-10-22  Dmitry V. Levin <ldv@altlinux.org>

	Handle socket type flags introduced in linux 2.6.27.
	* net.c (socktypes): Add SOCK_DCCP.
	(sock_type_flags): New xlat structure.
	(tprint_sock_type): New function.
	(sys_socket, sys_socketpair): Use it to parse socket type and
	socket type flags.

2008-09-29  Dmitry V. Levin <ldv@altlinux.org>

	* strace.c (startup_child): Save child pid for future use.
	(main): Exit/kill ourself with straced child's exitcode/signal.
	(trace): If signalled process pid matches the saved child pid,
	save the signal number.  If terminated process pid matches the
	saved child pid, save its exit status.
	Patch from Denys Vlasenko <dvlasenk@redhat.com>
	Fixes RH#105371.

2008-09-12  Tomas Pospisek  <tpo@sourcepole.ch>
	    Jan Kratochvil  <jan.kratochvil@redhat.com>

	* strace.1 (DESCRIPTION): New description of unfinished system calls
	and system calls restarting.

2008-09-03  Dmitry V. Levin <ldv@altlinux.org>

	* desc.c (sys_fcntl): Do not initialize auxstr for failed syscall.
	* process.c (sys_fork, sys_rfork) [USE_PROCFS]: Likewise.
	* signal.c (sys_signal): Likewise.
	* stream.c (internal_stream_ioctl): Likewise.
	* time.c (sys_adjtimex): Likewise.
	* syscall.c (trace_syscall): If RVAL_STR is set, then
	print auxstr for failed syscall as well.

	* syscall.c (is_restart_error): New function.
	* defs.h (is_restart_error): Declare it.

	* linux/dummy.h (sys_nanosleep): Uncouple from sys_adjtime().
	* time.c (sys_nanosleep): New function, based on is_restart_error().

	* process.c (sys_prctl): Decode PR_SET_PDEATHSIG, PR_GET_PDEATHSIG,
	PR_SET_DUMPABLE, PR_GET_DUMPABLE, PR_SET_KEEPCAPS, PR_GET_KEEPCAPS.
	Fix PR_GET_UNALIGN decoder.
	(prctl_options): Add more constants.

	* linux/syscallent.h: Use sys_prctl() decoder for "prctl" syscall.
	* linux/alpha/syscallent.h: Likewise.
	* linux/arm/syscallent.h: Likewise.
	* linux/m68k/syscallent.h: Likewise.
	* linux/powerpc/syscallent.h: Likewise.
	* linux/s390/syscallent.h: Likewise.
	* linux/s390x/syscallent.h: Likewise.
	* linux/sh/syscallent.h: Likewise.
	* linux/sh64/syscallent.h: Likewise.
	* linux/x86_64/syscallent.h: Likewise.

2008-09-02  Dmitry V. Levin <ldv@altlinux.org>

	* linux/x86_64/syscallent.h: Fix syscall numbers for "tee" and
	"sync_file_range".
	From Fernando Luis Vazquez Cao <fernando@oss.ntt.co.jp>

2008-08-28  Roland McGrath  <roland@redhat.com>

	* strace.1 (BUGS): New section, mention SIGTRAP interference.

	* strace.spec (%ifarch %{strace64_arches}): Use cp -p instead of ln
	for %{rhel} < 6.

	* configure.ac, NEWS: Version 4.5.18.
	* strace.spec: 4.5.18-1.

2008-08-24  Roland McGrath  <roland@redhat.com>

	* linux/syscall.h (SYS_socket_subcall et al, SYS_ipc_subcall et al):
	Don't define these if [__ARM_EABI__].
	Reported by Johannes Stezenbach <js@sig21.net>.

	* syscall.c (trace_syscall): Conditionalize on [SYS_socket_subcall]
	and [SYS_ipc_subcall] individually.

	* linux/powerpc/syscallent.h: Handle subpage_prot.
	* mem.c [LINUX && POWERPC] (sys_subpage_prot): New function.
	* linux/syscall.h [POWERPC]: Declare it.
	From Simon Murray <simon@transitive.com>.

	* mem.c (mmap_prot): Handle PROT_SAO.
	From Simon Murray <simon@transitive.com>.

	* mem.c (madvise_flags): Typo fixes.  Rename to madvise_cmds.
	(sys_madvise): Use printxval, not printflags.
	Reported by Rajeev V. Pillai <rajeevvp@gmail.com>.

2008-08-19  Roland McGrath  <roland@redhat.com>

	* signal.c (sys_sigaction, sys_rt_sigaction): Don't omit the rest of
	the struct after sa_handler is a known constant.  Some sa_flags bits
	have meaning even for SIG_IGN/SIG_DFL.

2008-08-06  Jan Kratochvil  <jan.kratochvil@redhat.com>

	* util.c (CLONE_VM): Define if not defined already.
	(setbpt): Clear CLONE_VM in the case we already clear CLONE_VFORK for
	SYS_clone and SYS_clone2.
	Reported by Michal Nowak.
	Fixes RH#455078.

2008-08-06  Jan Kratochvil  <jan.kratochvil@redhat.com>

	Fix compiler warnings.
	* signal.c (sys_signal): Cast to SIG_* to the matching type LONG.
	* strace.c (trace): Variables PSR and PC are now signed.
	* syscall.c (syscall_enter): Variable RBS_END is now signed long.
	Remove/add the RBS_END casts appropriately.
	* util.c [IA64] (arg_setup): Variable BSP is now signed long.
	Remove/add the BSP casts appropriately.
	<ia32>: Initialize *STATE.

2008-07-31  Roland McGrath  <roland@redhat.com>

	* Makefile.am (EXTRA_DIST): Add new linux/arm/ files.

	* file.c [LINUX] (struct kernel_dirent): Define it locally,
	do not use <linux/dirent.h>.
	Fixes RH#457291.

	* configure.ac: Add AC_HEADER_STDBOOL.
	* defs.h [HAVE_STDBOOL_H]: #include <stdbool.h>.
	Fixes Debian#492774.

2008-07-24  Dmitry V. Levin <ldv@altlinux.org>

	* strace.c (main): Fix -F option backwards compatibility.

2008-07-22  Roland McGrath  <roland@redhat.com>

	* Makefile.am (EXTRA_DIST): Add new debian/ files.

2008-07-21  Roland McGrath  <roland@redhat.com>

	* configure.ac: Version 4.5.17.
	* strace.spec: 4.5.17-1.

	* defs.h [LINUXSPARC]: Don't #include <linux/a.out.h>.

2008-07-19  Frederik Schüler <fs@debian.org>

	* debian/control: Add strace64 package.
	* debian/rules: Use debhelper flag --same-arch instead of --arch in
	order to build strace64 only on the specified architectures.
	* debian/strace64.install: New file, list for dh_install.
	* debian/strace64.manpages: New file, list for dh_install.
	* debian/changelog: Add prereleases entries.
	Fixes Debian#491167, Debian#491188.

2008-07-18  Andreas Schwab  <schwab@suse.de>

	* linux/ia64/syscallent.h: Decode mincore syscall.

	* linux/powerpc/syscallent.h: Fix argument count for request_key.

	* term.c (term_ioctl): Decode indirect parameter as int, not long.

2008-07-17  Roland McGrath  <roland@redhat.com>

	* NEWS, strace.spec: Updates in preparation for release.

	* process.c (printwaitn): When current personality's wordsize is
	smaller than native, sign-extend the PID argument from 32 bits.

	* process.c (futexops): Update table.
	(sys_futex): Handle FUTEX_WAIT_BITSET correctly.
	From Ulrich Drepper <drepper@redhat.com>.
	Fixes RH#448628.

	* linux/syscallent.h: Fix "futex" argument count.
	* linux/alpha/syscallent.h: Likewise.
	* linux/arm/syscallent.h: Likewise.
	* linux/hppa/syscallent.h: Likewise.
	* linux/ia64/syscallent.h: Likewise.
	* linux/m68k/syscallent.h: Likewise.
	* linux/powerpc/syscallent.h: Likewise.
	* linux/s390/syscallent.h: Likewise.
	* linux/s390x/syscallent.h: Likewise.
	* linux/sparc/syscallent.h: Likewise.
	* linux/x86_64/syscallent.h: Likewise.
	From Ulrich Drepper <drepper@redhat.com>.
	Fixes RH#448629.

	* signal.c (sigact_flags): Prefer SA_NODEFER to SA_NOMASK,
	SA_RESETHAND to SA_ONESHOT.
	Fixes RH#455821.

2008-07-09  Frederik Schüler <fs@debian.org>

	* debian/rules: Remove the broken udeb creation routines, and redo the
	complete install procedure using debhelper.
	* debian/strace.docs: New file, list for dh_installdocs.
	* debian/strace.examples: New file, list for dh_installexamples.
	* debian/strace.install: New file, list for dh_install.
	* debian/strace-udeb.install: New file, list for dh_install.
	* debian/strace.manpages : New file, list for dh_installmanpages.
	* debian/copyright: Update.
	* debian/control: Fix libc6 build dependency for alpha and ia64.
	(strace-udeb: XC-Package-Type): Add header.
	* debian/changelog: Cosmetic changes.

2008-07-03  Jan Kratochvil  <jan.kratochvil@redhat.com>

	Trace vfork under -f on all the platforms.
	* strace.1 <-f>: Describe Linux catches new children immediately.
	<-F>: Make the option obsolete.  Move the SunOS VFORK comment to the
	`-f' option description.
	* defs.h (followvfork): Declaration removed.
	* strace.c (followvfork): Variable removed.
	(main) <-F>: Merge with the `-f' option.
	(trace): Make !FOLLOWVFORK unconditional.
	* process.c (internal_fork): Make !FOLLOWVFORK unconditional.

2008-07-01  Frederik Schüler <fs@debian.org>

	* debian/changelog: List all bugs closed since the last release.
	* debian/control: Remove Wichert Akkerman from uploaders list.
	* debian/control: Bump standards version to 3.8.0.
	* debian/control: Add Homepage field.
	* debian/rules: Fix dpkg-gencontrol call.
	* debian/compat: New file, set to compatibility level 5.
	* debian/rules: Call dh_clean on clean target.
	* debian/rules: Add dh_md5sums call.
	Fixes Debian#439428.

2008-06-30  Jan Kratochvil  <jan.kratochvil@redhat.com>

	Fix ia64 `-f' on clone2 formerly crashing the child.
	* util.c [IA64] (restore_arg0, restore_arg1): Define as empty.
	Fixes RH#453438.

2008-06-27  Jan Kratochvil  <jan.kratochvil@redhat.com>

	* util.c (CLONE_VFORK): Define if not defined already.
	(setbpt): Clear CLONE_VFORK for SYS_clone and SYS_clone2.
	Reported by Vitaly Mayatskikh.
	Fixes RH#455078.

2008-06-29  Dmitry V. Levin <ldv@altlinux.org>

	* linux/x86_64/syscallent.h: Remove duplicate syscall entries
	for #283 and #284.

2008-06-27  Jan Kratochvil  <jan.kratochvil@redhat.com>

	* linux/syscallent.h: Remove a duplicite syscall stub #326.

2008-05-27  Roland McGrath  <roland@redhat.com>

	* syscall.c [LINUX] (is_negated_errno): New function.
	(get_error) [LINUX]: Use it for all such cases.
	Fixes RH#447587.

2008-05-19  Roland McGrath  <roland@redhat.com>

	* linux/x86_64/syscallent.h: Update entries for timerfd_* and fallocate.

	* file.c (sys_fallocate): New function.
	* linux/syscall.h: Declare it.
	* linux/syscallent.h: Update entry.
	From Kyle McMartin <kyle@mcmartin.ca>.

	* time.c (sys_timerfd_create): New function.
	(sys_timerfd_settime, sys_timerfd_gettime): New functions.
	* linux/syscall.h: Declare them.
	* linux/syscallent.h: Update entries for those syscalls.
	From Kyle McMartin <kyle@mcmartin.ca>.

	* debian/rules (binary-arch): Fix chmod/chown typo.
	Fixes Debian#459255.

	* debian/rules (binary-arch): Install strace-graph in examples/
	directory under package doc.
	Fixes Debian#469068.

	* signal.c (sys_kill): When current personality's wordsize is smaller
	than native, sign-extend the PID argument from 32 bits.
	Fixes RH#430585.

	* configure.ac: Add check for struct sigcontext_struct in <signal.h>.
	* signal.c [! HAVE_ASM_SIGCONTEXT_H] [I386] (struct sigcontext_struct):
	Conditionalize definition on !HAVE_STRUCT_SIGCONTEXT_STRUCT.
	Fixes Debian#456879.

	* util.c [LINUX] (setbpt): Use correct SYS_clone number for current
	personality.
	Fixes RH#447475.

2008-05-08  David S. Miller  <davem@davemloft.net>

	* syscall.c (socket_map, sparc_socket_decode): Delete.
	(trace_syscall): Use common socketcall and ipc subcall
	support on sparc.
	* linux/sparc/syscall.h (sys_semtimedop): Declare.
	(SYS_socket_subcall, SYS_sub_socket, SYS_sub_bind,
	SYS_sub_connect, SYS_sub_listen, SYS_sub_accept,
	SYS_sub_getsockname, SYS_sub_getpeername,
	SYS_sub_socketpair, SYS_sub_send, SYS_sub_recv,
	SYS_sub_sendto, SYS_sub_recvfrom, SYS_sub_shutdown,
	SYS_sub_setsockopt, SYS_sub_getsockopt, SYS_sub_sendmsg,
	SYS_sub_recvmsg, SYS_socket_nsubcalls, SYS_ipc_subcall,
	SYS_sub_semop, SYS_sub_semget, SYS_sub_semctl,
	SYS_sub_semtimedop, SYS_sub_msgsnd, SYS_sub_msgrcv,
	SYS_sub_msgget, SYS_sub_msgctl, SYS_sub_shmat,
	SYS_sub_shmdt, SYS_sub_shmget, SYS_sub_shmctl,
	SYS_ipc_nsubcalls): Define
	* linux/sparc/syscallent.h: Add socketcall and ipc entries.

2008-01-25  Bruna Moreira  <bruna.moreira@indt.org>

	* defs.h [ARM]: Define SUPPORTED_PERSONALITIES to 2.
	* syscall.c (get_scno) [ARM]: Add support for architecture specific
	syscalls.
	* linux/arm/syscallent.h: Update network syscalls list.
	* linux/arm/syscallent1.h: New file. Add new architecture specific
	syscalls.
	* linux/arm/errnoent1.h: New file.
	* linux/arm/ioctlent1.h: New file.
	* linux/arm/signalent1.h: New file.
	Fixes Debian#441000.

2008-01-07  Paul Mundt  <lethal@linux-sh.org>

	* linux/sh64/syscallent.h: Update numerous calls, fix others.

2007-08-26  Daniel Jacobowitz  <dan@codesourcery.com>

	* defs.h [MIPS]: Include <sgidefs.h>.
	(MAX_QUALS): Update for MIPS.
	(LINUX_MIPSO32, LINUX_MIPSN32, LINUX_MIPSN64, LINUX_MIPS64): Define.
	(struct tcb): Add ext_arg for MIPS N32.
	(TCB_WAITEXECVE): Define for MIPS.
	(ALIGN64): Use LINUX_MIPSO32.
	* file.c (sys_lseek): Use ext_arg for MIPS N32.
	(sys_readahead, sys_fadvise64_64): Likewise.
	* io.c (sys_pread64, sys_pwrite64): Likewise.
	* mem.c (print_mmap): Take OFFSET argument.
	(sys_old_mmap): Update call to print_mmap.
	(sys_mmap): Use ext_arg for MIPS N32.
	* process.c (struct_user_offsets): Add MIPS registers.
	* signal.c (sys_sigreturn): Handle MIPS N32 and MIPS N64.  Correct
	MIPS O32 call to sprintsigmask.
	* syscall.c (internal_syscall): Handle MIPS N32.  Check for
	TCB_WAITEXECVE on MIPS.
	(force_result): Add a comment about MIPS N32.
	(syscall_enter): Handle MIPS N32 and MIPS N64.
	* linux/syscall.h (sys_pread64, sys_pwrite64): Declare.
	* linux/mips/syscallent.h: Include "dummy.h".  Handle alternate
	MIPS ABIs.

2008-04-19  Dmitry V. Levin <ldv@altlinux.org>

	* file.c [_LFS64_LARGEFILE] (sys_getdents64): Do the same
	d_reclen check as in sys_getdents: warn if d_reclen is 0 rather
	than looping forever.
	[FREEBSD] (sys_getdirentries): Likewise.
	Signed-off-by: Mike Frysinger <vapier@gentoo.org>

	* file.c [LINUXSPARC] (printstatsol): Fix sprinttime()
	invocation.  The sprinttime() function takes a time_t argument,
	but timestruct_t argument was given.
	Signed-off-by: Mike Frysinger <vapier@gentoo.org>

	* file.c (sprinttime): Check localtime() return value, to avoid
	potential NULL dereference due to invalid time structures.
	Signed-off-by: Harald van Dijk <truedfx@gentoo.org>
	Signed-off-by: Mike Frysinger <vapier@gentoo.org>

	* linux/errnoent.h: Update errno list based on latest
	linux/errno.h and asm-generic/errno*.h files.
	Signed-off-by: Mike Frysinger <vapier@gentoo.org>

	* signalent.sh: Fix sort(1) old-style options.
	* syscallent.sh: Likewise.
	Signed-off-by: Mike Frysinger <vapier@gentoo.org>

	* count.c (call_summary_pers): Check calloc() return value.
	Signed-off-by: "Yang Zhiguo" <yzgcsu@cn.fujitsu.com>

2008-03-26  Roland McGrath  <roland@redhat.com>

	* strace.spec (strace64_arches): Add sparc64.

2007-11-20  Roland McGrath  <roland@redhat.com>

	* CREDITS, ChangeLog: Converted contents to UTF8.

2007-11-19  Roland McGrath  <roland@redhat.com>

	* strace.spec: Add BuildRequires on libaio-devel, libacl-devel.

2007-11-19  Andreas Schwab  <schwab@suse.de>

	* process.c (sys_ptrace) [IA64]: For PTRACE_PEEKDATA,
	PTRACE_PEEKTEXT and PTRACE_PEEKUSER the data is returned directly.

	* linux/syscallent.h: Fix argument count for getdents64.
	* linux/arm/syscallent.h: Likewise.
	* linux/m68k/syscallent.h: Likewise.
	* linux/x86_64/syscallent.h: Likewise.

	* linux/ia64/syscallent.h: Use sys_getdents64.
	* linux/sh/syscallent.h: Likewise.

2007-11-06  Jan Kratochvil  <jan.kratochvil@redhat.com>

	* strace.c [LINUX] (droptcb): Recurse on TCP->parent if it is a
	TCB_EXITING zombie group leader.
	* test/childthread.c: New file.
	* test/.cvsignore, test/Makefile: Add it.
	Code advisory: Roland McGrath
	Fixes RH#354261.

2007-11-03  Roland McGrath  <roland@redhat.com>

	* process.c (prctl_options): Add numerous constants.
	From Sami Farin <safari@u.safari.iki.fi>.
	Fixes RH#364401.

2007-11-03  Jan Kratochvil  <jan.kratochvil@redhat.com>

	* strace.c (main): Move the STARTUP_CHILD call before setting up the
	signal handlers.  New comment about the valid internal states.

2007-11-02  Thiemo Seufer  <ths@networkno.de>

	* signal.c (m_siginfo_t): Add for MIPS.
	(sys_sigreturn): struct sigcontext on MIPS has no sigset_t member,
	acquire the signal mask with the same trick as on Sparc.
	Fixes Debian#448802.

2007-11-01  Roland McGrath  <roland@redhat.com>

	* util.c (string_quote): Return nonzero if the string was unterminated.
	(printstr): Use that value instead of just our own test.
	(printpathn): Likewise.
	Fixes RH#358241.

	* linux/mips/syscallent.h: Fix argument count for fadvise64_64.
	From Paul Mundt <lethal@linux-sh.org>.

	* linux/mips/syscallent.h: Fix argument count for lookup_dcookie.
	From Paul Mundt <lethal@linux-sh.org>.

	* linux/sh64/syscallent.h: Fix SYS_socket_subcall check.
	From Paul Mundt <lethal@linux-sh.org>.

	* linux/sh/syscallent.h: Update numerous calls.
	From Paul Mundt <lethal@linux-sh.org>.

2007-09-22  Dmitry V. Levin <ldv@altlinux.org>

	* desc.c (sys_pselect6): Decode signal mask when entering syscall.
	Relax signal mask size check.

	* time.c (print_timespec, sprint_timespec): New functions.
	* defs.h (print_timespec, sprint_timespec): Declare them.
	* desc.c (sys_io_getevents): Use print_timespec.
	* stream.c (sys_ppoll): Likewise.
	(decode_poll): Use sprint_timespec.

2007-09-22  Alan Curry <pacman@world.std.com>
	    Dmitry V. Levin <ldv@altlinux.org>

	* stream.c (decode_poll): Rearrange so that arguments are decoded
	and printed on syscall entry, except for revents and the output
	timespec which are now printed in the auxstr.
	(sys_poll): Print the input timeout argument on syscall entry.
	[LINUX] (sys_ppoll): Likewise.
	Fixes Debian#369651.

2007-09-22  Dmitry V. Levin <ldv@altlinux.org>

	* desc.c (sprintflags): Remove static qualifier, add "prefix"
	argument, move function to ...
	* util.c (sprintflags): ... here.
	* defs.h (sprintflags): Declare it.

2007-11-01  Roland McGrath  <roland@redhat.com>

	* syscall.c (get_scno) [ARM]: Check TCB_WAITEXECVE.
	Reported by Bernhard Fischer <rep.dot.nop@gmail.com>.

	* net.c (sockpacketoptions): Make PACKET_ADD_MEMBERSHIP and
	PACKET_DROP_MEMBERSHIP conditional.
	From Bernhard Fischer <rep.dot.nop@gmail.com>.

	* configure.ac: Match sh64* for SH64, sh* for SH.
	Reported by Bernhard Fischer <rep.dot.nop@gmail.com>.

2007-10-01  Dmitry V. Levin <ldv@altlinux.org>

	* net.c (printsock): Output AF_UNIX socket address using
	printpathn() to avoid unprintable characters in output.
	Suggested by Neil Campbell.

2007-10-01  Dmitry V. Levin <ldv@altlinux.org>

	* util.c (string_quote): Move quoting code from ...
	(printstr) ... here.  Use string_quote.
	(printpathn): Update for new string_quote interface.
	(printpath): Use printpathn.

2007-09-25  Dmitry V. Levin <ldv@altlinux.org>

	* strace.c (main): Use calloc for tcbtab allocation.
	Check calloc return value.
	Reported by Bai Weidong.

2007-09-11  Roland McGrath  <roland@redhat.com>

	* linux/sparc/syscall.h: Add missing decls.
	* linux/sparc/syscallent.h: Correct entries for setgroups32,
	getgroups32, sys_getdents64.
	From Jakub Bogusz <qboosh@pld-linux.org>.

	* linux/alpha/syscallent.h: Correct entries for madvise, setresgid,
	getresgid, pivot_root, mincore, pciconfig_iobase, getdents64.
	From Jakub Bogusz <qboosh@pld-linux.org>.

	* linux/syscallent.h: Fix getegid32 entry.
	From Jakub Bogusz <qboosh@pld-linux.org>.

	* defs.h [LINUXSPARC]: Use asm/psrcompat.h for [SPARC64], not asm/psr.h.
	From Jakub Bogusz <qboosh@pld-linux.org>.

	* mem.c (sys_getpagesize): Define for [SPARC || SPARC64] too.
	From Jakub Bogusz <qboosh@pld-linux.org>.

2007-08-20  Dmitry V. Levin <ldv@altlinux.org>

	* syscall.c (qual_syscall, qualify): Fix nsyscalls and MAX_QUALS misuse.
	Reported by Xiaoning Ding.

2007-08-06  Jan Kratochvil  <jan.kratochvil@redhat.com>
	    Roland McGrath  <roland@redhat.com>

	* file.c [!HAVE_STAT64 && LINUX && X86_64] (struct stat64): Define it.
	[!HAVE_STAT64 && LINUX && X86_64] (HAVE_STAT64, STAT64_SIZE): Define.
	[HAVE_STAT64] (printstat64) [STAT64_SIZE]: Add compile-time assertion.
	Fixes RH#222275.

	* file.c (printstat64): Test [HAVE_LONG_LONG] for st_size printing
	and cast to widest type available.

2007-08-03  Ulrich Drepper  <drepper@redhat.com>

	* file.c (open_mode_flags): Add O_CLOEXEC.
	* net.c (msg_flags): Add MSG_CMSG_CLOEXEC.
	Fixes RH#365781.

2007-08-03  Roland McGrath  <roland@redhat.com>

	* configure.ac, NEWS: Version 4.5.16.
	* debian/changelog, strace.spec: 4.5.16-1.

	* debian/control (Build-Depends): Replace libc6-dev-s390x and
	libc6-dev-sparc64 with gcc-multilib.
	* debian/rules: Replace sparc-linux, s390-linux conditionals with
	general "arch64_map" hair, handle x86_64 and powerpc64 too.
	From Matthias Klose <doko@cs.tu-berlin.de>.
	Fixes Debian#435303.

2007-08-02  Jan Kratochvil  <jan.kratochvil@redhat.com>

	* strace.c (detach): Moved the resume notification code to ...
	(resume_from_tcp): ... a new function here.
	(handle_group_exit): No longer detach also the thread group leader.
	(trace): Fixed panic on exit of the TCB_GROUP_EXITING leader itself.
	Fixes RH#247907.

	* test/leaderkill.c (start): Renamed to ...
	(start0): ... here.
	(start1): New function.
	(main): Created a new spare thread.

2007-08-01  Roland McGrath  <roland@redhat.com>

	* util.c (umoven): Don't perror for EIO.
	(umovestr): Likewise.

	* process.c (printargv): Handle boundary cases correctly.
	Handle biarch fetching correctly.

	* util.c (printstr): Don't print ... if the string matches the length
	limit exactly.

	* linux/sparc64/syscallent.h: Just #include the sparc file.
	* linux/sparc64/syscallent1.h: Likewise.
	* linux/sparc64/syscallent2.h: Likewise.

	* linux/arm/syscallent.h: Add entry for getcpu.
	* linux/hppa/syscallent.h: Likewise.
	* linux/ia64/syscallent.h: Likewise.
	* linux/mips/syscallent.h: Likewise.
	* linux/powerpc/syscallent.h: Likewise.
	* linux/s390/syscallent.h: Likewise.
	* linux/s390x/syscallent.h: Likewise.
	* linux/sh/syscallent.h: Likewise.
	* linux/sh64/syscallent.h: Likewise.
	* linux/sparc/syscallent.h: Likewise.
	* linux/sparc64/syscallent.h: Likewise.

	* linux/arm/syscallent.h: Add entry for eventfd.
	* linux/ia64/syscallent.h: Likewise.
	* linux/mips/syscallent.h: Likewise.
	* linux/powerpc/syscallent.h: Likewise.
	* linux/s390/syscallent.h: Likewise.
	* linux/s390x/syscallent.h: Likewise.
	* linux/sh/syscallent.h: Likewise.
	* linux/sh64/syscallent.h: Likewise.
	* linux/sparc/syscallent.h: Likewise.
	* linux/sparc64/syscallent.h: Likewise.

	* linux/arm/syscallent.h: Add entry for timerfd.
	* linux/ia64/syscallent.h: Likewise.
	* linux/mips/syscallent.h: Likewise.
	* linux/powerpc/syscallent.h: Likewise.
	* linux/s390/syscallent.h: Likewise.
	* linux/s390x/syscallent.h: Likewise.
	* linux/sh/syscallent.h: Likewise.
	* linux/sh64/syscallent.h: Likewise.
	* linux/sparc/syscallent.h: Likewise.
	* linux/sparc64/syscallent.h: Likewise.

	* linux/arm/syscallent.h: Add entry for signalfd.
	* linux/ia64/syscallent.h: Likewise.
	* linux/mips/syscallent.h: Likewise.
	* linux/powerpc/syscallent.h: Likewise.
	* linux/s390/syscallent.h: Likewise.
	* linux/s390x/syscallent.h: Likewise.
	* linux/sh/syscallent.h: Likewise.
	* linux/sh64/syscallent.h: Likewise.
	* linux/sparc/syscallent.h: Likewise.
	* linux/sparc64/syscallent.h: Likewise.

	* linux/hppa/syscallent.h: Add entry for epoll_pwait.
	* linux/ia64/syscallent.h: Likewise.
	* linux/mips/syscallent.h: Likewise.
	* linux/powerpc/syscallent.h: Likewise.
	* linux/s390/syscallent.h: Likewise.
	* linux/s390x/syscallent.h: Likewise.
	* linux/sh/syscallent.h: Likewise.
	* linux/sh64/syscallent.h: Likewise.
	* linux/sparc/syscallent.h: Likewise.
	* linux/sparc64/syscallent.h: Likewise.

2007-07-23  Ulrich Drepper  <drepper@redhat.com>

	* process.c (sys_getcpu): New function.
	* linux/syscall.h: Declare sys_getcpu.
	* linux/syscallent.h: Add entry for getcpu.

	* desc.c (sys_eventfd): New function.
	* linux/syscall.h: Declare sys_eventfd.
	* linux/syscallent.h: Add entry for eventfd.
	* linux/x86_64/syscallent.h: Likewise.

	* time.c (printitv_bitness): Add missing braces to enclose
	conditional code.
	(TDF_TIMER_ABSTIME): Define if not already.
	(timerfdflags): New variable.
	(sys_timerfd): New function.
	* linux/syscall.h: Declare sys_timerfd.
	* linux/syscallent.h: Add timerfd entry.
	* linux/x86_64/syscallent.h: Likewise.

	* linux/syscall.h: Declare sys_signalfd.
	* linux/syscallent.h: Add entry for signalfd.
	* linux/x86_64/syscallent.h: Likewise.
	* signal.c (sys_signalfd): New function.

	* desc.c (sys_epoll_wait): Move body of function to ...
	(epoll_wait_common): ...here.  New function.
	(sys_epoll_pwait): New function.
	* linux/syscall.h: Declare sys_epoll_pwait.
	* linux/syscallent.h: Add entry for epoll_pwait.
	* linux/x86_64/syscallent.h: Likewise.

2007-07-23  Roland McGrath  <roland@redhat.com>

	* time.c (printtv_bitness): SPECIAL only counts when tv_sec == 0.

	* linux/arm/syscallent.h: Add move_pages.
	* linux/hppa/syscallent.h: Likewise.
	* linux/ia64/syscallent.h: Likewise.
	* linux/m68k/syscallent.h: Likewise.
	* linux/mips/syscallent.h: Likewise.
	* linux/powerpc/syscallent.h: Likewise.
	* linux/s390/syscallent.h: Likewise.
	* linux/s390x/syscallent.h: Likewise.
	* linux/sh/syscallent.h: Likewise.
	* linux/sh64/syscallent.h: Likewise.
	* linux/sparc/syscallent.h: Likewise.
	* linux/sparc64/syscallent.h: Likewise.

	* linux/syscallent.h: move_pages takes 6 args, not 5.
	* linux/x86_64/syscallent.h: Likewise.

2007-07-23  Ulrich Drepper  <drepper@redhat.com>

	* defs.h: Add new parameter to printtv_bitness prototype.
	(printttv): Pass zero for the new parameter.
	(printtv_special): New macro.
	* desc.c (decode_select): Pass zero for the new parameter of
	printtv_bitness.
	* file.c (utimensatflags): New macro.
	(sys_osf_utimes): Pass zero for the new parameter of
	printtv_bitness.
	(sys_utimes): Likewise.
	(sys_futimesat): Likewise.
	(decode_utimes): Add new parameter.  Pass it to the
	printtv_bitness calls.  Fix printing of time values.
	(sys_utimensat): New function.
	* time.c (UTIME_NOW, UTIME_OMIT): Define if not already
	happened.
	(printtv_bitness): Add new parameter.  Print special UTIME_*
	values as strings if set.
	(sys_osf_gettimeofday): Pass zero for the new parameter of
	printtv_bitness.
	(sys_osf_settimeofday): Likewise.
	* linux/syscall.h: Declare sys_utimensat.
	* linux/syscallent.h: Add utimensat entry.
	* linux/x86_64/syscallent.h: Likewise.

	* mem.c (move_pages_flags): New variable.
	(sys_move_pages): New function.
	* linux/syscall.h: Declare sys_move_pages.
	* linux/syscallent.h: Add entry for sys_move_pages.
	* linux/x86_64/syscallent.h: Likewise.

	* mem.c (MPOL_MF_MOVE, MPOL_MF_MOVE_ALL): Define.
	(mbindflags): Add MPOL_MF_MOVE and MPOL_MF_MOVE_ALL entries.

2007-07-23  Roland McGrath  <roland@redhat.com>

	* util.c (tv_add): Fix rounding comparison.
	Reported by Bai Weidong <baiwd@cn.fujitsu.com>.

2007-07-11  Roland McGrath  <roland@redhat.com>

	* count.c (call_summary_pers): Use tv_float conversion for output of
	cumulative time, in case it is negative from bogus -O value.
	From Lai JiangShan <laijs@cn.fujitsu.com>.

	* strace.c (handle_group_exit): Detach TCP before LEADER.
	Don't use PTRACE_KILL on LEADER.

	* util.c (printstr): Fix size calculation for outstr allocation.

	* configure.ac (struct sigcontext.sc_hi2): Use #ifdef around
	<asm/sigcontext.h> to match signal.c include conditions.

2007-07-05  Roland McGrath  <roland@redhat.com>

	* debian/rules: Use debian/$(package) instead of debian/tmp as temp dir.

	* configure.ac: Use <stddef.h> before <linux/socket.h>.

	* debian/changelog: Harmonize with debian version.
	* debian/control (Uploaders): Fix surname spelling.
	(Build-Depends): Make debhelper requirement (>= 5.0.0).
	(Standards-Version): Update to 3.7.2.

	* .cvsignore: Add some automake-created files.

	* file.c (sys_utime): Use personality_wordsize to handle biarch.
	Fixes RH#247185.

	* signal.c (sys_sigreturn) [MIPS]: Pass 3rd arg to sprintsigmask.
	From Zhang Le <zhilg@users.sourceforge.net>.

	* strace.c (strace_fopen): [_LFS64_LARGEFILE]: Use fopen64.
	Fixes Debian#385310.

	* strace.c (main): Fix error message for unfound -u user.
	From Srinivasa Ds <srinivasa@in.ibm.com>.
	Fixes RH#247170.

	* debian/control (Architecture): Add armel.

	* linux/syscallent.h: Fix sys_delete_module arg count.
	* linux/alpha/syscallent.h: Likewise.
	* linux/arm/syscallent.h: Likewise.
	* linux/hppa/syscallent.h: Likewise.
	* linux/ia64/syscallent.h: Likewise.
	* linux/m68k/syscallent.h: Likewise.
	* linux/mips/syscallent.h: Likewise.
	* linux/powerpc/syscallent.h: Likewise.
	* linux/s390/syscallent.h: Likewise.
	* linux/s390x/syscallent.h: Likewise.
	* linux/sh/syscallent.h: Likewise.
	* linux/sh64/syscallent.h: Likewise.
	* linux/sparc/syscallent.h: Likewise.
	* linux/sparc64/syscallent.h: Likewise.
	* linux/sparc64/syscallent2.h: Likewise.
	* linux/x86_64/syscallent.h: Likewise.
	* linux/dummy.h (sys_delete_module): Use sys_open.
	From Johannes Stezenbach <js@linuxtv.org>.

	* configure.ac: Check for struct sigcontext.sc_hi2.
	* signal.c (sys_sigreturn) [MIPS]: Use sc_hi2 vs sc_sigset if found.

	* process.c [LINUX] (futexops): Add many new values.
	[LINUX] (futexwakeops, futexwakecmps): New tables.
	[LINUX] (sys_futex): Use them.
	From Ulrich Drepper <drepper@redhat.com>.
	Fixes RH#241467.

2007-07-05  Jan Kratochvil  <jan.kratochvil@redhat.com>

	* strace.c (detach): New prototype.  Extended the function comment.
	[LINUX] (detach): Call droptcb() instead of the wrongly parametrized
	detach() call.
	(handle_group_exit): Call droptcb() instead of the wrongly parametrized
	detach() call.	Always call detach() only once from the group leader.
	Comment the leader killing known bug tested by `test/leaderkill.c'.
	Code advisory: Roland McGrath
	Fixes RH#240961.

	* test/leaderkill.c: New file.
	* test/.cvsignore, test/Makefile: Add it.

2007-03-21  Andreas Schwab  <schwab@suse.de>

	* file.c (sys_newfstatat): Don't use printstat64 on ppc64.

2007-03-29  Vladimir Nadvornik <nadvornik@suse.cz>
	    Dmitry V. Levin <ldv@altlinux.org>

	Trace linux SG_IO ioctl arguments and results.
	* scsi.c: New file.
	* Makefile.am (strace_SOURCES): Add it.
	* defs.h (scsi_ioctl): New function.
	* ioctl.c (ioctl_decode): Use scsi_ioctl().

2007-06-28  Dmitry V. Levin <ldv@altlinux.org>

	* util.c (tv_mul): Multiply tv_usec properly.
	Patch from Cai Fei <caifei@cn.fujitsu.com>.

2007-06-11  Jan Kratochvil  <jan.kratochvil@redhat.com>

	Never interrupt when the attached traced process would be left stopped.
	* strace.c (main): `-p' attaching moved to ...
	(startup_attach): ... a new function, renamed a variable C to TCBI.
	Block interrupting signals since the first tracee has been attached.
	New comment about INTERRUPTED in the nonthreaded case.
	[LINUX] (startup_attach): Check INTERRUPTED after each attached thread.
	(main): Command spawning moved to ...
	(startup_child): ... a new function, replaced RETURN with EXIT.
	[LINUX] (detach): New variable CATCH_SIGSTOP, do not signal
	new SIGSTOP for processes still in TCB_STARTUP.
	(main): Move signals and BLOCKED_SET init before the tracees attaching,
	[SUNOS4] (trace): Removed fixvfork () call as a dead code, SIGSTOP must
	have been already caught before clearing TCB_STARTUP.
	(trace): Removed the `!WIFSTOPPED(status)' dead code.
	Clear TCB_STARTUP only in the case the received signal was SIGSTOP.
	New comment when `TCB_BPTSET && TCB_STARTUP' combination can be set.
	Code advisory: Roland McGrath
	Fixes RH#240986.

2007-05-24  Jan Kratochvil  <jan.kratochvil@redhat.com>

	* strace.c [LINUX] (my_tgkill): New macro.
	[LINUX] (detach): Use my_tgkill () instead of kill(2).
	Fixes RH#240962.

2007-03-30  Dmitry V. Levin <ldv@altlinux.org>

	* mem.c (mmap_flags): Add MAP_32BIT.
	Reported by Kirill A. Shutemov.

2007-01-12  Dmitry V. Levin <ldv@altlinux.org>

	* sock.c (sock_ioctl): Check umove() return code.
	[LINUX]: Handle SIOCGIFTXQLEN and SIOCGIFMAP.

2007-03-16  Roland McGrath  <roland@redhat.com>

	* linux/s390/syscallent.h: Use sys_restart_syscall for 7.
	* linux/s390x/syscallent.h: Likewise.

2007-02-18  Roland McGrath  <roland@redhat.com>

	* strace.spec (Summary): Remove trailing period.
	(%files): Add %doc files.
	(%changelog): Double %s in text.
	(BuildRoot): Change to Fedora canonical.
	(%install): Don't use %makeinstall macro.
	(%build): Use %{?_smp_mflags}.

2007-01-16  Roland McGrath  <roland@redhat.com>

	* configure.ac, NEWS: Version 4.5.15.
	* debian/changelog, strace.spec: 4.5.15-1.

2007-01-16  Dmitry V. Levin <ldv@altlinux.org>

	Update mount parser to match kernel behaviour.
	* system.c [LINUX] (MS_VERBOSE): Rename to MS_SILENT.
	[LINUX] (MS_UNBINDABLE, MS_PRIVATE, MS_SLAVE, MS_SHARED):
	New macros.
	[LINUX] (mount_flags): Add them.
	[LINUX] (MS_MGC_MSK): New macro.
	[LINUX] (sys_mount): Update parser to match kernel behaviour:
	discard MS_MGC_VAL magic, do not decode type and/or data
	strings when specified flags do not imply valid strings.

2007-01-12  Dmitry V. Levin <ldv@altlinux.org>

	* time.c [LINUX] (tprint_timex32, tprint_timex): Decode adjtimex
	modes as flags.

2007-01-11  Dmitry V. Levin <ldv@altlinux.org>

	Update umount parser.
	* system.c [LINUX] (MNT_FORCE, MNT_DETACH, MNT_EXPIRE): New macros.
	[LINUX] (umount_flags): New xlat structure with MNT_* entries.
	[LINUX] (sys_umount2): Use umount_flags.

	Fix open(2) flags parser.
	* defs.h (tprint_open_modes): New function.
	* desc.c (sprint_open_modes): New function.
	(sys_fcntl): Use tprint_open_modes() and sprint_open_modes().
	* file.c (openmodes): Split xlat into open_access_modes and
	open_mode_flags.
	(tprint_open_modes): New function.
	(decode_open): Use it.
	* ipc.c (sys_mq_open, printmqattr): Likewise.
	Fixes RH#222385.

2007-01-11  Roland McGrath  <roland@redhat.com>

	* configure.ac, NEWS: Version 4.5.15.
	* debian/changelog, strace.spec: 4.5.15-1.

	* debian/control (Uploaders): Add Frederik Schueler <fs@debian.org>.

	* strace.spec (Release): Use %{?dist}.

	* system.c [LINUX] (CTL_CPU): Define in case header is missing it.

2006-12-27  Dmitry V. Levin <ldv@altlinux.org>

	Add const qualifier to xlookup() return value.
	* defs.h (xlookup): Add const qualifier to return value.
	* desc.c (sprintflags): Likewise.
	* process.c (printpriv): Update xlookup() use.
	* signal.c (sprintsigmask): Add const qualifier to first argument and
	return value.
	* util.c (xlookup): Add const qualifier to return value.
	(printxval): Update xlookup() use.

2006-12-21  Dmitry V. Levin <ldv@altlinux.org>

	Move counts code to separate file.
	* count.c: New file.
	* Makefile.am (strace_SOURCES): Add count.c.
	* syscall.c (call_counts, countv, counts, shortest, time_cmp,
	syscall_cmp, count_cmp, sortfun, overhead, set_sortby,
	set_overhead, call_summary_pers, call_summary): Move to count.c
	* count.c (count_syscall): New function.
	* defs.h (count_syscall): Declare it.
	* syscall.c (trace_syscall): Use it.

2006-12-20  Dmitry V. Levin <ldv@altlinux.org>

	* syscall.c (internal_syscall): Change conditions for internal_exit,
	internal_fork, internal_clone, internal_exec and internal_wait
	calls from switching on known scno values to switching on known
	sysent[tcp->scno].sys_func values.
	Fixes RH#179740.

	Show system call summary for each personality.
	* syscall.c (countv): New call_counts pointers array.
	(counts): Convert to macro wrapper around countv.
	(call_summary_pers): New function.
	(call_summary): Use it for each personality.
	Fixes RH#192193.

2006-12-12  Dmitry V. Levin <ldv@altlinux.org>

	Fix -ff -o behaviour.  Fix piping trace output.
	* defs.h (newoutf): Remove.
	(alloctcb): Rename to alloc_tcb.  Add alloctcb() macro wrapper
	around alloc_tcb().
	* process.c [!USE_PROCFS] (internal_clone, internal_fork):
	Remove newoutf() call.
	* strace.c (set_cloexec_flag, strace_fopen, strace_popen,
	swap_uid): New functions.
	(popen_pid): New variable.
	(newoutf): Make static, use strace_fopen().
	(main): Use strace_fopen() and strace_popen(), remove uids
	swapping.  Do not open outfname when followfork > 1.
	Reinitialize tcp->outf properly.
	(alloctcb): Rename to alloc_tcb.  Use newoutf().
	(trace): Check popen_pid.  Remove newoutf() call.
	[USE_PROCFS] (proc_open, proc_poll_open): Use set_cloexec_flag().
	Fixes RH#204950, RH#218435, Debian#353935.

2006-12-10  Dmitry V. Levin <ldv@altlinux.org>

	Add biarch support for "struct sigevent".
	* time.c [LINUX && SUPPORTED_PERSONALITIES > 1] (printsigevent32):
	New function.
	[LINUX] (printsigevent): [SUPPORTED_PERSONALITIES > 1]
	Handle 32-bit personality.

	Add biarch support for "struct timex".
	* time.c [LINUX && SUPPORTED_PERSONALITIES > 1] (tprint_timex32):
	New function.
	[LINUX] (tprint_timex): New function.
	[LINUX] (sys_adjtimex): Use it.

	Enhance adjtimex parser.
	* time.c [LINUX] (adjtimex_modes, adjtimex_status,
	adjtimex_state): New xlat structures.
	[LINUX] (sys_adjtimex): Print the whole struct timex.
	Decode modes, status and return code.

	Add biarch support for "struct itimerval".
	* time.c (printitv): Rename to printitv_bitness().
	Add printitv() macro wrapper around printitv_bitness().
	(printitv_bitness): Handle 32-bit personality.
	[ALPHA] (sys_osf_getitimer, sys_osf_setitimer):
	Use printitv_bitness().
	(tprint_timeval, tprint_timeval32): New functions.
	(printtv_bitness, printitv_bitness, sys_adjtimex): Use them.
	(printitv32): Remove.

	Add biarch support for "struct timeval".
	* defs.h (bitness_t): New enum type.
	(printtv_bitness, sprinttv): New function prototypes.
	(printtv): Convert to macro wrapper around printtv_bitness().
	(printtv32): Remove.
	* desc.c (decode_select): Use printtv_bitness() and sprinttv().
	(sys_oldselect, sys_osf_select, sys_select, sys_pselect6):
	Update decode_select() use.
	* file.c [ALPHA] (sys_osf_utimes): Use printtv_bitness().
	* time.c (printtv_bitness, sprinttv): New functions.
	(printtv, printtv32): Remove.
	[ALPHA] (sys_osf_settimeofday, sys_osf_settimeofday):
	Use printtv_bitness().
	Fixes RH#171626, RH#173050.

	Add biarch support for "struct iovec".
	* defs.h (personality_wordsize): Add.
	* io.c [HAVE_SYS_UIO_H] (tprint_iov): [LINUX &&
	SUPPORTED_PERSONALITIES > 1] Handle 32-bit personality.
	* util.c [HAVE_SYS_UIO_H] (dumpiov): [LINUX &&
	SUPPORTED_PERSONALITIES > 1] Likewise.
	Patch from Jakub Jelinek.
	Fixes RH#218433.

	* time.c (sys_timer_create): Check umove() return code.

	Make several global variables static.
	#ifdef definitions of rarely unused functions.
	* defs.h (rflag, tflag, outfname): Remove.
	* strace.c (iflag, interactive, pflag_seen, rflag, tflag,
	outfname, username): Make static.
	* desc.c (sys_getdtablesize): Define only for
	ALPHA || FREEBSD || SUNOS4.
	* file.c (sys_fchroot): Define only for SUNOS4 || SVR4.
	(sys_mkfifo): Define only for FREEBSD.
	* mem.c (sys_sbrk): Define only for FREEBSD || SUNOS4.
	(sys_getpagesize): Define only for
	ALPHA || FREEBSD || IA64 || SUNOS4 || SVR4.
	* net.c (sys_so_socket): Define only for SVR4.
	* process.c (sys_gethostid): Define only for
	FREEBSD || SUNOS4 || SVR4.
	(sys_gethostname): Define only for
	ALPHA || FREEBSD || SUNOS4 || SVR4.
	(sys_setpgrp): Define only for ALPHA || SUNOS4 || SVR4.
	(sys_execv): Define only for SPARC || SPARC64 || SUNOS4.
	* signal.c (sys_sigblock): Define only for FREEBSD || SUNOS4.
	(sys_sighold, sys_sigwait): Define only for SVR4.
	(sys_killpg): Define only for FREEBSD || SUNOS4.
	* stream.c (sys_getmsg): Define only for
	SPARC || SPARC64 || SUNOS4 || SVR4.
	* syscall.c (sys_indir): Define only for SUNOS4.

2006-11-27  Dmitry V. Levin  <ldv@altlinux.org>

	* system.c [LINUX]: Define CTL_PROC, since Linux 2.6.18+ headers
	removed CTL_PROC enum.	Patch from Jakub Jelinek.
	[LINUX] (sysctl_root): Add CTL_BUS, CTL_ABI and CTL_CPU.

2006-11-20  Jakub Jelinek  <jakub@redhat.com>

	* linux/ia64/syscallent.h: Add #if check to make sure that
	SYS_socket_subcall adjustment isn't forgotten again.

2006-10-16  Dmitry V. Levin  <ldv@altlinux.org>

	Implement comprehensive quotactl(2) parser for Linux.
	* Makefile.am (strace_SOURCES): Add quota.c.
	* quota.c: New file.
	* resource.c: Remove old quotactl(2) parser.
	Fixes RH#118696.

2006-10-14  Dmitry V. Levin  <ldv@altlinux.org>

	* configure.ac (AC_CHECK_HEADERS): Add inttypes.h.
	* file.c [_LFS64_LARGEFILE && (LINUX || SVR4)]:
	Include <inttypes.h>.
	(sys_getdents64): Use PRIu64/PRId64 to avoid gcc warnings on
	64-bit platforms.

	* strace.c (main): Check getcwd() return code.

2006-10-13  Ulrich Drepper  <drepper@redhat.com>
	    Bernhard Kaindl <bk@suse.de>
	    Dmitry V. Levin  <ldv@altlinux.org>
	    Michael Holzheu <holzheu@de.ibm.com>

	Add hooks for new syscalls.  Add decoders for *at, inotify*,
	pselect6, ppoll and unshare syscalls.

	* defs.h: Declare print_sigset.
	* desc.c (sys_pselect6): New function.
	* file.c (decode_open, decode_access, decode_mkdir,
	decode_readlink, decode_chmod, decode_utimes, decode_mknod):
	New functions.
	(sys_open, sys_access, sys_mkdir, sys_readlink, sys_chmod,
	sys_utimes, sys_mknod): Use them.
	[LINUX] (fstatatflags, unlinkatflags, inotify_modes): New
	variables.
	[LINUX] (print_dirfd, sys_openat, sys_faccessat,
	sys_newfstatat, sys_mkdirat, sys_linkat, sys_unlinkat,
	sys_symlinkat, sys_readlinkat, sys_renameat, sys_fchownat,
	sys_fchmodat, sys_futimesat, sys_mknodat, sys_inotify_add_watch,
	sys_inotify_rm_watch): New functions.
	* process.c [LINUX] (sys_unshare): New function.
	* signal.c (print_sigset): New function.
	(sys_sigprocmask): Use it.
	* stream.c (decode_poll): New function.
	(sys_poll): Use it.
	[LINUX] (sys_ppoll): New function.
	* linux/syscall.h: Delcare new syscall handlers.
	* linux/syscallent.h: Hook up new syscalls.
	* linux/alpha/syscallent.h: Likewise.
	* linux/hppa/syscallent.h: Likewise.
	* linux/ia64/syscallent.h: Likewise.
	* linux/mips/syscallent.h: Likewise.
	* linux/powerpc/syscallent.h: Likewise.
	* linux/s390/syscallent.h: Likewise.
	* linux/s390x/syscallent.h: Likewise.
	* linux/sparc/syscallent.h: Likewise.
	* linux/sparc64/syscallent.h: Likewise.
	* linux/x86_64/syscallent.h: Likewise.
	Fixes RH#178633.

2006-10-06  Dmitry V. Levin  <ldv@altlinux.org>

	* strace.c [!USE_PROCFS] (trace): Presence of PT_GETSIGINFO
	macro does not mean that PT_CR_IPSR and PT_CR_IIP macros are
	also defined, so check them along with PT_GETSIGINFO.
	Fixes RH#209856.

2006-09-01  Dmitry V. Levin  <ldv@altlinux.org>

	* file.c (print_xattr_val): Fix memory corruption bug reported
	by James Antill.
	Fixes RH#200621.

2006-04-21  Dmitry V. Levin  <ldv@altlinux.org>

	* defs.h [LINUX && X86_64 && !__NR_exit_group]: Define
	__NR_exit_group.

2006-03-29  Dmitry V. Levin  <ldv@altlinux.org>

	Fix race conditions in tcb allocation.
	* process.c (fork_tcb): Return error code as documented.  Do not
	print "tcb table full" error message.
	[USE_PROCFS] (internal_fork): Do not print "tcb table full"
	error message.
	[SYS_clone || SYS_clone2] (internal_clone, internal_fork): Call
	fork_tcb() before alloctcb().  Do not print "tcb table full"
	error message.
	* strace.c (main): Do not print "tcb table full" error message.
	(expand_tcbtab): Print error message in case of memory allocation
	failure.
	(alloctcb): Print error message when tcb table is full.
	(trace): Expand tcb table if necessary prior to allocating
	entry there.  Do not print "tcb table full" error message.
	Fixes RH#180293.

2006-08-22  Roland McGrath  <roland@redhat.com>

	* ipc.c (sys_msgget, sys_semget, sys_shmget): Show key values in hex.
	Fixes RH#198179.

2006-08-21  Roland McGrath  <roland@redhat.com>

	* linux/syscall.h (SYS_socket_subcall): Bump to 400.
	* linux/syscallent.h: Update table.
	* linux/arm/syscallent.h: Likewise.
	* linux/m68k/syscallent.h: Likewise.
	* linux/s390/syscallent.h: Likewise.
	* linux/s390x/syscallent.h: Likewise.
	* linux/powerpc/syscallent.h: Likewise.
	* linux/sh/syscallent.h: Likewise.
	* linux/sh64/syscallent.h: Likewise.
	Fixes RH#201462.

2006-04-25  Roland McGrath  <roland@redhat.com>

	* strace.c (main): Fail when -c is given with -ff.
	* strace.1: Note their incompatibility.
	Fixes RH#187847.

	* strace.c (main): Fail when nonoption args follow -p switches.
	Fixes Debian#361302.

	* Makefile.am (EXTRA_DIST): Add xlate.el.

	* linux/mips/Makefile.in: File removed, unused cruft.
	* linux/sparc/Makefile.in: Likewise.

	* strace.spec (Source0): Use http://dl.sourceforge.net URL.

	* ipc.c (sys_semtimedop): Fixed inverted indirect_ipccall test.
	* linux/hppa/syscallent.h: Fixed semtimedop entry.
	From Mike Stroyan <mike.stroyan@hp.com>.
	Fixes Debian#340239.

2006-03-30  Daniel Jacobowitz  <dan@codesourcery.com>

	* linux/arm/syscallent.h: Correct the name of exit.  Remove
	M68K conditionals and sys_security.  Correct syscalls 243-282.
	Fixes Debian#360154.

	* process.c (change_syscall): Add ARM support.
	* syscall.c (get_scno): Handle ARM EABI.
	Fixes Debian#360152.

2006-01-16  Roland McGrath  <roland@redhat.com>

	* configure.ac, NEWS: Version 4.5.14.
	* debian/changelog, strace.spec: 4.5.14-1.

2006-01-13  Roland McGrath  <roland@redhat.com>

	* debian/control (Build-Depends): Add debhelper.

2006-01-12  Roland McGrath  <roland@redhat.com>

	* signal.c [LINUX] (sys_restart_syscall): New function.
	* linux/syscall.h: Declare sys_restart_syscall.
	* linux/sparc/syscall.h: Likewise.
	* linux/syscallent.h: Call 0 is restart_syscall.
	* linux/arm/syscallent.h: Likewise.
	* linux/powerpc/syscallent.h: Likewise.
	* linux/m68k/syscallent.h: Likewise.
	* linux/hppa/syscallent.h: Likewise.
	* linux/sh/syscallent.h: Likewise.
	* linux/sparc/syscallent.h: Likewise.
	* linux/sparc64/syscallent.h: Likewise.
	* linux/alpha/syscallent.h: Use sys_restart_syscall.
	* linux/ia64/syscallent.h: Likewise.
	* linux/mips/syscallent.h: Likewise.
	* linux/x86_64/syscallent.h: Likewise.
	Fixes RH#165469, Debian#350641.

2005-08-08  Dmitry V. Levin  <ldv@altlinux.org>

	* system.c [LINUX] (MS_MGC_VAL): New macro.
	[LINUX] (mount_flags): Add it.
	[LINUX] (sys_mount): If neither MS_BIND nor MS_MOVE bits are
        set in the flags argument, try to fetch data string.
	Fixes RH#165377.

2006-01-12  Roland McGrath  <roland@redhat.com>

	* system.c (sys_sysctl): Don't read off end of NAME when max_strlen
	exceeds INFO.nlen.
	From Timo Lindfors <timo.lindfors@iki.fi>.
	Fixes Debian#339117.

	* debian/rules (binary-arch): Don't pass -s to install.  Use dh_strip.
	Fixes Debian#325132.

	* debian/control (Standards-Version): Update to 3.6.2.

	* defs.h [LINUXSPARC] (PERSONALITY0_WORDSIZE, PERSONALITY1_WORDSIZE):
	New macros.
	[SPARC64] (PERSONALITY2_WORDSIZE): New macro.
	[X86_64] (PERSONALITY0_WORDSIZE, PERSONALITY1_WORDSIZE): New macros.
	* syscall.c (PERSONALITY0_WORDSIZE): New macro if undefined.
	(personality_wordsize): New variable.
	(decode_subcall): Use it for size of argument words.
	Fixes RH#174354.

2005-11-17  Dmitry V. Levin  <ldv@altlinux.org>

	Implement qual_flags support for each personality.
	* strace.c (main): Move qualify calls after set_personality call.
	* syscall.c (qual_flags0): New variable..
	[SUPPORTED_PERSONALITIES >= 2] (qual_flags1): New variable.
	[SUPPORTED_PERSONALITIES >= 3] (qual_flags2): New variable.
	(qual_flags): Change variable definition from array to pointer.
	(set_personality): Initialize qual_flags variable.
	(qualify_one): Add "pers" argument to specify personality.
	[SUPPORTED_PERSONALITIES >= 2]: Set qual_flags1 if requested.
	[SUPPORTED_PERSONALITIES >= 3]: Set qual_flags2 if requested.
	(qual_syscall): Pass personality to qualify_one.
	[SUPPORTED_PERSONALITIES >= 2]: Look for syscall also in sysent1
	table.
	[SUPPORTED_PERSONALITIES >= 3]: Look for syscall also in sysent2
	table.
	(qual_signal): Pass personality to qualify_one.
	(qual_desc): Likewise.
	(qualify): Use qualify_one instead of manual qual_flags
	manipulations.
	[SUPPORTED_PERSONALITIES >= 2]: Look for syscall also in sysent1
	table.
	[SUPPORTED_PERSONALITIES >= 3]: Look for syscall also in sysent2
	table.
	* defs.h: Update qual_flags declaration.
	Fixes RH#173986.

2005-11-14  Dmitry V. Levin  <ldv@altlinux.org>

	* syscall.c (qual_syscall): Handle numeric syscall specification.
	Fixes RH#174798.

	* syscall.c (qual_signal, qual_options): Remove redundant argument
	check.

2005-12-01  Roland McGrath  <roland@redhat.com>

	* ipc.c (indirect_ipccall) [MIPS || HPPA]: Return false.
	Fixes Debian#340239.

	* Makefile.am (EXTRA_DIST): Add linux/arm/syscallent.h
	and linux/m68k/syscallent.h.
	Fixes Debian#336197.

	* debian/control (Architecture): Add armeb.
	Fixes Debian#335681.

2005-11-02 Michal Marek  <mmarek@suse.cz>

	* strace-graph (handle_trace): follow clone() and vfork() calls.

2005-10-25  Heiko Carstens  <heiko.carstens@de.ibm.com>

	* linux/s390/syscallent.h: Added ioprio_set, ioprio_get,
	inotify_init, inotify_add_watch, inotify_rm_watch.
	Corrected number of arguments for request_key.
	* linux/s390x/syscallent.h: Likewise.

2005-12-01  Roland McGrath  <roland@redhat.com>

	* ipc.c (indirect_ipccall) [IA64]: Return false unless the syscall
	number is in the low range of IA32 syscalls.

2005-10-07  Andreas Schwab  <schwab@suse.de>

	* linux/ia64/syscallent.h: Syscall 1105 is gettid, not ioperm.

2005-12-01  Roland McGrath  <roland@redhat.com>

	* resource.c (resources): Add RLIMIT_NICE, RLIMIT_RTPRIO.
	Reported by Scott Tsai <scottt958@yahoo.com.tw>.

	* ipc.c (indirect_ipccall): New function.
	(sys_msgctl, sys_msgsnd, sys_msgrcv, sys_semop): Use that predicate
	instead of #ifdef LINUX test.
	[LINUX] (sys_semtimedop): Likewise.
	(sys_shmctl, sys_shmat, sys_shmdt): Likewise.
	Fixes RH#164755.

2005-07-31  Ulrich Drepper  <drepper@redhat.com>

	* linux/x86_64/syscallent.h: Fix syscall parameter count for msgrcv and
	msgctl.

	* ipc.c (sys_msgrcv): Add entering handling and print first parameter
	there.
	Fixes RH#164757.

2005-08-08  Dmitry V. Levin  <ldv@altlinux.org>

	* strace.1: Update "SEE ALSO" links to reference to valid
	manpages.
	Patch from Michail Litvak <mci@owl.openwall.com>.
	Fixes RH#165375.

2005-10-21  Roland McGrath  <roland@redhat.com>

	* util.c (printpathn): Cap N at sizeof path - 1.

2005-08-03  Roland McGrath  <roland@redhat.com>

	* configure.ac, NEWS: Version 4.5.13.
	* debian/changelog, strace.spec: 4.5.13-1.

	* configure.ac: Check for struct dqblk.dqb_curblocks field.
	* resource.c [LINUX] (OLD_CMD): New macro.
	(quotacmds): Use it to hard-wire old O_* values, don't use macros.
	(sys_quotactl): If dqb_curblocks is not there, it's called
	dqb_curspace instead.  Print dqb_* fields as unsigned long long.

2005-07-19  Michael Schmitz  <schmitz@debian.org>

	Long overdue m68k cleanup.
	* linux/syscallent.h: remove m68k declarations.
	* linux/m68k/syscallent.h: new file, fixed up declarations
	to match kernel version 2.6.11. Newer syscalls are sufficiently
	different from i386 to merit a separate file.

2005-08-03  Roland McGrath  <roland@redhat.com>

	* linux/x86_64/syscallent.h: Update init_module argument count.
	* linux/sparc/syscallent.h: Likewise.
	* linux/sparc64/syscallent2.h: Likewise.
	* linux/sparc64/syscallent.h: Likewise.
	* linux/sh/syscallent.h: Likewise.
	* linux/sh64/syscallent.h: Likewise.
	* linux/s390/syscallent.h: Likewise.
	* linux/s390x/syscallent.h: Likewise.
	* linux/powerpc/syscallent.h: Likewise.
	* linux/arm/syscallent.h: Likewise.

2005-07-22  James Lentini  <jlentini@gmail.com>

	* bjm.c (sys_init_module): Display all three arguments.
	* linux/syscallent.h: Update argument count.

2005-08-03  Roland McGrath  <roland@redhat.com>

	* process.c (internal_wait): Don't suspend when known child is known
	to be exiting already.

	* strace.c (detach): If detaching the last live thread in a group with
	a zombie leader, then detach the leader too.
	(handle_group_exit): Use detach, not droptcb, for predeceased thread.
	Mark process about to take a signal with TCB_GROUP_EXITING flag.
	Fixes RH#161919.

2005-07-19  Roland McGrath  <roland@redhat.com>

	* defs.h [LINUX] [M68K] (__NR_exit_group): Define it if missing.
	Fixes Debian#315500.

2005-07-14  Heiko Carstens  <heiko.carstens@de.ibm.com>

	* linux/s390/syscallent.h (sys_tgkill, vserver, fadvise64_64)
	(statfs64, fstatfs64, remap_file_pages, mbind, get_mempolicy)
	(set_mempolicy, mq_open, mq_unlink, mq_timedsend, mq_timedreceive)
	(mq_notify, mq_getsetattr, sys_kexec_load, add_key, request_key)
	(keyctl, waitid): Added.
	* linux/s390x/syscallent.h: Likewise and added missing _llseek.
	* linux/s390/errnoent.h (ECANCELED, ENOKEY, EKEYEXPIRED)
	(EKEYREVOKED, EKEYREJECTED, EOWNERDEAD, ENOTRECOVERABLE): Added.
	* linux/s390x/errnoent.h: Likewise.

2005-07-05  Roland McGrath  <roland@redhat.com>

	* mem.c [LINUX] (sys_old_mmap) [X86_64]: Extract 32-bit values if
	child is 32-bit.
	Fixes RH#162467.

2005-06-08  Dmitry V. Levin  <ldv@altlinux.org>

	Introduce "-e trace=desc".
	* defs.h (TRACE_DESC): New flag.
	* syscall.c: Define TD macro before include of syscallent files
	and undefine it afterwards.
	(lookup_class): Recognize "desc" keyword.
	* strace.1: Document "-e trace=desc".
	* freebsd/i386/syscallent.h: Mark those syscalls which take a
	file descriptor as an argument or return a file descriptor with
	TD flag.
	* linux/alpha/syscallent.h: Likewise.
	* linux/hppa/syscallent.h: Likewise.
	* linux/ia64/syscallent.h: Likewise.
	* linux/mips/syscallent.h: Likewise.
	* linux/powerpc/syscallent.h: Likewise.
	* linux/s390/syscallent.h: Likewise.
	* linux/s390x/syscallent.h: Likewise.
	* linux/sh/syscallent.h: Likewise.
	* linux/sh64/syscallent.h: Likewise.
	* linux/sparc/syscallent.h: Likewise.
	* linux/sparc64/syscallent2.h: Likewise.
	* linux/sparc64/syscallent.h: Likewise.
	* linux/syscallent.h: Likewise.
	* linux/x86_64/syscallent.h: Likewise.
	* sunos4/syscallent.h: Likewise.
	* svr4/syscallent.h: Likewise.
	Fixes RH#159400.

	Remove TF flag from those syscalls which have no filename argument.
	* freebsd/i386/syscallent.h: Remove TF flag from fstat, pread,
	pwrite, fstat, sendfile.
	* linux/alpha/syscallent.h: Remove TF flag from read, write,
	pread, pwrite, sendfile.
	* linux/hppa/syscallent.h: Remove TF flag from read, write,
	pread, pwrite, fstat64, sendfile, ftruncate64.
	* linux/ia64/syscallent.h: Remove TF flag from read, write,
	sendfile, fstat, fadvise64.
	* linux/mips/syscallent.h: Remove TF flag from read, write,
	fstatfs, fstat, pread, pwrite, sendfile, ftruncate64, fstat64,
	sendfile64, fadvise64, fstatfs64.
	* linux/powerpc/syscallent.h: Remove TF flag from read, write,
	fstat, pread, pwrite, sendfile, ftruncate64, fstat64, sendfile64,
	fadvise64, fstatfs64, fadvise64_64.
	* linux/s390/syscallent.h: Remove TF flag from pread, pwrite,
	sendfile, ftruncate64, fstat64, sendfile64.
	* linux/s390x/syscallent.h: Remove TF flag from pread, pwrite,
	sendfile, sendfile64.
	* linux/sh/syscallent.h: Remove TF flag from pread, pwrite,
	sendfile, fstat64.
	* linux/sh64/syscallent.h: Remove TF flag from pread, pwrite,
	sendfile, ftruncate64, fstat64.
	* linux/sparc/syscallent.h: Remove TF flag from sendfile, fstat64,
	pread, pwrite, sendfile64.
	* linux/sparc64/syscallent2.h: Likewise.
	* linux/sparc64/syscallent.h: Likewise.
	* linux/syscallent.h: Remove TF flag from pread, pwrite, sendfile,
	ftruncate64, fstat64, sendfile64, fadvise64, fadvise64, fstatfs64,
	fadvise64_64.
	* linux/x86_64/syscallent.h: Remove TF flag from pread, pwrite,
	sendfile, fadvise64_64.
	* svr4/syscallent.h: Remove TF flag from pread, pwrite, ftruncate,
	fstatvfs64, ftruncate64.
	Fixes RH#159340.

2005-07-04  Roland McGrath  <roland@redhat.com>

	* net.c (sockipv6options): Add IPV6_ADD_MEMBERSHIP,
	IPV6_DROP_MEMBERSHIP, IPV6_ROUTER_ALERT.
	From Ulrich Drepper <drepper@redhat.com>.
	Fixes RH#162450.

	* net.c (sockipoptions): Fix typos.
	From Ulrich Drepper <drepper@redhat.com>.
	Fixes RH#161578.

	* util.c (printnum_int): New function, printnum with s/long/int/.
	* defs.h: Declare it.
	* net.c (printsockopt): Use it for int-sized option.
	Fixes RH#162449.
	Reported by Ulrich Drepper <drepper@redhat.com>.

2005-06-09  Roland McGrath  <roland@redhat.com>

	* configure.ac, NEWS: Version 4.5.12.
	* debian/changelog, strace.spec: 4.5.12-1.

2005-06-08  Dmitry V. Levin  <ldv@altlinux.org>

	Minor namespace cleanup.
	* defs.h (string_quote): Remove declaration.
	* file.c (openmodessol) [LINUXSPARC]: Make static.
	(fileflags): Likewise.
	(aclcmds, aclipc) [HAVE_SYS_ACL_H]: Likewise.
	(direnttypes) [FREEBSD || LINUX]: Likewise.
	(xattrflags): Likewise.
	* process.c (unalignctl_string): Make static.
	(setarg): Disable.
	* syscall.c (subcalls_table): Make static.
	(socket_map) [!(LINUX && (ALPHA || MIPS))]: Likewise.
	(sparc_socket_decode): Make static, define for [SPARC || SPARC64] only.
	(decode_subcall): Make static.
	(syscall_fixup): Likewise.
	(get_error): Likewise.
	(syscall_enter): Likewise.
	* util.c (tv_tv): Disable.
	(getpc): Likewise.
	(string_quote): Make static.
	Fixes RH#159688.

2005-05-12  Philippe De Muyter  <phdm@macqel.be>

	* util.c (getpc, printcall): Check #if defined(M68K), not M68k.
	Enables `-i' on m68k machines.

2005-06-06  Roland McGrath  <roland@redhat.com>

	* process.c (struct_user_offsets) [X86_64]: Reorder elements so
	matching works right.
	Fixes RH#159787.

	* linux/syscall.h (SYS_socket, SYS_bind, SYS_connect, SYS_listen)
	(SYS_accept, SYS_getsockname, SYS_getpeername, SYS_socketpair)
	(SYS_send, SYS_recv, SYS_sendto, SYS_recvfrom, SYS_shutdown)
	(SYS_setsockopt, SYS_getsockopt, SYS_sendmsg, SYS_recvmsg)
	(SYS_getsockname, SYS_semop, SYS_semgsub_et, SYS_semget, SYS_semctl)
	(SYS_semtimedop, SYS_msgsnd, SYS_msgrcv, SYS_msgget)
	(SYS_msgctl, SYS_shmat, SYS_shmdt, SYS_shmget)
	(SYS_shmctl): Macros renamed to SYS_sub_*.
	* syscall.c (dumpio): Match SYS_sub_* if defined instead of SYS_*.

	* linux/syscall.h (SYS_waitid): Define if not defined.

	* linux/syscallent.h: Fix pread/pwrite names to pread64/pwrite64.

	* defs.h (struct sysent): New member `native_scno'.
	(known_scno): Declare new function.
	* linux/syscallent.h: Add new final field to interesting syscalls.
	* syscall.c (known_scno): New function.
	(dumpio, internal_syscall, syscall_fixup, trace_syscall): Use it.
	* process.c (internal_fork, internal_exit): Likewise.
	[IA64] (ARG_STACKSIZE, ARG_PTID, ARG_CTID, ARG_TLS): Likewise.
	* strace.c (proc_open): Likewise.
	* util.c [LINUX] (setbpt): Likewise.
	* linux/syscall.h: Remove [!defined(X86_64)] from conditional
	for defining SYS_socket_subcall et al.
	* linux/syscallent.h: Likewise for #error check.
	* syscall.c (trace_syscall): Likewise for SYS_{socketcall,ipc} cases.
	Fixes RH#158934.

2005-06-02  Roland McGrath  <roland@redhat.com>

	* file.c (printstatfs64): Cast values to unsigned long long and use
	%llu formats.
	Fixes RH#158243.

2005-05-31  Dmitry V. Levin  <ldv@altlinux.org>

	Deal with memory management issues.
	* defs.h (tprint_iov): Update prototype.
	* desc.c (sys_epoll_wait) [HAVE_SYS_EPOLL_H]: Do not allocate
	epoll_event array of arbitrary size on the stack, to avoid
	stack overflow.
	* file.c (print_xattr_val): Check for integer overflow during
	malloc size calculation, to avoid heap corruption.
	* io.c (tprint_iov) [HAVE_SYS_UIO_H]: Check for integer overflow
	during malloc size calculation, to avoid heap corruption.
	Change iovec array handling to avoid heap memory allocation.
	* mem.c (get_nodes) [LINUX]: Check for integer overflow during
	size calculation and do not allocate array of arbitrary size on
	the stack, to avoid stack overflow.
	* net.c (printcmsghdr) [HAVE_SENDMSG]: Do not allocate array of
	arbitrary size on the stack, to avoid stack overflow.  Do not
	trust cmsg.cmsg_len to avoid read beyond the end of allocated
	object.
	(printmsghdr) [HAVE_SENDMSG]: Update tprint_iov() usage.
	* process.c (sys_setgroups): Check for integer overflow during
	malloc size calculation, to avoid heap corruption.  Change gid_t
	array handling to avoid heap memory allocation.
	(sys_getgroups): Likewise.
	(sys_setgroups32) [LINUX]: Likewise.
	(sys_getgroups32) [LINUX]: Likewise.
	* stream.c (sys_poll) [HAVE_SYS_POLL_H]: Check for integer
	overflow during malloc size calculation, to avoid heap corruption.
	Change pollfd array handling to avoid heap memory allocation.
	* system.c (sys_sysctl) [LINUX]: Check for integer overflow
	during malloc size calculation, to avoid heap corruption.
	* util.c (dumpiov) [HAVE_SYS_UIO_H]: Check for integer overflow
	during malloc size calculation, to avoid heap corruption.
	Fixes RH#159196.

	* util.c (printxval): Change third argument from "char *" to
	"const char *".
	(printflags): Add third argument, "const char *", with similar
	meaning to the third argument of printxval().
	* defs.h (printxval): Change third argument from "char *" to
	"const char *".
	(printflags): Add third argument.
	* bjm.c (sys_query_module) [LINUX]: Pass third argument to
	printflags().
	* desc.c (sys_fcntl): Likewise.
	(sys_flock) [LOCK_SH]: Likewise.
	(print_epoll_event) [HAVE_SYS_EPOLL_H]: Likewise.
	* file.c (sys_open): Likewise.
	(solaris_open) [LINUXSPARC]: Likewise.
	(sys_access): Likewise.
	(sys_chflags, sys_fchflags) [FREEBSD]: Likewise.
	(realprintstat) [HAVE_LONG_LONG_OFF_T &&
	HAVE_STRUCT_STAT_ST_FLAGS]: Likewise.
	(printstat64) [HAVE_STAT64 &&
	HAVE_STRUCT_STAT_ST_FLAGS]: Likewise.
	(sys_setxattr, sys_fsetxattr): Likewise.
	* ipc.c (sys_msgget, sys_msgsnd, sys_msgrcv, sys_semget,
	sys_shmget, sys_shmat) [LINUX || SUNOS4 || FREEBSD]: Likewise.
	(sys_mq_open) [LINUX]: Likewise.
	(printmqattr) [HAVE_MQUEUE_H]: Likewise.
	* mem.c (print_mmap) [!HAVE_LONG_LONG_OFF_T]: Likewise.
	(sys_mmap64) [_LFS64_LARGEFILE || HAVE_LONG_LONG_OFF_T]: Likewise.
	(sys_mprotect): Likewise.
	(sys_mremap, sys_madvise, sys_mlockall) [LINUX]: Likewise.
	(sys_msync) [MS_ASYNC]: Likewise.
	(sys_mctl) [MC_SYNC]: Likewise.
	(sys_remap_file_pages, sys_mbind, sys_get_mempolicy) [LINUX]:
	Likewise.
	* net.c (printmsghdr) [HAVE_STRUCT_MSGHDR_MSG_CONTROL]: Likewise.
	(sys_send, sys_sendto): Likewise.
	(sys_sendmsg) [HAVE_SENDMSG]: Likewise.
	(sys_recv, sys_recvfrom): Likewise.
	(sys_recvmsg) [HAVE_SENDMSG]: Likewise.
	(printicmpfilter) [ICMP_FILTER]: Likewise.
	* proc.c (proc_ioctl) [SVR4 && !HAVE_MP_PROCFS || FREEBSD]: Likewise.
	* process.c (sys_clone) [LINUX]: Likewise.
	(printwaitn): Likewise.
	(sys_waitid) [SVR4 || LINUX]: Likewise.
	* signal.c (sys_sigvec) [SUNOS4 || FREEBSD]: Likewise.
	(sys_sigaction): Likewise.
	(printcontext) [SVR4]: Likewise.
	(print_stack_t) [LINUX) || FREEBSD]: Likewise.
	(sys_rt_sigaction) [LINUX]: Likewise.
	* sock.c (sock_ioctl) [LINUX]: Likewise.
	* stream.c (sys_putmsg, sys_getmsg): Likewise.
	(sys_putpmsg) [SYS_putpmsg]: Likewise.
	(sys_getpmsg) [SYS_getpmsg]: Likewise.
	(sys_poll): Likewise.
	(print_transport_message) [TI_BIND]: Likewise.
	(stream_ioctl): Likewise.
	* system.c (sys_mount, sys_reboot): Likewise.
	(sys_cacheflush) [LINUX && M68K]: Likewise.
	(sys_capget, sys_capset) [SYS_capget]: Likewise.
	* term.c (term_ioctl) [TIOCMGET]: Likewise.
	* time.c (sys_clock_nanosleep, sys_timer_settime) [LINUX]:
	Likewise.
	Fixes RH#159310.

	* bjm.c (sys_query_module) [LINUX]: Unitize "out of memory"
	errors reporting style.
	* strace.c (rebuild_pollv) [USE_PROCFS]: Likewise.
	* system.c (sys_capget, sys_capset) [SYS_capget]: Likewise.
	* util.c (printstr): Likewise.
	(dumpiov) [HAVE_SYS_UIO_H]: Likewise.
	(fixvfork) [SUNOS4]: Likewise.
	* desc.c (decode_select): Continue to decode syscall arguments
	in case of OOM condition.
	* file.c (sys_getdents): Likewise.
	(sys_getdents64) [_LFS64_LARGEFILE]: Likewise.
	(sys_getdirentries) [FREEBSD]: Likewise.
	* mem.c (sys_mincore): Changed type of variables which deal with
	malloc size from int to unsigned long.
	Fixes RH#159308.

2005-05-22  Dmitry V. Levin  <ldv@altlinux.org>

	* bjm.c [LINUX]: Do not include <linux/linkage.h>.  It is not
	safe to include kernel headers, and this one is not used anyway.
	Fixes RH#158488.

2005-05-26  Roland McGrath  <roland@redhat.com>

	* system.c (sys_sysctl): Check for errors accessing user pointers.
	Use malloc instead of alloca in case size is insane.

2005-05-09  Roland McGrath  <roland@redhat.com>

	* configure.ac: Check for libaio.h.
	* desc.c (sys_io_setup, sys_io_submit, sys_io_cancel,
	sys_io_getevents, sys_io_destroy): New functions.
	* linux/syscall.h: Declare them.
	* linux/syscallent.h: Use those for io_* syscalls.
	* linux/alpha/syscallent.h: Likewise.
	* linux/hppa/syscallent.h: Likewise.
	* linux/ia64/syscallent.h: Likewise.
	* linux/mips/syscallent.h: Likewise.
	* linux/powerpc/syscallent.h: Likewise.
	* linux/s390/syscallent.h: Likewise.
	* linux/s390x/syscallent.h: Likewise.
	* linux/x86_64/syscallent.h: Likewise.
	From Zach Brown <zach.brown@oracle.com>.
	Fixes RH#155065.

	* debian/control (Architecture): Add ppc64.
	Fixes Debian bug #301089.

2005-05-05  Anton Blanchard  <anton@samba.org>

	* process.c (ptrace_cmds): Add PTRACE_GETVRREGS and PTRACE_SETVRREGS
	if defined.

2005-05-09  Roland McGrath  <roland@redhat.com>

	* strace.c (main): Refuse negative -s argument value.
	Fixes Debian bug #303256.

2005-04-25  Anton Blanchard  <anton@samba.org>

	* file.c (openmodes): Add O_NOATIME flag if defined.

2005-04-05  Anton Blanchard  <anton@samba.org>

	* linux/powerpc/ioctlent.h: Regenerated.

	* signal.c (signame): Don't try and dereference negative index.

	* linux/powerpc/syscallent.h: Add debug_setcontext, vserver,
	mbind, *_mempolicy, mq_*, sys_kexec_load, add_key, request_key,
	keyctl, waitid, sys_semtimedop.  Fix various other syscalls.

	* ipc.c (shm_resource_flags): New variable, table has SHM_HUGETLB
	but not IPC_NOWAIT, which have the same value.
	(sys_shmget): Use that instead of resource_flags.

2005-03-22  Roland McGrath  <roland@redhat.com>

	* desc.c (decode_select): Increase local buffer size.
	Fixes RH#151570.

	* configure.ac, NEWS: Version 4.5.11.
	* debian/changelog, strace.spec: 4.5.11-1.

	* linux/arm/syscallent.h: Fix 113 entry (syscall, not vm86old).

2005-03-14  Roland McGrath  <roland@redhat.com>

	* configure.ac, NEWS: Version 4.5.10.
	* debian/changelog, strace.spec: 4.5.10-1.

2005-02-26  GOTO Masanori  <gotom@debian.or.jp>

	* linux/alpha/syscallent.h: Fix the reversed order of lstat64 and
	fstat64.  Clean up osf_nrecvmsg and osf_ngetsockname.

2005-02-28  Andreas Schwab  <schwab@suse.de>

	* syscall.c (getrval2): Move #ifdef IA64 inside #ifdef LINUX.

2005-03-14  Roland McGrath  <roland@redhat.com>

	* linux/mips/syscallent.h: Update various calls.
	From Thiemo Seufer <ths@networkno.de>.
	Fixes Debian bug #256684.

	* debian/control (Architecture): Add s390.
	Fixes Debian bug #294172.

2005-03-06  Roland McGrath  <roland@redhat.com>

	* strace.c (trace) [PTRACE_GETSIGINFO]: Fetch siginfo_t for SIGSEGV
	and SIGBUS signals, use si_addr in output.

2005-03-01  Roland McGrath  <roland@redhat.com>

	* file.c (print_xattr_val): Add a cast.

2005-02-05  Roland McGrath  <roland@redhat.com>

	* desc.c (decode_select): Calculate size of passed fd_set vectors and
	copy in the user's size rather than the standard sizeof(fd_set).
	Fixes Debian bug #65654, #284290.

	* util.c (printpath, printpathn): Print NULL and don't try any fetch
	when ADDR is zero.
	Fixes Debian bug #63093.

	* debian/control (Build-Depends): Fix for s390 and sparc.
	From Bastian Blank <waldi@debian.org>.
	Fixes Debian bug #293564.

2004-12-19  Dmitry V. Levin  <ldv@altlinux.org>

	* strace.c (main) [!USE_PROCFS]: In child process, raise SIGSTOP
	right before execv() call.  Remove fake_execve() call.
	* defs.h (fake_execve): Remove unused declaration.
	* process.c (fake_execve): Remove unused function.
	Fixes RH#143365.

2005-02-04  Roland McGrath  <roland@redhat.com>

	* configure.ac, NEWS: Version 4.5.9.
	* debian/changelog, strace.spec: 4.5.9-2.

	* file.c (O_LARGEFILE): Omit when #undef'd because it was zero.

2005-02-02  Roland McGrath  <roland@redhat.com>

	* debian/control: Add strace-udeb package for installer debugging.
	* debian/rules (binary-arch): Build it.
	From Joshua Kwan <joshk@triplehelix.org>.
	Fixes Debian bug #268294.

	* file.c (openmodes) [O_LARGEFILE] [O_LARGEFILE == 0]: Redefine to
	known values for Linux.

	* util.c (printcall): Print 16 ?s when long is 8 bytes.
	Fixes RH#146932.

	* linux/sparc/syscall.h: Declare sys_epoll_create, sys_epoll_ctl,
	sys_epoll_wait.
	* linux/sparc64/syscall.h: Just #include "../sparc/syscall.h" here.
	* ioctl.c (nioctlents2): Add const to type.
	Fixes Debian bug #278449.

	* sock.c (iffflags): New variable, table of IFF_* values.
	(print_addr): New function.
	(sock_ioctl): Handle SIOCGIFADDR, SIOCGIFDSTADDR, SIOCGIFBRDADDR,
	SIOCGIFNETMASK, SIOCGIFFLAGS, SIOCGIFMETRIC, SIOCGIFMTU, SIOCGIFSLAVE,
	SIOCGIFHWADDR.	Use print_addr for SIOCGIFCONF, SIOCGIFNAME, and
	SIOCGIFINDEX, and fix their output.
	From Ulrich Drepper <drepper@redhat.com>.
	Fixes RH#138223.
	Fixes Debian bug #192164.

2004-12-20  Dmitry V. Levin  <ldv@altlinux.org>

	* configure.ac: Use AC_GNU_SOURCE macro instead of changing CFLAGS.
	* defs.h [HAVE_CONFIG_H]: Include config.h first.
	* strace.c: Include "defs.h" first.
	Fixes RH#143370.

	* syscall.c (call_summary): Fix potential NULL dereference.
	Fixes RH#143369.

2004-12-19  Dmitry V. Levin  <ldv@altlinux.org>

	* syscall.c (qual_signal): Check bounds for numeric signal names.
	Fix parser of symbolic signal names.
	Fix return code, as required by qualify() function.
	* syscall.c (qual_desc): Check bounds for descriptor number.
	* syscall.c (qual_syscall): Correct return code, to be consistent
	with qualify() and other qual_* functions.
	Fixes RH#143362.

2005-02-01  Roland McGrath  <roland@redhat.com>

	* system.c [LINUX] (MS_MANDLOCK, MS_NOATIME, MS_NODIRATIME, MS_BIND,
	MS_MOVE, MS_REC, MS_VERBOSE, MS_POSIXACL, MS_ACTIVE, MS_NOUSER):
	New macros.
	[LINUX] (mount_flags): Add them.
	[LINUX] (sys_mount): If any of (MS_BIND|MS_MOVE|MS_REMOUNT) bits are
	set in the flags argument, don't try to fetch the filesystem string.
	Fixes RH#141932.

	* config.guess: Update from canonical version, timestamp 2004-11-12.
	* config.sub: Likewise, timestamp 2004-11-30.

	* process.c [LINUX] [X86_64] (sys_arch_prctl): New function.
	* linux/syscall.h: Declare it.
	* linux/x86_64/syscallent.h: Use it.
	Part of RH#142667.

	* process.c (sys_sched_setscheduler): Use %#lx format for bad pointer.
	(sys_sched_getparam, sys_sched_setparam): Likewise.
	Part of RH#142667.

	* signal.c [HAVE_SIGACTION] [LINUX && X86_64] (SA_RESTORER): Define
	here too.
	Part of RH#142667.

	* linux/syscallent.h: Use sys_mincore instead of printargs.
	* linux/x86_64/syscallent.h: Likewise.  Also use sys_getrlimit,
	sys_semtimedop, sys_umount2.
	Part of RH#142667.

	* syscall.c (qual_signal): Fix inverted return value and bogus
	argument to qualify_one in the named case.

	* file.c (print_xattr_val): Don't use auto array sized by syscall
	argument.  Use malloc instead, so it can fail for insane values.
	Fixes Debian bug #283704.

	* net.c (sys_getsockopt): Fix a format %ld -> %d.

	* linux/syscall.h [IA64] (SYS_semtimedop): #undef it.

	* syscall.c (syscall_enter) [X86_64]: Fix 32-bit argument register map
	not to double the middle entry!
	Fixes RH#146093.

	* linux/x86_64/syscallent.h: Fix exit_group entry.

	* util.c (getpc) [S390 || S390X]: Implement it.
	Patch by David Wilder <wilder@us.ibm.com>.

	* linux/ia64/syscallent.h: Add fadvise64, fstatfs64, statfs64, mbind,
	[gs]et_mempolicy, mq_*, sys_kexec_load, vserver, and waitid.
	Fixes RH#146245.

2005-01-22  Andreas Schwab  <schwab@suse.de>

	* net.c (sys_getsockopt): Change type of len to int.

2004-10-19  Roland McGrath  <roland@redhat.com>

	* configure.ac, NEWS: Version 4.5.8.
	* debian/changelog, strace.spec: 4.5.8-1.

	* file.c (sys_fadvise64): Conditionalize just on [LINUX].

	* configure.ac: Check for sys/epoll.h.
	* desc.c: Protect #include <sys/epoll.h> with [HAVE_SYS_EPOLL_H].
	(epollctls, epollevents): Protect each entry with #ifdef on its macro.

	* strace.c (handle_group_exit): Don't detach leader that wasn't
	TCB_ATTACHED.  Instead mark it with TCB_GROUP_EXITING.
	Remove droptcb loop at end, no longer required since 2.6 reports each
	thread death.
	Fixes RH#135254.

	* strace.c (trace): Use handle_group_exit for non-TCB_ATTACHED child
	taking signal when it has nclone_threads > 0.

	* strace.c (handle_group_exit, trace): Mark leader with
	TCB_GROUP_EXITING and don't be surprised at child deaths when their
	leader has it set.
	Fixes RH#132150.

	* process.c (WCOREFLAG): Define if not defined.
	(W_STOPCODE, W_EXITCODE): Likewise.
	Reported by Marty Leisner <mleisner@eng.mc.xerox.com>.

	* sock.c [! LINUX]: Include <sys/socket.h> before <sys/sockio.h>.
	Reported by Marty Leisner <mleisner@eng.mc.xerox.com>.

	* debian/rules: Make strace64.1.gz symlink to strace.1.gz instead of
	strace64.1 to strace.1, which doesn't exist.
	Fixes Debian bug #269220.

2004-09-05  Phil Blundell  <pb@nexus.co.uk>

	* linux/arm/syscallent.h: New file.

2004-10-19  Roland McGrath  <roland@redhat.com>

	* debian/rules (DEB_BUILD_GNU_TYPE, CONFIG_OPTS): New variables.
	[$(DEB_HOST_GNU_TYPE) == s390-linux] (build64, HOST64, CC64): Set them.
	(build/Makefile): Use $(CONFIG_OPTS).
	(build64/Makefile): Pass --host as well as --build.
	From Bastian Blank <waldi@debian.org>.
	Fixes Debian bug #271500.

	* linux/hppa/syscallent.h: Update for 2.6.9 syscalls.
	From Randolph Chung <tausq@debian.org>
	Fixes Debian bug #273887.

	* file.c (sys_llseek): Revert last change.

2004-09-14  Richard Henderson  <rth@twiddle.net>

	* linux/alpha/syscallent.h: Add tgkill, *stat64, vserver, mbind,
	[gs]et_mempolicy, mq_*, waitid.

2004-10-07  Roland McGrath  <roland@redhat.com>

	* file.c (sys_llssek, sys_readahead, sys_fadvise64, sys_fadvise64_64):
	Use LONG_LONG macro.
	* io.c (sys_pread, sys_pwrite, sys_sendfile): Likewise.

	* linux/x86_64/syscallent.h: Fix botched table entries.
	From Ulrich Drepper <drepper@redhat.com>.

	* mem.c [LINUX] (sys_mbind, sys_set_mempolicy, sys_get_mempolicy):
	New functions.
	* linux/syscall.h: Declare them.
	* linux/x86_64/syscallent.h: Likewise.
	From Ulrich Drepper <drepper@redhat.com>.

	* linux/syscallent.h: Handle mbind, set_mempolicy, get_mempolicy.
	From Ulrich Drepper <drepper@redhat.com>.

	* file.c [LINUX && (I386 || X86_64)] (sys_fadvise64, sys_fadvise64_64):
	New functions.
	* linux/syscall.h: Declare them.
	* linux/syscallent.h: Handle fadvise64 and fadvise64_64 using those.
	* linux/x86_64/syscallent.h: Likewise.
	From Ulrich Drepper <drepper@redhat.com>.

2004-09-13  Dmitry V. Levin  <ldv@altlinux.org>

	* linux/ioctlsort.c (main): Omit duplicate lines
	(with same name and code) from output.
	* linux/ioctlent.sh: Build the list of ioctls defined in
	scsi/sg.h (0x22..), scsi/scsi.h and scsi/scsi_ioctl.h (0x53..),
	as suggested by Peter Jones <pjones@redhat.com>
	* linux/ioctlent.h: Regenerated.
	Fixes RH#129808.

2004-09-13  Ulrich Drepper <drepper@redhat.com>
	    Dmitry V. Levin <ldv@altlinux.org>

	* time.c [LINUX] (print_rtc): New function, for printing rtc_time
	structure.
	[LINUX] (rtc_ioctl): New function, for parsing RTC_* ioctls.
	* ioctl.c [LINUX] (ioctl_decode): Call rtc_ioctl.
	* defs.h [LINUX]: Declare rtc_ioctl.
	Fixes RH#58606.

2004-10-06  Roland McGrath  <roland@redhat.com>

	* desc.c [LINUX] (sys_epoll_create, sys_epoll_ctl, sys_epoll_wait):
	New functions.
	* linux/syscall.h: Declare them.
	* linux/syscallent.h: Use those for epoll_* syscalls.
	* linux/alpha/syscallent.h: Likewise.
	* linux/hppa/syscallent.h: Likewise.
	* linux/ia64/syscallent.h: Likewise.
	* linux/powerpc/syscallent.h: Likewise.
	* linux/s390/syscallent.h: Likewise.
	* linux/s390x/syscallent.h: Likewise.
	* linux/sparc/syscallent.h: Likewise.
	* linux/sparc64/syscallent.h: Likewise.
	* linux/sparc64/syscallent2.h: Likewise.
	* linux/x86_64/syscallent.h: Likewise.
	From Ulrich Drepper <drepper@redhat.com>.
	Fixes RH#134463.

	* resource.c (resources): Add RLIMIT_LOCKS, RLIMIT_SIGPENDING,
	and RLIMIT_MSGQUEUE, if defined.
	From Ulrich Drepper <drepper@redhat.com>.
	Fixes RH#133594.

	* net.c [HAVE_SENDMSG] (printcmsghdr): New function.
	(printmsghdr): Use it.
	From Ulrich Drepper <drepper@redhat.com>.
	Fixes RH#131689.

	* file.c (sprintmode): Add const to return type.
	(sprintfstype): Likewise.
	* signal.c (printsiginfo): Add a const.

2004-09-15  Roland McGrath  <roland@redhat.com>

	* linux/x86_64/syscallent.h: Use sys_waitid.

	* linux/syscallent.h: waitid takes 5 arguments, and is in TP category.
	* process.c (sys_waitid): Handle fifth argument (struct rusage *).

2004-09-11  Roland McGrath  <roland@redhat.com>

	* time.c (sys_clock_nanosleep): Print zero flags arg correctly.
	(sys_timer_settime): Likewise.
	(printsigevent): Print signals by name for SIGEV_SIGNAL.
	(sys_timer_create): Print clock ID symbolically.
	From Ulrich Drepper <drepper@redhat.com>.
	Fixes RH#131420.

2004-09-07  Michal Ludvig  <mludvig@suse.cz>

	* defs.h (nioctlents1, nsignals2): Fix typos in decls.

2004-09-03  Roland McGrath  <roland@redhat.com>

	* syscall.c (qual_options): Add const to defn.
	Update all uses.
	(call_count, error_count, tv_count): Variables removed.
	(struct call_counts, counts): New type and variable.
	Update all users of the old three to use the new array of structs.
	(trace_syscall): Allocate counts on first use.
	(sorted_count): Variable removed.
	(call_summary): Allocate locally.

	* syscall.c (sysent0, sysent1, sysent2, sysent): Add const to defn.
	(nsyscalls0, nsyscalls1, nsyscalls2): Likewise.
	(errnoent0, errnoent1, errnoent2, errnoent): Likewise.
	(nerrnos0, nerrnos1, nerrnos2): Likewise.
	* signal.c (signalent0, signalent1, signalent2): Likewise.
	(nsignals0, nsignals1, nsignals2): Likewise.
	(signame): LIkewise.
	* ioctl.c (ioctlent0, ioctlent1, ioctlent2): Likewise.
	(nioctlents0, nioctlents1, nioctlents2): Likewise.
	(ioctl_lookup, ioctl_next_match): Likewise.
	* defs.h: Update decls.
	* io.c (sys_ioctl): Update users.

	* util.c (xlookup, printxval, addflags, printflags): Use const for
	struct xlat * argument.
	* defs.h (xlookup, printxval, addflags, printflags): Update decls.
	* bjm.c: Add const to all struct xlat defns.
	* desc.c: Likewise.
	* file.c: Likewise.
	* ipc.c: Likewise.
	* mem.c: Likewise.
	* net.c: Likewise.
	* proc.c: Likewise.
	* process.c: Likewise.
	* resource.c: Likewise.
	* signal.c: Likewise.
	* sock.c: Likewise.
	* stream.c: Likewise.
	* system.c: Likewise.
	* term.c: Likewise.
	* time.c: Likewise.
	* util.c: Likewise.

2004-09-01  Roland McGrath  <roland@redhat.com>

	* linux/x86_64/syscallent.h: Add new entries for timer_*, clock_*, and
	mq_* syscalls, and names only for new calls up to 252.
	* linux/syscallent.h: Add waitid.
	* linux/x86_64/syscallent.h: Likewise.
	* linux/syscall.h: Declare sys_waitid.

	* process.c (internal_wait): Take second arg giving index of flags
	argument.
	* defs.h: Update prototype.
	* syscall.c (internal_syscall): Update caller.
	Also use internal_wait for SYS_waitid.
	* process.c (sys_waitid): Define for [LINUX] as well.
	Don't tweak TCB_SUSPENDED--internal_wait does that.
	(waitid_types): Conditionalize use of nonstandard P_* macros.

2004-08-31  Roland McGrath  <roland@redhat.com>

	* configure.ac, NEWS: Version 4.5.7.
	* debian/changelog: 4.5.7-1.
	* strace.spec: 4.5.7-2.

	* debian/rules: Rewrite sparc64 change of 2004-07-12.
	Always do each build in a separate build directory.
	Fixes Debian bug #254728.

	* time.c (clocknames): Use #ifdef around CLOCK_* uses.

	* strace.1: Say that -c shows system CPU time, not real time.
	Fixes Debian bug #254438.

	* syscall.c (dumpio): Match pread and pwrite system calls too.
	Fixes Debian bug #239947.

	* net.c (sockoptions): Add all SO_* macros known in Linux 2.6.9.
	Fixes Debian bug #171653.

2004-07-12  Dmitry V. Levin  <ldv@altlinux.org>

	* signal.c [LINUX] (parse_sigset_t): Fix hex strings parser.
	Fixes RH#128091.

2004-08-30  Roland McGrath  <roland@redhat.com>

	* strace.c (main): Don't call fake_execve under -c.
	From Ulrich Drepper <drepper@redhat.com>.
	Fixes RH#129166.

	* net.c (sockipoptions): Add some options.
	[SOL_IPV6] (sockipv6options): New variable.
	(sys_getsockopt, printsockopt): Use it for SOL_IPV6 level.
	From Ulrich Drepper <drepper@redhat.com>.
	Fixes RH#128391.

	* time.c (clocknames): New variable, symbolic names for clock_t.
	(sys_clock_settime, sys_clock_gettime, sys_clock_nanosleep): Use it.
	From Ulrich Drepper <drepper@redhat.com>.
	Fixes RH#129378.

	* system.c (personality_options): Hard-code values here.
	Don't #include <linux/personality.h> at all.
	Fixes RH#130965 and Debian bug #40588.

	* file.c (print_xattr_val): New function to show attribute values.
	(sys_setxattr, sys_fsetxattr, sys_getxattr, sys_fgetxattr): Use it.
	From Ulrich Drepper <drepper@redhat.com>.
	Fixes RH#131177.

2004-07-12  Roland McGrath  <roland@redhat.com>

	* configure.ac, NEWS: Version 4.5.6.
	* strace.spec, debian/changelog: 4.5.6-1.

	* Makefile.am (EXTRA_DIST): Add linux/sparc64 files.

	* debian/rules: On sparc-linux, build strace64 as well.
	From Ben Collins <bcollins@debian.org>.
	Fixes Debian bug #254728.

2004-07-07  David S. Miller  <davem@nuts.davemloft.net>

	* linux/sparc/syscallent.h: Sync with reality.
	* linux/sparc/syscall.h (sys_sendfile64, sys_futex, sys_gettid,
	sys_sched_setaffinity, sys_sched_getaffinity, sys_setxattr,
	sys_lsetxattr, sys_fsetxattr, sys_getxattr, sys_lgetxattr,
	sys_fgetxattr, sys_listxattr, sys_llistxattr, sys_flistxattr,
	sys_removexattr, sys_lremovexattr, sys_fremovexattr,
	sys_remap_file_pages, sys_readahead, sys_tgkill, sys_statfs64,
	sys_fstatfs64, sys_clock_settime, sys_clock_gettime,
	sys_clock_getres, sys_clock_nanosleep, sys_timer_create,
	sys_timer_settime, sys_timer_gettime): New declarations.
	* linux/sparc64/dummy2.h, linux/sparc64/syscallent2.h,
	linux/sparc64/syscall.h, linux/sparc64/errnoent.h,
	linux/sparc64/errnoent1.h, linux/sparc64/errnoent2.h,
	linux/sparc64/ioctlent.h, linux/sparc64/ioctlent1.h,
	linux/sparc64/ioctlent2.h, linux/sparc64/signalent.h,
	linux/sparc64/signalent.h, linux/sparc64/signalent.h,
	linux/sparc64/signalent1.h, linux/sparc64/signalent2.h,
	linux/sparc64/syscall1.h, linux/sparc64/syscallent.h,
	linux/sparc64/syscallent1.h: New files.
	* defs.h (LINUXSPARC): Define also when SPARC64.
	(LINUX && SPARC64): Set SUPPORTED_PERSONALITIES to 3.
	Ignore SIGTRAP after execve by defining TCB_WAITEXECVE.
	Define possibly missing __NR_exit_group.  Declare getrval2.
	* configure.ac (sparc64): New architecture case.
	* file.c (stat_sparc64): New structure.
	(printstat_sparc64): New output routine for that.
	(printstat): Call it, if personality is 2.
	(printstat64): Likewise.
	* util.c: Conditionalize ptrace defines on LINUXSPARC
	not LINUX && SPARC.
	(SPARC64 && LINUX): Define r_pc to r_tpc, and PTRACE_FOOREGS
	to PTRACE_FOOREGS64 so that more sparc code can be shared
	between 64-bit and 32-bit.
	(_hack_syscall5): Correct trap number when SPARC64.
	(PTRACE_WRITE{TEXT,DATA}): Add SPARC64 to ifdef guard.
	(getpc): Handle SPARC64 && LINUX.
	(printcall): Likewise.
	(arg fetching/setting): Use same code for SPARC64 LINUX
	as for SPARC.
	(setbpt): Handle SPARC64 && LINUX.
	(clearbpt): Likewise.
	* signal.c: Conditionalize ptrace defines on SPARC and
	SPARC64.
	(SPARC64 && LINUX): Define r_pc to r_tpc, and PTRACE_FOOREGS
	to PTRACE_FOOREGS64 so that more sparc code can be shared
	between 64-bit and 32-bit.
	(m_siginfo): Use same definition on SPARC64 as SPARC.
	(sys_sigreturn): Handle LINUX && SPARC64.
	* syscall.c: Conditionalize ptrace defines on SPARC and
	SPARC64.
	(SPARC64 && LINUX): Define r_pc to r_tpc, and PTRACE_FOOREGS
	to PTRACE_FOOREGS64 so that more sparc code can be shared
	between 64-bit and 32-bit.
	(getscno): Use same static state on SPARC64 as SPARC,
	and add SPARC64 handling.
	(get_error): Handle LINUX && SPARC64.
	(force_result): Likewise.
	(syscall_enter): Likewise.
	(trace_syscall): Handle sys_socketcall and sys_ipc on SPARC64
	just like SPARC.
	(getrval2): Handle LINUX && SPARC64.
	* process.c: Conditionalize ptrace defines on SPARC and
	SPARC64.
	(SPARC64 && LINUX): Define r_pc to r_tpc, and PTRACE_FOOREGS
	to PTRACE_FOOREGS64 so that more sparc code can be shared
	between 64-bit and 32-bit.
	(change_syscall): Handle LINUX && SPARC64.
	(struct_user_offsets): Ifdef out those which do not exist
	on SPARC64.
	* net.c (sys_pipe): Handle LINUX && SPARC64.
	* ioctl.c: Fix initializer typo for nioctlents2, was
	nioctlents1 by accident.

2004-06-28  Andreas Schwab  <schwab@suse.de>

	* process.c (internal_exec): Move TCB_WAITEXECVE handling here.
	(sys_execve): Remove it here.

2004-07-12  Roland McGrath  <roland@redhat.com>

	* Makefile.am (EXTRA_DIST): Add linux/sh64/syscallent.h.

	* debian/control (Section): Move to utils, matching Debian override.

	* net.c (addrfams): Make variable global.
	* sock.c (sock_ioctl): Decode the arguments for SIOCGIFNAME,
	SIOCGIFINDEX, and SIOCGIFCONF.
	From Ulrich Drepper <drepper@redhat.com>.
	Fixes RH#126917.

	* linux/ioctlsort.c: Add some #includes.
	[POWERPC]: Kludge out high bits.
	* linux/ia64/ioctlent.h: Regenerated using RHEL3 headers.
	* linux/powerpc/ioctlent.h: Likewise.

2004-07-11  Roland McGrath  <roland@redhat.com>

	* linux/ioctlent.sh: Replace asm with $asm in all places.

	* configure.ac: Add I386 as AM_CONDITIONAL.
	* Makefile.am [LINUX]: Add maintainer-mode rules to regenerate
	the ioctlent.h file.

2004-07-08  Roland McGrath  <roland@redhat.com>

	* resource.c (sys_quotactl): Truncate first argument to 32 bits, since
	that's what the kernel will do.

2004-07-07  Roland McGrath  <roland@redhat.com>

	* linux/ioctlent.sh: Take optional second argument to use as directory
	name in place of `asm'.

2004-06-27  Roland McGrath  <roland@redhat.com>

	* configure.ac, NEWS: Version 4.5.5.
	* strace.spec, debian/changelog: 4.5.5-1.

2004-06-22  Roland McGrath  <roland@redhat.com>

	* syscall.c (syscall_fixup) [LINUX && X86_64]: For 32-bit process,
	sign extend the low 32 bits of RAX to 64 bits.
	Fixes RH#126547.

	* syscall.c (force_result): [LINUX && X86_64]: Fix RAX*4 -> RAX*8.

2004-06-03  Roland McGrath  <roland@redhat.com>

	* configure.ac, NEWS: Version 4.5.4.
	* strace.spec, debian/changelog: 4.5.4-1.

	* net.c (domains): Add many PF_* values #ifdef PF_*.
	(addrfams): Add many AF_* values #ifdef AF_*.
	Fixes Debian bug #250506.

2004-05-02  Dmitry V. Levin  <ldv@altlinux.org>

	* linux/ioctlsort.c (compare): When ioctl codes equal, compare
	names.
	(main): Print a note that program output is generated by
	ioctlsort.
	* linux/ioctlent.sh: Build the list of ioctls defined in
	linux/fb.h (0x46..), linux/kd.h (0x4B..), linux/cdrom.h (0x53..),
	asm/ioctls.h (0x54..), linux/vt.h (0x56..), linux/videotext.h
	(0x71..), linux/videotext.h (0x72..), asm/sockios.h (0x89..),
	linux/sockios.h (0x89..), linux/wireless.h (0x8B..).
	* linux/ioctlent.h: Regenerated from linux-2.6.5.
	Fixes RH#122257.

2004-06-03  Roland McGrath  <roland@redhat.com>

	* debian/control (Architecture): Add amd64.
	Fixes Debian bug #246568.

	* strace.c (main) [LINUX]: Expand TCBTAB as necessary for threads
	attached.  Attach threads only under -f.  Set TCB_FOLLOWFORK in them.
	(expand_tcbtab): New function, broken out of ...
	* process.c (fork_tcb): ... here, call that.
	* defs.h: Declare expand_tcbtab.

2004-04-19  Roland McGrath  <roland@redhat.com>

	* process.c (printstatus): Add a space before | in output.

2004-04-16  Roland McGrath  <roland@redhat.com>

	* configure.ac: Version 4.5.3.
	* strace.spec, debian/changelog: 4.5.3-1.

2004-03-18  Dmitry V. Levin  <ldv@altlinux.org>

	* resource.c (sys_quotactl) [LINUX]: Cast arithmetic shift operand
	from long to unsigned long, to fix output of the quotactl command
	parser.
	Fixes RH#118694.

2004-04-16  Roland McGrath  <roland@redhat.com>

	* linux/s390/ioctlent.h, linux/s390x/ioctlent.h: Update DASD ioctls.
	From Maxim Shchetynin <maxim@de.ibm.com>.

	* configure.ac: Check for <mqueue.h>.
	* ipc.c (sys_mq_open, printmqattr) [! HAVE_MQUEUE_H]: Don't try to
	decode struct mq_attr.
	* NEWS: Mention mq support.

	* linux/syscall.h: Support new mq_* syscalls on Linux.
	* linux/syscallent.h: Likewise.
	* linux/dummy.h: Likewise.
	* ipc.c: Likewise.
	* time.c (printsigevent): Handle SIGEV_THREAD.
	From Ulrich Drepper <drepper@redhat.com>.
	Fixes RH#120701.

2004-04-13  Roland McGrath  <roland@redhat.com>

	* net.c (msg_flags): Grok MSG_FIX, MSG_SYN, MSG_RST, MSG_NOSIGNAL,
	MSG_MORE.
	From Ulrich Drepper <drepper@redhat.com>.
	Fixes RH#120541.

	* process.c (printstatus): Mask out bits presented symbolically, and
	print "| 0xnnn" if the remaining bits are not all zero.
	Fixes Debian bug #240062.

	* process.c (print_affinitylist): Rewritten to handle indirect values.
	(sys_sched_setaffinity, sys_sched_getaffinity): Update callers.
	From Ulrich Drepper <drepper@redhat.com>.
	Fixes RH#118685.

	* acinclude.m4: Quote first argument to AC_DEFUN in all cases.

2004-04-08  Roland McGrath  <roland@redhat.com>

	* strace.c (main) [LINUX]: When attaching for -p, look in
	/proc/PID/task for all threads and attach them as presumed
	CLONE_THREAD children.
	* NEWS: Mention the feature.
	Fixes RH#120462.

2004-03-02  Roland McGrath  <roland@redhat.com>

	* util.c (setbpt): Fix one missed spot to use new arg0_index macro.
	From Michael Holzheu <HOLZHEU@de.ibm.com>.

	* debian/control (Standards-Version): Update to 3.6.1.

2004-03-01  Roland McGrath  <roland@redhat.com>

	* configure.ac, NEWS: Version 4.5.2.
	* strace.spec, debian/changelog: 4.5.2-1.

	* strace.c (main): Avoid potential buffer overruns from ludicrous
	arguments or PATH values.
	* syscall.c (qual_signal): Bail out for too-long string.

	* mem.c [LINUX]: <asm/mman.h> -> <linux/mman.h>
	Fixes Debian bug #223207.

	* linux/sparc/syscall.h: Copy linux/syscall.h decls of sys_sched_*.

	* configure.ac: Check for `struct user_desc' in <asm/ldt.h>.
	* process.c [HAVE_STRUCT_USER_DESC]: Use struct user_desc in place of
	struct modify_ldt_ldt_s.
	* mem.c [HAVE_STRUCT_USER_DESC]: Likewise.

	* system.c (sysctl_vm): Conditionalize VM_* macro uses, add some more.
	From Tim Yamin <plasmaroo@gentoo.org>.

	* process.c (sys_execve): Clear instead of set TCB_WAITEXECVE on
	erring syscall.

	* configure.ac: Check for `struct pt_all_user_regs'
	and `struct ia64_fpreg' in <sys/ptrace.h>.
	* util.c, process.c, syscall.c, signal.c: Work around conflicts between
	<sys/ptrace.h> and <linux/ptrace.h> for defining those types.

	* process.c (struct_user_offsets) [LINUX && IA64]: Conditionalize
	PT_AR_CSD and PT_AR_SSD uses in case of older kernel headers.

	* util.c [LINUX] (arg0_index, arg1_index): New macros.
	[S390 || S390X]: Define them with inverted values.
	(setbpt): Use them for u_arg indices.

2004-02-26  Andreas Schwab  <schwab@suse.de>

	* defs.h [LINUX && IA64]: Declare getrval2 also on IA64.
	* net.c (sys_pipe) [LINUX && IA64]: For IA64 use the two return values.
	* syscall.c (getrval2) [LINUX && IA64]: Implement for IA64.

2004-03-01  Roland McGrath  <roland@redhat.com>

	* linux/dummy.h (sys_sched_getscheduler, sys_sched_setparam,
	sys_sched_getparam, sys_sched_setscheduler, sys_sched_getscheduler,
	sys_sched_get_priority_max, sys_sched_get_priority_min): Remove macros.
	* process.c [LINUX] (sys_sched_getscheduler, sys_sched_setparam,
	sys_sched_getparam, sys_sched_setscheduler, sys_sched_getscheduler,
	sys_sched_get_priority_min): New functions.
	From Ulrich Drepper <drepper@redhat.com>.
	Fixes RH#116990.

2004-02-20  Roland McGrath  <roland@redhat.com>

	* linux/hppa/syscallent.h: Update some syscalls.
	From Randolph Chung <tausq@debian.org>.
	Fixes Debian bug #231632.

2003-12-31  David Mosberger  <davidm@hpl.hp.com>

	* process.c (internal_exit): For ia64, also recognize IA-32 252
	as exit_group().
	(change_syscall): For IA64, also support changing IA-32 syscalls.
	* syscall.c (internal_syscall): For IA64, also recognize IA-32
        syscall 252 (exit_group) as an internal_exit() syscall.
	* util.c (SYS_fork): For IA64, define them to the IA-32 syscall
	number.
	(SYS_vfork): Likewise.
	(arg_setup): For IA64 version, also support IA-32 syscalls.
	(get_arg0): Likewise.
	(get_arg1): Likewise.
	(set_arg0): Likewise.
	(set_arg1): Likewise.

2004-02-15  Anton Blanchard  <anton@samba.org>

	* linux/powerpc/syscallent.h: Add rtas call.
	Shift multiplexed syscalls to start at 300, we are already about
	to hit 256 real syscalls.
	* linux/syscall.h: SYS_socket_subcall is now 300 for [POWERPC].

2004-02-19  Roland McGrath  <roland@redhat.com>

	* strace.c (main): Use TCP->pid, not PID, in -p message.
	Fixes Debian bug #229802.

2004-01-13  Roland McGrath  <roland@redhat.com>

	* syscall.c (force_result) [LINUX] [S390 || S390X]: Remove bogus upeek
	call.

	* stream.c (internal_stream_ioctl): Fix typo strict -> struct.
	Reported by Petter Reinholdtsen <pere@hungry.com>.

2003-12-31  David Mosberger  <davidm@hpl.hp.com>

	* process.c (struct_user_offsets) [IA64]: Fix up register name list.

2003-12-14  Anton Blanchard  <anton@samba.org>

	* file.c (sys_getdents64): Don't cast d_ino and d_off to unsigned long.
	Use %llu formats for them.

	* file.c [LINUX] (fsmagic): Add SYSFS_MAGIC.

	* linux/powerpc/syscallent.h: Update to include recently added
	syscalls.

	* syscall.c (get_error) [POWERPC]: Cast result to unsigned long for
	ppc64, we were misreporting syscalls that really succeeded as having
	failed.

2004-01-13  Roland McGrath  <roland@redhat.com>

	* strace.1: Remove comment about vfork on Linux.
	Fixes Debian bug #223390.

	* file.c (direnttypes): Define under [LINUX] as well.  Add DT_UNKNOWN.
	(sys_getdents64) [LINUX]: Print d_type field.

2003-12-15  Dmitry V. Levin  <ldv@altlinux.org>

	* strace.c (trace) [WCOREDUMP]: Show coredump status of the
	killed process if available.  Fixes RH#112117.

2003-11-13  Roland McGrath  <roland@redhat.com>

	* configure.ac, NEWS: Version 4.5.1.
	* strace.spec, debian/changelog: 4.5.1-1.

2003-09-06  Dmitry V. Levin  <ldv@altlinux.org>

	* defs.h (ioctl_lookup): Prototype change.
	* ioctl.c (ioctl_next_match): New function.
	* defs.h: Declare it.
	* io.c (sys_ioctl): Use it, to display all possible ioctl names
	when there's more than one match.
	* ioctl.c (ioctl_lookup): Likewise.
	* stream.c (internal_stream_ioctl): Likewise.
	Patch from Solar Designer <solar@openwall.com>.

2003-11-13  Roland McGrath  <roland@redhat.com>

	* linux/sh/syscallent.h: Use sys_setgroups32, sys_getgroups32.
	* linux/sh64/syscallent.h: Likewise.

2003-09-06  Dmitry V. Levin  <ldv@altlinux.org>

	Fixes for RH#105359.
	* util.c (printuid): New function.
	* defs.h: Declare it.
	* file.c (sys_chown): Use it.
	* file.c (sys_fchown): Likewise.
	* process.c (sys_setreuid, sys_setregid, sys_setresuid,
	sys_setresgid): Likewise.
	* linux/syscallent.h: Better handle getgid32, geteuid32, getegid32,
	setreuid32, setregid32, getgroups32, setgroups32, fchown32,
	setresuid32, getresuid32, setresgid32, getresgid32, chown32,
	setuid32, setgid32, setfsuid32, setfsgid32.
	* process.c [LINUX]: Define GETGROUPS32_T.
	* process.c [LINUX] (sys_setgroups32, sys_getgroups32):
	New functions.
	* linux/syscall.h (sys_setgroups32, sys_getgroups32):
	Declare them.

2003-11-11  Roland McGrath  <roland@redhat.com>

	* strace.c (main): Bail with usage error for missing command before we
	open the -o file or fiddle uids.

2003-11-06  Roland McGrath  <roland@redhat.com>

	* strace.c (main): Treat piped output more like file output.
	Disallow -ff with piped output.  Fixes RH#105366.
	Reported by Dmitry V. Levin <ldv@altlinux.org>

	* strace.c (tprintf): Check result of vfprintf and use perror when it
	fails while not writing to stderr itself.  Fixes Debian bug #218762.

	* net.c (printsock): Fix typo in #ifdef AF_NETLINK.
	From Ulrich Drepper <drepper@redhat.com>.

2003-11-01  Roland McGrath  <roland@redhat.com>

	* syscall.c (trace_syscall) [LINUX]: Calculate ONE_TICK once using
	setitimer rather than hard-coding a value based on HZ.
	Fixes RH#108012, reported by Florian La Roche <laroche@redhat.com>.

2003-10-21  Roland McGrath  <roland@redhat.com>

	* strace.1: Fixed a few spelling errors.
	Fixes Debian bug #217008.

	* syscall.c: Revert last change, was broken.

2003-10-01  Roland McGrath  <roland@redhat.com>

	* process.c (internal_clone): Don't suspend parent when call requested
	a specific PID that is not a traced child.

	* signal.c [LINUX] (parse_sigset_t): Rewrite to process hex strings
	from right to left so we don't have to presume the size.
	Reported by David Woodhouse <dwmw2@redhat.com>.

2003-09-25  Roland McGrath  <roland@redhat.com>

	* mem.c (mmap_prot) [PROT_SEM, PROT_GROWSDOWN, PROT_GROWSUP]: Include
	these in the table if they are defined.

2003-09-24  Roland McGrath  <roland@redhat.com>

	* configure.ac, NEWS: Version 4.5.
	* strace.spec, debian/changelog: 4.5-1.

	* syscall.c (get_scno) [LINUX] [S390 || S390X]: Bail out of
	instruction decoding branch if TCB_INSYSCALL is clear.
	Reported by <jochen@penguin-breeder.org>.

	* linux/ioctlent.h: Swap order of overloaded TC* and SNDCTL_* values.

2003-09-23  Roland McGrath  <roland@redhat.com>

	* strace.spec: On ppc64 (maybe others later), create an strace64
	package as well containing just /usr/bin/strace64.

	* signal.c (sprintsigmask): Print RT_%u for __SIGRTMIN..__SIGRTMAX.
	Fixes RH#104365.

2003-08-21  Roland McGrath  <roland@redhat.com>

	* linux/syscallent.h: Fix mlock argument count.  Fixes RH#101499.
	* linux/x86_64/syscallent.h: Likewise.
	* linux/s390/syscallent.h: Likewise.
	* linux/s390x/syscallent.h: Likewise.

2003-07-28  Daniel Jacobowitz  <drow@mvista.com>

	* defs.h (ALIGN64): Define for MIPS.
	* io.c (PREAD_OFFSET_ARG): Define.
	(sys_pread, sys_pwrite): Use it.
	* process.c (struct_user_offsets) [SH]: Check whether REG_XDREG0
	is defined.
	* linux/sh/syscallent.h (pread, pwrite): Take six arguments.
	(truncate64, ftruncate64): Pretty-print.
	* linux/mips/syscallent.h (pread, pwrite): Take six arguments.
	(truncate64, ftruncate64): Take four arguments.

2003-07-17  Roland McGrath  <roland@redhat.com>

	* configure.ac, NEWS: Version 4.4.99.
	* strace.spec, debian/changelog: 4.4.99-1.

2003-07-15  Anton Blanchard  <anton@samba.org>

	* ipc.c: Add SHM_HUGETLB field.
	Mask out permission bits in msgget, semget and shmget before
		printing resource_flags.
	Mask execute permission bits (even though we dont currently
		use them).

2003-07-17  Roland McGrath  <roland@redhat.com>

	* linux/powerpc/syscallent.h (tgkill): New at 250.

	* linux/syscallent.h: truncate64/ftruncate64 need 3 args.
	From Ulrich Drepper <drepper@redhat.com>.

	* linux/syscallent.h: Handle statfs64, fstatfs64, utimes.
	* file.c (printstatfs): Print f_fsid and f_frsize.
	[LINUX] (printstatfs64, sys_statfs64, sys_fstatfs64): New functions.
	* linux/syscall.h: Add decls.
	From Ulrich Drepper <drepper@redhat.com>.

2003-07-09  Roland McGrath  <roland@redhat.com>

	* linux/ia64/syscallent.h (tgkill): New at 1235.

2003-07-05  Richard Henderson  <rth@twiddle.net>

	* process.c (sys_clone): Order arguments for alpha the same as x86_64.
	* syscall.c (ERESTART_RESTARTBLOCK): New.
	(trace_syscall): Print it.
	* linux/alpha/syscallent.h (osf_syscall): Name properly.
	(osf_set_program_attributes): Fix typo.
	(osf_nfssvc): Likewise.
	(osf_sigsendset): Likewise.
	(getdents64, gettid, readahead, tkill, setxattr, lsetxattr, fsetxattr,
	getxattr, lgetxattr, fgetxattr, listxattr, llistxattr, flistxattr,
	removexattr, lremovexattr, fremovexattr, futex, sched_setaffinity,
	sched_getaffinity, tuxcall, io_setup, io_destroy, io_getevents,
	io_submit, io_cancel, exit_group, lookup_dcookie, epoll_create,
	epoll_ctl, epoll_wait, remap_file_pages, set_tid_address,
	restart_syscall, fadvise, timer_create, timer_settime, timer_gettime,
	timer_getoverrun, timer_delete, clock_settime, clock_gettime,
	clock_getres, clock_nanosleep, semtimedop): New.

2003-07-08  Roland McGrath  <roland@redhat.com>

	* signal.c (sys_tgkill): New function.
	* linux/syscall.h: Declare it.
	* linux/syscallent.h: Add tgkill.

2003-06-27  Roland McGrath  <roland@redhat.com>

	* configure.ac: Check for type `struct __old_kernel_stat'.
	* file.c (convertoldstat, printoldstat): Define under
	[LINUX && HAVE_STRUCT___OLD_KERNEL_STAT] rather than a list of archs.
	(sys_oldstat, sys_oldfstat, sys_oldlstat): Likewise.
	* linux/dummy.h [! HAVE_STRUCT___OLD_KERNEL_STAT]
	(sys_oldstat, sys_oldfstat, sys_oldlstat): #define to printargs.

2003-06-26  Roland McGrath  <roland@redhat.com>

	* configure.ac: SHMEDIA -> SH64
	* defs.h: Likewise.
	* mem.c: Likewise.
	* process.c: Likewise.
	* sock.c: Likewise.
	* syscall.c: Likewise.
	* util.c: Likewise.
	* linux/shmedia/syscallent.h: Moved to ...
	* linux/sh64/syscallent.h: ... here.

	* config.guess: Update from canonical version, timestamp 2003-06-17.
	* config.sub: Likewise.

	* syscall.c (force_result) [LINUX] [ARM]: Fix variable usage.
	From: Joshua Neal <tinara@netpipeline.net>.

	* process.c [LINUX] (sys_futex): Grok FUTEX_REQUEUE and print 5th arg.
	* linux/syscallent.h: sys_futex argument count is now 5, not 4.
	* linux/ia64/syscallent.h: Likewise.
	* linux/powerpc/syscallent.h: Likewise.
	* linux/s390/syscallent.h: Likewise.
	* linux/s390x/syscallent.h: Likewise.
	* linux/x86_64/syscallent.h: Likewise.
	From Jakub Jelinek <jakub@redhat.com>.

	* syscall.c (get_scno) [S390 || S390X]: Fix old vs new mode detection.
	From Michael Holzheu <HOLZHEU@de.ibm.com>.

2003-06-23  Roland McGrath  <roland@redhat.com>

	* net.c (sys_socket): Decode protocol for PF_INET6 same as PF_INET.
	From Ulrich Drepper <drepper@redhat.com>.

2003-06-10  Roland McGrath  <roland@redhat.com>

	* configure.ac, NEWS: Version 4.4.98.
	* strace.spec, debian/changelog: 4.4.98-1.

2003-06-09  Roland McGrath  <roland@redhat.com>

	* linux/s390x/syscallent.h: Update many syscalls.
	* linux/syscall.h (SYS_socket_subcall): Update [S390X] value.

	* linux/s390/syscallent.h: Update many syscalls.
	* linux/syscall.h (SYS_socket_subcall): Update [S390] value.

	* linux/shmedia/syscallent.h: New file.
	From Stephen Thomas <stephen.thomas@superh.com>.

	* strace.c (trace): Print a message and newline for a WIFEXITED report
	from the process we just printed an unterminated syscall line for.

2003-06-03  Roland McGrath  <roland@redhat.com>

	* util.c (printcall) [LINUX]: Fix typo [IA62] -> [IA64].

	Linux/ARM improvements from Russell King <rmk@arm.linux.org.uk>:
	* defs.h [LINUX] (TCB_WAITEXECVE): Define for [ARM] too.
	* process.c (struct_user_offsets) [LINUX] [ARM]: Add ARM registers.
	* signal.c [LINUX] (sys_sigreturn) [ARM]: New case.
	* syscall.c (get_scno, syscall_fixup) [LINUX] [ARM]: Case rewritten.
	(get_error) [LINUX] [ARM]: Update.
	(syscall_enter) [LINUX] [ARM]: New case.
	* util.c (printcall) [LINUX] [ARM]: New case.

	* debian/control (Standards-Version): Update to 3.5.10.

	* strace.c (main): In PATH search, accept only a regular file with
	execute bits set.  Fixes Debian bug #137103.

2003-06-02  Roland McGrath  <roland@redhat.com>

	* strace.c (main): Set -q when given -o and not -p, and not when not
	given -o, to match what the man page always said.
	Fixes Debian bug #47113, #153678.

	* configure.ac, NEWS: Version 4.4.97.
	* strace.spec, debian/changelog: 4.4.97-1.

	* configure.ac, defs.h, mem.c, process.c, sock.c, syscall.c, util.c:
	Merged in SHmedia port from Stephen Thomas <stephen.thomas@superh.com>.

	* config.guess: Update from ftp://ftp.gnu.org/pub/gnu/config/,
	timestamp 2003-05-22.
	* config.sub: Likewise, timestamp 2003-05-24.

2003-05-22  Roland McGrath  <roland@redhat.com>

	* defs.h (struct tcb): New member `nzombies'.
	* strace.c (alloctcb): Initialize it.
	(droptcb): Increment our parent's zombie count.
	* process.c (internal_wait): Don't go into TCB_SUSPENDED if the
	process has zombies it can reap.  On the way out, if we reaped
	an untraced process, decrement the zombie count.

	* process.c (sys_clone): Mask CSIGNAL out of flags and print that
	separately using signame.

	* process.c (internal_clone) [TCB_CLONE_THREAD]: Use ARG_FLAGS instead
	of literal 0 for index.  Consult the right flags without clobbering
	anything when we reparent the new child to the caller's parent thread.

	* linux/s390/syscallent.h: Fix sys_clone argument count.
	* linux/s390x/syscallent.h: Likewise.
	* linux/mips/syscallent.h: Likewise.
	* linux/alpha/syscallent.h: Likewise.
	* linux/powerpc/syscallent.h: Likewise.
	* linux/sh/syscallent.h: Likewise.
	* linux/sparc/syscallent.h: Likewise.
	* linux/hppa/syscallent.h: Likewise.

	* process.c [LINUX] [S390 || S390X] (ARG_CTID, ARG_TLS): Fix swapped
	indices.  Reported by Jakub Jelinek <jakub@redhat.com>.

	* signal.c [LINUX] (SI_SIGIO, SI_TKILL): New macros.
	[LINUX || SVR4] (siginfo_codes): Add strings for them.

	* process.c (print_affinitylist): Fix loop condition.
	Reported by Ian Wienand <ianw@gelato.unsw.edu.au>.

2003-04-10  Roland McGrath  <roland@redhat.com>

	* syscall.c (qual_desc): Return zero after parsing number.
	From Rob Leslie <rob@mars.org>, fixes Debian bug #188379.

2003-04-07  Roland McGrath  <roland@redhat.com>

	* linux/syscallent.h: Handle semtimedop subcall of ipc syscall.
	* linux/syscall.h: Likewise.
	* ipc.c [LINUX] (sys_semtimedop): New function.
	From Ulrich Drepper <drepper@redhat.com>.

	* ipc.c (sys_semget): Mask off permission bits for resource_flags.
	From Ulrich Drepper <drepper@redhat.com>.

2003-04-01  Philippe De Muyter  <phdm@macqel.be>

	* sock.c, stream.c: Check #ifdef LINUX, not linux.
	* file.c: Always provide sys_*attr, regardless of #ifdef XATTR_CREATE.

2003-03-30  Roland McGrath  <roland@redhat.com>

	* configure.ac, NEWS: Version 4.4.96.
	* strace.spec, debian/changelog: 4.4.96-1.

2003-02-26  Stuart Menefy <stuart.menefy@st.com>

	Various fixes for SuperH [SH]:
	* mem.c (sys_old_mmap): mmap() parameters passed in registers
	* net.c (sys_pipe), syscall.c (getrval2): pipe() results returned
	in registers
	* process.c (change_syscall): Fixed register which holds system
	call number
	* util.c (arg0_offset, arg1_offset): provide definition
	* Makefile.am: Added new files in linux/sh
	* linux/sh/syscallent.h: New file.
	* linux/sh/errnoent.h: New file.
	* linux/sh/ioctlent.h: New file.
	* linux/sh/signalent.h: New file.

	* linux/ioctlent.sh: Take an arg for location of header files
	* syscallent.sh: Replaced lost $

2003-03-30  Roland McGrath  <roland@redhat.com>

	* time.c [LINUX]: Handle new Linux 2.5 clock/timer syscalls.
	* linux/syscall.h, linux/syscallent.h, linux/dummy.h: Likewise.
	From Ulrich Drepper <drepper@redhat.com>.

	* linux/syscallent.h: Use sys_getrlimit for 191.
	Use name "old_getrlimit" for 76.
	Reported by Ulrich Drepper <drepper@redhat.com>.

2003-03-18  Roland McGrath  <roland@redhat.com>

	* process.c [LINUX] (sys_clone): Don't dereference parent_tid argument.

2003-03-17  Roland McGrath  <roland@redhat.com>

	* linux/x86_64/syscallent.h: clone takes 5 args.
	* process.c [LINUX] (sys_clone) [X86_64]: Fix argument order.

2003-03-15  Roland McGrath  <roland@redhat.com>

	* linux/x86_64/syscallent.h: Add exit_group syscall at 231.

2003-03-14  Roland McGrath  <roland@redhat.com>

	* linux/x86_64/syscallent.h: Update and add many 2.5 syscalls.

	* linux/ia64/syscallent.h: clone takes 5 arguments.
	* process.c [LINUX && IA64] (ARG_*): Update for 2.5 clone calls.

2003-03-12  Roland McGrath  <roland@redhat.com>

	* linux/ia64/syscallent.h: Fix arg counts for clone and clone2.
	Use sys_clone for clone2.
	* linux/syscall.h: Don't declare sys_clone2.
	* process.c (sys_clone): Rewritten to handle both flavors,
	print all extra args depending on flag bits.
	(sys_clone2): Function removed.

	* linux/ia64/syscallent.h: Add a bunch of 2.5 syscalls.

2003-03-04  Roland McGrath  <roland@redhat.com>

	* syscall.c (get_scno) [IA64]: Do TCB_WAITEXECVE check only when
	TCB_INSYSCALL is clear, like other platforms do.

2003-03-04  Ulrich Drepper  <drepper@redhat.com>

	* mem.c [LINUX] (sys_remap_file_pages): New function.
	* linux/syscall.h: Declare it.
	* linux/syscallent.h: Use it.
	* linux/powerpc/syscallent.h: Likewise.

	* process.c [LINUX] (sys_futex): Omit final if op is not FUTEX_WAIT.

2003-02-26  Roland McGrath  <roland@redhat.com>

	* configure.ac: Fix typo in netinet/in.h check.
	Also include <sys/types.h> and <sys/socket.h> before <netinet/in.h>.
	Reported by Alex Semenyaka <alexs@snark.rinet.ru>.

2003-02-24  Roland McGrath  <roland@redhat.com>

	* configure.ac, NEWS: Version 4.4.95.
	* strace.spec, debian/changelog: 4.4.95-1.

	* process.c (sys_getresgid): Fix typos in argument access.

2003-02-23  Roland McGrath  <roland@redhat.com>

	* process.c (sys_getresuid): Fix typos in argument access.
	Reported by Anton Blanchard <anton@samba.org>.

2003-02-19  Roland McGrath  <roland@redhat.com>

	* configure.ac, NEWS: Version 4.4.94.
	* strace.spec, debian/changelog: 4.4.94-1.

	* version.c: Removed.
	* Makefile.am (strace_SOURCES): Remove it.
	* strace.c: Use PACKAGE_NAME and VERSION macros instead of version var.

	FreeBSD rfork support changes from Russ Cox <rsc@plan9.bell-labs.com>:
	* syscall.c (internal_syscall): Handle SYS_rfork with internal_fork.
	* process.c (internal_fork) [SYS_rfork]: Bail if RFPROC flag not set.

2003-01-23  Roland McGrath  <roland@redhat.com>

	* signal.c: Reorder #ifdefs so HAVE_ASM_SIGCONTEXT_H doesn't matter on
	SPARC, which doesn't use the header regardless.

	* util.c [LINUX && SPARC]: Do renaming kludges around <asm/reg.h>
	like signal.c does.

	* linux/sparc/syscall.h: Declare sys_getdents64, sys_llseek.

	* linux/dummy.h [! SYS_getpmsg] (sys_getpmsg): #define to printargs.
	[! SYS_putpmsg] (sys_putpmsg): Likewise.

	* process.c: Reorder includes to put sys/reg.h before linux/ptrace.h,
	since they can conflict.

2003-01-21  Roland McGrath  <roland@redhat.com>

	* strace.c (usage): Omit -z, since it has never worked properly.
	* NEWS: Likewise.

	* strace.c (main): Grok new option `-E var=val' or `-E var' to put
	var=val in environ or to remove var, respectively.
	(usage): Mention it.
	* strace.1, NEWS: Document it.

	* configure.ac, NEWS: Version 4.4.93.
	* strace.spec, debian/changelog: 4.4.93-1.
	* strace.spec (Source0): Use strace-VERSION.tar.bz2 now.

2003-01-20  Roland McGrath  <roland@redhat.com>

	* defs.h [LINUX] [S390 || S390X] (TCB_WAITEXECVE): Define it.
	* syscall.c (get_scno, syscall_fixup) [LINUX] [S390 || S390X]: Handle
	TCB_WAITEXECVE state with special kludges.

	* process.c [LINUX] (sys_clone) [S390 || S390X]: Argument order is
	reversed from other architectures.

	* process.c (sys_execve) [LINUX]: Make setting TCB_WAITEXECVE flag
	conditional on [TCB_WAITEXECVE] instead of list of processors.

	* util.c (restore_arg0): Evaluate args in no-op defns.

	* util.c [S390 || S390X] (arg0_offset, arg1_offset): Fix definitions
	for clone call on S390.  From Michael Holzheu <holzheu@de.ibm.com>.

2003-01-17  Anton Blanchard <anton@samba.org>

	* util.c [LINUX] (setbpt): Handle SYS_vfork like SYS_fork.

	* linux/syscall.h (SYS_socket_subcall): 256 also for POWERPC.

2003-01-14  Roland McGrath  <roland@redhat.com>

	* linux/powerpc/errnoent.h: Add missing errnos.
	* linux/powerpc/ioctlent.h: Update ioctl values.
	From Anton Blanchard <anton@samba.org>.

	* io.c [LINUX] (sys_pread, sys_pwrite): Fix last change.
	From Anton Blanchard <anton@samba.org>.

	* linux/hppa/syscallent.h: Use sys_getdents64, sys_truncate64,
	sys_ftruncate64, instead of printargs, for those syscalls.
	* linux/mips/syscallent.h: Likewise.
	* linux/powerpc/syscallent.h: Likewise.
	* linux/s390/syscallent.h: Likewise.
	* linux/sparc/syscallent.h: Likewise.

	* linux/syscall.h (SYS_socket_subcall): Only 256 for S390, S390X.
	All others at the moment use linux/syscallent.h, where it's 300.

	* strace.1: Update bug reporting info.

	* resource.c [LINUX] (quotacmds): Grok new command encodings.
	From Nathan Scott <nathans@debian.org>.

	* configure.ac, NEWS: Version 4.4.92.
	* strace.spec, debian/changelog: 4.4.92-1.

	* configure.ac: Match powerpc* (includes powerpc64), and don't match
	ppc (never comes out of config.sub).

	* process.c (sys_ptrace): Use #lx format for address argument.
	[POWERPC]: Use sizeof(unsigned long) in place of 4 for multipliers.
	* process.c [POWERPC]: Likewise.
	* signal.c (sys_sigreturn) [POWERPC]: Likewise.
	* syscall.c (get_scno) [POWERPC]: Likewise.
	* util.c [POWERPC]: Likewise.
	(printnum): Use long for NUM.
	From Anton Blanchard <anton@samba.org>.

	* defs.h (ALIGN64): Fix defn for PPC, same as FreeBSD one.

	* util.c [LINUX] (restore_arg0, restore_arg1): New macros, defined
	appropriately via set_arg0 or no-ops for each architecture.
	(clearbpt): Use those instead of set_arg0 and set_arg1.

	* defs.h [_LARGEFILE64_SOURCE] (_LFS64_LARGEFILE): Define it.
	* linux/syscallent.h: Use sys_getdents64, sys_truncate64,
	sys_ftruncate64, instead of printargs, for those syscalls.

	* process.c: Use <linux/ptrace.h> regardless of <sys/reg.h>.
	(sys_ptrace): Use printxval.
	(ptrace_cmds): Make PTRACE_GETREGS et al conditional on #ifdef PTRACE_*
	instead of only #ifdef SUNOS4.  Add PTRACE_[GS]ETFPXREGS.

	* ipc.c (PRINTCTL): New macro.  #ifdef IPC_64, factor out the flag and
	print it before using printxval.
	(sys_msgctl, sys_semctl, sys_shmctl): Use it.

2003-01-13  Roland McGrath  <roland@redhat.com>

	* config.guess: Update from ftp://ftp.gnu.org/pub/gnu/config/,
	timestamp 2003-01-10.
	* config.sub: Likewise, timestamp 2003-01-03.
	* install-sh: Update from Automake 1.7.2.

	* linux/powerpc/signalent.h: Add SIGRTMIN.
	From Anton Blanchard <anton@samba.org>.

	* linux/powerpc/syscallent.h: Add missing system calls.
	Decode more system calls, we were just printargs for many things.
	Remove some x86-specific system calls.
	Remove two syscalls between the socket and ipc syscalls,
	it was resulting in all IPC syscalls being off by two.

	* ioctl.c (ioctl_decode) [POWERPC]: Decode term ioctls like Alpha.
	From Anton Blanchard <anton@samba.org>.

	* defs.h [POWERPC] (UESP, EIP, EAX, ORIG_EAX): Remove this cruft.
	[LINUX && POWERPC && !__powerpc64__] (ALIGN64): New macro.
	* io.c (sys_pread, sys_pwrite): Use ALIGN64.
	From Anton Blanchard <anton@samba.org>.

	* term.c [LINUX]: Get kernel definition of struct termios.
	From Anton Blanchard <anton@samba.org>.

	* linux/ioctlent.sh: Look in sound/ directory too.
	From Anton Blanchard <anton@samba.org>.

	* desc.c (printflock64): Fix ADDR argument type.
	From Anton Blanchard <anton@samba.org>.

	* strace.c [! HAVE_STRSIGNAL]: Clean up #ifdefs on decls for
	sys_siglist and _sys_siglist.
	Reported by John Hughes <john@Calva.COM>.

	* net.c: HAVE_OPTHDR -> HAVE_STRUCT_OPTHDR
	Reported by John Hughes <john@Calva.COM>.

	* linux/syscall.h [ARM] (SYS_socket_subcall): Set to 300.

2003-01-10  Roland McGrath  <roland@redhat.com>

	* configure.ac, NEWS: Version 4.4.91.
	* strace.spec, debian/changelog: 4.4.91-1

	* util.c [LINUX && X86_64] (arg0_offset, arg1_offset): Use correct
	values for x86-64, conditional on current_personality.

	* strace.c (droptcb): Clear flags word before calling rebuild_pollv.

	* configure.ac: Check struct T_conn_res for QUEUE_ptr or ACCEPTOR_id.
	* stream.c (print_transport_message): Use #ifdefs for those members.

	* strace.c (rebuild_pollv): Fix typo: struct poll -> struct pollfd.

	* configure.ac: Fix siginfo_t/sig_atomic_t checks.
	Use prerequisite #include <netinet/in.h> for netinet/*.h checks.

	* strace.c (pfd2tcb): Fix for new tcbtab type.
	(rebuild_pollv): Likewise.
	(detach): Put variables used under [LINUX] inside #ifdef.

	* process.c (change_syscall) [POWERPC]: Add missing return.
	* util.c [POWERPC] (arg0_offset): Set to 4*PT_R3, not 4*PT_ORIG_R3.

	* strace.spec: New file.
	* debian/changelog: 4.4.90-1
	* debian/rules (binary-arch): Depend on build.
	(clean): Don't try to run Makefile.in.
	* debian/control (Standards-Version): Now 3.5.8.

	* configure.ac: Diddle CFLAGS after AC_PROG_CC, not before.

2003-01-09  Roland McGrath  <roland@redhat.com>

	* syscall.c (force_result) [S390 || S390X]: Fix typo.

	* debian/control: Update Maintainer: field.

2003-01-08  Roland McGrath  <roland@redhat.com>

	* NEWS: Update for 4.4.90 test release.

	Support for new Linux 2.5 thread features.
	* defs.h [LINUX]: Define __NR_exit_group if not defined.
	(struct tcb): New members nclone_threads, nclone_detached,
	and nclone_waiting.
	(TCB_CLONE_DETACHED, TCB_CLONE_THREAD, TCB_GROUP_EXITING): New macros.
	(waiting_parent): Macro removed.
	(pid2tcb): Declare it.
	* process.c (internal_clone) [TCB_CLONE_THREAD]: Reparent the new
	child to our parent if we are a CLONE_THREAD child ourselves.
	Maintain TCB_CLONE_THREAD and TCB_CLONE_DETACHED flags and counts.
	(internal_wait) [TCB_CLONE_THREAD]: Factor out detached children when
	determining if we have any.  If TCB_CLONE_THREAD is set, check
	parent's children instead of our own, and bump nclone_waiting count.
	(internal_exit) [__NR_exit_group]: Set the TCB_GROUP_EXITING flag if
	the syscall was exit_group.
	* syscall.c (internal_syscall): Use internal_exit for exit_group.
	* strace.c (pid2tcb): No longer static.
	(alloctcb) [TCB_CLONE_THREAD]: Initialize new fields.
	(droptcb) [TCB_CLONE_THREAD]: Maintain new fields.
	If we have thread children, set TCB_EXITING and don't clear the TCB.
	(resume) [TCB_CLONE_THREAD]: Decrement parent's nclone_waiting.
	(detach) [TCB_CLONE_THREAD]: When calling resume, check all thread
	children of our parent that might be waiting for us too.
	[TCB_GROUP_EXITING] (handle_group_exit): New function.
	(trace) [TCB_GROUP_EXITING]: Use that in place of detach or droptcb.

	Revamp -f support for Linux.
	* util.c [LINUX] (setbpt, clearbpt): New implementations that tweak
	the system call to be clone with CLONE_PTRACE set.  Various new static
	helper functions.
	* process.c (internal_clone): Define also #ifdef SYS_clone2.
	Initialize TCPCHILD->parent field.
	[CLONE_PTRACE]: Don't do PTRACE_ATTACH here, because it's preattached.
	Check in case the new child is in the tcb already.
	(internal_fork) [LINUX]: Just call internal_clone.
	* strace.c (trace) [LINUX]: Under -f/-F, grok an unknown pid
	reporting to wait, put it in the TCB with TCB_ATTACHED|TCB_SUSPENDED.

	* linux/x86_64/syscallent1.h (sys_oldlstat): #define as printargs.

	* file.c [LINUX]: #undef st_[amc]time in case they are macros.

	* Makefile.am (AM_CFLAGS): New variable, define to $(WARNFLAGS).

	* Makefile.am (EXTRA_DIST): Remove debian/postinst and debian/prerm.

2003-01-09  Wichert Akkerman  <wichert@deephackmode.org>

	* debian/postinst, debian/prerm: removed, /usr/doc symlink is no
	longer used
	* debian/rules: no longer install postinst and prerm
	* debian/control: do not end summary with full stop (lintian)

2002-12-30  Roland McGrath  <roland@redhat.com>

	* Makefile.am (bin_SCRIPTS): New variable, list strace-graph.
	(EXTRA_DIST): Add missing files.

	* configure.ac: Fix asm/sigcontext.h check to include prerequisite.

	* syscall.c (qualify_one): New function.
	(qual_options): Replace lookup field with qualify, update initializer.
	(qualify): Update caller.
	(qual_signal, qual_fault, qual_desc): Rewritten from lookup_*.
	(qual_syscall): Rewritten lookup_syscall, match name more than once.
	Fixes RH#70579, bites IA64 -efoo when foo exists on IA32.

	* version.c (version): Make const, bump to 4.4.90.
	* strace.c: Update decl.

	* Makefile.am [LINUX && X86_64]: Remove cruft.
	* linux/x86_64/errnoent1.h: New file.
	* linux/x86_64/ioctlent1.h: New file.
	* linux/x86_64/signalent1.h: New file.
	* linux/x86_64/syscallent1.h: New file.
	* linux/x86_64/i386-headers.diff: File removed.
	* linux/x86_64/makeheaders.sh: File removed.
	* linux/x86_64/Makefile.in: File removed.

	* linux/syscallent.h [X86_64]: Disable sanity checks, subcall stuff is
	already broken for 32-bit personality on x86-64.

2002-12-29  Roland McGrath  <roland@redhat.com>

	* configure.ac, Makefile.am: Punt subdirs, handle everything here.
	* linux/Makefile.am: File removed.
	* freebsd/Makefile.am: File removed.
	* sunos4/Makefile.in: File removed.
	* svr4/Makefile.in: File removed.

	* linux/alpha/Makefile.in: File removed.
	* linux/hppa/Makefile.in: File removed.
	* linux/ia64/Makefile.in: File removed.
	* linux/powerpc/Makefile.in: File removed.
	* linux/s390/Makefile.in: File removed.
	* linux/s390x/Makefile.in: File removed.

2002-12-26  Roland McGrath  <roland@redhat.com>

	* syscallent.sh: Grok three flavors of #define line, uniquify.
	* linux/hppa/syscallent.sh: File removed.
	* linux/powerpc/syscallent.sh: File removed.

	* linux/Makefile.am: New file.
	* linux/Makefile.in: File removed.
	* freebsd/Makefile.am: New file.
	* freebsd/i386/Makefile.am: New file.
	* freebsd/i386/Makefile.in: File removed.

2002-12-22  Roland McGrath  <roland@redhat.com>

	Update to Autoconf 2.57, and Automakify with version 1.7.
	* Makefile.am: New file.
	* Makefile.in: File removed.
	* configure.in: Moved to ...
	* configure.ac: ... here.  Update for Autoconf 2.5x and Automake.
	* aclocal.m4: Moved to ...
	* acinclude.m4: ... here.  Update for Autoconf 2.5x.
	* acconfig.h: File removed.
	* AUTHORS: New file, makes automake happy.
	* autogen.sh: File removed.
	* README-CVS: Update to recommend autoreconf instead.
	* file.c: HAVE_ST_* -> HAVE_STRUCT_STAT_ST_*.
	* net.c: HAVE_SIN6_SCOPE_ID -> HAVE_STRUCT_SOCKADDR_IN6_SIN6_SCOPE_ID,
	HAVE_MSG_CONTROL -> HAVE_STRUCT_MSGHDR_MSG_CONTROL.
	* strace.c: *_DECLARED -> HAVE_DECL_*
	* stream.c: HAVE_* -> HAVE_STRUCT_*

	* linux/Makefile.in (ioctldefs.h ioctls.h): Use $(SHELL) instead of
	sh, and use $(srcdir) to find the script.
	* linux/powerpc/Makefile.in (ioctlent.raw): Find ioctlent.sh in ../.
	(ioctlsort.o): Use ../ioctlsort.c, not ../../ioctlsort.c.
	* linux/x86_64/Makefile.in (headers): Renamed to all.
	* linux/alpha/Makefile.in: Add empty install target.
	* linux/x86_64/Makefile.in: Likewise.
	* linux/powerpc/Makefile.in: Likewise.
	* linux/Makefile.in: Likewise.

2002-12-26  Roland McGrath  <roland@redhat.com>

	* defs.h [LINUX && MIPS] (MAX_QUALS): Set to 5000, not 4999.
	From Daniel Jacobowitz <drow@false.org>.

2002-12-21  Roland McGrath  <roland@redhat.com>

	* linux/syscallent.h: Add some new 2.5 syscall names.
	Now clone takes 5 args.
	* process.c [LINUX] (clone_flags): Update with 2.5 flag bits.
	[LINUX] (sys_clone): Print new args.
	* mem.c (print_ldt_entry): Make global.

	* linux/syscall.h [I386 || IA64] (SYS_socket_subcall): Bump to 300 for
	safety, since up to 260 are already used in 2.5 kernels.
	* linux/syscallent.h: Update the table.
	* linux/ia64/syscallent.h: Likewise.

	* syscall.c (force_result): New function.
	* process.c (internal_wait): Handle ECHILD exit from wait call with
	WNOHANG flag set; force the return value to 0 in the inferior when it
	has live children we are tracing.
	* NEWS: Mention the bug fix.

2002-12-17  Roland McGrath  <roland@redhat.com>

	* linux/ia64/syscallent.h: Remove placeholders 275-298 to catch up
	with linux/syscallent.h additions.

	* strace.c (tcbtab): Make this a pointer to pointers, not an array.
	(tcbtabsize): New variable.
	(main): Initialize them using dynamic allocation.
	(alloctcb, main): Use tcbtabsize in place of MAX_PROCS; indirect.
	(pid2tcb, cleanup): Likewise.
	[USE_PROCFS] (pollv): Make this a pointer, not an array; make static.
	(rebuild_pollv): Dynamically allocate the vector.
	* defs.h (tcbtab): Update decls.
	(MAX_PROCS): Macro removed, no more static limit on this.
	* process.c (fork_tcb): New function.
	(internal_clone, internal_fork): Use it instead of checking nprocs.

	* strace.c (detach) [LINUX]: Use __WALL (or a second try with __WCLONE)
	in wait after sending SIGSTOP.

2002-12-16  Roland McGrath  <roland@redhat.com>

	* signal.c (sprintsigmask): Increase static buffer size to account for
	worst possible case.  Reported by Daniel Jacobowitz <drow@false.org>.

	* process.c [LINUX] (wait4_options): Fix __WCLONE value.  Add
	__WNOTHREAD and __WALL.

	* strace.c (trace) [LINUX]: Only check errno if wait4 actually fails,
	so we don't repeat a wait and thus drop a status.  Fixes RH#62591.

2002-12-15  Roland McGrath  <roland@redhat.com>

	* process.c (setarg) [POWERPC]: Support it.

	* util.c [POWERPC] (LOOP): Fix value, now 0x48000000 (0: b 0b).
	Old value was bogus, not even a proper instruction.
	From Guy M. Streeter <streeter@redhat.com>.

	* strace.c (main) [! USE_PROCFS]: Always reset SIGCHLD to SIG_DFL.

	* configure.in: Don't check for putpmsg.
	* stream.c (sys_getpmsg, sys_putpmsg): Make these conditional on
	#ifdef SYS_*, rather than on HAVE_PUTPMSG.

	* aclocal.m4 (AC_STAT64): Include <linux/types.h> before <asm/stat.h>
	in test.  Test our own #ifdef LINUX rather than predefined `linux'.

	* linux/powerpc/syscallent.h: Use sys_llseek for _llseek.
	* linux/sparc/syscallent.h: Likewise.
	* linux/hppa/syscallent.h: Likewise.

	* syscall.c (syscall_enter) [LINUX && POWERPC]: Define PT_ORIG_R3 if
	not defined, since <asm/ptrace.h> defines it only #ifdef __KERNEL__.
	* process.c: Likewise.

	* desc.c (sys_osf_select): Add missing return type.

	* syscall.c (trace_syscall): Use strerror, not sys_errlist/sys_nerr.

	* linux/ia64/syscallent.h: Remove macros for sys_delete_module,
	sys_nanosleep, both already in linux/dummy.h.

	* syscall.c (get_scno): Move static `currpers' inside #ifdef X86_64.
	(trace_syscall): Fix return without value.

	* linux/syscallent.h: Update table with names of new syscalls
	io_setup, io_destroy, io_getvents, io_submit, io_cancel.
	* linux/ia64/syscallent.h: Likewise.
	* linux/powerpc/syscallent.h: Likewise.

	* signal.c [LINUX && I386]: Provide SA_RESTORER constant if not
	defined.  If the bit is set, print the sa_restorer field of sigaction.

	* mem.c: Add sys_{get,set}_thread_area.
	* linux/syscall.h: Declare them.
	* linux/syscallent.h: Update the table for these.
	* linux/dummy.h (sys_modify_ldt): Define only #ifndef I386.
	(sys_get_thread_area, sys_set_thread_area): New macros #ifndef I386.

	* configure.in: Check for linux/xattr.h and linux/futex.h headers.
	* linux/syscall.h: Add sys_* decls for new syscalls getpmsg, putpmsg,
	readahead, sendfile64, setxattr, fsetxattr, getxattr, fgetxattr, int
	listxattr, flistxattr, removexattr, fremovexattr, sched_setaffinity,
	sched_getaffinity, futex.
	* linux/syscallent.h: Update the table.
	* io.c: Add sys_sendfile64.
	* file.c: Add sys_readahead, sys_*xattr.
	* process.c: Add sys_futex, sys_*affinity.

	* linux/syscall.h (SYS_socket_subcall): Define to 256 on all machines.
	(SYS_ipc_subcall): Always SYS_socket_subcall + SYS_socket_nsubcalls.
	* linux/syscallent.h: Update the table for socket and ipc subcalls.

2002-11-09  Heiko Carstens <heiko.carstens@de.ibm.com>

	Bugfix for s390/s390x:
	* syscall.c: Fixed scno derivation for s390/s390x.

2002-11-06  Michal Ludvig  <mludvig@suse.cz>

	Merged patch from Steven J. Hill <sjhill@realitydiluted.com>
	to allow the compilation of a native MIPS strace.

2002-11-06  Michal Ludvig  <mludvig@suse.cz>

	From Marty Leisner <leisner@rochester.rr.com>,
	rewritten by mludvig:
	* strace.c (not_failing_only): New.
	(usage): Added -z switch description.
	(main): Added -z switch parsing to not_failing_only variable.
	* syscall.c (trace_syscall): Added not_failing_only handling.

2002-10-08  Heiko Carstens <heiko.carstens@de.ibm.com>

	Missing complete changelog for 2002-10-07 commit:
	* Makefile.in: Added linux/s390, linux/s390x to ALL_SUBDIRS.
	* acconfig.h: New define for s390x.
	* config.sub: Added missing define for s390 and new one for s390x.
	* configure.in: Added new define for s390x.
	* file.c: Added missing #undef dirent64 and new defines for s390x.
	* linux/s390: New directory.
	* linux/s390/Makefile.in: New file.
	* linux/s390/errnoent.h: New file.
	* linux/s390/ioctlent.h: New file.
	* linux/s390/signalent.h: New file.
	* linux/s390/syscallent.h: New file.
	* linux/s390x: New directoy.
	* linux/s390x/Makefile.in: New file.
	* linux/s390x/errnoent.h: New file.
	* linux/s390x/ioctlent.h: New file.
	* linux/s390x/signalent.h: New file.
	* linux/s390x/syscallent.h: New file.
	* linux/syscall.h: Added sys_mincore() prototype and added new
	s390x defines.
	* process.c: Added s390x defines.
	(change_syscall): Changed handling for s390.
	(setarg): Added missing s390/s390x code in setarg().
	* signal.c: Added s390x define.
	(sys_sigreturn): Bugfix in s390/s390x code (wrong number of
	arguments to sprintsigmask()).
	* stream.c (internal_stream_ioctl): Changed int cast to long cast,
	since printstr() expects a long.
	* syscall.c (decode_subcall): Changed several variables to be long
	instead of int to match 64 bit requirements. Added s390x defines.
	(syscall_enter): Changed upeek() call to match s390 and s390x
	requirements.
	* util.c: Added s390x defines.

2002-10-07  Michal Ludvig  <mludvig@suse.cz>

	Merged s390x port by Heiko Carstens <Heiko.Carstens@de.ibm.com>
	and bugfixes to s390 by D.J. Barrow.

2002-09-23  Michal Ludvig  <mludvig@suse.cz>

	Merged x86-64 port by Andi Kleen <ak@suse.de>
	and Michal Ludvig <mludvig@suse.cz>
	* Makefile.in: New target 'headers'. Failure ignored.
	* acconfig.h: New defines for x86-64.
	* configure.in: Ditto.
	* defs.h: Ditto.
	* file.c: Ditto.
	* signal.c: Ditto.
	* process.c: Added support for x86-64.
	* util.c: Ditto.
	* syscall.c: Ditto + added automatic personality switching.
	* linux/syscall.h: Ditto.
	* linux/x86_64: New directory.
	* linux/x86_64/Makefile.in: New file.
	* linux/x86_64/gentab.pl: Ditto.
	* linux/x86_64/i386-headers.diff: Ditto.
	* linux/x86_64/makeheaders.sh: Ditto.
	* linux/x86_64/syscallent.h: Ditto.
	* mem.c (print_mmap): Always print arg[4] as int.

2002-09-23  Michal Ludvig  <mludvig@suse.cz>

	* configure.in: Fix regular expressions.
	* linux/syscall.h: Added missing braces in prototype of
	sys_getdents64().
	* file.c: Use '#ifdef LINUX' instead of '#ifdef linux'.
	(struct fileflags): Made extern to inhibit compiation warnings.
	(sys_getdents64): Merged LINUX and SVR4 part.
	* syscall.c (get_scno): Split multiline string into two distinct
	strings.

2002-05-24  John Hughes <john@calva.com>

	* stream.h, net.h: Avoid possible infinite loop caused by
	unsigned arithmetic in preceeding change.

2002-05-23  John Hughes <john@calva.com>

	* acconfig.h: Add HAVE_OPTHDR and HAVE_T_OPTHDR defines.

	* aclocal.m4: Add tests for struct opthdr in sys/socket.h and
	struct t_opthdr in sys/tiuser.h, define HAVE_OPTHDR and HAVE_T_OPTHDR
	if found.

	* configure.in: use tests for struct opthdr and struct t_opthdr.

	* defs.h: add new function print_sock_optmgmt.

	* io.c: add hack that lets ioctl decode functions set auxilliary
	string return.

	* stream.c: better decoding for timod ioctls.

	* net.c: add function print_sock_optmgmt, used by timod ioctl
	decoding functions in stream.c.

2002-05-23  John Hughes <john@calva.com>

	* acconfig.h: Make autoheader happy about Linux/SuperH

2002-05-23  John Hughes <john@calva.com>

	* strace.c: Get rid of warning if not using POLL_HACK

2002-05-22  John Hughes <john@calva.com>

	* net.c: Simplify {get,set}sockopt, decode SO_LINGER, cope with
	options that are not just ints, cope with systems that don't
	#define SOL_TCP and so on.

2002-05-21  John Hughes <john@calva.com>

	* strace.c: Fix warning if POLL_HACK is used.

2002-05-17  John Hughes <john@calva.com>

	* svr4/ioctlent.sh: Some defines on UW come with too many spaces.

2002-05-17  John Hughes <john@calva.com>

	* svr4/ioctlent.sh: Cope with #defines wrapped in #ifdefs.

2002-05-17  John Hughes <john@calva.com>

	* stream.c: tidy up output a little.

2002-05-17  John Hughes <john@calva.com>

	* process.c, svr4/dummy.h, svr4/syscall.h: decode arguments
	to procpriv syscall.

2002-05-01  Wichert Akkerman <wichert@deephackmode.org>

	* configure.in, defs.h, process.c, sock.c, syscall.c, util.c: merge
	  patch from Greg Banks <gbanks@pocketpenguins.com> for Linux/SuperH
	  support

2002-04-01  Wichert Akkerman <wichert@deephackmode.org>

	* strace.c: close tcp->outf in droptcb()

2002-04-01  Wichert Akkerman <wichert@deephackmode.org>

	* net.c: decode packet options

2002-03-31  Wichert Akkerman <wichert@deephackmode.org>

	* linux/{alpha,hppa,ia64,mips,powerpc,sparc}/syscallent.h: regenerated

2002-03-31  Wichert Akkerman <wichert@deephackmode.org>

	* debian/*: added
	* linux/syscallent.h: fix typo and add the reserved stream syscalls
	* defs.h, file.c, io.c: fix signed/unsigned issues
	* syscall.c: check for negative u_errors
	* cvsbuild: renamed to autogen.sh

2001-12-17  Wichert Akkerman <wakkerma@debian.org>

	* net.c: add new TCP socket options

2001-10-26  John Hughes <john@calva.com>

	* svr4/ioctlent.sh: Cope with #define lines containing
	comments that terminate on subsequent lines.  Used to
	comment out subsequent ioctls!

2001-10-25  Wichert Akkerman <wakkerma@debian.org>

	* linux/ioctlent.h: regenerated using current scripts so
	  term ioctls are included

2001-10-19  John Hughes  <john@Calva.COM>

	* strace.c(proc_open): On SVR4 only trace the syscalls,
	signals and faults we care about.

2001-10-18  John Hughes  <john@Calva.COM>

	* acconfig.h: Add HAS_SIGINFO_T.
	* aclocal.m4: add check for siginfo_t in signal.h.
	* configure.in: use check for siginfo_t.
	* defs.h: if HAVE_SIGINFO_T the declare printsiginfo.  On SVR4
	  allow access to siginfo when signal recieved.
	* process.c: Remove SVR4 only version of printsiginfo.
	* signal.c: merge SVR4 and LINUX versions of printsiginfo.
	* strace.c: on SVR4 print siginfo when signal recieved.

2001-10-18  John Hughes  <john@Calva.COM>

	* system.c(sys_ssisys): handle return values for ssisys

2001-10-18  John Hughes  <john@Calva.COM>

	* signal.c: handle sigwait
	* svr4/dummy.c: Move sigwait to done
	* svr4/syscall.h: handle sigwait

2001-10-16  John Hughes  <john@Calva.COM>

	* system.c(sys_ssisys): decode some args for ssisys.

2001-10-16  John Hughes  <john@Calva.COM>

	* mem.c: MS_SYNC is zero, so must be first in xlat list.

	* svr4/dummy.h: memcntl is much like mctl.

2001-10-16  John Hughes  <john@Calva.COM>

	* util.c (umovestr): UnixWare (svr4?) returns 0 when trying
	to read unmapped page.  Make it possible to strace ksh.

2001-10-03  David Mosberger  <davidm@hpl.hp.com>

	* process.c (internal_clone): Avoid race condition by clearing
	breakpoint after attaching to child.

2001-10-02  David Mosberger  <davidm@hpl.hp.com>

	* linux/ia64/syscallent.h: Define ia32 syscall numbers (originally
	by Don Dugger, with my refinements).

	* linux/ia64/ioctlent.h: Regenerate and manually merge conflicting
	ioctls (TCGETS & SNDCTL_TMR_TIMEBASE, etc.).

	* linux/ia64/Makefile.in (ioctldefs.h ioctls.h): Update for
	new ioctlent.h generation scheme.

	* linux/syscall.h (sys_clone2): Declare.
	[IA64] Define ia32 socket, ipc, and extra syscall numbers.

	* linux/ioctlent.sh (regexp): Also handle <asm/ioctls.h> so we
	don't miss the tty ioctls (unfortunately, some of the sound timer
	ioctls are in conflict with them!).

	* util.c (setbpt) [IA64]: Add ia32 support (by Don Dugger).
	(clrbpt) [IA64]: Ditto.

	* syscall.c (internal_syscall): Handle SYS_clone2, SYS32_wait4,
	and SYS32_exit.
	(get_scno): Get ia32 syscall number from r1 (orig eax) instead of
	r8 (eax).  Handle TCB_WAITEXECVE.
	(syscall_fixup): Handle ia64.
	(syscall_enter): Fix argument fetching for ia64.

	* strace.c [IA64 && LINUX]: Include <asm/ptrace_offsets.h>.
	(trace) [PT_GETSIGINFO]: Print signal address and pc if possible.

	* process.c (tcp): New function.
	(change_syscall): Add support for ia64 linux.
	(sys_execve): Turn on TCB_WAITEXECVE for ia64 linux.

	* desc.c (getlk): Cast l_len to "long long" to avoid warnings when
	type is narrower.
	* resource.c (sprintrlim64): Ditto.

	* defs.h (TCB_WAITEXECVE) [IA64]: Define.
	[IA64]: Declare "ia32" variable.

	* bjm.c: Do not include <linux/module.h>.  It's not safe to include
	kernel headers.  Declare the necessary constants and structures
	directly instead.

2001-10-01  David Mosberger  <davidm@hpl.hp.com>

	* signal.c (parse_sigset_t): New function.
	(sigishandled): Fix off-by-one bug by using parse_sigset_t() and
	avoiding relying on internal layout of sigset_t datastructure.

2001-04-26  David Mosberger  <davidm@hpl.hp.com>

	* linux/ia64/syscallent.h: Add getunwind().

2001-04-11  David Mosberger  <davidm@hpl.hp.com>

	* syscall.c (syscall_enter): Use PT_RBS_END instead of deprecated
	PT_AR_BSP.  Pick up arguments starting with out0, which is not
	always the same as r32 (e.g., consider inlined syscalls).

2001-09-28   John Hughes <john@Calva.COM>

  * process.c: FreeBSD-CURRENT no longer has PT_READ_U, and anyway we
    were showing it as PT_WRITE_U!  Fix from Maxime Henrion.

2001-09-18   John Hughes <john@Calva.COM>

  * net.c: fix display of sockaddr structures, sometimes too many "}",
    sometimes too few.  Fix suggested by Richard Kettlewell.

2001-08-19   Wichert Akkerman <wakkerma@debian.org>

  * signal.c: do not include asm/sigcontext.h on IA64 since it gets
    the struct from bits/sigcontext.h already which signal.h includes.

2001-08-03   Wichert Akkerman <wakkerma@debian.org>

  * linux/ioctlent.sh: change regexps so we catch sound ioctls as well in
    Linux
  * linux/Makefile.in: fix a few things so the ioctl list is generated
    properly
  * ioctl.c: remember to shift ioctl masks as well

2001-08-03   Wichert Akkerman <wakkerma@debian.org>

  * Linux/**/syscallent.h: synchronize section for fcntl and use sys_fcntl
    for sys_fcntl as well

2001-08-03   Wichert Akkerman <wakkerma@debian.org>

  * linux/hppa/syscallent.h: updated from Matthew Wilcox

2001-08-03   Wichert Akkerman <wakkerma@debian.org>

  * process.c: seems Linux/IA64 changed register names on us, switch to
    using new names.

2001-08-03   Wichert Akkerman <wakkerma@debian.org>

  * strace.c: set CLOEXEC  flag for outputfile

2001-08-03   Wichert Akkerman <wakkerma@debian.org>

  * linux/sparc/syscall.h, linux/sparc/syscallent.h: add some LFS calls

2001-07-23  Wichert Akkerman <wakkerma@debian.org>

  * configure.in: Support cross-compiling between architectures

2001-07-13  Wichert Akkerman <wakkerma@debian.org>

  * configure.in: add S390 to architecture list

2001-07-10  John Hughes <john@Calva.COM>

  * TODO, defs.h, io.h, net.c, strace.c, syscall.c, util.c: Merge fixes
    from Richard Kettlewell <rkettlewell@zeus.com> which add I/O dumping
    of args to readv/writev.  Also gets rid of redundant printiovec
    routine from net.c (duplicate of tprint_iov in util.c).

2001-07-02  Wichert Akkerman <wakkerma@debian.org>

  * config.{guess,sub}: updated

2001-05-15  John Hughes <john@Calva.COM>

  * signal.c: pass a pointer to sigmask to printsigmask from printcontext,
    it was just passing the sigmask (ucp->uc_sigmask).

2001-05-15  John Hughes <john@Calva.COM>

  * util.c: Don't run off the end of valid memory in umovestr when
    USE_PROCFS.  Important for FREEBSD systems (which seem to have an
    unmapped page just after the args/env area).

2001-04-18  John Hughes <john@Calva.COM>

  * configure.in: test for sys/nscsys.h, the non-stop clusters includes.
  * process.c: handle rfork{1,all} and rexecve calls on non-stop clusters.
  * syscall.c: treat rfork{1,all} and fork{1,all} as fork like calls.
    Treat rexecve as an exec.
  * system.c: decode arguments to ssisys call on nsc systems.
  * svr4/dummy.h, svr4/syscall.h: now we handle rfork{1,all}, ssisys and
    rexecve calls.

2001-04-12  Wichert Akkerman <wakkerma@debian.org>

  * process.c: fix cast for powerpc code
  * linux/powerpc/syscallent.h: update syscall list
  * README: fix address for the strace mailinglist
  * signal.c: switch to using /proc/<pid>/status on Linux so we can get
    the realtime signals as well

2001-04-10  Wichert Akkerman <wakkerma@debian.org>

  * Merge patches from Maciej W. Rozycki:
    + util.c: add code to print PC for MIPS
    + linux/mips/syscallent.h: updated
    + system.c: formating fixes for sys_sysmips
    + configure.in: test for yet more headers
    + stream.c: use configure-headertests instead of relying on OS hints

2001-04-07  Wichert Akkerman <wakkerma@debian.org>

  * NEWS: start 4.3.1 items
  * version.c: updated to say 4.3.1 (was still 4.2, oops!)

2001-04-07  Wichert Akkerman <wakkerma@debian.org>

  * configure.in: test for asm/sysmips.h and linux/utsname.h
  * linux/syscall.h: fix a typo for sys_sysmips
  * system.c: include asm/sysmips.h and linux/utsname.h if they exist,
    fix typo

2001-03-31  Wichert Akkerman <wakkerma@debian.org>

  * linux/mips/ioctlent.h: updated using new Linux ioctl setup

2001-03-31  Wichert Akkerman <wakkerma@debian.org>

  * linux/ia64/ioctlent.h: regenerated

2001-03-31  Wichert Akkerman <wakkerma@debian.org>

  * linux/{alpha,ia64,powerpc}/ioctlent.sh: removed, all archs use the
    general Linux ioctlent.sh

2001-03-31  Wichert Akkerman <wakkerma@debian.org>

  * linux/ioctlent.sh: add dir variable for location of kernel headers

2001-03-29  Wichert Akkerman <wakkerma@debian.org>

  * linux/ia64/ioctlent.h: updated using new Linux ioctl setup

2001-03-29  Wichert Akkerman <wakkerma@debian.org>

  * linux/powerpc/ioctlent.h: updated using new Linux ioctl setup

2001-03-29  Wichert Akkerman <wakkerma@debian.org>

  * linux/hppa/ioctlent.h: updated using new Linux ioctl setup

2001-03-29  Wichert Akkerman <wakkerma@debian.org>

  * linux/alpha/ioctlent.h: updated using new Linux ioctl setup

2001-03-28  Wichert Akkerman <wakkerma@debian.org>

  * configure.in: use sparc* so we can compile on sparc64 as well
  * process.c, syscall.c: work around double define of fpq, fq and fpu
    structs on Linux/sparc, and use regs instead of pt_regs
  * don't use asm/sigcontext.h on Linux/sparc

2001-03-28  Wichert Akkerman <wakkerma@debian.org>

  * linux/sparc/ioctlent.h: updated using new Linux ioctl setup

2001-03-28  Wichert Akkerman <wakkerma@debian.org>

  * strace.c: use __WALL as wait4 flag if it exists so we can properly
    trace threaded programs

2001-03-27  John Hughes <john@Calva.COM>

  * aclocal.m4: add check for endianness of long long.
  * acconfig.h: add #define for LITTLE_ENDIAN_LONG_LONG.
  * configure.in: check for endianness of long long.
  * defs.h: change LONG_LONG macro to work with either endianness of
    long long.

2001-03-27  John Hughes <john@Calva.COM>

  * net.c: Make compilable by SCO UDK compiler (doesn't like empty
    initialisation list for array).

2001-03-27  John Hughes <john@Calva.COM>

  * svr4/syscallent.h: ntp_adjtime entry was duplicated on Solaris
    systems - bad merge of Harald Boehme's patch by me.

2001-03-27  Wichert Akkerman <wakkerma@debian.org>

  * lots of files: add Linux/hppa support

2001-03-19  Wichert Akkerman <wakkerma@debian.org>

  * linux/mips/syscallent.h: we can't have -1 nargs, change to 0
  * linux/syscallent.h: not that syscalls 220 and 221 are used now
  * config.guess: updated

2001-03-17  Wichert Akkerman <wakkerma@debian.org>

  * linux/ioclsort.c: new file
  * linux/ioctlent.sh: complete rewrite to use a more sane approach to get
    the ioctl list that doesn't involve attempting to #include all kernel
    headers
  * linux/.cvsignore: added ioctdefs.h and ioctls.h which are generated
    by the new ioctlent.sh
  * ioctl.c: only look at the number and type bits for linux, since
    ioctlent.sh no longer supplies the others

2001-03-08  John Hughes <john@Calva.COM>

  * freebsd/syscalls.pl: On FreeBSD we must cope with COMPATibility syscalls,
    pretend they have names ending with "?" so that -e trace=stat (for
    example) will work.
  * freebsd/i386/syscallent.h: add ? to compatability syscalls.
  * freebsd/i386/syscall.h: consistency.

2001-03-08  John Hughes <john@Calva.COM>

  * acconfig.h: add new ST_xxx defines.
  * aclocal.m4: macros to check for more fields in struct stat.
  * configure.in: use new macros to check for fields in struct stat.
  * file.c: use new defines to replace #ifdef FREEBSD by #if HAVE_ST_xxx.

2001-03-08  John Hughes <john@Calva.COM>

  * defs.h: rename wimpy get64 as powerful new LONG_LONG
  * file.c: use LONG_LONG
  * io.c: use LONG_LONG
  * mem.c use LONG_LONG

2001-03-08  John Hughes <john@Calva.COM>

  * acconfig.h: new #defines HAVE_LONG_LONG_OFF_T and HAVE_LONG_LONG_RLIM_T.
  * aclocal.m4: routines to check for long long off_t and rlim_t.
  * configure.in: check for long long off_t and rlim_t.
  * desc.c: if HAVE_LONG_LONG_OFF_T treat flock as flock64
  * file.c: if HAVE_LONG_LONG_OFF_T treat stat,lstat,fstat and lseek as 64
    bit versions.
  * io.c: if HAVE_LONG_LONG_OFF_T use 64 bit versions of pread and pwrite.
  * mem.c: if HAVE_LONG_LONG_OFF_T use 64 bit version of mmap
  * resource.c: if HAVE_LONG_LONG_OFF_T use 64 bit versions of getrlimit
    and setrlimit.
  * freebsd/syscalls.print: don't explicitly use 64 bit versions of calls,
    now done automaticaly for us.
  * freebsd/i386/syscall.h: ditto.
  * freebsd/i386/syscallent.h ditto.

2001-03-07  John Hughes <john@Calva.COM>

  * desc.c: On FreeBSD flock structure uses 64 bit offsets.
  * file.c: On FreeBSD use stat64 and pals instead of stat.
  * freebsd/syscalls.print: use stat64, lstat64 and fstat64.
  * freebsd/i386/syscall.h: ditto.
  * freebsd/i386/syscallent.h: ditto.

2001-03-07  John Hughes <john@Calva.COM>

  * file.c: merge missing part of Harald Böhme's solaris patches,
    was only declaring sys_{stat64,lstat64,fstat64} on linux!

2001-03-07  John Hughes <john@Calva.COM>

  * svr4/dummy.h: fix multiple define warning on non LFS64 systems.
  * svr4/syscallent.h: pread/pwrite are TF calls.

2001-03-07  John Hughes <john@Calva.COM>

  * defs.h: add ALIGN64 macro to cope with FreeBSD's strange insistence
    on alignment for off_t (64 bit) arguments.  Also simplify get64 so
    we don't need to know endianness of long long.
  * file.c: FreeBSD now uses 64 bit versions of lseek, truncate,
    ftruncate, allows reduction in numvber of horrid #if's
  * io.c: FreeBSD now uses 64 bit versions of pread, pwrite.
  * mem.c: FreeBSD now uses 64 bit version of mmap.
  * freebsd/syscalls.print: use 64 bit versions of various syscalls.
  * freebsd/i386/syscall.h: use 64 bit versions of various syscalls.
  * freebsd/i386/syscallent.h: use 64 bit versions of various syscalls.

2001-03-06  John Hughes <john@Calva.COM>

  * file.c: Implement truncate64 and ftruncate64
  * svr4/dummy.h: add dummies for truncate64 and ftruncate64 for non
    LFS64 systems.
  * svr4/syscall.h: add declarations for truncate64 and ftruncate64.

2001-03-06  John Hughes <john@Calva.COM>

  * freebsd/syscalls.pl: fix for FreeBSD 4.1 (new optional field in
    syscall master file).

2001-03-06  John Hughes <john@Calva.COM>

  * syscall.c: fix for FreeBSD 4.1 (SYS_semconfig has disappeared).  Also
    zap incorrect syscall subarg range check.

2001-03-06  John Hughes <john@Calva.COM>

  * configure.in, defs.h, desc.c, file.c, io.c, mem.c, net.c, resource.c,
    signal.c, syscall.c, svr4/dummy.h, svr4/syscall.h, svr4/syscallent.h:
    merge Harald Böhme's solaris patches (_LFS64_LARGEFILE and kernel aio
    mostly).

2001-03-06  John Hughes <john@Calva.COM>

  * dummy.h: add unimplemented UW sycalls
  * syscall.h: we can do settimeofday for UW, whopee!
  * syscallent.h: fix unimplemented UW syscalls

2001-03-06  John Hughes <john@Calva.COM>

  * aclocal.m4: look for pr_syscall in pr_lwp if we HAVE_MP_PROCFS
  * defs.h: add PR_SYSCALL to allow use of pr_lwp.pr_syscall if it exists.
  * syscall.c: use PR_SYSCALL instead of pr_syscall, fix up UnixWare code
    so it doesn't try to use pr_sysarg.

2001-03-06  John Hughes <john@Calva.COM>

  * aclocal.m4: on systems other than linux look for stat64 in sys/stat.h
  * file.c: handle xstat version _STAT64_VER, aka stat64.

2001-03-06  John Hughes <john@Calva.COM>

  * net.c: make sure SOL_ options are defined before using.
  * signal.c: declare sigset variable, only used on linux, inside #ifdef.

2001-02-21  Wichert Akkerman <wakkerma@debian.org>

  * net.c: fix format for printing Unix domain sockets

2001-02-19  Wichert Akkerman <wakkerma@debian.org>

  * linux/mips/syscallent.h: use new sys_sysmips
  * system.c: add sys_sysmips decoding

2001-02-16  Wichert Akkerman <wakkerma@debian.org>

  * CREDITS: add Arkadiusz Miskiewicz <misiek@pld.org.pl> who
    submitted the IP6 scope ID updates
  * acconfig.h: add HAVE_SIN6_SCOPE_ID and HAVE_SIN6_SCOPE_ID_LINUX
  * aclocal.m4: add AC_SIN6_SCOPE_ID to check if sin6_scope_id is
    available
  * configure.in: check for if_indextoname function and sin6_scope_id
  * net.c: teach printsock about IP6 scope ids

2001-02-16  Wichert Akkerman <wakkerma@debian.org>

  * configure.in: test for netinet/tcp.h and netinet/udp.h existance
  * net.c: include netinet/tcp.h and netinet/udp.h if they exist
  * Makefile.in: use @mandir@ and @bindir@

2000-11-26  Wichert Akkerman <wakkerma@debian.org>

  *  net.c: fix formating error in sys_setsockopt
  *  net.c: add list of socketlayers and use that for [gs]etsockopt

2000-10-12  Wichert Akkerman <wakkerma@debian.org>

  * time.c: use sys/timex.h so things compile with 2.2 kernels
  * stream.c: test if MSG_* constants are #defined

2000-09-03  Wichert Akkerman <wakkerma@debian.org>

  * process.c: perform bpt trick for clone as well so we can get the
    pid of the child before it starts doing something
  * file.c: rename dirent64 struct to kernel_dirent64 so things compile
    again with newer libcs
  * test/clone.c: improve our testcase a bit
  * Merge another patch from Gäel Roualland with FreeBSD updates

2000-09-01  Wichert Akkerman <wakkerma@debian.org>

  * lots of files: merge patch from Gaël Roualland to add
    support for FreeBSD.

2000-08-09  Wichert Akkerman <wakkerma@debian.org>

  * file.c: update to reflect that st_ino suddenly became a long long
    in the in Linux 2.4.0-test6

2000-08-09  Wichert Akkerman <wakkerma@debian.org>

  * test/clone.c: minor fixup
  * Another bunch of patches from John Hughes merged:
  * signal.c:
    + SVR4 printcontext(): sigset_t != sigset_t*
    + getcontext returns a value, so print on exit of syscall
    + add UC_FP to ucontext_flags for OS writers that can't spell
    + sys_signal(): special case SIG_{ERR,DFL,IGN}
    + decode_subcall(): only do subcall range checking when needed
  * bunch of UnixWare updates
  * aclocal.m4, acconfig.h, configure.in: add test for long long type

2000-07-04  Wichert Akkerman <wakkerma@debian.org>

  * net.c: add SOL_PACKET and SOL_RAW socket options, update
    SOL_IP and SOL_TCP

2000-06-23  Wichert Akkerman <wakkerma@debian.org>

  * strace.c: close outf before we exec a child process

2000-06-09  Ulrich Drepper  <drepper@redhat.com>

  * configure.in: Don't link against libnsl on Linux, it's unnecessary.
  * defs.h (struct tcb): Make auxstr member const.
  * file.c (fsmagic): And many more magic numbers.
  * util.c: Don't include <linux/ptrace.h> for glibc 2.1 and up.

2000-04-26  Wichert Akkerman <wakkerma@debian.org>

  * defs.h: balance #if/#endif again
  * system.c: fix return statements in sys_capget()
  * Merge updates from Topi Miettinen <Topi.Miettinen@nic.fi>:
    + file.c: add F_[SG]ETSIG to fcntl flags
    + strace.c: don't setre[gu]id if not needed
    + system.c: handle sys_reboot for Linux
    + term.c: add baudrate constants up to B4000000
    + linux/**/syscallent.h: note that munlockall has no arguments

2000-04-25  David Mosberger  <davidm@hpl.hp.com>

  * CREDITS: fix email address
  * process.c: handle PR_[GS]ET_UNALIGN and PR_[GS]ET_KEEPCAPS
  * signal.c: honour offset of sigconfig in sigframe structure for
    Linux/ia64
  * linux/ia64/syscallent.h: Add perfmonctl, pivotroot, mincore, and
    madvise syscalls.
  * syscall.c (syscall_enter): With Kevin's latest ptrace patches,
    AR_BSP points to the _end_ of the active register frame, so we need
    to adjust bsp by moving it back by the size of the active frame
    before using it.

2000-04-24  Wichert Akkerman <wakkerma@debian.org>

  * process.c: add sparc support to change_syscall

2000-04-22  Wichert Akkerman <wakkerma@debian.org>

  * linux/mips/syscallent.h: fix some typos

2000-04-14  Wichert Akkerman <wakkerma@debian.org>

  * linux/mips/syscallent.h: added names for SVR4, SYSV, BSD4.3 and POSIX
    syscalls

2000-04-13  Wichert Akkerman <wakkerma@debian.org>

  * defs.h: Linux/MIPS uses syscalls up to >4k, so set MAX_QUALS to
    4999

2000-04-09  Wichert Akkerman <wakkerma@debian.org>

  * README-linux: updated to note that strace might not compile
    with development kernels
  * bjm.c: sys_query_module: check if malloc succeeds
  * system.c: sys_cap[gs]et(): check if malloc succeeds, only malloc once
  * linux/syscallent.h: updated for 2.3.99pre3
  * linux/alpha/syscallent.h: updated for 2.3.99pre3, add all osf syscalls
    even though Linux doesn't implement them
  * syscall.c: add global variables for MIPS registers as well
  * syscall.c: move global variables to before get_scno since that uses them
  * util.c: oops, misspelled defined
  * process.c: fix ptrace calls in change_syscall
  * mem.c: decode sys_madvise
  * Merge patch from Topi Miettinen <Topi.Miettinen@nic.fi>
    + add support for quotactl, fdatasync, mlock, mlockall, munlockall & acct
    + small fix for RLIMIT_* and RUSAGE_BOTH
    + enhace support for capget and capset

2000-02-19 Wichert Akkerman <wakkerma@debian.org>

  * test/vfork.c: new file to test vfork traces
  * test/.cvsignore: new file
  * defs.h: Up maximum number of traced processed to 64
  * strace.c: Disable some debugging code from davidm
  * implement setarg for more architectures
  * implement change_syscall

1999-12-27  Morten Welinder  <terra@diku.dk>

	* syscall.c (lookup_signal, lookup_desc): isdigit requires an
 	_unsigned_ char parameter.

2000-02-14 Wichert Akkerman <wakkerma@debian.org>

  * S390 updates

2000-02-03 Wichert Akkerman <wakkerma@debian.org>

  * Merge Linux/ia64 patches

2000-01-02 Pavel Machek	     <pavel@ucw.cz>

  * probe if sys/poll.h exists in configure + minor cleanups

  * syscall.c: split trace_syscall into few pieces to make code readable

2000-01-21 Wichert Akkerman  <wakkerma@debian.org>

  * Release version 4.2 to get the current updates out and so
    we can concentrate in finishing the clone support.

2000-01-11 Wichert Akkerman  <wakkerma@debian.org>

  * Add 1900 to tm_year in sprinttime

1999-12-24  Wichert Akkerman  <wakkerma@debian.org>

 * file.c: protect printstat64 with STAT64 instead of linux so we can
   compile on Linux architectures that don't have it
 * util.c: fix LOOP for ARM

Fri Dec 24 18:05:00 EST 1999

1999-12-23  Ulrich Drepper  <drepper@cygnus.com>

 * file.c: Use ugly libc_stat trick also for stat64.
   Implement sys_stat64, sys_fstat64, sys_lstat64, and printstat64.
 * process.c (internal_clone): Fix a few typos and add definitions to make
   it at least compile.
 * linux/syscall.h: Declare sys_stat64, sys_lstat64, and sys_fstat64.
 * linux/syscallent.h: Define table entries for sys_stat64, sys_lstat64,
   and sys_fstat64.
 * aclocal.m4: Define AC_STAT64.
 * acconfig.h: Define HAVE_STAT64.
 * configure.in: Add AC_STAT64.

Thu Dec 23 15:01:37 CET 1999 Wichert Akkerman <wakkerma@debian.org>

  * Merge patch from ftp://oss.software.ibm.com/linux390/ to add
    support for Linux on the IBM S/390 architecture
  * process.c: add internal_clone(), currently only shows the options
  * syscall.c: use internal_clone to handle SYS_clone

Mon Dec 20 00:27:50 CET 1999 Wichert Akkerman <wakkerma@debian.org>

  * Rewrite mmap-handling to support mmap2 on Linux

Tue Dec 14 11:35:16 CET 1999 Wichert Akkerman <wakkerma@debian.org>

  * Note that Linux can handle sys_semop() as well

Tue Nov 30 11:05:26 CET 1999 Wichert Akkerman <wakkerma@debian.org>

  * Include linux/in6.h for glibc2.0 and older

Mon Nov 29 16:33:04 CET 1999 Wichert Akkerman <wakkerma@debian.org>

  * Merge patches from John Hughes to make configure support UnixWare

Sat Nov 27 21:38:17 CET 1999 Wichert Akkerman <wakkerma@debian.org>

  * Enhance sys_query_module

Fri Nov 26 10:51:55 CET 1999 Wichert Akkerman <wakkerma@debian.org>

  * Patches from John Hughes:
    + cosmectic fix in sys_getpmsg
    + allow net.c to compile on systems without AF_INET6
    + Only use long_to_sigset on Linux systems
    + UnixWare treats sigmask_t and sigmask_t* as the same thing
    + Add pollhack
    + Parse mount arguments for UnixWare
    + ACL fixes for UnixWare

Fri Nov 26 01:28:09 CET 1999 Wichert Akkerman <wakkerma@debian.org>

  * Release 4.1 to get all the changes made out there

Thu Nov 18 18:04:04 CET 1999 Wichert Akkerman <wakkerma@debian.org>

  * Merge stracefork from Alexey Kuznetsov <kuznet@ms2.inr.ac.ru>
    + Socket calls parsed better
	+ bunch of alpha OSF syscalls added
	+ Fix alpha 32/64 bit issues

Mon Nov  1 20:52:08 CET 1999 Wichert Akkerman <wakkerma@debian.org>

  * Move Linux kernelmodule-functions from system.c to bjm.c and
    remove duplicate for sys_create_module
  * Linux MIPS updates:
    + Play with #ifdef's in net.c to get IPv6 right
    + Use printargs for vm86-syscall

Sun Oct 31 22:03:00 CET 1999 Wichert Akkerman <wakkerma@debian.org>

  * Merge Linux mips patch from Florian Lohoff <flo@rfc822.org>

Mon Oct 11 00:36:25 CEST 1999 Wichert Akkerman <wakkerma@debian.org>

  * Merge patch from Keith Owens <kaos@ocs.com.au> to sys_query_module
    and sys_delete_module correctly

Wed Oct  6 02:00:33 CEST 1999 Wichert Akkerman <wakkerma@debian.org>

  * Update cvsbuild to give a better error if autoconf isn't installed
  * Add test for linux/ptrace.h to configure
  * Since we define GNU_SOURCE in the Makefile we don't need to define
    USE_GNU in file.c anymore

Fri Sep 10 04:35:16 CEST 1999 Wichert Akkerman <wakkerma@debian.org>

  * #define USE_GNU before including file.c so we get some extra O_* flags

Tue Aug 31 16:27:21 CEST 1999 Wichert Akkerman <wakkerma@debian.org>

  * Add missing } in IPv6 output

Tue Aug 31 01:23:08 CEST 1999  Wichert Akkerman <wakkerma@debian.org>

  * Update copyright for strace-graph to BSD to be consistent with
    the rest of strace

Mon Aug 30 00:53:57 CEST 1999 Wichert Akkerman <wakkerma@debian.org>

  * Merge patch from Daniel Jacobowitz: KERN_JAVA_* and KERN_SECURELVL aren't
    defined for all kernelversions
  * Add strace-graph, written by Richard Braakman <dark@xs4all.nl>

Thu Aug 19 13:10:15 CEST 1999 Jakub Jelinek <jj@ultra.linux.cz>

  * linux/sparc/syscall.h: Declare create_module/init_module.
  * configure.in: Allow compilation in a different directory
    than the source one.
  * signal.c: Use asm/reg.h and struct regs instead of pt_regs
    so that we don't depend on asm/ptrace.h which clashes with
    glibc sys/ptrace.h.
  * util.c: Likewise.
  * syscall.c: Likewise.

Wed Aug  4 18:01:50 CEST 1999 Wichert Akkerman <wakkerma@debian.org>

  * Syscall 94 on Linux alpha is sys_poll

Sun Jul 25 14:38:33 CEST 1999 Wichert Akkerman <wakkerma@debian.org>

  * Merge in UnixWare patches from John Hughes <john@Calva.COM>

Thu Jul 15 23:00:32 CEST 1999 Wichert Akkerman <wakkerma@debian.org>

  * Merge patch from Maciej W. Rozycki <macro@ds2.pg.gda.pl>:
    + Correctly implement fix sys_createmodule (Linux)
    + Add limited handlig of sys_initmodule (Linux)

Tue Jul 13 17:07:50 CEST 1999 Wichert Akkerman <wakkerma@debian.org>

  * Add configure-test for sys/reg.h and use that
  * Use sys/reg.h instead of asm/ptrace.h

Sat Jul 10 01:46:10 CEST 1999 Wichert Akkerman <wakkerma@debian.org>

  * Remove hack in signal.c for arm architecture
  * Add hack so we compile correctly on powerpc

Fri Jul  9 02:28:16 CEST 1999 Wichert Akkerman <wakkerma@debian.org>

  * Add a corrected patch from Daniel Jacobowitz

Thu Jul  8 16:00:04 CEST 1999 Wichert Akkerman <wakkerma@debian.org>

  * Merge patch from Daniel Jacobowitz to allow us to use the kernel types
    for the stat structure

Thu Jun 24 15:54:18 CEST 1999 Wichert Akkerman <wakkerma@debian.org>

  * Fix test for sys/reg include

Tue Jun 22 17:26:33 CEST 1999 Wichert Akkerman <wakkerma@debian.org>

  * Fixed some Linux/powerpc sillyness, thanks to Daniel Jacobowitz
  * Fixed some SunOS compile problems earlier that I forgot to include
    here

Mon Jun 14 12:44:25 CEST 1999

  * Avoid leakint fd into child when forking, patch from
    John Hughes <john@Calva.COM>

Fri Jun 11 14:54:47 CEST 1999

  * Applied IRIX64 patch from Thomas E. Dickey <dickey@clark.net>
  * Applied Solaris and manpage updates from Guy Harris <guy@netapp.com>

Wed Jun  9 14:48:49 CEST 1999 Wichert Akkerman <wakkerma@debian.org>

  * Brought syscall list for alpha up to date

Wed Jun  2 18:30:12 CEST 1999 Jakub Jelinek <jj@ultra.linux.cz>

  * system.c: sys_umount2 syscall support.
  * linux/sparc/errnoent.h: Update sparc-linux errnos.
  * linux/sparc/syscall.h: Update used sparc-linux syscalls.
  * linux/sparc/syscallent.h: Match 2.2.9 system calls.
  * file.c: sparc-linux asm/stat.h uses dev_t etc. types,
    so it needs strace's own copy of the stat structure.
  * util.c: Make it compile on sparc-linux.
  * strace.c: Fix strace -f and -ff operation on sparc-linux.
  * signal.c: rt_sigaction has different arguments on sparc*-linux
    and alpha-linux.
  * syscall.c: Recognize sparc64-linux binaries.

Fri May 28 21:09:00 PST Ulrich Drepper <drepper@cygnus.com>

  * configure.in: Fix typo (CFLAG -> CFLAGS).

  * syscall.c: Don't include linux/ptrace.h explicitly for glibc.

Thu May 27 13:59:27 CEST 1999 Wichert Akkerman <wakkerma@debian.org>

  * Add some sysctl support, patch from Ulrich Drepper

Wed May 26 01:04:34 CEST 1999 Wichert Akkerman <wakkerma@debian.org>

  * Use kernel dirent structure for Linux

Sun May  9 02:18:30 CEST 1999 Wichert Akkerman <wakkerma@debian.org>

  * Merge in patches from Andreas Schwab <schwab@issan.cs.uni-dortmund.de>
    + some layout and other minor fixes
    + add some m68k-specific things to linux/syscallent.h. Note that m68k
      is similar enough to i386 to not need it's own subdirectory
    + add support for sendfile and mremap syscalls for Linux
  * Merge in patches from Sascha Schumann <sascha@schumann.2ns.de>
    + ioctls.h vs sys/ioctl.h on Alpha platform
    + pointer was casted to an int in stream.c
    + strsignal() needs -D_GNU_SOURCE in CFLAGS
    + several other casts changed
    + correct ARM/POWERPC architecture defines in acconfig.h
  * Merge in patches from Morten Welinder <terra@diku.dk>
    + add some autoconf-tests for includefiles
    + handle solaris version of sigcontext struct (actually I hacked this
      up again, but the idea is his :)

Sun Apr 18 22:32:42 CEST 1999 Wichert Akkerman <wakkerma@debian.org>

  * Update syscalls for linux alpha, patch from Bart Warmerdam
    <bartw@debian.org>
  * Update sparc code so it actually compiles

Fri Apr 16 02:18:05 CEST 1999 Wichert Akkerman <wakkerma@debian.org>

  * Add support for old_*stat functions for Linux. Please note you need
    to use reasonably recent kernel headers to compile strace now.
  * Change references to LINUX into linux in file.c
  * Fix include for LDT in mem.c

Thu Apr 15 22:28:15 CEST 1999 Wichert Akkerman <wakkerma@debian.org>

  * Change in strace maintainership, jrs passed the torch to me.
  * Use autoconf 2.13
  * Incorporate all changes already made in the Debian strace package:
    + compiles with more Linux kernels
    + added support for more Linux architectures
    + add support for a lot of extra syscalls
    + fix some problems with hanging children
    + check stray syscall after execv
    + decode capget and capset arguments
    + add more constants to net.c
    + detect ROSE networking
    + add more protocol families to domains
    + add IPIP protocol
    + added MSG_PROXY and MSG_CTRUNC to msg_flags
    + added SO_BSDCOMPAT and SO_REUSEPORT to sockoptions
    + added IP, IPX and TCP-options
    + added IP, IPX and TCP support to get-/setsockopt()
    + added IPX support
    + updated handling of signals

Sun Oct 27 22:28:00 1996  J. Richard Sladkey  <jrs@world.std.com>

	* util.c (umovestr) [LINUX]: Handle Linux like SunOS4
	instead of SVR4.  That is, read a few bytes at a time
	to avoid overrunning the end of the stack.

Fri May 31 01:48:49 1996  J. Richard Sladkey  <jrs@world.std.com>

	* version.c: Version 3.1 is released.

Thu May 23 01:04:43 1996  J. Richard Sladkey  <jrs@world.std.com>

	* aclocal.m4 (AC_DECL_SYS_ERRLIST): Try looking in stdio.h
	as well since that's where glibc declares it.  Go figure.
	* signal.c (sys_sigreturn) [ALPHA]: Use sigcontext
	instead of sigcontext_struct since glibc v5+ apparently
	plays games with the native OS namespace.
	From David Mosberger-Tang <davidm@AZStarNet.com>.

Mon May 20 23:17:14 1996  J. Richard Sladkey  <jrs@world.std.com>

	* version.c: Version 3.0.14 is released.

	* aclocal.m4 (AC_STRUCT_MSG_CONTROL): New macro.
	* configure.in: Add call to AC_STRUCT_MSG_CONTROL.
	* net.c (printmsghdr): Handle BSD 4.3 and 4.4 msghdr members
 	differently.
	Reported by Henrik Storner <storner@osiris.ping.dk>.

	* configure.in: (AC_CHECK_{HEADERS,FUNCS}): Add checks for
 	sys/filio.h and sys/stream.h and remove check for poll.
	* desc.c (decode_select, sys_select, sys_oldselect) [LINUX]:
 	Handle old and new styles of argument passing for select on Linux.
	* ioctl.c, stream.c: Conditionalize stream code on presence of
	sys/stream.h instead of poll because glibc implements poll but
	not the rest of the stream interface.
	* signal.c [LINUX]: Standardize on the name sigcontext_struct.
	(sys_sigprocmask) [ALPHA]: Handle OSF flavor which is more like
	sigsetmask.
	* term.c (term_ioctl): Use _VMIN, if present, for TC{G,S}ETA*.
	* util.c (umoven, umovestr): Move data in long-sized chunks
	at a time, instead of hard coding it to be 4.
	From David Mosberger-Tang <davidm@AZStarNet.com>.

Mon May 20 01:19:36 1996  J. Richard Sladkey  <jrs@world.std.com>

	* version.c: Version 3.0.13 is released.

	* configure.in (AC_CHECK_HEADERS): Add check for asm/sigcontext.h.
	* signal.c [HAVE_ASM_SIGCONTEXT_H]: Conditionally include
	asm/sigcontext.h to define sigcontext_struct and don't define it
	locally if the header is present.

	* syscall.c (nerrnos{0,2}): Correct size computation.

	* Makefile.in: Remove dependencies and rules relating to files
 	normally found in the os directory.  Because of the new scheme we
 	don't know precisely where they come from.  Sigh.
	* signalent.sh: Make it work for sunos4, linux, and svr4.
	* {sunos4,linux{,/alpha},svr4}/Makefile.in: Make rules correspond
 	to traditional make syntax.  Add signalent.h to files which can
 	unconditionally be rebuilt.  Prevent signalent.h from being
 	unconditionally being rebuilt since it's customized.
	* {sunos4,linux{,/alpha},svr4}/{ioctlent,errnoent,signalent}.h:
 	Use versions built by {ioctlent,errnoent,signaltent}.sh.
  	* sunos4/ioctlent.sh: Work around sprintf troubles with SunOS
 	4.1.4 and gcc 2.7.2.

Sun May 19 17:14:09 1996  J. Richard Sladkey  <jrs@world.std.com>

	* configure.in, Makefile.in: Add OSARCH concept to finish
	build support for the alpha.
	* Makefile.in, linux/Makefile.in: Rewrite clean, distclean,
	and maintainer-clean rules.
	* defs.h, ioctlsort.c: Make ioctl code member unsigned.
	* ioctl.c, ioctlsort.c (compare): Perform explicit checking
	for less, greater, and equal since subtraction on two's
	complement numbers isn't an order relation (it isn't transitive)!
	* linux/Makefile.in: Add rules for the signalent.h file.
	* linux/alpha/Makefile.in: New file.

Sun May 19 01:12:28 1996  J. Richard Sladkey  <jrs@world.std.com>

	* version.c: Version 3.0.12 is released.

	* linux{,alpha}/ioctlent.sh: Tweak for recent kernels.
	From Michael E Chastain <mec@duracef.shout.net>.

	* defs.h (SUPPORTED_PERSONALITES, DEFAULT_PERSONALITY): New.
	* syscall.c (set_personality): New.
	* strace.c (main): Call set_personality.
 	* defs.h, syscall.c, ioctl.c, signal.c: Make sysent, errnoent,
 	ioctlent, and signalent indirect pointers and redirect them
	based on personality.
	* {sunos4,svr4,linux{,/alpha}}/signalent.h: New files.
	Suggested by Tom Dyas <tdyas@eden.rutgers.edu>.

	* util.c (upeek): Handle case where ptrace returns a long
	and sizeof(long) != sizeof(int).
	From Richard Henderson <richard@twiddle.tamu.edu>

Fri May 17 21:03:36 1996  J. Richard Sladkey  <jrs@world.std.com>

	* version.c: Version 3.0.11 is released.

	* many files: Fix more printf warnings for other platforms.

	* ipc.c (sys_msgrcv) [LINUX]: Conditionalize definition of ipc_wrapper.

	* linux/dummy.h: Handle missing library support for {send,recv}msg.
	Reported by Thomas Bogendoerfer <tsbogend@bigbug.franken.de>.

	* linux/syscall.h (sys_utimes): Fix a typo in the declaration.
	From Thomas Bogendoerfer <tsbogend@bigbug.franken.de>.

Fri May 17 00:50:06 1996  J. Richard Sladkey  <jrs@world.std.com>

	* version.c: Version 3.0.10 is released.

	* Makfile.in: Add os/arch to includes so that a given arch
	(like alpha) can override the native arch (like i386).
	* configure.in: Check for sendmsg.

	* net.c: Make sendmsg and recvmsg dependent on an autoconf
	test.  Reported by Michael E Chastain <mec@duracef.shout.net>.

	* acconfig.h, configure.in: Detect the alpha.
	* ioctl.c: Handle the alpha.
	* defs.h: Make some members long for the alpha.  Define
	some register nicknames.  Add support for WAITEXECVE.
	* file.c [ALPHA]: Support the alpha for statfs.  Add
	osf_statfs and osf_fstatfs for the alpha.  Make damn sure
	major and minor results are suitable for passing to printf.
	* signal.c, syscall.c: Support the alpha.
	* process.c: Add alpha user offsets.
	* most files: Use %l? for printf arguments since
	most are now longs for the alpha.
	* linux/alpha/{errnoent.h,ioctlent.{h,sh},syscallent.h}:
	New for the alpha.
	From Thomas Bogendoerfer <tsbogend@bigbug.franken.de>.

Wed May 15 00:29:37 1996  J. Richard Sladkey  <jrs@world.std.com>

	* version.c: Version 3.0.9 is released.

	* config.in, config.sub, install-sh: Upgrade to autoconf 2.10.

	* linux/dummy.h, linux/syscallent.h, linux/syscall.h: Add recent
	Linux kernel version system calls.

Wed Mar 13 01:03:38 1996  J. Richard Sladkey  <jrs@world.std.com>

	* ipc.c [SUNOS4]: Add SunOS support for decoding IPC calls.
	* syscall.c [SUNOS4]: Compile decode_subcall on SunOS and
	decode IPC calls using it.
	* sunos4/dummy.h: Alias sys_semop to printargs.
	* sunos4/syscall.h: Add new pseudo syscalls for IPC.
	* sunos4/syscallent.h: Include new subcalls for IPC.
	From Matthias Pfaller <leo@dachau.marco.de>.

Tue Feb 13 22:08:25 1996  J. Richard Sladkey  <jrs@world.std.com>

	* version.c: Version 3.0.8 is released.

	* time.c [LINUX]: Explicitly include linux/version.h.

	* strace.c (main): Don't let them even *try* to
	get strace to attach to itself since some systems
	don't handle this case very gracefully.
	Reported by David S. Miller <davem@caip.rutgers.edu>.

	* Makefile.in (distclean): Fix it for subdirectories.

	* sunos4/syscallent.h, svr4/syscallent.h: Fill in the new
	sys_flags member for each defined system call.

Fri Dec  8 01:17:28 1995  Rick Sladkey  <jrs@world.std.com>

	* defs.h (TRACE_*): New flags to describe what class
	of system call each system call is.
	(sysent): Add sys_flags member.
	* syscall.c (sysent): Define (and later undef) abbreviations
	for the system call class flags.
	(lookup_class): New function to translate strings to
	system call class flags.
	(qualify): Handle new system call class mechanism.
	* linux/syscallent.h: Fill in the new sys_flags member
	for each defined system call.

	* defs.h (print_sock): Remove redundant and non-K&R C
	compatible prototype.  From Juergen Weigert
	<jnweiger@immd4.informatik.uni-erlangen.de>.

Thu Dec  7 01:17:40 1995  Rick Sladkey  <jrs@world.std.com>

	* linux/ioctlent.sh: Tweak to improve ioctl accuracy.
	From Michael E Chastain <mec@duracef.shout.net>.

	* system.c (includes) [LINUX]: Add linux/nfs.h for recent
	kernels.  From Michael E Chastain <mec@duracef.shout.net>.

Wed Dec  6 21:52:28 1995  Rick Sladkey  <jrs@world.std.com>

	* file.c (sprintfstype): Enclose string result in double
	quotes.

	* time.c (sys_adjtimex) [LINUX]: Conditionalize
	constantly evolving timex structure.
	From Aaron Ucko <UCKO@VAX1.ROCKHURST.EDU>.

	* defs.h, syscall.c, strace.c: Rename syscall to
	trace_syscall and change prototype and all callers
	because of broken Linux shared libraries.
	From Aaron Ucko <UCKO@VAX1.ROCKHURST.EDU>.

	* Makefile.in (clean): Check for a file with test -f not
	test -d.  From Aaron Ucko <UCKO@VAX1.ROCKHURST.EDU>.

Tue Sep 26 02:32:31 1995  Rick Sladkey  <jrs@world.std.com>

	* version.c: Version 3.0.7 is released.

	* util.c (string_quote): Fix thinko which caused core
	dumps for strings with quotes in them.
	Reported by Marty Leisner <leisner@sdsp.mc.xerox.com>.

	* linux/Makefile.in (errnoent.h rule): Grab all errno.h
	files from /usr/include, not just the linux one.
	From Michael E Chastain <mec@duracef.shout.net>.

	* linux/errnoent.sh: Total rewrite to handle more ioctls with
	fewer false positives on more kernel flavors.
	From Michael E Chastain <mec@duracef.shout.net>.

Mon Sep  4 01:29:22 1995  Rick Sladkey  <jrs@world.std.com>

	* version.c: Version 3.0.6 is released.

	* linux/dummy.h, linux/syscall.h, linux/syscallent.h: Add
	sys_msync.
	* mem.c (mctl_funcs, mctl_lockas, sys_mctl): Conditionalize
	on MC_SYNC instead of HAVE_MCTL.
	(mctl_sync): Conditionalize on MS_ASYNC instead of HAVE_MCTL.
	(sys_msync): New function.

Sat Sep  2 12:06:04 1995  Rick Sladkey  <jrs@world.std.com>

	* linux/dummy.h, linux/syscall.h, linux/syscallent.h: Add
	sys_flock and sys_getdents.
	* desc.c (flockcmds, sys_flock): Conditionalize on LOCK_SH
	not SUNOS4.
	* file.c (sys_getdents): Define unconditionally and handle
	LINUX case.
	* strace.c (main): Disallow username option unless both real
	and effective uids are root.

Wed Aug 30 01:29:58 1995  Rick Sladkey  <jrs@world.std.com>

	* strace.c (main): Ensure that run_uid and run_gid are
	always set to something meaningful.
	(main, newoutf) [!SVR4]: Swap real and effective uids while
	opening any output files.
	(main) [!SVR4]: Treat effective uid of root as a request
	to handle suid binaries correctly using the real uid of
	the invoking user.

Sat Aug 19 00:06:08 1995  Rick Sladkey  <jrs@world.std.com>

	* Makefile.in: Add `|| true' to clean rule because
	although GNU make 3.74 uses `sh -c' to invoke commands
	every other make in the world uses `sh -ec'.

	* syscall.c (syscall) [SVR4, MIPS]: The fifth and subsequent
	arguments appear to be stored on the stack, not in the
	registers following A3 (empirical result).

	* defs.h: Add prototype for printsock.
	* svr4/dummy.h: Remove generic handling of sys_mount.
	* system.c [SVR4, MIPS]: Include several system headers to cleanly
	get access to SGI mount information.
	(mount_flags, nfs_flags) [SVR4, MIPS]: New objects.
	(sys_mount) [SVR4, MIPS]: New function.
	(sys_mount) [SVR4, !MIPS]: New function.

Tue Jul  4 00:30:34 1995  Rick Sladkey  <jrs@world.std.com>

	* version.c: Version 3.0.5 is released.

	* desc.c, resource.c, strace.c, syscall.c, time.c: Cast tv_sec and
 	tv_usec members to long when using printf.

	* ipc.c: Omit define of __KERNEL__.
	({MSG,SEM,SHM}_{STAT,INFO}): Explicitly define those things we
 	want which __KERNEL__ used to provide.
	(sys_msgrcv): Change reference to ipc_kludge structure to
	look-alike ipc_wrapper to avoid dependence on __KERNEL__.

	mem.c (mmap_flags) [MAP_{GROWSDOWN,DENYWRITE,EXECUTABLE}]: Add
 	Linux specific options.

	syscall.c: Use SYS_ERRLIST_DECLARED instead of guessing.
  	[E{RESTART{SYS,NO{INTR,HAND}},NOIOCTLCMD}]: Explicitly define
 	instead of depending of __KERNEL__.

	term.c: Cast c_{i,o,c,l}flag to long when using printf.

Tue Jun  6 00:27:48 1995  Rick Sladkey  <jrs@world.std.com>

	* aclocal.m4 (AC_DECL_SYS_ERRLIST, AC_DECL__SYS_SIGLIST): New.
	* configure.in: Call AC_DECL_SYS_ERRLIST, AC_DECL_SYS_SIGLIST,
	and AC_DECL__SYS_SIGLIST.
	* acconfig.h (SYS_ERRLIST_DECLARED): New.
	* strace.c (strerror): Use SYS_ERRLIST_DECLARED.
	(strsignal): Use SYS_SIGLIST_DECLARED.

	net.c (sys_socket): Omit inadvertent surplus comma when
	protocol family isn't PF_INET.

	util.c (dumpstr): Fix incorrect printing of one too many
	characters when the length is not an even multiple of 16 bytes.
	Reported by Juergen Weigert
	<jnweiger@immd4.informatik.uni-erlangen.de>.

Thu May  4 23:37:47 1995  Rick Sladkey  <jrs@world.std.com>

	* ioctl.c (compare): Change prototype to match POSIX qsort.
	* signal.c (sigishandled) [SVR4]: Omit everything after return.
	* strace.c (trace) [SVR4]: Break out of for loop instead of
	returning when finished so final return statement is executed.
	* syscall.c (internal_syscall): Add more SYS_wait* variations.
	(syscall) [LINUX]: Correct typo which commented out the M68K
	argument to ifdef.
	* util.c (printstr): Cast unsigned char pointer argument
	to char pointer in umovestr call.
	(dumpstr): Likewise for umoven.

Wed May  3 01:10:56 1995  Rick Sladkey  <jrs@world.std.com>

	* version.c: Version 3.0.4 is released.

	* signal.c (sys_sigblock): Move after the definition of
	sys_sigsetmask that it calls to avoid an implicit declaration.
	* stream.c (transport_user_options, transport_server_options):
	Only needed if TI_BIND is defined.
	* configure.in: Add -Wno-implicit to WARNFLAGS on SunOS 4.x.

	* process.c (internal_fork) [SVR4]: Fix a typo that omitted
	the tcp arguement from the call to exiting.  Add getrval2
	check so no fork processing is done in the child.
	(printwaitn): Initialize exited so that its value is defined
	for all flows of execution.

Tue May  2 22:39:42 1995  Rick Sladkey  <jrs@world.std.com>

	* linux/dummy.h: Add aliases for sysfs, personality, afs_syscall,
	setfsuid, setfsgid, and _llseek syscalls.
	* linux/syscall.h: Add prototypes for them.
	* linux/syscallent.h: Add them to the syscall entries table.
	* system.c (headers) [LINUX]: Include linux/unistd.h to get __NR_*
	defines and conditionally include linux/personality.h if
	__NR_personality is defined.
	(personality_options) [LINUX]: New table.
	(sys_personality) [LINUX]: New function.

Tue May  2 00:20:39 1995  Rick Sladkey  <jrs@world.std.com>

	* strace.c (trace) [!SVR4]: Change forever loop to one predicated
	on the number of traced processes so that we can have untraced
	children (e.g. via popen).

	* strace (main) [!SVR4]: Call fake_execve to get the actual
	exec and its arguments into the trace.
	(environ): Declare it.
	* process.c (fake_execve): New function.
	(headers): Include sys/syscall.h to get SYS_* defines.

	* process.c (sys_execv, sys_execve): Surround argument annotations
	with C comment delimiters.
	(printargv, printargc): The arg vector is an array of char pointers
	not ints.

	* strace.c (printleader): Also check for multiple -p arguments
	when deciding whether to print the pid field.

	* strace.c (strerror) [!HAVE_STRERROR]: New function.
	* defs.h (strerror, strsignal): Add these prototypes if we provide
	the functions.
	* configure.in (AC_CHECK_FUNCS): Add strerror.

	* strace.c (main, proc_poller): Add SIGPIPE to the list of caught
	and blocked signals.

	* strace.c (main): Add username option.  Verify they are root before
	letting them use it.  Look up the ids in the password file.  Set
	them just before executing the program.
	From Reuben Sumner <rasumner@undergrad.math.uwaterloo.ca>.

Sat Apr 29 00:09:56 1995  Rick Sladkey  <jrs@world.std.com>

	* version.c: Version 3.0.3 is released.

	* system.c (mount_flags) [LINUX]: Omit duplicated MS_NOSUID entry.
	From Reuben Sumner <rasumner@undergrad.math.uwaterloo.ca>.

	* strace.c (outfname): Initialize to NULL.
	(main): Defer output file processing until after arguments.
	Allow either a pipe or a bang for command arguments.
	Check if outfname is NULL instead of checking outf for stderr.
	Reinitialize each startup TCB's outf to fix -p/-o ordering bug.
	(droptcb): Reset close TCB's outf to NULL instead of stderr.
	(tprintf): Avoid calling vfprintf if outf is NULL.

	* strace.c (main): Use popen if -o argument begins with a pipe.
	From Marty Leisner <leisner@sdsp.mc.xerox.com>.

	* process.c (printstatus): Fix a typo where WIFSIGNALED was meant
	but WIFSTOPPED was used.

	* Makefile.in: Add an EXTRA_DEFS variable and use it in the .c.o
	rule to prevent the comment from being untrue.

Fri Apr 28 22:01:56 1995  Rick Sladkey  <jrs@world.std.com>

	* strace.c (sys_exit): Move follow fork code to internal_exit.
	(sys_fork): Move follow fork code to internal_fork.
	(sys_execv, sys_execve): Move follow fork code to internal_exec.
	(sys_waitpid, sys_wait4): Move follow fork code to internal_wait.
	(vforking): Remove this static variable and check scno in
	internal_fork instead.
	(internal_exit, internal_fork, internal_exec, internal_wait): New
	functions.
	* defs.h: Add prototypes for the new internal_* functions.
	* syscall.c (syscall): Move syscall entering trace qualifier check
	and reprint checking after context decoding and precede them with
	a call to internal_syscall.  Precede syscall exiting trace
	qualifier check with a call to internal_syscall.
	(internal_syscall): New function.

	* defs.h (struct tcb): Make scno signed.
	* strace.c (syscall) Make u_error signed.
	[LINUX, I386]: Avoid unsigned cast in eax check.
	* syscall.c (sys_indir): Make i, scno, and nargs signed.
	* desc.c (sys_select): Make cumlen unsigned

Mon Apr 24 23:52:47 1995  Rick Sladkey  <jrs@world.std.com>

	* net.c (socktypes): Add SOCK_PACKET.

Sun Apr  2 23:50:39 1995  Rick Sladkey  <jrs@world.std.com>

	* Makefile (clean): Check explicitly for a Makefile in subdirs
	before running make in them.

Sun Mar 26 12:37:21 1995  Rick Sladkey  <jrs@world.std.com>

	* strace.c [MIPS] (proc_open): Conditionalize run on MIPS.
	[MIPS] (detach): Initialize error for MIPS case.
	(trace): Initialize ioctl_result and ioctl_errno for overly helpful
	compilers.
	* syscall.c (decode_subcall): Move variable i into conditionals
	that use use it.
	* system.c (syssgi_options): Conditionalize SGI_RECVLMSG and
	SGI_SET_FPDEBUG that SGI decided to drop.  I don't have the stomach
	to change them all.
	* term.c (term_ioctl): Force [c_[iocl]flags members to long before
	printing since we don't know what the size of their type is.
	* util.c [SVR4, MIPS] (umoven): Prevent MIPS from using pread even
	if autoconf detects it since it seems to either not work or do
	something else entirely on Irix 5.3.

Sun Mar 26 00:01:11 1995  Rick Sladkey  <jrs@world.std.com>

	* version.c: Version 3.0.2 is released.
	* linux/dummy.h: Make sys_fchdir like sys_close instead of printargs
	so that the file descriptor arg is decimal.

Sat Mar 25 22:50:13 1995  Rick Sladkey  <jrs@world.std.com>

	* net.c [LINUX] (protocols): Explicitly define all IPPROTO_* entries
	because on Linux they are enumerators.

	* system.c [LINUX] (mount_flags): Handle renaming of MS_SYNC to
	MS_SYNCHRONOUS.

	* util.c (printxval): When there is no translation, print the actual
	number first and the the default value as a C comment.

	* net.c (sys_send, sys_sendto, sys_sendmsg, sys_getsockopt,
	sys_setsockopt): Change first argument from unsigned to signed to
	cater to the frequent practice of calling system calls with a file
	descriptor of -1.
	* mem.c (sys_mmap): Likewise.

Sun Mar 19 13:53:52 1995  Rick Sladkey  <jrs@world.std.com>

	* signal.c [LINUX] (signalent): Handle old and new values of SIGIO.

Sun Dec 11 22:51:51 1994  Rick Sladkey  <jrs@world.std.com>

	* version.c: Version 3.0.1 is released.
	* Makefile.in, configure.in, aclocal.m4: Changes for autoconf 2.0.
	* config.guess, config.guess: Update from the FSF.
	* install-sh: New from the FSF.

Mon Dec  5 20:51:29 1994  Rick Sladkey  <jrs@world.std.com>

	* Makefile.in: Add m68k arch.
	* acconfig.h (M68K): Add m68k define.
	* configure.in: Add detection of arch m68k.
	* process.c [M68K] (struct_user_offsets): Support m68k registers and
	offsets.
	* signal.c [M68K] (sigcontext_struct): Support m68k sigcontext
	structure.
	[M68K] (sys_sigreturn): Support m68k sigreturn handling.
	* syscall.c [M68K] (syscall): Support m68k syscall number register
	and errno in d0 instead of eax.
	* util.c [M68K] (getpc, printcall, setbpt, clearbpt): Support m68k
	program counter in PT_PC instead of EIP.
	[M68K] (LOOP): Support m68k loop instruction.
	From Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>.

	* mem.c [MAP_ANONYMOUS] (mmap_flags): Correct inadvertent reference
	to MAP_FIXED instead of MAP_ANONYMOUS.
	From Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>.

	* signal.c [LINUX] (signalent): Signal 30 is now SIGPWR.
	From Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>.

Mon Dec  5 01:05:46 1994  Rick Sladkey  <jrs@world.std.com>

	* defs.h (tprintf): Fix typo in non-gcc ansi prototype for tprintf.
	Reported by Thanh Ma <tma@encore.com>.

	* strace.c (cleanup): Send SIGCONT before SIGTERM because Linux
	1.1.62 doesn't continue a traced child when the parent exits.
	Reported by Matt Day <mday@artisoft.com>.

	* system.c [LINUX]: Include netinet/in.h before arpa/inet.h.

	* util.c (printstr): Fix longstanding bug in notating string
	continuation.

	* strace.c [SVR4] (proc_open): Specifically wait for the child the
	child to go into the execve syscall to avoid spurious traces.
	[LINUX] (detach): Conditionalize the status variable.

Sun Dec  4 23:21:42 1994  Rick Sladkey  <jrs@world.std.com>

	* Makefile.in: Add mips arch.
	* acconfig.h (MIPS): Add mips define.
	* configure.in: Add detection of opsys irix5 and arch mips.  Check
	for prctl function.
	Check for sys/sysconfig.h header.
	* defs.h (MAX_ARGS): Bump maximum syscall arguments from 8 to 32.
	* file.c [SVR4]: Include sys/cred.h.
	(access_flags): Update access flags for SGI.
	(sprinttime): Change type of sprinttime argument from unsigned
	long to time_t.
	* process.c [HAVE_PRCTL]: Include sys/prctl.h.
	[HAVE_PRCTL] (prctl_options, sys_prctl): New for SGI.
	(printsiginfo): Conditionally compile SI_TIMER and SI_MESGQ.
	Cast si_band member to long before printing.
	* signal.c (sigact_flags): Add _SA_BSDCALL for SGI.
	(sigprocmaskcmds): Add SIG_SETMASK32 for SGI.
	* strace.c [SVR4] [MIPS]:
	(foobar): New dummy signal handler.
	(main): Install a dummy signal handler in the child before pausing
	to work around an SGI bug in PRSABORT.
	(proc_open): Send a interrupt to the child instead of aborting the
	syscall which doesn't work on Irix5.2.
	* svr4/dummy.h: Add new unfinished SGI syscalls
	(e.g. sys_sysmp, sys_sginap, etc.).  Handle some SGI syscalls like
	existing calls (e.g. sys_ksigaction like sys_sigaction).
	Printargs does the print thing for sys_sethostid.
	* svr4/syscall.h: Declare all new SGI syscalls.
	(SGI_KLUDGE): Define syscall table starting index to be 1 for SGI
	and add it to all subcall entry points.
	(SYS_pgrpsys_subcall, SYS_sigcall_subcall, SYS_context): Don't
	decode as subcalls on MIPS. Instead, use the normal syscalls.
	* svr4/syscallent.h [MIPS]: Lead syscall table with a dummy entry
	since SGI syscall numbers are off by one.
	[MIPS] (sys_pgrpsys): Rename to sys_setpgrp on SGI.
	[MIPS] (sys_xenix): Rename to sys_syssgi on SGI.
	[MIPS] (sys_sysmachine): Rename to sys_sysmips on SGI.
	[MIPS]: Conditionalize SVR4 extension into SGI and Solaris classes.
	* syscall.c (dumpio): Validate descriptor against MAX_QUALS.
	[HAVE_PR_SYSCALL] (syscall): Conditionalize SYS_vfork.
	[MIPS] (syscall): Add SGI section for decoding u_error and u_rval.
	Add workaround for broken SGI pr_sysarg on syscall entry.
	[SVR4] (syscall): Conditionalize subcall decoding for
	SYS_ptrpsys_subcall, SYS_sigcall_subcall and SYS_context_subcall.
	[SVR4] [MIPS] (getrval2): Handle SGI.
	* syscallent.sh: Dork the sed line to be choosier about SYS_ lines.
	* system.c [HAVE_SYSCONFIG_H]: Include sys/sysconfig.h.
	[MIPS] (syssgi_options, sys_syssgi): New for SGI.
