-*-Mode: outline-*-

* News for v1.0:

** Fast unwind (rbp, rsp, rip only) on x86_64 with a fallback to 
   slow code path (Lassi Tuura)
** Improved local and remote unwinding on ARM (Ken Werner)
** Testing, stability and many fixes on x86 (Paul Pluzhnikov)
** FreeBSD port and clean separation of OS specific bits 
   (Konstantin Belousov)
** Thanks for all the bug reports, contributions and testing!

* News for v0.99:

** Greatly improved x86-64 support thanks to Arun Sharma.
** Support for PPC64 added by  Jose Flavio Aguilar Paulino.

* News for v0.98.6:

** Fix address-leak triggered by invalid byte-order.  Fixed by Andreas Schwab.
** On ia64, get_static_proc_name() no longer uses a weak reference to
   _Uelf64_get_proc_name(), since that was causing problems with archive
   libraries and no longer served any apparent purpose.  Fixed by
   Curt Wohlgemuth.

* News for v0.98.5:

** Fix a typo in the man-page of unw_create_addr_space().
** Fix an off-by-1 bug in the handling of the dynamic ALIAS directive
   for ia64.  Reported by Todd L. Miller.
** Fix a bug in libunwind-ptrace which could cause crash due to extraneous
   munmap() calls.

* News for v0.98.4:

** Fix a typo in _ReadSLEB.c which caused hangs when throwing exceptions
   from Intel ICC-compiled programs.  Reported by Tommy Hoffner.

* News for v0.98.3:

** Make it possible to link against libunwind-ia64.a only (i.e., without
   requiring libunwind.a as well).  This keeps apps which need only
   remote unwinding cleaner, since they logically have no dependency
   on libunwind.a.
** Dont link against libatomic_ops for now.  Due to a packaging bug on
   Debian, linking against this library causes libunwind.so to get
   a dependency on libatomic_ops.so, which is not at all what we want.
   Fortunately, we don't have to link against that library on x86 or
   ia64 since the library is strictly needed only for platforms with
   poor atomic operation support.  Once the libatomic_ops package is fixed,
   we can re-enable linking against libatomic_ops.

* News for v0.98.2:

** Fixed bug which caused _UPT_get_dyn_info_list_addr() to sometimes fail
   needlessly.  Found by Todd L. Miller.

** When using GCC to build libunwind on ia64, libunwind.so had an
   unresolved reference to __divdi3.  This is undesirable since it
   creates an implicit dependency on libgcc.  This problem has been
   fixed in the 0.98.2 release by explicitly linking against libgcc.a
   when building libunwind.

* News for v0.98.1:

** Fixed a bug which caused "make install" to install libunwind-common.h.in
   instead of libunwind-common.h.
** Fixed a bug in the ia64 {sig,}longjmp() which showed on
   SuSE Linux 9 because it's using a newer compiler & the EPC-based system
   call stubs.
** Fixed incorrect offsets in tests/ia64-test-nat-asm.S.
   Warning: you'll need a GNU assembler dated later than 21-Sep-2004 to
   get this file translated correctly.  With an old assembler, "make check"
   will get lots of failures when running Gia64-test-nat or Lia64-test-nat!
** Convert tests/bt into a full-blown test-case.  It's designed to
   trigger a (rarely-encountered) bug in the GNU assembler on ia64.
   The assembler has been fixed and once the libraries (libc etc)
   have been rebuilt, this test will pass.
** Added test-case tests/run-ptrace-misc which, on ia64, triggers a bug in
   current GCC (including v3.4.2) which causes bad unwind info.

* News for v0.98:

** Update libunwind to be compliant with the updated/expanded
   ia64 unwind specificiation by HJ Lu [1].  This is needed for
   GCC 3.4 compatibility.

   [1] http://www.kernel.org/pub/linux/devel/gcc/unwind/

** Initial support for x86-64 has been added courtesy of Max Asbock.
   Along with this came a bunch of DWARF2 unwinder fixes.

** A new rountine unw_strerror() has been added courtesy of
   Thomas Hallgren.

