strace (@PACKAGE_VERSION@-1) experimental; urgency=low

  * @PACKAGE_STRING@ snapshot.

 -- Strace <@PACKAGE_BUGREPORT@>  @DEB_CHANGELOGTIME@

strace (4.12-3) unstable; urgency=medium

  * Fix up 32/64-bit test output in strace -S test to fix i386 build
  * Run make check with VERBOSE=1 so we get useful information in build logs

 -- Steve McIntyre <93sam@debian.org>  Sat, 04 Jun 2016 02:37:44 +0100

strace (4.12-2) unstable; urgency=medium

  * Remove libunwind dependency. Closes: #826223

 -- Steve McIntyre <93sam@debian.org>  Fri, 03 Jun 2016 13:43:44 +0100

strace (4.12-1) unstable; urgency=low

  [ Dmitry V. Levin ]
  * New upstream version.
    + implemented simultaneous use of -p option and tracing of a command,
      closes: #549942
    + fixed decoding of syscalls unknown to the kernel on s390/s390x,
      closes: #485979

 -- Dmitry V. Levin <ldv@altlinux.org>  Tue, 31 May 2016 11:12:13 +0000

strace (4.11-1) unstable; urgency=low

  [ Dmitry V. Levin ]
  * New upstream version.
    + fixed decoding of path argument of umount2 syscall, closes: #785050

  [ Steve McIntyre ]
  * Drop patches against old upstream - all upstream now.
  * Add simple upstream patch to fix printing of 32-bit times syscall
    return value on 64-bit architectures.

 -- Steve McIntyre <93sam@debian.org>  Fri, 08 Jan 2015 00:52:05 +0000

strace (4.10-3) unstable; urgency=medium

  * Really fix mips* builds - fix sys_syscall() handling.
    Closes: #781753
  * Clean up strace64.substvars at clean time
  * Remove ancient changelog entries that annoy lintian
  * Update Standards-Version to 3.9.6 (no changes needed)

 -- Steve McIntyre <93sam@debian.org>  Wed, 08 Jul 2015 23:44:03 +0100

strace (4.10-2) unstable; urgency=medium

  * Fix building on arm64 using patches from upstream. Closes: #790770
  * Fix various test suite failures using patches from upstream.
    Closes: #781040
  * Fix mips o32 build. Thanks to Arturo Borrero Gonzalez
    <arturo.borrero.glez@gmail.com> for tracking this.
  * Add build-dependency on gawk for the test suite. Closes: #780992

 -- Steve McIntyre <93sam@debian.org>  Thu, 02 Jul 2015 02:03:25 +0100

strace (4.10-1) unstable; urgency=low

  [ Dmitry V. Levin ]
  * New upstream version.
    + enhanced ioctl decoding,  closes: #692913
    + enabled mips64el build, closes: #773375
    + updated signal and errno numbers, closes: #768642
    + updated generic and added arch-specific PTRACE_* constants,
      closes: #734554

 -- Steve McIntyre <93sam@debian.org>  Sat, 21 Mar 2015 22:18:25 +0000

strace (4.9-2) unstable; urgency=medium

  * Turn on support for ppc64el, code is already in upstream.
    Closes: #744121.

 -- Steve McIntyre <93sam@debian.org>  Wed, 20 Aug 2014 18:00:20 +0100

strace (4.9-1) unstable; urgency=medium

  [ Dmitry V. Levin ]
  * New upstream version.
    + added -w option to produce stats on syscall latency, closes: #457497
    + applied miscellaneous corrections to the manpage, closes: #725987
    + fixed a typo in package description, closes: #697625
    + enabled or1k build, closes: #742235
    + enabled maximum security hardening, thanks to Markus <waldeck@gmx.de>

  [ Steve McIntyre ]
  * New maintainer. Thanks to Frederik for all his prior work!

 -- Steve McIntyre <93sam@debian.org>  Wed, 20 Aug 2014 15:11:36 +0100

strace (4.8-1.1) unstable; urgency=low

  * NMU
  * Uploading 4.8 to unstable to fix long-standing bugs that have been
    fixed for ages in experimental only.
  * enable arm64 build, Closes: #749956
  * enable x32 build, Closes: #727018
  * lintian-inspired fixes:
    + add build-arch and build-indep targets in debian/rules
    + update standards-version to 3.9.5
    + remove ancient changelog entries causing syntax checker errors
    + add hardening using buildflags.mk
    + trivial changes to Description: fields

 -- Steve McIntyre <93sam@debian.org>  Thu, 10 Jul 2014 14:22:18 +0000

