Commit e24afc10 by Tristan Gingold Committed by Tristan Gingold

libbacktrace: add support of PE/COFF

libbacktrace/
2015-05-29  Tristan Gingold  <gingold@adacore.com>

	* pecoff.c: New file.
	* Makefile.am (FORMAT_FILES): Add pecoff.c and dependencies.
	* Makefile.in: Regenerate.
	* filetype.awk: Detect pecoff.
	* configure.ac: Define BACKTRACE_SUPPORTS_DATA on elf platforms.
	Add pecoff.
	* btest.c (test5): Test enabled only if BACKTRACE_SUPPORTS_DATA is
	true.
	* backtrace-supported.h.in (BACKTRACE_SUPPORTS_DATA): Define.
	* configure: Regenerate.
	* pecoff.c: New file.

From-SVN: r223859
parent c469078d
2015-05-29 Tristan Gingold <gingold@adacore.com>
* pecoff.c: New file.
* Makefile.am (FORMAT_FILES): Add pecoff.c and dependencies.
* Makefile.in: Regenerate.
* filetype.awk: Detect pecoff.
* configure.ac: Define BACKTRACE_SUPPORTS_DATA on elf platforms.
Add pecoff.
* btest.c (test5): Test enabled only if BACKTRACE_SUPPORTS_DATA is
true.
* backtrace-supported.h.in (BACKTRACE_SUPPORTS_DATA): Define.
* configure: Regenerate.
* pecoff.c: New file.
2015-05-13 Michael Haubenwallner <michael.haubenwallner@ssi-schaefer.com> 2015-05-13 Michael Haubenwallner <michael.haubenwallner@ssi-schaefer.com>
* Makefile.in: Regenerated with automake-1.11.6. * Makefile.in: Regenerated with automake-1.11.6.
......
...@@ -56,6 +56,7 @@ BACKTRACE_FILES = \ ...@@ -56,6 +56,7 @@ BACKTRACE_FILES = \
FORMAT_FILES = \ FORMAT_FILES = \
elf.c \ elf.c \
pecoff.c \
unknown.c unknown.c
VIEW_FILES = \ VIEW_FILES = \
...@@ -124,6 +125,7 @@ fileline.lo: config.h backtrace.h internal.h ...@@ -124,6 +125,7 @@ fileline.lo: config.h backtrace.h internal.h
mmap.lo: config.h backtrace.h internal.h mmap.lo: config.h backtrace.h internal.h
mmapio.lo: config.h backtrace.h internal.h mmapio.lo: config.h backtrace.h internal.h
nounwind.lo: config.h internal.h nounwind.lo: config.h internal.h
pecoff.lo: config.h backtrace.h internal.h
posix.lo: config.h backtrace.h internal.h posix.lo: config.h backtrace.h internal.h
print.lo: config.h backtrace.h internal.h print.lo: config.h backtrace.h internal.h
read.lo: config.h backtrace.h internal.h read.lo: config.h backtrace.h internal.h
......
...@@ -299,6 +299,7 @@ BACKTRACE_FILES = \ ...@@ -299,6 +299,7 @@ BACKTRACE_FILES = \
FORMAT_FILES = \ FORMAT_FILES = \
elf.c \ elf.c \
pecoff.c \
unknown.c unknown.c
VIEW_FILES = \ VIEW_FILES = \
...@@ -753,6 +754,7 @@ fileline.lo: config.h backtrace.h internal.h ...@@ -753,6 +754,7 @@ fileline.lo: config.h backtrace.h internal.h
mmap.lo: config.h backtrace.h internal.h mmap.lo: config.h backtrace.h internal.h
mmapio.lo: config.h backtrace.h internal.h mmapio.lo: config.h backtrace.h internal.h
nounwind.lo: config.h internal.h nounwind.lo: config.h internal.h
pecoff.lo: config.h backtrace.h internal.h
posix.lo: config.h backtrace.h internal.h posix.lo: config.h backtrace.h internal.h
print.lo: config.h backtrace.h internal.h print.lo: config.h backtrace.h internal.h
read.lo: config.h backtrace.h internal.h read.lo: config.h backtrace.h internal.h
......
...@@ -59,3 +59,8 @@ POSSIBILITY OF SUCH DAMAGE. */ ...@@ -59,3 +59,8 @@ POSSIBILITY OF SUCH DAMAGE. */
as 0. */ as 0. */
#define BACKTRACE_SUPPORTS_THREADS @BACKTRACE_SUPPORTS_THREADS@ #define BACKTRACE_SUPPORTS_THREADS @BACKTRACE_SUPPORTS_THREADS@
/* BACKTRACE_SUPPORTS_DATA will be #defined'd as 1 if the backtrace_syminfo
will work for variables. It will always work for functions. */
#define BACKTRACE_SUPPORTS_DATA @BACKTRACE_SUPPORTS_DATA@
...@@ -616,6 +616,8 @@ f33 (int f1line, int f2line) ...@@ -616,6 +616,8 @@ f33 (int f1line, int f2line)
return failures; return failures;
} }
#if BACKTRACE_SUPPORTS_DATA
int global = 1; int global = 1;
static int static int
...@@ -684,6 +686,8 @@ test5 (void) ...@@ -684,6 +686,8 @@ test5 (void)
return failures; return failures;
} }
#endif /* BACKTRACE_SUPPORTS_DATA */
static void static void
error_callback_create (void *data ATTRIBUTE_UNUSED, const char *msg, error_callback_create (void *data ATTRIBUTE_UNUSED, const char *msg,
int errnum) int errnum)
...@@ -708,8 +712,10 @@ main (int argc ATTRIBUTE_UNUSED, char **argv) ...@@ -708,8 +712,10 @@ main (int argc ATTRIBUTE_UNUSED, char **argv)
test2 (); test2 ();
test3 (); test3 ();
test4 (); test4 ();
#if BACKTRACE_SUPPORTS_DATA
test5 (); test5 ();
#endif #endif
#endif
exit (failures ? EXIT_FAILURE : EXIT_SUCCESS); exit (failures ? EXIT_FAILURE : EXIT_SUCCESS);
} }
...@@ -607,6 +607,7 @@ NATIVE_TRUE ...@@ -607,6 +607,7 @@ NATIVE_TRUE
BACKTRACE_USES_MALLOC BACKTRACE_USES_MALLOC
ALLOC_FILE ALLOC_FILE
VIEW_FILE VIEW_FILE
BACKTRACE_SUPPORTS_DATA
BACKTRACE_SUPPORTED BACKTRACE_SUPPORTED
FORMAT_FILE FORMAT_FILE
BACKTRACE_SUPPORTS_THREADS BACKTRACE_SUPPORTS_THREADS
...@@ -11129,7 +11130,7 @@ else ...@@ -11129,7 +11130,7 @@ else
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
lt_status=$lt_dlunknown lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<_LT_EOF cat > conftest.$ac_ext <<_LT_EOF
#line 11132 "configure" #line 11133 "configure"
#include "confdefs.h" #include "confdefs.h"
#if HAVE_DLFCN_H #if HAVE_DLFCN_H
...@@ -11235,7 +11236,7 @@ else ...@@ -11235,7 +11236,7 @@ else
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
lt_status=$lt_dlunknown lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<_LT_EOF cat > conftest.$ac_ext <<_LT_EOF
#line 11238 "configure" #line 11239 "configure"
#include "confdefs.h" #include "confdefs.h"
#if HAVE_DLFCN_H #if HAVE_DLFCN_H
...@@ -11826,8 +11827,12 @@ $as_echo "$libbacktrace_cv_sys_filetype" >&6; } ...@@ -11826,8 +11827,12 @@ $as_echo "$libbacktrace_cv_sys_filetype" >&6; }
# Match the file type to decide what files to compile. # Match the file type to decide what files to compile.
FORMAT_FILE= FORMAT_FILE=
backtrace_supports_data=yes
case "$libbacktrace_cv_sys_filetype" in case "$libbacktrace_cv_sys_filetype" in
elf*) FORMAT_FILE="elf.lo" ;; elf*) FORMAT_FILE="elf.lo" ;;
pecoff) FORMAT_FILE="pecoff.lo"
backtrace_supports_data=no
;;
*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: could not determine output file type" >&5 *) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: could not determine output file type" >&5
$as_echo "$as_me: WARNING: could not determine output file type" >&2;} $as_echo "$as_me: WARNING: could not determine output file type" >&2;}
FORMAT_FILE="unknown.lo" FORMAT_FILE="unknown.lo"
...@@ -11841,6 +11846,7 @@ elfsize= ...@@ -11841,6 +11846,7 @@ elfsize=
case "$libbacktrace_cv_sys_filetype" in case "$libbacktrace_cv_sys_filetype" in
elf32) elfsize=32 ;; elf32) elfsize=32 ;;
elf64) elfsize=64 ;; elf64) elfsize=64 ;;
*) elfsize=unused
esac esac
cat >>confdefs.h <<_ACEOF cat >>confdefs.h <<_ACEOF
...@@ -11854,6 +11860,12 @@ if test "$backtrace_supported" = "yes"; then ...@@ -11854,6 +11860,12 @@ if test "$backtrace_supported" = "yes"; then
fi fi
BACKTRACE_SUPPORTS_DATA=0
if test "$backtrace_supports_data" = "yes"; then
BACKTRACE_SUPPORTS_DATA=1
fi
inttype_headers=`echo inttypes.h sys/inttypes.h | sed -e 's/,/ /g'` inttype_headers=`echo inttypes.h sys/inttypes.h | sed -e 's/,/ /g'`
......
...@@ -229,8 +229,12 @@ libbacktrace_cv_sys_filetype=$filetype]) ...@@ -229,8 +229,12 @@ libbacktrace_cv_sys_filetype=$filetype])
# Match the file type to decide what files to compile. # Match the file type to decide what files to compile.
FORMAT_FILE= FORMAT_FILE=
backtrace_supports_data=yes
case "$libbacktrace_cv_sys_filetype" in case "$libbacktrace_cv_sys_filetype" in
elf*) FORMAT_FILE="elf.lo" ;; elf*) FORMAT_FILE="elf.lo" ;;
pecoff) FORMAT_FILE="pecoff.lo"
backtrace_supports_data=no
;;
*) AC_MSG_WARN([could not determine output file type]) *) AC_MSG_WARN([could not determine output file type])
FORMAT_FILE="unknown.lo" FORMAT_FILE="unknown.lo"
backtrace_supported=no backtrace_supported=no
...@@ -243,6 +247,7 @@ elfsize= ...@@ -243,6 +247,7 @@ elfsize=
case "$libbacktrace_cv_sys_filetype" in case "$libbacktrace_cv_sys_filetype" in
elf32) elfsize=32 ;; elf32) elfsize=32 ;;
elf64) elfsize=64 ;; elf64) elfsize=64 ;;
*) elfsize=unused
esac esac
AC_DEFINE_UNQUOTED([BACKTRACE_ELF_SIZE], [$elfsize], [ELF size: 32 or 64]) AC_DEFINE_UNQUOTED([BACKTRACE_ELF_SIZE], [$elfsize], [ELF size: 32 or 64])
...@@ -252,6 +257,12 @@ if test "$backtrace_supported" = "yes"; then ...@@ -252,6 +257,12 @@ if test "$backtrace_supported" = "yes"; then
fi fi
AC_SUBST(BACKTRACE_SUPPORTED) AC_SUBST(BACKTRACE_SUPPORTED)
BACKTRACE_SUPPORTS_DATA=0
if test "$backtrace_supports_data" = "yes"; then
BACKTRACE_SUPPORTS_DATA=1
fi
AC_SUBST(BACKTRACE_SUPPORTS_DATA)
GCC_HEADER_STDINT(gstdint.h) GCC_HEADER_STDINT(gstdint.h)
AC_CHECK_HEADERS(sys/mman.h) AC_CHECK_HEADERS(sys/mman.h)
......
# An awk script to determine the type of a file. # An awk script to determine the type of a file.
/\177ELF\001/ { if (NR == 1) { print "elf32"; exit } } /\177ELF\001/ { if (NR == 1) { print "elf32"; exit } }
/\177ELF\002/ { if (NR == 1) { print "elf64"; exit } } /\177ELF\002/ { if (NR == 1) { print "elf64"; exit } }
/\114\001/ { if (NR == 1) { print "pecoff"; exit } }
/\144\206/ { if (NR == 1) { print "pecoff"; exit } }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment