diff options
author | David Oberhollenzer <david.oberhollenzer@sigma-star.at> | 2016-09-01 11:20:05 +0200 |
---|---|---|
committer | David Oberhollenzer <david.oberhollenzer@sigma-star.at> | 2016-11-17 11:36:55 +0100 |
commit | 3516b8b7558a69dfd06410b0c997d096a78221c9 (patch) | |
tree | 6e3d993f086e5fd3fd90f998e3d88988ac07ce7d | |
parent | d3b66fbf88b07f7954ee5e7ceddab543bdd3a833 (diff) |
Add libmissing
This patch adds a libmissing library to mtd-utils, containing
implementations of functionality found in glibc but typically
missing from embedded C libraries such as uclibc ot musl.
For now, the library only contains stub implementations of
the backtrace*() family of functions.
Signed-off-by: David Oberhollenzer <david.oberhollenzer@sigma-star.at>
Signed-off-by: Richard Weinberger <richard@nod.at>
-rw-r--r-- | Makefile.am | 4 | ||||
-rw-r--r-- | configure.ac | 3 | ||||
-rw-r--r-- | include/libmissing.h | 15 | ||||
-rw-r--r-- | lib/Makemodule.am | 5 | ||||
-rw-r--r-- | lib/execinfo.c | 25 | ||||
-rw-r--r-- | tests/fs-tests/Makemodule.am | 5 | ||||
-rw-r--r-- | tests/fs-tests/integrity/integck.c | 2 |
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 |