strace (4.8-1) experimental; urgency=low

  * New upstream version.
    + Added aarch64 support, closes: #693074
    + Fixed kernel release string parsing, closes: #702309

 -- Dmitry V. Levin <ldv@altlinux.org>  Mon, 03 Jun 2013 15:16:17 +0000

strace (4.7-1) experimental; urgency=low

  [ Dmitry V. Levin ]
  * New upstream version.
    + Fixed sockaddr_un.sun_path name in decoded output, closes: #554946
    + Avoid potential core file clobbering on exit, closes: #656398
    + Fixed a typo in documentation, closes: #653309

 -- Frederik Schüler <fs@debian.org>  Tue, 12 Feb 2013 10:35:22 +0100

strace (4.6-1) unstable; urgency=low

  * New upstream version.
    + Added HDIO_* ioctl names, closes: #450953
    + Fixed stat64 decoding on mips, closes: #599028
    + Fixed misleading italics in the manual page, closes: #589323

 -- Dmitry V. Levin <ldv@altlinux.org>  Mon, 14 Mar 2011 15:16:17 +0000

strace (4.5.20-2.3) unstable; urgency=low

  * Non-maintainer upload.
  * Add sh4 to arch list.
  * Add powerpcspe to arch list (Closes: #579842).

 -- Nobuhiro Iwamatsu <iwamatsu@debian.org>  Tue, 22 Mar 2011 09:03:49 +0900

strace (4.5.20-2.2) unstable; urgency=low

  * Non-maintainer upload.
  * Add sh4 to arch list (Closes: #537105).

 -- Nobuhiro Iwamatsu <iwamatsu@debian.org>  Wed, 09 Mar 2011 09:22:01 +0900

strace (4.5.20-2.1) unstable; urgency=low

  * NMU, added armhf support. (Closes: #596960)

 -- Konstantinos Margaritis <markos@debian.org>  Thu, 24 Feb 2011 14:47:54 +0000

strace (4.5.20-2) unstable; urgency=low

  * Add missing sparc syscall defines to fix FTBFS on sparc.

 -- Frederik Schüler <fs@debian.org>  Tue, 04 May 2010 14:31:46 +0200

strace (4.5.20-1) unstable; urgency=low

  [ Dmitry V. Levin ]
  * New upstream version.
    + Corrected decoding of 64bit syscalls, closes: #570603
    + Corrected getsockopt decoding on architectures where
      sizeof(long) > sizeof(int), closes: #494844
    + Corrected decoding of epoll_pwait, closes: #513014
    + Implemented -C option to combine regular and -c output, closes: #466196

  [ Frederik Schüler ]
  * Update standards-version to 3.8.4.
  * debian/rules: allow parallel building.
  * debian/rules: comment out verbose build, only needed for debugging.
  * debian/rules: clean up clean: target, dh_clean does most of the work
    already.
  * debian/rules: use *-stamp instead of stamp-*, so dh_clean can tidy
    up for us.

 -- Frederik Schüler <fs@debian.org>  Tue, 13 Apr 2010 13:02:57 +0200

strace (4.5.19-2) unstable; urgency=low

  * Add sparc64 to the architectures list, closes: #560062
  * Fix FTBFS, thanks to Aurelien Jarno <aurelien@aurel32.net> for pointing
    out the solution. Closes: #560516
  * Rebuild as normal package, closes: #566968
  * Update standards-version to 3.8.3.
  * Lower package priority to optional, matching the archive override.
  * Add watch file.

 -- Frederik Schüler <fs@debian.org>  Tue, 26 Jan 2010 12:20:51 +0100

strace (4.5.19-1) unstable; urgency=low

  [ Dmitry V. Levin ]
  * New upstream release.
    + Fixed FTBFS on armel, closes: #520084, #535564
    + Marked sendfile(2) as a network syscall, closes: #509499
    + Fixed syscall numbers for tee and sync_file_range, closes: #503124
    + Corrected accept(2) decoding, closes: #507573
    + Changed strace to exit/kill with traced process
      exitcode/signal, closes: #37665

  [ Frederik Schüler ]
  * Move myself from uploaders to maintainers, and drop Roland from the list,
    closes: #521458
  * Apply hppa fixes, thanks to Carlos O'Donell <carlos@systemhalted.org>
    and Helge Deller <deller@gmx.de> for the fixes, closes: #546619, #437928
  * Update standards-version to 3.8.1.

 -- Frederik Schüler <fs@debian.org>  Mon, 05 Oct 2009 22:39:54 +0200

strace (4.5.18-1) unstable; urgency=low

  * New upstream release, closes: #515655
    + Fix FTBFS, closes: #518852
  * Backported patch from CVS: Fix support for NUL-terminated
    string, closes: #508484
  * Build-depend on debhelper (>= 7.0.0).

 -- Frederik Schüler <fs@debian.org>  Mon, 09 Mar 2009 14:39:42 +0100

strace (4.5.17+cvs080723-2) unstable; urgency=low

  * Pull Fix for sparc FTBFS from CVS, closes: #492774
  * Make strace64 priority extra.

 -- Frederik Schüler <fs@debian.org>  Sat, 02 Aug 2008 10:36:59 +0200

strace (4.5.17+cvs080723-1) unstable; urgency=low

  * New upstream cvs snapshot.
    - fixes arm and armel FTBFS.

 -- Frederik Schüler <fs@debian.org>  Wed, 23 Jul 2008 15:23:22 +0200

strace (4.5.17-1) unstable; urgency=low

  * New upstream release.

 -- Frederik Schüler <fs@debian.org>  Sat, 19 Jul 2008 21:38:30 +0200

strace (4.5.16+cvs20080708-2) unstable; urgency=low

  * Rerun autotools in correct order.
  * Add strace64 package on i386, powerpc, s390 and sparc,
    closes: #491167, #491188

 -- Frederik Schüler <fs@debian.org>  Thu, 17 Jul 2008 17:21:27 +0200

strace (4.5.16+cvs20080708-1) unstable; urgency=low

  * New upstream snapshot.
    + Fix chmod/chown typo in debian/rules, closes: #459255.
    + Install strace-graph too, closes: 469068.
    + Fix m68k build, closes: 456879.
    + Arm updates, closes: #441000.
    + fix build on mips/mipsel, closes: #448802.
    + show poll() parameters before blocking, closes: #369651.
    + use dh_strip instead of install -s, closes: #438055, #396682.
    + fix sparc build, closes: #469379.
  * Acknowledge NMU, closes: #469380.
  * Remove Wichert Akkerman from uploaders list.
  * Bump standards version to 3.8.0.
    - Add Homepage field.
  * Add dh_md5sums call, closes: #439428.
  * Fix dpkg-gencontrol call.
  * Update debian/copyright.

 -- Frederik Schüler <fs@debian.org>  Tue, 01 Jul 2008 23:05:51 +0200

strace (4.5.16-1) unstable; urgency=low

  * New upstream version.
    + 64-bit builds, closes: #435303.
    + LFS build fix, closes: #385310.
    + Fix multithread issues
    + Fix spurious SIGSTOP on early interrupt.
    + Fix utime for biarch.
    + Fix -u error message.
    + Better futex syscall printing.
    + Fix argv/envp printing with small -s settings, and for biarch.
    + New syscalls: getcpu, eventfd, timerfd, signalfd, epoll_pwait,
      move_pages, utimensat.

 -- Roland McGrath <frob@debian.org>  Fri, 03 Aug 2007 03:24:21 -0700

strace (4.5.15-1) unstable; urgency=high

  [ Roland McGrath ]
  * New upstream version.
    + Fix -ff -o behavior, closes: #353935.
    + Fail when nonoption args follow -p switches, closes: #361302.
    + Fix semtimedop, closes: #340239.
    + ARM support fixes, closes: #360152, #360154.

  [ Frederik Schüler ]
  * Fix configure script, closes: #428997

 -- Frederik Schüler <fs@debian.org>  Fri, 22 Jun 2007 16:28:08 +0000

strace (4.5.14-2) unstable; urgency=low

  * New comaintainer.
  * Fix build failure with linux-2.6.18, thanks to Andreas Henriksson for the
    patch, closes: #392556.
  * Fix build with libc6 2.5.
  * Acknowledge NMUs, closes: #315500, #355733

 -- Frederik Schüler <fs@debian.org>  Thu, 26 Oct 2006 22:11:25 +0200

strace (4.5.14-1) unstable; urgency=low

  * New upstream version.
    + Fix crash in printing sysctl, closes: #339117.
    + Respect DEB_BUILD_OPTIONS=nostrip, closes: #325132.
    + Fix ipc syscall decoding, closes: #340239.
    + Add missing source files to tarball, closes: #336197.
    + Build on armeb, closes: #335681.

 -- Roland McGrath <frob@debian.org>  Mon, 16 Jan 2006 22:17:38 -0800

strace (4.5.13-1) unstable; urgency=low

  * New upstream version.
    + Fix m68k build, closes: #315500.
    + Fix setsockopt decoding on 64-bit.
    + Fix typos in socket option name strings.
    + Display more IPV6 socket options by name.
    + Don't display inappropriate syscalls for -e trace=file.
    + New selector type -e trace=desc for file-descriptor using calls.
    + Fix 32-bit old_mmap syscall decoding on x86-64.
    + Fix errors detaching from multithreaded process on interrupt.
    + Note 4.5.12 fix for crash handling bad signal numbers.

 -- Roland McGrath <frob@debian.org>  Wed,  3 Aug 2005 04:41:49 -0700

strace (4.5.12-1) unstable; urgency=low

  * New upstream version.
    + Build on ppc64, closes: #301089.
    + Refuse negative -s argument value, closes: #303256.
    + Fix known syscall recognition for IA32 processes on x86-64.
    + Fix bad output for ptrace on x86-64.
    + Fix potential buffer overruns.
    + Make some diagnostics more consistent.
    + Update PowerPC system calls.
    + Better printing for Linux aio system calls.
    + Don't truncate statfs64 fields to 32 bits in output.
    + Cosmetic code cleanups.

 -- Roland McGrath <frob@debian.org>  Wed,  8 Jun 2005 13:52:39 -0700

strace (4.5.11-1) unstable; urgency=low

  * New upstream version.
    + Update MIPS system call table, closes: #256684.
    + Fix build on s390 and sparc, closes: #294172, #293564.
    + Fix select handling on nonstandard fd_set sizes, closes: #65654, #284290.
    + Don't print errors for null file name pointers, closes: #63093.
    + Fix initial execve output with -i.
    + Fix build nits, closes: #300598.

 -- Roland McGrath <frob@debian.org>  Tue, 22 Mar 2005 15:12:22 -0800

strace (4.5.9-1) unstable; urgency=low

  * New upstream version.
    + Fix potential crash in getxattr printing, closes: #283704.
    + Improve socket ioctl printing, closes: #192164.
    + Fix sparc build, closes: #278449.
    + Update ia64 syscall list.
    + Fix x86_64 syscall argument extraction for 32-bit processes.
    + Fix -e signal=NAME parsing.
    + Fix x86_64 exit_group syscall handling.
    + Improve mount flags printing.
    + Support symbolic printing of x86_64 arch_prctl parameters.
    + Add strace-udeb package for Debian installer debugging, closes: #268294.

 -- Roland McGrath <frob@debian.org>  Fri,  4 Feb 2005 01:53:01 -0800

strace (4.5.8-1) unstable; urgency=low

  * New upstream version.
    + Fix strace64 man page symlink, closes: #269220.
    + Update syscall tables for Alpha, ARM, HPPA, closes: #273887.
    + Build strace64 for s390, closes: #271500.
    + Fix some endian issues in 64-bit argument output on 32-bit machines.
    + Support new Linux syscalls mbind, set_mempolicy, get_mempolicy, waitid.
    + Support Linux syscalls fadvise64, fadvise64_64, and epoll_*.
    + Improve ioctl command name matching.
    + Print RTC_* ioctl structure contents.
    + Support newer RLIMIT_* values.
    + Print struct cmsghdr details in sendmsg.

 -- Roland McGrath <frob@debian.org>  Tue, 19 Oct 2004 18:05:28 -0700

strace (4.5.7-1) unstable; urgency=low

  * New upstream version.
    + Update man page about -c, closes: #254438.
    + Include pread/pwrite calls in -e read/write tracing, closes: #239947.
    + Update SO_* and IP_* value lists, closes: #171653.
    + Print attribute values in *xattr system calls.
    + Print clock_t values symbolically in Linux clock_* system calls.
    + Show PER_* values correctly, closes: #40588.
    + Fix `strace64' build on sparc, closes: #254728.

 -- Roland McGrath <frob@debian.org>  Tue, 31 Aug 2004 01:41:19 -0700

strace (4.5.6-1) unstable; urgency=low

  * New upstream version.
    + Update Linux ioctl lists and decode some more network ioctls.
    + Fix `quotactl' argument decoding on 64-bit.
    + Linux/SPARC64 support, closes: #254728.

 -- Roland McGrath <frob@debian.org>  Mon, 12 Jul 2004 00:18:32 -0700

strace (4.5.5-1) unstable; urgency=low

  * New upstream version.
    + Fix support for 32-bit (i386) binaries on Linux/AMD64.

 -- Roland McGrath <frob@debian.org>  Sun, 27 Jun 2004 22:19:15 -0700

strace (4.5.4-1) unstable; urgency=low

  * Build package on amd64, closes: #246568.
  * New upstream version.
    + Recognize more PF_* and AF_* values, closes: #250506.
    + Other  fixes.

 -- Roland McGrath <frob@debian.org>  Thu,  3 Jun 2004 19:35:37 -0700

strace (4.5.3-1) unstable; urgency=low

  * New upstream version.
    + Finish fix for -f on Linux/S390(x).
    + Print extra wait status bits, closes: #240062.

 -- Roland McGrath <frob@debian.org>  Fri, 16 Apr 2004 15:27:43 -0700

strace (4.5.2-1) unstable; urgency=low

  * New upstream version.
    + Check for errors writing to -o file, closes: #218762
    + Print multiple ioctl code matches on Linux.
    + Various other fixes.
    + Update typos and obsolete bits in man page, closes: #217008, #223390
    + Fix compilation problems with newer kernel headers, closes: #223207
    + Update HPPA system calls, closes: #231632
    + Fix PID in messages, closes: #229802
    + Fix s390 brokenness in 4.5, closes: #226098

 -- Roland McGrath <frob@debian.org>  Mon,  1 Mar 2004 22:44:55 -0800

strace (4.5-1) unstable; urgency=low

  * New upstream version.
    + Fix mlock syscall printing.
    + MIPS & S390 updates.
    + Print names for SIGRT_* in sets.

 -- Roland McGrath <frob@debian.org>  Wed, 24 Sep 2003 15:20:18 -0700

strace (4.4.99-1) unstable; urgency=low

  * New upstream version.
    + Alpha updates.
    + Add a few more new Linux 2.5 system calls.
    + Stephen Thomas contributed a port to Linux/SH64.
    + Print protocol names for PF_INET6 sockets.

 -- Roland McGrath <frob@debian.org>  Thu, 17 Jul 2003 02:04:43 -0700

strace (4.4.98-1) unstable; urgency=low

  * New upstream version.
    + Fixes clone argument bugs.
    + Fixes sem* printing bugs.
    + Fixes -e argument parsing, closes: #188379.
    + Fixes hanging parent in odd wait cases, closes: #47608, #109656.
    + Fixes -q defaulting, closes: #47113, #153678.
    + Fixes trying to execute directories, closes: #137103.
    + Updates ARM support, thanks to Russell King.
    + Updates S390/S390x support.
  * Bump standards-version to 3.5.10

 -- Roland McGrath <frob@debian.org>  Mon,  2 Jun 2003 12:26:29 -0700

strace (4.4.96-1) unstable; urgency=low

  * New upstream version.
    + Handles yet more new Linux 2.5 system calls.
    + Fixes x86_64 and ia64 clone printing.
    + Updates SH port.

 -- Roland McGrath <frob@debian.org>  Sun, 30 Mar 2003 17:14:34 -0800

strace (4.4.95-1) unstable; urgency=low

  * New upstream version.
    + Fixes printing of getresuid and getresgid values.

 -- Roland McGrath <frob@debian.org>  Mon, 24 Feb 2003 02:50:43 -0800

strace (4.4.94-1) unstable; urgency=low

  * New upstream version.
    + New option -E to set environment variables.
    + Build fixes for sparc, closes: #178636.

 -- Roland McGrath <frob@debian.org>  Wed, 19 Feb 2003 19:12:40 -0800

strace (4.4.93-1) unstable; urgency=low

  * New upstream version.
    + Grok new quotactl arguments, closes: #154067.
    + Fix m68k build problem, closes: #176528.
    + Old bugs prior release actually closes: #154068.
    + Fix S390 bugs with -f, and bugs with execve.
  * Switched to non-native packaging (empty .diff), closes: #176388.

 -- Roland McGrath <frob@debian.org>  Tue, 21 Jan 2003 12:22:08 -0800

strace (4.4.92-1) unstable; urgency=low

  * New upstream version.
    + Updated config.guess and config.sub, closes: #176241.
    + Several fixes for PPC, closes: #144326.
    + Fixed ptrace output for unknown requests, closes: #77728.
    + Fixed output of getdents64, truncate64, ftruncate64, closes: #169528.
    + Old bugs the last release actually closes: #153750, #38467, #109993,
      #109815, #104594, #113087, #134803, #166622, #96356, #94725, #32147,
      #32798, #36801, #41066, #81637, #138300, #143791.

 -- Roland McGrath <frob@debian.org>  Tue, 14 Jan 2003 02:02:44 -0800

strace (4.4.91-1) unstable; urgency=low

  * New upstream version.
    + Fixes -f on x86-64.

 -- Roland McGrath <frob@debian.org>  Fri, 10 Jan 2003 12:55:34 -0800

strace (4.4.90-1) unstable; urgency=low

  * New maintainer.
  * New upstream version.

 -- Roland McGrath <frob@debian.org>  Fri, 10 Jan 2003 01:58:40 -0800

strace (4.4-1.2) unstable; urgency=low

  * NMU
  * Quick one-liner to allow building on the ARM. Closes: #109993.
  * Re-ran autoconf, hopefully I didn't break other arches.

 -- Anand Kumria <wildfire@progsoc.org>  Mon,  1 Oct 2001 14:22:25 +1000

strace (4.4-1.1) unstable; urgency=low

  * NMU.
  * Added patch from David Mosberger which fixes some ia64 issues.
    Closes: #113087.
  * Added ia64-specific Build-Depends on libc6.1-dev.  Closes:
    #109815.
  * Ran autoheader, so the s390 patch applies.  Closes: #104594.

 -- Jeff Licquia <jlicquia@progeny.com>  Tue, 25 Sep 2001 13:15:28 -0500

strace (4.4-1) unstable; urgency=low

  * New upstream version
    + Added S390 support. Closes: Bug#104594
    + New config.{guess,sub}. Closes: Bug#92532
    + LFS support for Linux/sparc. Closes: Bug#99215
    * Works on IA64 again. Closes: Bug#103854
  * Don't override CFLAGS in debian/rules
  * Remove rules to create configure & friends. Closes: Bug#92483

 -- Wichert Akkerman <wakkerma@debian.org>  Sun, 19 Aug 2001 14:10:58 +0200

strace (4.3-3.1) unstable; urgency=low

  * copy in new config.{guess,sub} to get support for new architectures.
    Closes: #94725

 -- LaMont Jones <lamont@debian.org>  Mon,  9 Jul 2001 21:39:34 -0600

strace (4.3-3) unstable; urgency=low

  * Update architecture list

 -- Wichert Akkerman <wakkerma@debian.org>  Sat, 14 Apr 2001 10:42:19 +0200

strace (4.3-2) unstable; urgency=low

  * Run cvsbuild so we don't need to run autohead & friends
  * Sync to current CVS

 -- Wichert Akkerman <wakkerma@debian.org>  Fri, 13 Apr 2001 19:08:53 +0200

strace (4.3-1) unstable; urgency=low

  * New upstream version
  * Updated Build-Depends to use a recent glibc so we get the 2.4 kernel
    headers
  * Changed Architecture so we only build on Linux
  * Include section and priority in control info

 -- Wichert Akkerman <wakkerma@debian.org>  Sun,  1 Apr 2001 16:35:32 +0200

strace (4.2-4) frozen unstable; urgency=low

  * Actually install postinst and prerm so we get the proper /usr/doc/strace
    symlink

 -- Wichert Akkerman <wakkerma@debian.org>  Thu, 17 Feb 2000 21:49:17 +0100

strace (4.2-3) frozen unstable; urgency=low

  * Fix typo in aclocal.m4 that prevented compilation on architectures without
    LFS

 -- Wichert Akkerman <wakkerma@debian.org>  Sun, 13 Feb 2000 01:19:11 +0100

strace (4.2-2) frozen unstable; urgency=low

  * only include linux/ptrace.h if sys/reg.h hasn't been found by configure,
    Closes: Bug# 39556

 -- Wichert Akkerman <wakkerma@debian.org>  Thu, 27 Jan 2000 03:22:55 +0100

strace (4.2-1) frozen unstable; urgency=low

  * New upstream version:
    + Builds correctly on glibc2.0 again, Closes: Bug# 51648
    + Small y2k fix in printtimes, Closes: Bug# 54592
    + semop is handled now, Closes: Bug# 52684

 -- Wichert Akkerman <wakkerma@debian.org>  Fri, 21 Jan 2000 21:45:41 +0100

strace (4.1-1) unstable; urgency=low

  * New upstream version
  * Bump standards-version to 3.1.0
  * FHS 2.1 compliant

 -- Wichert Akkerman <wakkerma@debian.org>  Fri, 26 Nov 1999 01:42:07 +0100

strace (4.0-1) unstable; urgency=low

  * New upstream version

 -- Wichert Akkerman <wakkerma@debian.org>  Fri,  9 Jul 1999 16:12:34 +0200

strace (3.99.1-1) unstable; urgency=low

  * New upstream version, second pre-release for 4.0

 -- Wichert Akkerman <wakkerma@debian.org>  Wed,  9 Jun 1999 15:20:42 +0200

strace (3.99-1) unstable; urgency=low

  * New upstream maintainer (me :)
  * New upstream version, pre-release for strace 4.0
  * See upstream changelog for changes
  * Build with glibc2.1

 -- Wichert Akkerman <wakkerma@debian.org>  Tue, 27 Apr 1999 14:00:15 +0200

strace (3.1.0.1-12) unstable; urgency=low

  * Only i386 has a LDT, so check for architecture in mem.c (Bug# 32798)
  * Check for nsignals properly, closes: #34445
  * Fix check for overruns in umove*, patch by Nate Eldredge <nate@cartsys.com>

 -- Wichert Akkerman <wakkerma@debian.org>  Mon, 15 Mar 1999 00:43:14 +0100

strace (3.1.0.1-11) unstable; urgency=low

  * Merge some ARM stuff that got stuck in my mailbox

 -- Wichert Akkerman <wakkerma@debian.org>  Sun, 31 Jan 1999 13:04:13 +0100

strace (3.1.0.1-10) unstable; urgency=low

  * Move sys_poll to the DONE section in linux/dummy.h
  * Support subarchitectures for alpha (Bug# 32147)
  * Incorporate changes from Ulrich Drepper
    + up number of supported personalities on Linux sparc to 3
    + add O_DIRECT, O_LARGEFILE and O_DIRECTORY to openmodes
    + change prefix for printxval to SEEK_ in sys_lseek
    + add a support for a whole bunch of syscalls
    + updated sys_pread and sys_pwrite for SVR4
    + handle sys_delete_module properly
    + change SYS_socket_subcall to 230 for non-powerpc architectures
    + sys_chown is now lchown
    + looks like a whole lot of syscalls is moved from 180 to 230
    + Revamp a lot of the signal handling code
    + handle sys_clone
    + Lots more (it was a 6494-line patch and I'm too lazy to put all
      changes in here..)
  * Please note you need to have 2.1 or 2.2 kernel sources in /usr/src/linux
    in order to compile this.

 -- Wichert Akkerman <wakkerma@debian.org>  Fri, 29 Jan 1999 02:04:12 +0100

strace (3.1.0.1-9) unstable; urgency=low

  * Add support for poll() systemcall

 -- Wichert Akkerman <wakkerma@debian.org>  Thu, 31 Dec 1998 16:03:44 +0100

strace (3.1.0.1-8) frozen unstable; urgency=low

  * Use new_stat from libc6 now, except for powerpc and sparc

 -- Wichert Akkerman <wakkerma@debian.org>  Thu, 24 Dec 1998 11:35:32 +0100

strace (3.1.0.1-7) frozen unstable; urgency=low

  * Fix sparc support
  * Display nanosleep call correctly (Bug# 25904)
  * Honour -v flag in printargs (Bug# 10426)
  * Play with #define to get proper kernel struct stat
  * Compile with 2.1.131 kernel source

 -- Wichert Akkerman <wakkerma@debian.org>  Sat, 19 Dec 1998 15:02:14 +0100

strace (3.1.0.1-6) frozen unstable; urgency=low

  * Set NSIG correctly for ARM
  * Include strace-graph script from Richard Braakman <dark@debian.org>
    as an example. Try it and be amazed!
  * Fix sigaction problem, patch from Topi Miettinen
    <Topi.Miettinen@medialab.sonera.net>

 -- Wichert Akkerman <wakkerma@debian.org>  Mon,  7 Dec 1998 02:10:30 +0100

strace (3.1.0.1-5) unstable; urgency=low

  * Patched from Richard Braakman <dark@debian.org>:
    + use correct dirent.h on Linux
    + remove debugging code left from the powerpc patch
    + fix output for execve when -v is used

 -- Wichert Akkerman <wakkerma@debian.org>  Fri, 13 Nov 1998 15:59:17 +0100

strace (3.1.0.1-5) unstable; urgency=low

  * Add location of upstream sources to the copyright
  * Merged ARM architecture support from Jim Studt <jim@federated.com>

 -- Wichert Akkerman <wakkerma@debian.org>  Mon,  9 Nov 1998 16:43:24 +0100

strace (3.1.0.1-4) unstable; urgency=low

  * More ppc patches from Daniel Jacobowitz <dan@debian.org>

 -- Wichert Akkerman <wakkerma@debian.org>  Mon, 12 Oct 1998 00:59:44 +0200

strace (3.1.0.1-3) unstable; urgency=low

  * Added support for sys_query_module, patch from Brian J. Murrell
    <brian@interlinx.bc.ca>
  * Preserve timestamps for documentation when installed
  * Incorporate patches from Daniel Jacobowitz <dan@debian.org>:
    + powerpc patches
    + Patches include changing SYS_socket_subcall and SYS_ipc_subcall,
      check for stray syscall exit after execv, and completely regenerated
      syscall, errno, and ioctl lists.
    + Decode capget and capset arguments.

 -- Wichert Akkerman <wakkerma@debian.org>  Sun, 11 Oct 1998 22:42:56 +0200

strace (3.1.0.1-2) unstable; urgency=low

  * Patch to support sparc, courtesy of RedHat
  * Cleaned up some stuff the patch left broken
  * Fix some more compilation-issues for IPX with current kernels

 -- Wichert Akkerman <wakkerma@debian.org>  Fri, 24 Jul 1998 22:53:43 +0200

strace (3.1.0.1-1) unstable; urgency=low

  * New (actually very old) upstream version. Fixes something we
    already had fixed
  * Compiled with current kernel-headers from libc6-dev
  * Fixed spelling-error
  * Compress changelog
  * Bumped standard-version to 2.4.1.0

 -- Wichert Akkerman <wakkerma@debian.org>  Wed, 22 Jul 1998 15:53:23 +0200

strace (3.1-14) unstable; urgency=low

  * Don't let libc6 trick us anymore with {f,l,}stat() calls
  * Fix configure.in to support PentiumII processors

 -- Wichert Akkerman <wakkerma@debian.org>  Mon, 22 Jun 1998 20:17:20 +0200

strace (3.1-13) unstable; urgency=low

  * Corrected error on PowerPC patch that broke other archictectures
    (Bug# 13837)

 -- Wichert Akkerman <wakkerma@debian.org>  Tue, 14 Oct 1997 15:41:29 +0200

strace (3.1-12) unstable; urgency=low

  * PowerPC patches by Klee Dienes (Bug# 10788, 10790)
  * Create correct md5sums (Bug# 13363)
  * Put changelog in correct place (Bug# 13363)
  * Pristine sources

 -- Wichert Akkerman <wakkerma@debian.org>  Mon,  6 Oct 1997 15:42:25 +0200

strace (3.1-11) unstable; urgency=low

  * Ported to libc6 / glibc2 (Bug# 11729)
  * Compress manpage

 -- Wichert Akkerman <wakkerma@wi.leidenuniv.nl>  Fri,  1 Aug 1997 00:13:38 +0200

strace (3.1-10) unstable; urgency=low

  * Install upstream changelog
  * Added dependencies to control file for libc
  * Added md5sums to .deb file

 -- Wichert Akkerman <wakkerma@debian.org>  Fri, 11 Jul 1997 12:26:12 +0200

strace (3.1-9) stable; urgency=low

  * Fixed bug with hanging children. Patch by Matthias Urlichs
  * Added some more constants to net.c.
  * glibc patches, courtesy of Klee Dienes (Bug# 7735)

 -- Wichert Akkerman <wakkerma@debian.org>  Mon, 21 Apr 1997 11:59:45 +0200

strace (3.1-8) frozen unstable; urgency=low

  * Added detection of ROSE networking

 -- Wichert Akkerman <wakkerma@wi.leidenuniv.nl>  Tue, 12 Nov 1996 22:21:22 +0100

strace (3.1-7) stable; urgency=low

  * Install manpage with correct mode (0644) (Bug#4813)
  * Renamed debian changelog to changelog.Debian

 -- Wichert Akkerman <wakkerma@wi.leidenuniv.nl>  Sat, 26 Oct 1996 18:15:41 +0200

strace (3.1-6) stable; urgency=low

  * Small patch for compilation on kernels 2.1.0 and later (see signal.c)

 -- Wichert Akkerman <wakkerma@wi.leidenuniv.nl>  Fri, 18 Oct 1996 00:28:47 +0200

strace (3.1-5) stable unstable; urgency=low

  * Moved to new packagingformat
  * Fixed umoven bug (Bug# 4523)
  * Corrected number of parameters for mmap systemcall (bug# 4508)

 -- Wichert Akkerman <wakkerma@wi.leidenuniv.nl>  Sat, 23 Sep 1996 23:33:58 +0200

strace (3.1-4) unstable; urgency=low

  * Fixed changestemplate

 -- Wichert Akkerman <wakkerma@wi.leidenuniv.nl>, Thu Sep 12 14:59:44 MET DST 1996

strace (3.1-3) unstable; urgency=low

  * Revamped debian files

 -- Wichert Akkerman <wakkerma@wi.leidenuniv.nl>, Thu Jul 11 20:19:11 MET DST 1996


strace (3.1-2) unstable; urgency=low
  * Added some #ifdef's around IPX stuff to make it compilable on non-Linux
    systems.
  * changed debian.control and debian.rules to conform to new debian naming
    schemes
  * added architecture-option to debian.rules and debian.control

 -- Wichert Akkerman <wakkerma@wi.leidenuniv.nl>

strace (3.1-1) unstable; urgency=low

  * Moved to new upstream version
  * added more protocol families to domains
  * added IPIP-protocol to protocols
  * 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

 -- Wichert Akkerman <wakkerma@wi.leidenuniv.nl>
