summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Makefile.am4
-rw-r--r--configure.ac3
-rw-r--r--include/libmissing.h15
-rw-r--r--lib/Makemodule.am5
-rw-r--r--lib/execinfo.c25
-rw-r--r--tests/fs-tests/Makemodule.am5
-rw-r--r--tests/fs-tests/integrity/integck.c2
7 files changed, 57 insertions, 2 deletions
diff --git a/Makefile.am b/Makefile.am
index 53c6ec3..686a747 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -10,6 +10,10 @@ if WITHOUT_LZO
AM_CPPFLAGS += -DWITHOUT_LZO
endif
+if HAVE_EXECINFO
+AM_CPPFLAGS += -DHAVE_EXECINFO
+endif
+
sbin_PROGRAMS =
sbin_SCRIPTS =
noinst_LIBRARIES =
diff --git a/configure.ac b/configure.ac
index 9c8666c..637d692 100644
--- a/configure.ac
+++ b/configure.ac
@@ -72,6 +72,9 @@ AC_ARG_WITH([lzo],
[AM_CONDITIONAL([WITHOUT_LZO], [false])])
+AC_CHECK_HEADERS([execinfo.h], [execinfo_found=yes])
+AM_CONDITIONAL([HAVE_EXECINFO], [test "x$execinfo_found" == "xyes"])
+
PKG_CHECK_MODULES(ZLIB, [ zlib ])
PKG_CHECK_MODULES(UUID, [ uuid ])
diff --git a/include/libmissing.h b/include/libmissing.h
new file mode 100644
index 0000000..c765f6d
--- /dev/null
+++ b/include/libmissing.h
@@ -0,0 +1,15 @@
+#ifndef LIBMISSING_H
+#define LIBMISSING_H
+
+#ifdef HAVE_EXECINFO
+#include <execinfo.h>
+#endif
+
+#ifndef HAVE_EXECINFO
+int backtrace(void **buffer, int size);
+char **backtrace_symbols(void *const *buffer, int size);
+void backtrace_symbols_fd(void *const *buffer, int size, int fd);
+#endif
+
+#endif /* LIBMISSING_H */
+
diff --git a/lib/Makemodule.am b/lib/Makemodule.am
index 2fd933d..b30a8aa 100644
--- a/lib/Makemodule.am
+++ b/lib/Makemodule.am
@@ -5,4 +5,7 @@ libmtd_a_SOURCES = \
lib/libmtd_legacy.c \
lib/libmtd_int.h
-noinst_LIBRARIES += libmtd.a
+libmissing_a_SOURCES = \
+ lib/execinfo.c
+
+noinst_LIBRARIES += libmtd.a libmissing.a
diff --git a/lib/execinfo.c b/lib/execinfo.c
new file mode 100644
index 0000000..a39df83
--- /dev/null
+++ b/lib/execinfo.c
@@ -0,0 +1,25 @@
+#include "libmissing.h"
+
+#ifndef HAVE_EXECINFO
+#define PROGRAM_NAME "libmissing"
+#include "common.h"
+
+int backtrace(void **buffer, int size)
+{
+ void *addr = __builtin_return_address(0);
+
+ errmsg("backtrace() is not implemented. Called from %p", addr);
+ return 0;
+}
+
+char **backtrace_symbols(void *const *buffer, int size)
+{
+ errmsg("backtrace_symbols() is not implemented");
+ return NULL;
+}
+
+void backtrace_symbols_fd(void *const *buffer, int size, int fd)
+{
+ errmsg("backtrace_symbols_fd() is not implemented");
+}
+#endif /* !HAVE_EXECINFO */
diff --git a/tests/fs-tests/Makemodule.am b/tests/fs-tests/Makemodule.am
index 031355a..d3acaa5 100644
--- a/tests/fs-tests/Makemodule.am
+++ b/tests/fs-tests/Makemodule.am
@@ -2,6 +2,11 @@ integck_SOURCES = tests/fs-tests/integrity/integck.c
integck_LDADD = libubi.a
integck_CPPFLAGS = $(AM_CPPFLAGS) -I$(top_srcdir)/ubi-utils/include
+if HAVE_EXECINFO
+else
+integck_LDADD += libmissing.a
+endif
+
test_1_SOURCES = tests/fs-tests/simple/test_1.c tests/fs-tests/lib/tests.c
test_1_CPPFLAGS = $(AM_CPPFLAGS) -I$(top_srcdir)/tests/fs-tests/lib
diff --git a/tests/fs-tests/integrity/integck.c b/tests/fs-tests/integrity/integck.c
index 67384fa..7cb5305 100644
--- a/tests/fs-tests/integrity/integck.c
+++ b/tests/fs-tests/integrity/integck.c
@@ -31,7 +31,6 @@
#include <getopt.h>
#include <assert.h>
#include <mntent.h>
-#include <execinfo.h>
#include <sys/mman.h>
#include <sys/vfs.h>
#include <sys/mount.h>
@@ -40,6 +39,7 @@
#define PROGRAM_NAME "integck"
#include "common.h"
#include "libubi.h"
+#include "libmissing.h"
/*
* WARNING! This is a dirty hack! The symbols for static functions are not