1
0
Fork 0
mirror of https://github.com/tobast/libunwind-eh_elf.git synced 2024-11-14 04:18:11 +01:00
Fork of the libunwind official github repo — http://www.nongnu.org/libunwind/
Find a file
Saleem Abdulrasool e9e8ed73e3 dwarf: Account for multiple CFA for args_size
It is possible to have multiple CFA_args_size adjustments for a single
frame.  If the CFA_args_size adjustment is immediately following the
return from a function which can raise an exception, it is possible to
incorrectly adjust the stack pointer.  Consider the following:

  ...
  .cfi_escape 0x2e, 0x00
  call f
.Ltmp:
  .cfi_escape 0x2e, 0x10
  lea label@GOTOFF(%ebx), %eax
  ...

Because we process the CFI program up to and *INCLUDING* IP, where the
IP is the RA, we would process the associated DW_CFA_GNU_args_size for
the post-call instruction.  The result would be a DW_CFA_GNU_args_size
of 0x10 rather than 0x00, resulting in an incorrect stack adjustment.
Handle this by processing the CFI operation but not adjusting the state
record unless we are below the current IP.
2017-01-19 10:07:53 -08:00
aux mvdir 2004-07-15 17:39:59 +00:00
doc dwarf: Configurable cache size 2017-01-13 08:36:33 -08:00
include dwarf: Make binary path calculation os-specific. 2017-01-19 10:07:13 -08:00
scripts Turn back on execute-permission on script files. 2006-07-26 15:46:15 -06:00
src dwarf: Account for multiple CFA for args_size 2017-01-19 10:07:53 -08:00
tests dwarf: Make binary path calculation os-specific. 2017-01-19 10:07:13 -08:00
.gitignore test-resume-sig-rt: test unw_resume() in presence of "realtime" signal frame 2012-08-21 22:33:56 +03:00
acinclude.m4 Don't check for atomic_ops library for now. 2004-11-16 22:03:04 +00:00
AUTHORS Update mailing-list info. 2007-11-14 16:47:28 -07:00
autogen.sh [PATCH] Fix build from scratch 2014-12-04 00:12:00 -08:00
ChangeLog Update ChangeLog to point to GIT log instead of Bitkeeper log. 2006-07-26 15:12:18 -06:00
configure.ac Fix compilation of tests on alpine linux (musl libc) 2017-01-13 08:28:21 -08:00
COPYING Switch to MIT license. 2002-11-16 03:23:11 +00:00
LICENSE Delete obsolete BitKeeper files, add LICENSE file. 2006-07-27 21:26:16 -06:00
Makefile.am add --disable-tests option 2017-01-13 08:27:39 -08:00
NEWS Update to v1.1 2012-10-05 21:54:17 -07:00
README Update README to use autogen.sh 2015-06-07 12:23:42 -07:00
TODO Update. 2004-08-17 15:34:28 +00:00

-*- mode: Outline -*-

This is version 1.0 of the unwind library.  This library supports
several architecture/operating-system combinations:

 Linux/x86-64:	Works well.
 Linux/x86:	Works well.
 Linux/ARM:	Works well.
 Linux/IA-64:	Fully tested and supported.
 Linux/PARISC:	Works well, but C library missing unwind-info.
 HP-UX/IA-64:	Mostly works but known to have some serious limitations.
 Linux/AArch64:	Newly added.
 Linux/PPC64:	Newly added.
 Linux/SuperH:	Newly added.
 FreeBSD/i386:	Newly added.
 FreeBSD/x86-64: Newly added (FreeBSD architecture is known as amd64).
 Linux/Tilegx:  Newly added (64-bit mode only).

* General Build Instructions

In general, this library can be built and installed with the following
commands:

	$ ./autogen.sh # Needed only for building from git. Depends on libtool.
	$ ./configure
	$ make
	$ make install prefix=PREFIX

where PREFIX is the installation prefix.  By default, a prefix of
/usr/local is used, such that libunwind.a is installed in
/usr/local/lib and unwind.h is installed in /usr/local/include.  For
testing, you may want to use a prefix of /usr/local instead.


* Building with Intel compiler

** Version 8 and later

Starting with version 8, the preferred name for the IA-64 Intel
compiler is "icc" (same name as on x86).  Thus, the configure-line
should look like this:

    $ ./configure CC=icc CFLAGS="-g -O3 -ip" CXX=icc CCAS=gcc CCASFLAGS=-g \
		LDFLAGS="-L$PWD/src/.libs"


* Building on HP-UX

For the time being, libunwind must be built with GCC on HP-UX.

libunwind should be configured and installed on HP-UX like this:

    $ ./configure CFLAGS="-g -O2 -mlp64" CXXFLAGS="-g -O2 -mlp64"

Caveat: Unwinding of 32-bit (ILP32) binaries is not supported
	at the moment.

** Workaround for older versions of GCC

GCC v3.0 and GCC v3.2 ship with a bad version of sys/types.h.  The
workaround is to issue the following commands before running
"configure":

    $ mkdir $top_dir/include/sys
    $ cp /usr/include/sys/types.h $top_dir/include/sys

GCC v3.3.2 or later have been fixed and do not require this
workaround.

* Building for PowerPC64 / Linux

For building for power64 you should use:

  $ ./configure CFLAGS="-g -O2 -m64" CXXFLAGS="-g -O2 -m64"

If your power support altivec registers:
  $ ./configure CFLAGS="-g -O2 -m64 -maltivec" CXXFLAGS="-g -O2 -m64 -maltivec"

To check if your processor has support for vector registers (altivec):
    cat /proc/cpuinfo | grep altivec
and should have something like this:
    cpu             : PPC970, altivec supported

If libunwind seems to not work (backtracing failing), try to compile
it with -O0, without optimizations. There are some compiler problems
depending on the version of your gcc.

* Building on FreeBSD

General building instructions apply. To build and execute several tests,
you need libexecinfo library available in ports as devel/libexecinfo.

Development of the port was done of FreeBSD 8.0-STABLE. The library
was build with the system compiler that is modified version of gcc 4.2.1,
as well as the gcc 4.4.3.

* Regression Testing

After building the library, you can run a set of regression tests with:

	$ make check

** Expected results on IA-64 Linux

Unless you have a very recent C library and compiler installed, it is
currently expected to have the following tests fail on IA-64 Linux:

	Gtest-init		(should pass starting with glibc-2.3.x/gcc-3.4)
	Ltest-init		(should pass starting with glibc-2.3.x/gcc-3.4)
	test-ptrace		(should pass starting with glibc-2.3.x/gcc-3.4)
	run-ia64-test-dyn1	(should pass starting with glibc-2.3.x)

This does not mean that libunwind cannot be used with older compilers
or C libraries, it just means that for certain corner cases, unwinding
will fail.  Since they're corner cases, it is not likely for
applications to trigger them.

Note: If you get lots of errors in Gia64-test-nat and Lia64-test-nat, it's
      almost certainly a sign of an old assembler.  The GNU assembler used
      to encode previous-stack-pointer-relative offsets incorrectly.
      This bug was fixed on 21-Sep-2004 so any later assembler will be
      fine.

** Expected results on x86 Linux

The following tests are expected to fail on x86 Linux:

	Gtest-resume-sig	(fails to get SIGUSR2)
	Ltest-resume-sig	(likewise)
	Gtest-dyn1		(no dynamic unwind info support yet)
	Ltest-dyn1		(no dynamic unwind info support yet)
	test-setjmp		(longjmp() not implemented yet)
	run-check-namespace	(no _Ux86_getcontext yet)
	test-ptrace

** Expected results on x86-64 Linux

The following tests are expected to fail on x86-64 Linux:

	Gtest-dyn1		(no dynamic unwind info support yet)
	Ltest-dyn1		(no dynamic unwind info support yet)
	Gtest-init (see http://gcc.gnu.org/bugzilla/show_bug.cgi?id=18743)
	Ltest-init		(likewise)
	test-async-sig		(crashes due to bad unwind-info?)
	test-setjmp		(longjmp() not implemented yet)
	run-check-namespace	(no _Ux86_64_getcontext yet)
	run-ptrace-mapper	(??? investigate)
	run-ptrace-misc	(see http://gcc.gnu.org/bugzilla/show_bug.cgi?id=18748
			 and http://gcc.gnu.org/bugzilla/show_bug.cgi?id=18749)

** Expected results on PARISC Linux

Caveat: GCC v3.4 or newer is needed on PA-RISC Linux.  Earlier
versions of the compiler failed to generate the exception-handling
program header (GNU_EH_FRAME) needed for unwinding.

The following tests are expected to fail on x86-64 Linux:

	Gtest-bt   (backtrace truncated at kill() due to lack of unwind-info)
	Ltest-bt   (likewise)
	Gtest-resume-sig  (Gresume.c:my_rt_sigreturn() is wrong somehow)
	Ltest-resume-sig  (likewise)
	Gtest-init (likewise)
	Ltest-init (likewise)
	Gtest-dyn1 (no dynamic unwind info support yet)
	Ltest-dyn1 (no dynamic unwind info support yet)
	test-setjmp		(longjmp() not implemented yet)
	run-check-namespace	(toolchain doesn't support HIDDEN yet)

** Expected results on HP-UX

"make check" is currently unsupported for HP-UX.  You can try to run
it, but most tests will fail (and some may fail to terminate).  The
only test programs that are known to work at this time are:

     tests/bt
     tests/Gperf-simple
     tests/test-proc-info
     tests/test-static-link
     tests/Gtest-init
     tests/Ltest-init
     tests/Gtest-resume-sig
     tests/Ltest-resume-sig

** Expected results on PPC64 Linux

"make check" should run with no more than 10 out of 24 tests failed.


* Performance Testing

This distribution includes a few simple performance tests which give
some idea of the basic cost of various libunwind operations.  After
building the library, you can run these tests with the following
commands:

 $ cd tests
 $ make perf

* Contacting the Developers

Please direct all questions regarding this library to:

	libunwind-devel@nongnu.org

You can do this by sending a mail to libunwind-request@nongnu.org with
a body of:

	subscribe libunwind-devel

or you can subscribe and manage your subscription via the
web-interface at:

	https://savannah.nongnu.org/mail/?group=libunwind