** Including <libunwind.h> now defines 4 macros that can be used
   to determine the version number of libunwind.  Specifically,
   UNW_VERSION_MAJOR, UNW_VERSION_MINOR, UNW_VERSION, and
   UNW_VERSION_CODE are defined by the header now.

** Bug fixes
*** Fix a memory-leak in _UPT_get_dyn_info_list_addr() courtesy of Ed Connell.
*** Fix a crash in libunwind-ptrace courtesy of Mark Young.
*** Fix a bug in ia64-version of unw_init_remote() which prevented
    it from working correctly for the local address space.  Reported by
    Troy Heber.
*** Many other small and not so small fixes.

* News for v0.97:

** unw_get_proc_name() may now be called from signal-handler.

** The ptrace-helper routines are now declared in libunwind-ptrace.h.
   Applications which use ptrace-based unwinding should include
   <libunwind-ptrace.h> to get the _UPT_*() routines declared.

** libunwind has been split into a "local-only" and a "generic" versions.
   The former is optimized for local unwinding (within a process) and
   is called libunwind.so (shared version) or libunwind.a (archive
   version).  The generic version is not limited to unwinding within a
   process and is called libunwind-generic.so (shared version)
   libunwind-generic.a (archive version).  Similarly, the ptrace()
   support has been separated out into a convenience library called
   libunwind-ptrace.a.  For the most part, backwards-compatibility
   is retained.  However, when building an application which uses
   libunwind, it may be necessary to change the linker command-line
   as shown in the table below:

    Application which does: Before v0.97:  With v0.97:
    ----------------------- -------------  -----------
    local unwinding only:   -lunwind       -lunwind
    remote unwinding:       -lunwind       -lunwind-generic
    cross unwinding:        -lunwind-PLAT  -lunwind-PLAT
    ptrace-based unwinding: -lunwind       -lunwind-ptrace -lunwind-generic

   The motivation for this splitting is to keep libunwind.so as minimal
   as possible.  This library will eventually be loaded by most (if not
   all) executables and hence it is important to ensure that it can
   be loaded as quickly as possible.

** unw_getcontext() tuned on IA-64.

   The unw_getcontext() routine used to be provided by (GNU) libc
   (getcontext()).  This caused unnecessary overhead (e.g., an
   unnecessary system-call to sigprocmask()).  The new
   unw_getcontext() only does the work really needed for libunwind and
   hence performs much better.  However, this change implies that
   programs linked against libunwind v0.97 won't be
   backwards-compatible with earlier versions (there would be an
   unresolved symbol for _Uia64_getcontext()).

** Fix NaT-bit handling on IA-64.

   New test-cases have been added to test the handling of the NaT bit
   (and floating-point NaT values) and all discovered/known bugs have
   been fixed.

** Initial DWARF-based unwinder for x86.

   There is a beginning for a DWARF-based unwinder for x86.  Work for
   x86-64-support based on this DWARF unwinder is currently underway
   at IBM and it is expected that this support will be merged into the
   official tree soon.


* News for v0.96:

** _Unwind_*() routines defined by the C++ ABI are now included in
   libunwind.


* News for v0.95:

** Bigger, better, faster, or so the theory goes.


* News for v0.93:

** More bug-fixes & improved HP-UX support.


* News for v0.92:

** Bug-fix release.  IA-64 unwinder can now be built with Intel compiler (ECC).


* News for v0.91:

** Lots of documentation updates
** Some portability fixes.


* News for v0.9:

** The libunwind API is mostly feature-complete at this point (hence the
   version jump from v0.2 to v0.9).


* News for v0.2:

** Automated configuration/build with autoconf and automake.
** Added support for building libunwind as a shared library.
** Added support for remote unwinding.
** Added support for cross-building.
** Added two new routines to the API:
	- unw_is_fpreg()
	- unw_get_save_loc()
** Added multi-architecture supports (lets a single application use
   the unwind libraries for multiple target architectures; this is useful,
   e.g., useful for building a debugger that can support multiple targets
   such as x86, ia64, etc.)


* News for v0.1:

** Added support for exception handling.


* News for v0.0:

** It's a brand new package.
