From 80372d4ca082d6d35f89e99094544fc892cfeb75 Mon Sep 17 00:00:00 2001 From: Andrei Karas Date: Tue, 26 Nov 2019 03:09:38 +0300 Subject: Add libbacktrace --- src/char/Makefile.in | 19 +++++++++++++++---- src/common/Makefile.in | 21 ++++++++++++++++----- src/common/nullpo.c | 44 ++++++++++++++++++++++++++++++++++++++------ src/login/Makefile.in | 19 +++++++++++++++---- src/map/Makefile.in | 19 +++++++++++++++---- src/test/Makefile.in | 19 +++++++++++++++---- 6 files changed, 114 insertions(+), 27 deletions(-) (limited to 'src') diff --git a/src/char/Makefile.in b/src/char/Makefile.in index 79ee3e18f..34fc0fcba 100644 --- a/src/char/Makefile.in +++ b/src/char/Makefile.in @@ -36,6 +36,13 @@ LIBCONFIG_OBJ = $(addprefix $(LIBCONFIG_D)/, libconfig.o grammar.o scanctx.o \ LIBCONFIG_H = $(addprefix $(LIBCONFIG_D)/, libconfig.h grammar.h parsectx.h \ scanctx.h scanner.h strbuf.h wincompat.h) +LIBBACKTRACE_D = $(THIRDPARTY_D)/libbacktrace +LIBBACKTRACE_OBJ = $(addprefix $(LIBBACKTRACE_D)/, atomic.o backtrace.o \ + dwarf.o elf.o fileline.o mmapio.o mmap.o posix.o print.o \ + simple.o sort.o state.o) +LIBBACKTRACE_H = $(addprefix $(LIBBACKTRACE_D)/, backtrace.h \ + backtrace-supported.h config.h filenames.h internal.h) + MT19937AR_D = $(THIRDPARTY_D)/mt19937ar MT19937AR_OBJ = $(MT19937AR_D)/mt19937ar.o MT19937AR_H = $(MT19937AR_D)/mt19937ar.h @@ -51,7 +58,7 @@ CHAR_PH = HAVE_MYSQL=@HAVE_MYSQL@ ifeq ($(HAVE_MYSQL),yes) - CHAR_SERVER_SQL_DEPENDS=$(CHAR_OBJ) $(COMMON_D)/obj_all/common.a $(COMMON_D)/obj_sql/common_sql.a $(MT19937AR_OBJ) $(LIBCONFIG_OBJ) $(SYSINFO_INC) + CHAR_SERVER_SQL_DEPENDS=$(CHAR_OBJ) $(COMMON_D)/obj_all/common.a $(COMMON_D)/obj_sql/common_sql.a $(MT19937AR_OBJ) $(LIBCONFIG_OBJ) $(LIBBACKTRACE_OBJ) $(SYSINFO_INC) else CHAR_SERVER_SQL_DEPENDS=needs_mysql endif @@ -90,7 +97,7 @@ help: Makefile: Makefile.in @$(MAKE) -C ../.. src/char/Makefile -$(SYSINFO_INC): $(CHAR_C) $(CHAR_PH) $(CHAR_H) $(COMMON_H) $(CONFIG_H) $(MT19937AR_H) $(LIBCONFIG_H) +$(SYSINFO_INC): $(CHAR_C) $(CHAR_PH) $(CHAR_H) $(COMMON_H) $(CONFIG_H) $(MT19937AR_H) $(LIBCONFIG_H) $(LIBBACKTRACE_H) @echo " MAKE $@" @$(MAKE) -C ../.. sysinfo @@ -111,7 +118,7 @@ char-server: ../../char-server@EXEEXT@ ../../char-server@EXEEXT@: $(CHAR_SERVER_SQL_DEPENDS) Makefile @echo " LD $(notdir $@)" @$(CC) @STATIC@ @LDFLAGS@ -o ../../char-server@EXEEXT@ $(CHAR_OBJ) $(COMMON_D)/obj_all/common.a $(COMMON_D)/obj_sql/common_sql.a \ - $(MT19937AR_OBJ) $(LIBCONFIG_OBJ) @LIBS@ @MYSQL_LIBS@ + $(MT19937AR_OBJ) $(LIBCONFIG_OBJ) $(LIBBACKTRACE_OBJ) @LIBS@ @MYSQL_LIBS@ # missing object files $(COMMON_D)/obj_all/common.a: @@ -130,10 +137,14 @@ $(LIBCONFIG_OBJ): @echo " MAKE $@" @$(MAKE) -C $(LIBCONFIG_D) +$(LIBBACKTRACE_OBJ): + @echo " MAKE $@" + @$(MAKE) -C $(LIBBACKTRACE_D) + .SECONDEXPANSION: # char object files -obj_sql/%.o: %.c $$(filter %.p.h, $(CHAR_PH)) $(CHAR_H) $(COMMON_H) $(CONFIG_H) $(MT19937AR_H) $(LIBCONFIG_H) | obj_sql +obj_sql/%.o: %.c $$(filter %.p.h, $(CHAR_PH)) $(CHAR_H) $(COMMON_H) $(CONFIG_H) $(MT19937AR_H) $(LIBCONFIG_H) $(LIBBACKTRACE_H) | obj_sql @echo " CC $<" @$(CC) @CFLAGS@ @DEFS@ $(COMMON_INCLUDE) $(THIRDPARTY_INCLUDE) @MYSQL_CFLAGS@ @CPPFLAGS@ -c $(OUTPUT_OPTION) $< diff --git a/src/common/Makefile.in b/src/common/Makefile.in index 033b26ae3..82b651589 100644 --- a/src/common/Makefile.in +++ b/src/common/Makefile.in @@ -33,6 +33,13 @@ LIBCONFIG_OBJ = $(addprefix $(LIBCONFIG_D)/, libconfig.o grammar.o scanctx.o \ LIBCONFIG_H = $(addprefix $(LIBCONFIG_D)/, libconfig.h grammar.h parsectx.h \ scanctx.h scanner.h strbuf.h wincompat.h) +LIBBACKTRACE_D = $(THIRDPARTY_D)/libbacktrace +LIBBACKTRACE_OBJ = $(addprefix $(LIBBACKTRACE_D)/, atomic.o backtrace.o \ + dwarf.o elf.o fileline.o mmapio.o mmap.o posix.o print.o \ + simple.o sort.o state.o) +LIBBACKTRACE_H = $(addprefix $(LIBBACKTRACE_D)/, backtrace.h \ + backtrace-supported.h config.h filenames.h internal.h) + MT19937AR_D = $(THIRDPARTY_D)/mt19937ar MT19937AR_OBJ = $(MT19937AR_D)/mt19937ar.o MT19937AR_H = $(MT19937AR_D)/mt19937ar.h @@ -95,7 +102,7 @@ help: Makefile: Makefile.in @$(MAKE) -C ../.. src/common/Makefile -$(SYSINFO_INC): $(COMMON_C) $(COMMON_PH) $(COMMON_H) $(CONFIG_H) $(MT19937AR_H) $(LIBCONFIG_H) +$(SYSINFO_INC): $(COMMON_C) $(COMMON_PH) $(COMMON_H) $(CONFIG_H) $(MT19937AR_H) $(LIBCONFIG_H) $(LIBBACKTRACE_H) @echo " MAKE $@" @$(MAKE) -C ../.. sysinfo @@ -121,7 +128,7 @@ obj_sql/common_sql.a: $(COMMON_SQL_OBJ) Makefile @echo " AR $@" @@AR@ rcs obj_sql/common_sql.a $(COMMON_SQL_OBJ) -common: $(COMMON_OBJ) $(MT19937AR_OBJ) $(LIBCONFIG_OBJ) obj_all/common.a Makefile +common: $(COMMON_OBJ) $(MT19937AR_OBJ) $(LIBCONFIG_OBJ) $(LIBBACKTRACE_OBJ) obj_all/common.a Makefile common_sql: $(COMMON_SQL_OBJ) obj_sql/common_sql.a Makefile @@ -134,14 +141,18 @@ $(LIBCONFIG_OBJ): @echo " MAKE $@" @$(MAKE) -C $(LIBCONFIG_D) +$(LIBBACKTRACE_OBJ): + @echo " MAKE $@" + @$(MAKE) -C $(LIBBACKTRACE_D) + .SECONDEXPANSION: -obj_all/sysinfo.o: sysinfo.c $(filter sysinfo.p.h, $(COMMON_PH)) $(COMMON_H) $(CONFIG_H) $(MT19937AR_H) $(LIBCONFIG_H) $(SYSINFO_INC) | obj_all +obj_all/sysinfo.o: sysinfo.c $(filter sysinfo.p.h, $(COMMON_PH)) $(COMMON_H) $(CONFIG_H) $(MT19937AR_H) $(LIBCONFIG_H) $(LIBBACKTRACE_H) $(SYSINFO_INC) | obj_all -obj_all/%.o: %.c $(COMMON_H) $(CONFIG_H) $(MT19937AR_H) $(LIBCONFIG_H) | $(SYSINFO_INC) obj_all +obj_all/%.o: %.c $(COMMON_H) $(CONFIG_H) $(MT19937AR_H) $(LIBCONFIG_H) $(LIBBACKTRACE_H) | $(SYSINFO_INC) obj_all @echo " CC $<" @$(CC) @CFLAGS@ @DEFS@ $(COMMON_INCLUDE) $(THIRDPARTY_INCLUDE) @CPPFLAGS@ -c $(OUTPUT_OPTION) $< -obj_sql/%.o: %.c $$(filter %.p.h, $(COMMON_PH)) $(COMMON_H) $(COMMON_SQL_H) $(CONFIG_H) $(LIBCONFIG_H) | $(SYSINFO_INC) obj_sql +obj_sql/%.o: %.c $$(filter %.p.h, $(COMMON_PH)) $(COMMON_H) $(COMMON_SQL_H) $(CONFIG_H) $(LIBCONFIG_H) $(LIBBACKTRACE_H) | $(SYSINFO_INC) obj_sql @echo " CC $<" @$(CC) @CFLAGS@ @DEFS@ $(COMMON_INCLUDE) $(THIRDPARTY_INCLUDE) @MYSQL_CFLAGS@ @CPPFLAGS@ -c $(OUTPUT_OPTION) $< diff --git a/src/common/nullpo.c b/src/common/nullpo.c index dfb938708..e43b91bb8 100644 --- a/src/common/nullpo.c +++ b/src/common/nullpo.c @@ -28,13 +28,41 @@ #include #include #include -#ifdef HAVE_EXECINFO +#ifdef HAVE_LIBBACKTRACE +#include "libbacktrace/backtrace.h" +#include "libbacktrace/backtrace-supported.h" +#elif defined(HAVE_EXECINFO) #include -#endif // HAVE_EXECINFO +#endif // HAVE_LIBBACKTRACE + static struct nullpo_interface nullpo_s; struct nullpo_interface *nullpo; +#ifdef HAVE_LIBBACKTRACE +static void nullpo_error_callback(void *data, const char *msg, int errnum) +{ + ShowError("Error: %s (%d)", msg, errnum); +} + +static int nullpo_print_callback(void *data, uintptr_t pc, const char *filename, int lineno, const char *function) +{ + ShowError("0x%lx %s\n", + (unsigned long) pc, + function == NULL ? "???" : function); + ShowError("\t%s:%d\n", + filename == NULL ? "???" : filename, + lineno); + return 0; +} + +static void nullpo_backtrace_print(struct backtrace_state *state) +{ + backtrace_full(state, 0, nullpo_print_callback, nullpo_error_callback, state); +} + +#endif // HAVE_LIBBACKTRACE + /** * Reports failed assertions or NULL pointers * @@ -46,12 +74,12 @@ struct nullpo_interface *nullpo; */ static void assert_report(const char *file, int line, const char *func, const char *targetname, const char *title) { -#ifdef HAVE_EXECINFO +#if !defined(HAVE_LIBBACKTRACE) && defined(HAVE_EXECINFO) void *array[10]; int size; char **strings; int i; -#endif // HAVE_EXECINFO +#endif // !defined(HAVE_LIBBACKTRACE) && defined(HAVE_EXECINFO) if (file == NULL) file = "??"; @@ -60,14 +88,18 @@ static void assert_report(const char *file, int line, const char *func, const ch ShowError("--- %s --------------------------------------------\n", title); ShowError("%s:%d: '%s' in function `%s'\n", file, line, targetname, func); -#ifdef HAVE_EXECINFO +#ifdef HAVE_LIBBACKTRACE + struct backtrace_state *state = backtrace_create_state("hercules", BACKTRACE_SUPPORTS_THREADS, nullpo_error_callback, NULL); + nullpo_backtrace_print(state); +#elif defined(HAVE_EXECINFO) size = (int)backtrace(array, 10); strings = backtrace_symbols(array, size); for (i = 0; i < size; i++) ShowError("%s\n", strings[i]); free(strings); -#endif // HAVE_EXECINFO +#endif // HAVE_LIBBACKTRACE ShowError("--- end %s ----------------------------------------\n", title); + } /** diff --git a/src/login/Makefile.in b/src/login/Makefile.in index 464b33e56..08a5566fa 100644 --- a/src/login/Makefile.in +++ b/src/login/Makefile.in @@ -36,6 +36,13 @@ LIBCONFIG_OBJ = $(addprefix $(LIBCONFIG_D)/, libconfig.o grammar.o scanctx.o \ LIBCONFIG_H = $(addprefix $(LIBCONFIG_D)/, libconfig.h grammar.h parsectx.h \ scanctx.h scanner.h strbuf.h wincompat.h) +LIBBACKTRACE_D = $(THIRDPARTY_D)/libbacktrace +LIBBACKTRACE_OBJ = $(addprefix $(LIBBACKTRACE_D)/, atomic.o backtrace.o \ + dwarf.o elf.o fileline.o mmapio.o mmap.o posix.o print.o \ + simple.o sort.o state.o) +LIBBACKTRACE_H = $(addprefix $(LIBBACKTRACE_D)/, backtrace.h \ + backtrace-supported.h config.h filenames.h internal.h) + MT19937AR_D = $(THIRDPARTY_D)/mt19937ar MT19937AR_OBJ = $(MT19937AR_D)/mt19937ar.o MT19937AR_H = $(MT19937AR_D)/mt19937ar.h @@ -47,7 +54,7 @@ LOGIN_PH = lclif.p.h HAVE_MYSQL=@HAVE_MYSQL@ ifeq ($(HAVE_MYSQL),yes) - LOGIN_SERVER_SQL_DEPENDS=$(LOGIN_OBJ) $(COMMON_D)/obj_all/common.a $(COMMON_D)/obj_sql/common_sql.a $(MT19937AR_OBJ) $(LIBCONFIG_OBJ) $(SYSINFO_INC) + LOGIN_SERVER_SQL_DEPENDS=$(LOGIN_OBJ) $(COMMON_D)/obj_all/common.a $(COMMON_D)/obj_sql/common_sql.a $(MT19937AR_OBJ) $(LIBCONFIG_OBJ) $(LIBBACKTRACE_OBJ) $(SYSINFO_INC) else LOGIN_SERVER_SQL_DEPENDS=needs_mysql endif @@ -86,7 +93,7 @@ help: Makefile: Makefile.in @$(MAKE) -C ../.. src/login/Makefile -$(SYSINFO_INC): $(LOGIN_C) $(LOGIN_PH) $(LOGIN_H) $(COMMON_H) $(CONFIG_H) $(MT19937AR_H) $(LIBCONFIG_H) +$(SYSINFO_INC): $(LOGIN_C) $(LOGIN_PH) $(LOGIN_H) $(COMMON_H) $(CONFIG_H) $(MT19937AR_H) $(LIBCONFIG_H) $(LIBBACKTRACE_H) @echo " MAKE $@" @$(MAKE) -C ../.. sysinfo @@ -107,7 +114,7 @@ login-server: ../../login-server@EXEEXT@ ../../login-server@EXEEXT@: $(LOGIN_SERVER_SQL_DEPENDS) Makefile @echo " LD $(notdir $@)" @$(CC) @STATIC@ @LDFLAGS@ -o ../../login-server@EXEEXT@ $(LOGIN_OBJ) $(COMMON_D)/obj_all/common.a $(COMMON_D)/obj_sql/common_sql.a \ - $(MT19937AR_OBJ) $(LIBCONFIG_OBJ) @LIBS@ @MYSQL_LIBS@ + $(MT19937AR_OBJ) $(LIBCONFIG_OBJ) $(LIBBACKTRACE_OBJ) @LIBS@ @MYSQL_LIBS@ # missing object files $(COMMON_D)/obj_all/common.a: @@ -126,10 +133,14 @@ $(LIBCONFIG_OBJ): @echo " MAKE $@" @$(MAKE) -C $(LIBCONFIG_D) +$(LIBBACKTRACE_OBJ): + @echo " MAKE $@" + @$(MAKE) -C $(LIBBACKTRACE_D) + .SECONDEXPANSION: # login object files -obj_sql/%.o: %.c $$(filter %.p.h, $(LOGIN_PH)) $(LOGIN_H) $(COMMON_H) $(CONFIG_H) $(MT19937AR_H) $(LIBCONFIG_H) | obj_sql +obj_sql/%.o: %.c $$(filter %.p.h, $(LOGIN_PH)) $(LOGIN_H) $(COMMON_H) $(CONFIG_H) $(MT19937AR_H) $(LIBCONFIG_H) $(LIBBACKTRACE_H) | obj_sql @echo " CC $<" @$(CC) @CFLAGS@ @DEFS@ $(COMMON_INCLUDE) $(THIRDPARTY_INCLUDE) @MYSQL_CFLAGS@ @CPPFLAGS@ -c $(OUTPUT_OPTION) $< diff --git a/src/map/Makefile.in b/src/map/Makefile.in index 6dbebb5ad..2082f7b1b 100644 --- a/src/map/Makefile.in +++ b/src/map/Makefile.in @@ -36,6 +36,13 @@ LIBCONFIG_OBJ = $(addprefix $(LIBCONFIG_D)/, libconfig.o grammar.o scanctx.o \ LIBCONFIG_H = $(addprefix $(LIBCONFIG_D)/, libconfig.h grammar.h parsectx.h \ scanctx.h scanner.h strbuf.h wincompat.h) +LIBBACKTRACE_D = $(THIRDPARTY_D)/libbacktrace +LIBBACKTRACE_OBJ = $(addprefix $(LIBBACKTRACE_D)/, atomic.o backtrace.o \ + dwarf.o elf.o fileline.o mmapio.o mmap.o posix.o print.o \ + simple.o sort.o state.o) +LIBBACKTRACE_H = $(addprefix $(LIBBACKTRACE_D)/, backtrace.h \ + backtrace-supported.h config.h filenames.h internal.h) + MT19937AR_D = $(THIRDPARTY_D)/mt19937ar MT19937AR_OBJ = $(MT19937AR_D)/mt19937ar.o MT19937AR_H = $(MT19937AR_D)/mt19937ar.h @@ -60,7 +67,7 @@ MAP_PH = refine.p.h HAVE_MYSQL=@HAVE_MYSQL@ ifeq ($(HAVE_MYSQL),yes) - MAP_SERVER_SQL_DEPENDS=$(MAP_OBJ) $(COMMON_D)/obj_all/common.a $(COMMON_D)/obj_sql/common_sql.a $(MT19937AR_OBJ) $(LIBCONFIG_OBJ) $(SYSINFO_INC) + MAP_SERVER_SQL_DEPENDS=$(MAP_OBJ) $(COMMON_D)/obj_all/common.a $(COMMON_D)/obj_sql/common_sql.a $(MT19937AR_OBJ) $(LIBCONFIG_OBJ) $(LIBBACKTRACE_OBJ) $(SYSINFO_INC) else MAP_SERVER_SQL_DEPENDS=needs_mysql endif @@ -99,7 +106,7 @@ help: Makefile: Makefile.in @$(MAKE) -C ../.. src/map/Makefile -$(SYSINFO_INC): $(MAP_C) $(MAP_PH) $(MAP_H) $(COMMON_H) $(CONFIG_H) $(MT19937AR_H) $(LIBCONFIG_H) +$(SYSINFO_INC): $(MAP_C) $(MAP_PH) $(MAP_H) $(COMMON_H) $(CONFIG_H) $(MT19937AR_H) $(LIBCONFIG_H) $(LIBBACKTRACE_H) @echo " MAKE $@" @$(MAKE) -C ../.. sysinfo @@ -120,7 +127,7 @@ map-server: ../../map-server@EXEEXT@ ../../map-server@EXEEXT@: $(MAP_SERVER_SQL_DEPENDS) Makefile @echo " LD $(notdir $@)" @$(CC) @STATIC@ @LDFLAGS@ -o ../../map-server@EXEEXT@ $(MAP_OBJ) $(COMMON_D)/obj_all/common.a $(COMMON_D)/obj_sql/common_sql.a \ - $(MT19937AR_OBJ) $(LIBCONFIG_OBJ) @LIBS@ @MYSQL_LIBS@ + $(MT19937AR_OBJ) $(LIBCONFIG_OBJ) $(LIBBACKTRACE_OBJ) @LIBS@ @MYSQL_LIBS@ # missing object files $(COMMON_D)/obj_all/common.a: @@ -139,10 +146,14 @@ $(LIBCONFIG_OBJ): @echo " MAKE $@" @$(MAKE) -C $(LIBCONFIG_D) +$(LIBBACKTRACE_OBJ): + @echo " MAKE $@" + @$(MAKE) -C $(LIBBACKTRACE_D) + .SECONDEXPANSION: # map object files -obj_sql/%.o: %.c $$(filter %.p.h, $(MAP_PH)) $(MAP_H) $(COMMON_H) $(CONFIG_H) $(MT19937AR_H) $(LIBCONFIG_H) | obj_sql +obj_sql/%.o: %.c $$(filter %.p.h, $(MAP_PH)) $(MAP_H) $(COMMON_H) $(CONFIG_H) $(MT19937AR_H) $(LIBCONFIG_H) $(LIBBACKTRACE_H) | obj_sql @echo " CC $<" @$(CC) @CFLAGS@ @DEFS@ $(COMMON_INCLUDE) $(THIRDPARTY_INCLUDE) @MYSQL_CFLAGS@ @CPPFLAGS@ -c $(OUTPUT_OPTION) $< diff --git a/src/test/Makefile.in b/src/test/Makefile.in index 8399100f1..948852fdf 100644 --- a/src/test/Makefile.in +++ b/src/test/Makefile.in @@ -36,6 +36,13 @@ LIBCONFIG_OBJ = $(addprefix $(LIBCONFIG_D)/, libconfig.o grammar.o scanctx.o \ LIBCONFIG_H = $(addprefix $(LIBCONFIG_D)/, libconfig.h grammar.h parsectx.h \ scanctx.h scanner.h strbuf.h wincompat.h) +LIBBACKTRACE_D = $(THIRDPARTY_D)/libbacktrace +LIBBACKTRACE_OBJ = $(addprefix $(LIBBACKTRACE_D)/, atomic.o backtrace.o \ + dwarf.o elf.o fileline.o mmapio.o mmap.o posix.o print.o \ + simple.o sort.o state.o) +LIBBACKTRACE_H = $(addprefix $(LIBBACKTRACE_D)/, backtrace.h \ + backtrace-supported.h config.h filenames.h internal.h) + MT19937AR_D = $(THIRDPARTY_D)/mt19937ar MT19937AR_OBJ = $(MT19937AR_D)/mt19937ar.o MT19937AR_H = $(MT19937AR_D)/mt19937ar.h @@ -43,7 +50,7 @@ MT19937AR_H = $(MT19937AR_D)/mt19937ar.h TEST_C = test_libconfig.c test_spinlock.c TEST_OBJ = $(addprefix obj/, $(patsubst %c,%o,%(TEST_C))) TEST_H = -TEST_DEPENDS = $(COMMON_D)/obj_sql/common_sql.a $(COMMON_D)/obj_all/common.a $(MT19937AR_OBJ) $(LIBCONFIG_OBJ) $(SYSINFO_INC) +TEST_DEPENDS = $(COMMON_D)/obj_sql/common_sql.a $(COMMON_D)/obj_all/common.a $(MT19937AR_OBJ) $(LIBCONFIG_OBJ) $(LIBBACKTRACE_OBJ) $(SYSINFO_INC) TESTS_ALL = test_libconfig test_spinlock @@ -70,7 +77,7 @@ clean: buildclean Makefile: Makefile.in @$(MAKE) -C ../.. src/test/Makefile -$(SYSINFO_INC): $(TEST_C) $(TEST_H) $(COMMON_H) $(CONFIG_H) $(MT19937AR_H) $(LIBCONFIG_H) +$(SYSINFO_INC): $(TEST_C) $(TEST_H) $(COMMON_H) $(CONFIG_H) $(MT19937AR_H) $(LIBCONFIG_H) $(LIBBACKTRACE_H) @echo " MAKE $@" @$(MAKE) -C ../.. sysinfo @@ -88,11 +95,11 @@ $(TESTS_ALL): test_%: ../../test_%@EXEEXT@ ../../test_%@EXEEXT@: obj/test_%.o $(TEST_DEPENDS) Makefile @echo " LD $(notdir $@)" @$(CC) @STATIC@ @LDFLAGS@ -o $@ $< $(COMMON_D)/obj_all/common.a $(COMMON_D)/obj_sql/common_sql.a \ - $(MT19937AR_OBJ) $(LIBCONFIG_OBJ) @LIBS@ @MYSQL_LIBS@ + $(MT19937AR_OBJ) $(LIBCONFIG_OBJ) $(LIBBACKTRACE_OBJ) @LIBS@ @MYSQL_LIBS@ # object files -obj/%.o: %.c $(TEST_H) $(COMMON_H) $(CONFIG_H) $(MT19937AR_H) $(LIBCONFIG_H) | obj +obj/%.o: %.c $(TEST_H) $(COMMON_H) $(CONFIG_H) $(MT19937AR_H) $(LIBCONFIG_H) $(LIBBACKTRACE_H) | obj @echo " CC $<" @$(CC) @CFLAGS@ @DEFS@ $(COMMON_INCLUDE) $(THIRDPARTY_INCLUDE) @MYSQL_CFLAGS@ @CPPFLAGS@ -c $(OUTPUT_OPTION) $< @@ -112,3 +119,7 @@ $(MT19937AR_OBJ): $(LIBCONFIG_OBJ): @echo " MAKE $@" @$(MAKE) -C $(LIBCONFIG_D) + +$(LIBBACKTRACE_OBJ): + @echo " MAKE $@" + @$(MAKE) -C $(LIBBACKTRACE_D) -- cgit v1.2.3-70-g09d2 From 8f38bf7f9e402edc14df3fe89dc0b46b1b1c3ee9 Mon Sep 17 00:00:00 2001 From: Haru Date: Sat, 7 Dec 2019 00:06:05 +0100 Subject: Fix a memory leak caused by repeatedly allocating the libbacktrace state at every printed backtrace Signed-off-by: Haru --- src/common/core.c | 2 ++ src/common/nullpo.c | 34 +++++++++++++++++++++++----------- src/common/nullpo.h | 7 +++++++ 3 files changed, 32 insertions(+), 11 deletions(-) (limited to 'src') diff --git a/src/common/core.c b/src/common/core.c index 54358b85c..5be90a411 100644 --- a/src/common/core.c +++ b/src/common/core.c @@ -489,6 +489,7 @@ int main(int argc, char **argv) iMalloc->init();// needed for Show* in display_title() [FlavioJS] showmsg->init(); + nullpo->init(); cmdline->init(); @@ -552,6 +553,7 @@ int main(int argc, char **argv) cmdline->final(); //sysinfo->final(); Called by iMalloc->final() + nullpo->final(); iMalloc->final(); showmsg->final(); // Should be after iMalloc->final() diff --git a/src/common/nullpo.c b/src/common/nullpo.c index e43b91bb8..d28d7ee4b 100644 --- a/src/common/nullpo.c +++ b/src/common/nullpo.c @@ -74,12 +74,6 @@ static void nullpo_backtrace_print(struct backtrace_state *state) */ static void assert_report(const char *file, int line, const char *func, const char *targetname, const char *title) { -#if !defined(HAVE_LIBBACKTRACE) && defined(HAVE_EXECINFO) - void *array[10]; - int size; - char **strings; - int i; -#endif // !defined(HAVE_LIBBACKTRACE) && defined(HAVE_EXECINFO) if (file == NULL) file = "??"; @@ -89,17 +83,31 @@ static void assert_report(const char *file, int line, const char *func, const ch ShowError("--- %s --------------------------------------------\n", title); ShowError("%s:%d: '%s' in function `%s'\n", file, line, targetname, func); #ifdef HAVE_LIBBACKTRACE - struct backtrace_state *state = backtrace_create_state("hercules", BACKTRACE_SUPPORTS_THREADS, nullpo_error_callback, NULL); - nullpo_backtrace_print(state); + if (nullpo->backtrace_state != NULL) + nullpo_backtrace_print(nullpo->backtrace_state); #elif defined(HAVE_EXECINFO) - size = (int)backtrace(array, 10); - strings = backtrace_symbols(array, size); - for (i = 0; i < size; i++) + void *array[10]; + int size = (int)backtrace(array, 10); + char **strings = backtrace_symbols(array, size); + for (int i = 0; i < size; i++) ShowError("%s\n", strings[i]); free(strings); #endif // HAVE_LIBBACKTRACE ShowError("--- end %s ----------------------------------------\n", title); +} +static void nullpo_init(void) +{ +#ifdef HAVE_LIBBACKTRACE + nullpo->backtrace_state = backtrace_create_state("hercules", BACKTRACE_SUPPORTS_THREADS, nullpo_error_callback, NULL); +#endif +} + +static void nullpo_final(void) +{ + // FIXME: libbacktrace doesn't provide a backtrace_free_state, and it's unsafe to pass the state to + // backtrace_free (the function itself uses the state internally). For the time being, we'll leave the state + // allocated until program termination as shown in their examples. } /** @@ -108,5 +116,9 @@ static void assert_report(const char *file, int line, const char *func, const ch void nullpo_defaults(void) { nullpo = &nullpo_s; + nullpo->init = nullpo_init; + nullpo->final = nullpo_final; nullpo->assert_report = assert_report; + + nullpo->backtrace_state = NULL; } diff --git a/src/common/nullpo.h b/src/common/nullpo.h index fc5386243..3eb002834 100644 --- a/src/common/nullpo.h +++ b/src/common/nullpo.h @@ -28,6 +28,8 @@ // if need disable asserts checks this line can be commented #define ASSERT_CHECK +struct backtrace_state; + /** Assert */ #if defined(ASSERT_CHECK) @@ -148,7 +150,12 @@ struct nullpo_interface { + void (*init) (void); + void (*final) (void); + void (*assert_report) (const char *file, int line, const char *func, const char *targetname, const char *title); + + struct backtrace_state *backtrace_state; }; #ifdef HERCULES_CORE -- cgit v1.2.3-70-g09d2 From 03b2194deabf1470c2b2e6e6b381ba2811c739e6 Mon Sep 17 00:00:00 2001 From: Haru Date: Sat, 7 Dec 2019 00:08:10 +0100 Subject: Fix Makefile-based compilation on platforms that use libbacktrace with a different executable format than elf --- 3rdparty/libbacktrace/Makefile.in | 5 ++--- configure | 14 +++++++------- configure.ac | 14 +++++++------- src/char/Makefile.in | 2 +- src/common/Makefile.in | 2 +- src/login/Makefile.in | 2 +- src/map/Makefile.in | 2 +- src/test/Makefile.in | 2 +- 8 files changed, 21 insertions(+), 22 deletions(-) (limited to 'src') diff --git a/3rdparty/libbacktrace/Makefile.in b/3rdparty/libbacktrace/Makefile.in index 741c6b076..3be3bc86a 100644 --- a/3rdparty/libbacktrace/Makefile.in +++ b/3rdparty/libbacktrace/Makefile.in @@ -29,13 +29,12 @@ LIBBACKTRACE_OBJ = atomic.o \ backtrace.o \ simple.o \ nounwind.o \ - elf.o \ - pecoff.o \ unknown.o \ read.o \ mmapio.o \ alloc.o \ - mmap.o + mmap.o \ + @LIBBACKTRACE_FORMAT_FILE@ LIBBACKTRACE_H = backtrace.h internal.h diff --git a/configure b/configure index e2e528056..5816580ad 100755 --- a/configure +++ b/configure @@ -638,7 +638,7 @@ ALLOC_FILE VIEW_FILE BACKTRACE_SUPPORTS_DATA BACKTRACE_SUPPORTED -FORMAT_FILE +LIBBACKTRACE_FORMAT_FILE BACKTRACE_SUPPORTS_THREADS BACKTRACE_FILE AWK @@ -8824,22 +8824,22 @@ fi $as_echo "$libbacktrace_cv_sys_filetype" >&6; } # Match the file type to decide what files to compile. -FORMAT_FILE= +LIBBACKTRACE_FORMAT_FILE= backtrace_supports_data=yes case "$libbacktrace_cv_sys_filetype" in -elf*) FORMAT_FILE="elf.lo" ;; -pecoff) FORMAT_FILE="pecoff.lo" +elf*) LIBBACKTRACE_FORMAT_FILE="elf.o" ;; +pecoff) LIBBACKTRACE_FORMAT_FILE="pecoff.o" backtrace_supports_data=no ;; -xcoff*) FORMAT_FILE="xcoff.lo" +xcoff*) LIBBACKTRACE_FORMAT_FILE="xcoff.o" backtrace_supports_data=no ;; -macho*) FORMAT_FILE="macho.lo" +macho*) LIBBACKTRACE_FORMAT_FILE="macho.o" backtrace_supports_data=no ;; *) { $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;} - FORMAT_FILE="unknown.lo" + LIBBACKTRACE_FORMAT_FILE="unknown.o" backtrace_supported=no ;; esac diff --git a/configure.ac b/configure.ac index 746ecb589..e85e4463a 100644 --- a/configure.ac +++ b/configure.ac @@ -1503,25 +1503,25 @@ AC_COMPILE_IFELSE( libbacktrace_cv_sys_filetype=$filetype]) # Match the file type to decide what files to compile. -FORMAT_FILE= +LIBBACKTRACE_FORMAT_FILE= backtrace_supports_data=yes case "$libbacktrace_cv_sys_filetype" in -elf*) FORMAT_FILE="elf.lo" ;; -pecoff) FORMAT_FILE="pecoff.lo" +elf*) LIBBACKTRACE_FORMAT_FILE="elf.o" ;; +pecoff) LIBBACKTRACE_FORMAT_FILE="pecoff.o" backtrace_supports_data=no ;; -xcoff*) FORMAT_FILE="xcoff.lo" +xcoff*) LIBBACKTRACE_FORMAT_FILE="xcoff.o" backtrace_supports_data=no ;; -macho*) FORMAT_FILE="macho.lo" +macho*) LIBBACKTRACE_FORMAT_FILE="macho.o" backtrace_supports_data=no ;; *) AC_MSG_WARN([could not determine output file type]) - FORMAT_FILE="unknown.lo" + LIBBACKTRACE_FORMAT_FILE="unknown.o" backtrace_supported=no ;; esac -AC_SUBST(FORMAT_FILE) +AC_SUBST(LIBBACKTRACE_FORMAT_FILE) # ELF defines. elfsize= diff --git a/src/char/Makefile.in b/src/char/Makefile.in index 34fc0fcba..dc687d589 100644 --- a/src/char/Makefile.in +++ b/src/char/Makefile.in @@ -38,7 +38,7 @@ LIBCONFIG_H = $(addprefix $(LIBCONFIG_D)/, libconfig.h grammar.h parsectx.h \ LIBBACKTRACE_D = $(THIRDPARTY_D)/libbacktrace LIBBACKTRACE_OBJ = $(addprefix $(LIBBACKTRACE_D)/, atomic.o backtrace.o \ - dwarf.o elf.o fileline.o mmapio.o mmap.o posix.o print.o \ + dwarf.o @LIBBACKTRACE_FORMAT_FILE@ fileline.o mmapio.o mmap.o posix.o print.o \ simple.o sort.o state.o) LIBBACKTRACE_H = $(addprefix $(LIBBACKTRACE_D)/, backtrace.h \ backtrace-supported.h config.h filenames.h internal.h) diff --git a/src/common/Makefile.in b/src/common/Makefile.in index 82b651589..97ba34775 100644 --- a/src/common/Makefile.in +++ b/src/common/Makefile.in @@ -35,7 +35,7 @@ LIBCONFIG_H = $(addprefix $(LIBCONFIG_D)/, libconfig.h grammar.h parsectx.h \ LIBBACKTRACE_D = $(THIRDPARTY_D)/libbacktrace LIBBACKTRACE_OBJ = $(addprefix $(LIBBACKTRACE_D)/, atomic.o backtrace.o \ - dwarf.o elf.o fileline.o mmapio.o mmap.o posix.o print.o \ + dwarf.o @LIBBACKTRACE_FORMAT_FILE@ fileline.o mmapio.o mmap.o posix.o print.o \ simple.o sort.o state.o) LIBBACKTRACE_H = $(addprefix $(LIBBACKTRACE_D)/, backtrace.h \ backtrace-supported.h config.h filenames.h internal.h) diff --git a/src/login/Makefile.in b/src/login/Makefile.in index 08a5566fa..4f180070c 100644 --- a/src/login/Makefile.in +++ b/src/login/Makefile.in @@ -38,7 +38,7 @@ LIBCONFIG_H = $(addprefix $(LIBCONFIG_D)/, libconfig.h grammar.h parsectx.h \ LIBBACKTRACE_D = $(THIRDPARTY_D)/libbacktrace LIBBACKTRACE_OBJ = $(addprefix $(LIBBACKTRACE_D)/, atomic.o backtrace.o \ - dwarf.o elf.o fileline.o mmapio.o mmap.o posix.o print.o \ + dwarf.o @LIBBACKTRACE_FORMAT_FILE@ fileline.o mmapio.o mmap.o posix.o print.o \ simple.o sort.o state.o) LIBBACKTRACE_H = $(addprefix $(LIBBACKTRACE_D)/, backtrace.h \ backtrace-supported.h config.h filenames.h internal.h) diff --git a/src/map/Makefile.in b/src/map/Makefile.in index 2082f7b1b..2b050e99c 100644 --- a/src/map/Makefile.in +++ b/src/map/Makefile.in @@ -38,7 +38,7 @@ LIBCONFIG_H = $(addprefix $(LIBCONFIG_D)/, libconfig.h grammar.h parsectx.h \ LIBBACKTRACE_D = $(THIRDPARTY_D)/libbacktrace LIBBACKTRACE_OBJ = $(addprefix $(LIBBACKTRACE_D)/, atomic.o backtrace.o \ - dwarf.o elf.o fileline.o mmapio.o mmap.o posix.o print.o \ + dwarf.o @LIBBACKTRACE_FORMAT_FILE@ fileline.o mmapio.o mmap.o posix.o print.o \ simple.o sort.o state.o) LIBBACKTRACE_H = $(addprefix $(LIBBACKTRACE_D)/, backtrace.h \ backtrace-supported.h config.h filenames.h internal.h) diff --git a/src/test/Makefile.in b/src/test/Makefile.in index 948852fdf..967d7dcfc 100644 --- a/src/test/Makefile.in +++ b/src/test/Makefile.in @@ -38,7 +38,7 @@ LIBCONFIG_H = $(addprefix $(LIBCONFIG_D)/, libconfig.h grammar.h parsectx.h \ LIBBACKTRACE_D = $(THIRDPARTY_D)/libbacktrace LIBBACKTRACE_OBJ = $(addprefix $(LIBBACKTRACE_D)/, atomic.o backtrace.o \ - dwarf.o elf.o fileline.o mmapio.o mmap.o posix.o print.o \ + dwarf.o @LIBBACKTRACE_FORMAT_FILE@ fileline.o mmapio.o mmap.o posix.o print.o \ simple.o sort.o state.o) LIBBACKTRACE_H = $(addprefix $(LIBBACKTRACE_D)/, backtrace.h \ backtrace-supported.h config.h filenames.h internal.h) -- cgit v1.2.3-70-g09d2 From 960d13887d7e1e4d14ae68d72163d639590673b5 Mon Sep 17 00:00:00 2001 From: Haru Date: Sun, 15 Dec 2019 15:21:27 +0100 Subject: Add helpers to find the correct executable path for libbacktrace Signed-off-by: Haru --- src/common/nullpo.c | 67 +++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 65 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/common/nullpo.c b/src/common/nullpo.c index d28d7ee4b..11741745c 100644 --- a/src/common/nullpo.c +++ b/src/common/nullpo.c @@ -23,14 +23,28 @@ #include "nullpo.h" #include "common/showmsg.h" +#include "common/strlib.h" #include #include #include #include -#ifdef HAVE_LIBBACKTRACE +#if defined(HAVE_LIBBACKTRACE) #include "libbacktrace/backtrace.h" #include "libbacktrace/backtrace-supported.h" +# if defined(WIN32) +# include +# elif defined(__sun) +# include +# elif defined(__linux) || defined(__linux__) +# include +# include +# elif defined(__APPLE__) && defined(__MACH__) +# include +# elif defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) || defined(__bsdi__) || defined(__DragonFly__) +# include +# include +# endif #elif defined(HAVE_EXECINFO) #include #endif // HAVE_LIBBACKTRACE @@ -40,6 +54,8 @@ static struct nullpo_interface nullpo_s; struct nullpo_interface *nullpo; #ifdef HAVE_LIBBACKTRACE +static char executable_path[PATH_MAX]; + static void nullpo_error_callback(void *data, const char *msg, int errnum) { ShowError("Error: %s (%d)", msg, errnum); @@ -61,6 +77,50 @@ static void nullpo_backtrace_print(struct backtrace_state *state) backtrace_full(state, 0, nullpo_print_callback, nullpo_error_callback, state); } +static bool nullpo_backtrace_get_executable_path(char *buf, size_t length) +{ +#if defined(WIN32) + char *exe_path = NULL; + if (_get_pgmptr(&exe_path) != 0) + return false; + safestrncpy(buf, exe_path, length); + return true; +#elif defined(__sun) + if (length < MAX_PATH) + return false; + if (realpath(getexecname(), buf) == NULL) + return false; + buf[length - 1] = '\0'; + return true; +#elif defined(__linux) || defined(__linux__) + ssize_t len = readlink("/proc/self/exe", buf, length); + if (len <= 0 || len == length) + return false; + buf[len] = '\0'; + return true; +#elif defined(__APPLE__) && defined(__MACH__) + uint32_t len = (uint32_t)length; + if (_NSGetExecutablePath(buf, &len) != 0) + return false; // buffer too small (!) + // resolve symlinks, ., .. if possible + char *canonical_path = realpath(buf, NULL); + if (canonical_path != NULL) { + safestrncpy(buf, canonical_path, length); + free(canonical_path); + } + return true; +#elif defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) || defined(__bsdi__) || defined(__DragonFly__) + int mib[4]; + mib[0] = CTL_KERN; + mib[1] = KERN_PROC; + mib[2] = KERN_PROC_PATHNAME; + mib[3] = -1; + if (sysctl(mib, 4, buf, &length, NULL, 0) != 0) + return false; + return true; +#endif + return false; +} #endif // HAVE_LIBBACKTRACE /** @@ -99,7 +159,10 @@ static void assert_report(const char *file, int line, const char *func, const ch static void nullpo_init(void) { #ifdef HAVE_LIBBACKTRACE - nullpo->backtrace_state = backtrace_create_state("hercules", BACKTRACE_SUPPORTS_THREADS, nullpo_error_callback, NULL); + if (!nullpo_backtrace_get_executable_path(executable_path, sizeof executable_path)) { + safestrncpy(executable_path, "hercules", sizeof executable_path); + } + nullpo->backtrace_state = backtrace_create_state(executable_path, BACKTRACE_SUPPORTS_THREADS, nullpo_error_callback, NULL); #endif } -- cgit v1.2.3-70-g09d2 From 8578597b71e94cbd599eb211665b1f6a2dbc2bb0 Mon Sep 17 00:00:00 2001 From: Haru Date: Sun, 15 Dec 2019 18:04:50 +0100 Subject: Disable libbacktrace by default It's currently only tested on linux, and doesn't work yet on macOS (tested on 10.15). Further work is necessary Signed-off-by: Haru --- configure | 310 ++++++++++++++++++++++----------------- configure.ac | 383 +++++++++++++++++++++++++++---------------------- src/char/Makefile.in | 18 ++- src/common/Makefile.in | 18 ++- src/login/Makefile.in | 18 ++- src/map/Makefile.in | 18 ++- src/test/Makefile.in | 18 ++- 7 files changed, 454 insertions(+), 329 deletions(-) (limited to 'src') diff --git a/configure b/configure index 5816580ad..a1d233c57 100755 --- a/configure +++ b/configure @@ -1,5 +1,5 @@ #! /bin/sh -# From configure.ac 9bce92f63. +# From configure.ac aa7aba7b6. # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.69. # @@ -1366,7 +1366,8 @@ Optional Features: --enable-debug[=ARG] Compiles extra debug code. (yes by default) (available options: yes, no, gdb) --enable-libbacktrace[=ARG] - Compiles with libbacktrace. (yes by default) + Compiles with libbacktrace. (no by default - + experimental) --enable-buildbot[=ARG] (available options: yes, no) --enable-rdtsc Uses rdtsc as timing source (disabled by default) Enable it when you've timing issues. (For example: @@ -3810,7 +3811,7 @@ if test "${enable_libbacktrace+set}" = set; then : esac else - enable_libbacktrace="yes" + enable_libbacktrace="no" fi @@ -8596,15 +8597,13 @@ esac # # libbacktrace # -case $enable_libbacktrace in - "no") - # default value - USE_LIBBACKTRACE="no" - ;; - "yes") - CFLAGS="$CFLAGS " - CPPFLAGS="$CPPFLAGS -DHAVE_LIBBACKTRACE" - USE_LIBBACKTRACE="yes" +if test "$enable_libbacktrace" = "no" ; then + USE_LIBBACKTRACE="no" +else + CPPFLAGS="$CPPFLAGS -DHAVE_LIBBACKTRACE" + USE_LIBBACKTRACE="yes" + + # libbacktrace checks { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC supports -funwind-tables" >&5 $as_echo_n "checking whether $CC supports -funwind-tables... " >&6; } @@ -8632,12 +8631,8 @@ fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - ;; -esac -# libbacktrace checks - -for ac_prog in gawk mawk nawk awk + for ac_prog in gawk mawk nawk awk do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 @@ -8679,24 +8674,31 @@ fi test -n "$AWK" && break done -case "$AWK" in -"") as_fn_error $? "can't build without awk" "$LINENO" 5 ;; -esac + case "$AWK" in + "") + as_fn_error $? "Libbacktrace requires awk to build" "$LINENO" 5 + ;; + esac -backtrace_supported=yes -ac_fn_c_check_header_mongrel "$LINENO" "unwind.h" "ac_cv_header_unwind_h" "$ac_includes_default" + backtrace_supported=yes + ac_fn_c_check_header_mongrel "$LINENO" "unwind.h" "ac_cv_header_unwind_h" "$ac_includes_default" if test "x$ac_cv_header_unwind_h" = xyes; then : ac_fn_c_check_func "$LINENO" "_Unwind_Backtrace" "ac_cv_func__Unwind_Backtrace" if test "x$ac_cv_func__Unwind_Backtrace" = xyes; then : BACKTRACE_FILE="backtrace.lo simple.lo" else - BACKTRACE_FILE="nounwind.lo" - backtrace_supported=no + + BACKTRACE_FILE="nounwind.lo" + backtrace_supported=no + + fi else - BACKTRACE_FILE="nounwind.lo" - backtrace_supported=no + + BACKTRACE_FILE="nounwind.lo" + backtrace_supported=no + fi @@ -8707,98 +8709,121 @@ fi $as_echo "#define HAVE_GETIPINFO 1" >>confdefs.h -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking __sync extensions" >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking __sync extensions" >&5 $as_echo_n "checking __sync extensions... " >&6; } if ${libbacktrace_cv_sys_sync+:} false; then : $as_echo_n "(cached) " >&6 else - if test -n "${with_target_subdir}"; then - case "${host}" in - hppa*-*-hpux*) libbacktrace_cv_sys_sync=no ;; - *) libbacktrace_cv_sys_sync=yes ;; - esac - else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext + + if test -n "${with_target_subdir}"; then + case "${host}" in + hppa*-*-hpux*) + libbacktrace_cv_sys_sync=no + ;; + *) + libbacktrace_cv_sys_sync=yes + ;; + esac + else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -int i; + + int i; int main () { -__sync_bool_compare_and_swap (&i, i, i); - __sync_lock_test_and_set (&i, 1); - __sync_lock_release (&i); + + __sync_bool_compare_and_swap(&i, i, i); + __sync_lock_test_and_set(&i, 1); + __sync_lock_release(&i); + + ; return 0; } + _ACEOF if ac_fn_c_try_link "$LINENO"; then : libbacktrace_cv_sys_sync=yes else libbacktrace_cv_sys_sync=no + fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext - fi + fi + + fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $libbacktrace_cv_sys_sync" >&5 $as_echo "$libbacktrace_cv_sys_sync" >&6; } -BACKTRACE_SUPPORTS_THREADS=0 -if test "$libbacktrace_cv_sys_sync" = "yes"; then - BACKTRACE_SUPPORTS_THREADS=1 + BACKTRACE_SUPPORTS_THREADS=0 + if test "$libbacktrace_cv_sys_sync" = "yes"; then + BACKTRACE_SUPPORTS_THREADS=1 $as_echo "#define HAVE_SYNC_FUNCTIONS 1" >>confdefs.h -fi + fi -# Test for __atomic support. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking __atomic extensions" >&5 + # Test for __atomic support. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking __atomic extensions" >&5 $as_echo_n "checking __atomic extensions... " >&6; } if ${libbacktrace_cv_sys_atomic+:} false; then : $as_echo_n "(cached) " >&6 else - if test -n "${with_target_subdir}"; then - libbacktrace_cv_sys_atomic=yes - else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext + + if test -n "${with_target_subdir}"; then + libbacktrace_cv_sys_atomic=yes + else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -int i; + + int i; int main () { -__atomic_load_n (&i, __ATOMIC_ACQUIRE); - __atomic_store_n (&i, 1, __ATOMIC_RELEASE); + + __atomic_load_n(&i, __ATOMIC_ACQUIRE); + __atomic_store_n(&i, 1, __ATOMIC_RELEASE); + + ; return 0; } + _ACEOF if ac_fn_c_try_link "$LINENO"; then : libbacktrace_cv_sys_atomic=yes else libbacktrace_cv_sys_atomic=no + fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext - fi + fi + + fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $libbacktrace_cv_sys_atomic" >&5 $as_echo "$libbacktrace_cv_sys_atomic" >&6; } -if test "$libbacktrace_cv_sys_atomic" = "yes"; then + if test "$libbacktrace_cv_sys_atomic" = "yes"; then $as_echo "#define HAVE_ATOMIC_FUNCTIONS 1" >>confdefs.h -fi + fi -# The library needs to be able to read the executable itself. Compile -# a file to determine the executable format. The awk script -# filetype.awk prints out the file type. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking output filetype" >&5 + # The library needs to be able to read the executable itself. Compile + # a file to determine the executable format. The awk script + # filetype.awk prints out the file type. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking output filetype" >&5 $as_echo_n "checking output filetype... " >&6; } if ${libbacktrace_cv_sys_filetype+:} false; then : $as_echo_n "(cached) " >&6 else - filetype= -cat confdefs.h - <<_ACEOF >conftest.$ac_ext + + filetype= + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; int @@ -8816,74 +8841,93 @@ else $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "compiler failed See \`config.log' for more details" "$LINENO" 5; } + fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -libbacktrace_cv_sys_filetype=$filetype + libbacktrace_cv_sys_filetype=$filetype + + fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $libbacktrace_cv_sys_filetype" >&5 $as_echo "$libbacktrace_cv_sys_filetype" >&6; } -# Match the file type to decide what files to compile. -LIBBACKTRACE_FORMAT_FILE= -backtrace_supports_data=yes -case "$libbacktrace_cv_sys_filetype" in -elf*) LIBBACKTRACE_FORMAT_FILE="elf.o" ;; -pecoff) LIBBACKTRACE_FORMAT_FILE="pecoff.o" - backtrace_supports_data=no - ;; -xcoff*) LIBBACKTRACE_FORMAT_FILE="xcoff.o" - backtrace_supports_data=no - ;; -macho*) LIBBACKTRACE_FORMAT_FILE="macho.o" - backtrace_supports_data=no - ;; -*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: could not determine output file type" >&5 + # Match the file type to decide what files to compile. + LIBBACKTRACE_FORMAT_FILE= + backtrace_supports_data=yes + case "$libbacktrace_cv_sys_filetype" in + elf*) + LIBBACKTRACE_FORMAT_FILE="elf.o" + ;; + pecoff) + LIBBACKTRACE_FORMAT_FILE="pecoff.o" + backtrace_supports_data=no + ;; + xcoff*) + LIBBACKTRACE_FORMAT_FILE="xcoff.o" + backtrace_supports_data=no + ;; + macho*) + LIBBACKTRACE_FORMAT_FILE="macho.o" + backtrace_supports_data=no + ;; + *) + { $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;} - LIBBACKTRACE_FORMAT_FILE="unknown.o" - backtrace_supported=no - ;; -esac + LIBBACKTRACE_FORMAT_FILE="unknown.o" + backtrace_supported=no + ;; + esac -# ELF defines. -elfsize= -case "$libbacktrace_cv_sys_filetype" in -elf32) elfsize=32 ;; -elf64) elfsize=64 ;; -*) elfsize=unused -esac + # ELF defines. + elfsize= + case "$libbacktrace_cv_sys_filetype" in + elf32) + elfsize=32 + ;; + elf64) + elfsize=64 + ;; + *) + elfsize=unused + esac cat >>confdefs.h <<_ACEOF #define BACKTRACE_ELF_SIZE $elfsize _ACEOF -# XCOFF defines. -xcoffsize= -case "$libbacktrace_cv_sys_filetype" in -xcoff32) xcoffsize=32 ;; -xcoff64) xcoffsize=64 ;; -*) xcoffsize=unused -esac + # XCOFF defines. + xcoffsize= + case "$libbacktrace_cv_sys_filetype" in + xcoff32) + xcoffsize=32 + ;; + xcoff64) + xcoffsize=64 + ;; + *) + xcoffsize=unused + esac cat >>confdefs.h <<_ACEOF #define BACKTRACE_XCOFF_SIZE $xcoffsize _ACEOF -BACKTRACE_SUPPORTED=0 -if test "$backtrace_supported" = "yes"; then - BACKTRACE_SUPPORTED=1 -fi + BACKTRACE_SUPPORTED=0 + if test "$backtrace_supported" = "yes"; then + BACKTRACE_SUPPORTED=1 + fi -BACKTRACE_SUPPORTS_DATA=0 -if test "$backtrace_supports_data" = "yes"; then - BACKTRACE_SUPPORTS_DATA=1 -fi + BACKTRACE_SUPPORTS_DATA=0 + if test "$backtrace_supports_data" = "yes"; then + BACKTRACE_SUPPORTS_DATA=1 + fi -ac_fn_c_check_func "$LINENO" "mmap" "ac_cv_func_mmap" + ac_fn_c_check_func "$LINENO" "mmap" "ac_cv_func_mmap" if test "x$ac_cv_func_mmap" = xyes; then : have_mmap=yes else @@ -8891,54 +8935,60 @@ else fi -VIEW_FILE=mmapio.lo -ALLOC_FILE=mmap.lo + VIEW_FILE=mmapio.lo + ALLOC_FILE=mmap.lo -BACKTRACE_USES_MALLOC=0 -if test "$ALLOC_FILE" = "alloc.lo"; then - BACKTRACE_USES_MALLOC=1 -fi + BACKTRACE_USES_MALLOC=0 + if test "$ALLOC_FILE" = "alloc.lo"; then + BACKTRACE_USES_MALLOC=1 + fi -ac_fn_c_check_func "$LINENO" "dl_iterate_phdr" "ac_cv_func_dl_iterate_phdr" + ac_fn_c_check_func "$LINENO" "dl_iterate_phdr" "ac_cv_func_dl_iterate_phdr" if test "x$ac_cv_func_dl_iterate_phdr" = xyes; then : have_dl_iterate_phdr=yes else have_dl_iterate_phdr=no fi -if test "$have_dl_iterate_phdr" = "yes"; then + if test "$have_dl_iterate_phdr" = "yes"; then $as_echo "#define HAVE_DL_ITERATE_PHDR 1" >>confdefs.h -fi + fi -# Check for the fcntl function. -if test -n "${with_target_subdir}"; then - case "${host}" in - *-*-mingw*) have_fcntl=no ;; - spu-*-*) have_fcntl=no ;; - *) have_fcntl=yes ;; - esac -else - ac_fn_c_check_func "$LINENO" "fcntl" "ac_cv_func_fcntl" + # Check for the fcntl function. + if test -n "${with_target_subdir}"; then + case "${host}" in + *-*-mingw*) + have_fcntl=no + ;; + spu-*-*) + have_fcntl=no + ;; + *) + have_fcntl=yes + ;; + esac + else + ac_fn_c_check_func "$LINENO" "fcntl" "ac_cv_func_fcntl" if test "x$ac_cv_func_fcntl" = xyes; then : have_fcntl=yes else have_fcntl=no fi -fi -if test "$have_fcntl" = "yes"; then + fi + if test "$have_fcntl" = "yes"; then $as_echo "#define HAVE_FCNTL 1" >>confdefs.h -fi + fi -ac_fn_c_check_decl "$LINENO" "strnlen" "ac_cv_have_decl_strnlen" "$ac_includes_default" + ac_fn_c_check_decl "$LINENO" "strnlen" "ac_cv_have_decl_strnlen" "$ac_includes_default" if test "x$ac_cv_have_decl_strnlen" = xyes; then : ac_have_decl=1 else @@ -8949,7 +8999,7 @@ cat >>confdefs.h <<_ACEOF #define HAVE_DECL_STRNLEN $ac_have_decl _ACEOF -for ac_func in lstat readlink + for ac_func in lstat readlink do : as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" @@ -8962,21 +9012,21 @@ fi done -ac_fn_c_check_func "$LINENO" "getexecname" "ac_cv_func_getexecname" + ac_fn_c_check_func "$LINENO" "getexecname" "ac_cv_func_getexecname" if test "x$ac_cv_func_getexecname" = xyes; then : have_getexecname=yes else have_getexecname=no fi -if test "$have_getexecname" = "yes"; then + if test "$have_getexecname" = "yes"; then $as_echo "#define HAVE_GETEXECNAME 1" >>confdefs.h + fi fi - # # Buildbot # diff --git a/configure.ac b/configure.ac index e85e4463a..e13fc4b6c 100644 --- a/configure.ac +++ b/configure.ac @@ -319,7 +319,7 @@ AC_ARG_ENABLE( AC_HELP_STRING( [--enable-libbacktrace@<:@=ARG@:>@], [ - Compiles with libbacktrace. (yes by default) + Compiles with libbacktrace. (no by default - experimental) ] ), [ @@ -330,7 +330,7 @@ AC_ARG_ENABLE( *) AC_MSG_ERROR([[invalid argument --enable-libbacktrace=$enableval... stopping]]);; esac ], - [enable_libbacktrace="yes"] + [enable_libbacktrace="no"] ) # @@ -1415,188 +1415,233 @@ esac # # libbacktrace # -case $enable_libbacktrace in - "no") - # default value - USE_LIBBACKTRACE="no" - ;; - "yes") - CFLAGS="$CFLAGS " - CPPFLAGS="$CPPFLAGS -DHAVE_LIBBACKTRACE" - USE_LIBBACKTRACE="yes" - AC_CHECK_FLAG(-funwind-tables) - ;; -esac +if test "$enable_libbacktrace" = "no" ; then + USE_LIBBACKTRACE="no" +else + CPPFLAGS="$CPPFLAGS -DHAVE_LIBBACKTRACE" + USE_LIBBACKTRACE="yes" + + # libbacktrace checks + AC_CHECK_FLAG(-funwind-tables) + + AC_PROG_AWK + case "$AWK" in + "") + AC_MSG_ERROR([Libbacktrace requires awk to build]) + ;; + esac + + backtrace_supported=yes + AC_CHECK_HEADER([unwind.h], + [AC_CHECK_FUNC([_Unwind_Backtrace], + [BACKTRACE_FILE="backtrace.lo simple.lo"], + [ + BACKTRACE_FILE="nounwind.lo" + backtrace_supported=no + ] + )], + [ + BACKTRACE_FILE="nounwind.lo" + backtrace_supported=no + ] + ) + AC_SUBST(BACKTRACE_FILE) -# libbacktrace checks + AC_DEFINE(HAVE_GETIPINFO, 1, [Define if _Unwind_GetIPInfo is available.]) -AC_PROG_AWK -case "$AWK" in -"") AC_MSG_ERROR([can't build without awk]) ;; -esac + AC_CACHE_CHECK([__sync extensions], + [libbacktrace_cv_sys_sync], + [ + if test -n "${with_target_subdir}"; then + case "${host}" in + hppa*-*-hpux*) + libbacktrace_cv_sys_sync=no + ;; + *) + libbacktrace_cv_sys_sync=yes + ;; + esac + else + AC_LINK_IFELSE( + [ + AC_LANG_PROGRAM([int i;], + [ + __sync_bool_compare_and_swap(&i, i, i); + __sync_lock_test_and_set(&i, 1); + __sync_lock_release(&i); + ] + ) + ], + [libbacktrace_cv_sys_sync=yes], + [libbacktrace_cv_sys_sync=no] + ) + fi + ] + ) + BACKTRACE_SUPPORTS_THREADS=0 + if test "$libbacktrace_cv_sys_sync" = "yes"; then + BACKTRACE_SUPPORTS_THREADS=1 + AC_DEFINE([HAVE_SYNC_FUNCTIONS], 1, [Define to 1 if you have the __sync functions]) + fi + AC_SUBST(BACKTRACE_SUPPORTS_THREADS) -backtrace_supported=yes -AC_CHECK_HEADER([unwind.h], - [AC_CHECK_FUNC([_Unwind_Backtrace], - [BACKTRACE_FILE="backtrace.lo simple.lo"], - [BACKTRACE_FILE="nounwind.lo" - backtrace_supported=no])], - [BACKTRACE_FILE="nounwind.lo" - backtrace_supported=no] -) -AC_SUBST(BACKTRACE_FILE) - -AC_DEFINE(HAVE_GETIPINFO, 1, [Define if _Unwind_GetIPInfo is available.]) - -AC_CACHE_CHECK([__sync extensions], -[libbacktrace_cv_sys_sync], -[if test -n "${with_target_subdir}"; then - case "${host}" in - hppa*-*-hpux*) libbacktrace_cv_sys_sync=no ;; - *) libbacktrace_cv_sys_sync=yes ;; - esac - else - AC_LINK_IFELSE( - [AC_LANG_PROGRAM([int i;], - [__sync_bool_compare_and_swap (&i, i, i); - __sync_lock_test_and_set (&i, 1); - __sync_lock_release (&i);])], - [libbacktrace_cv_sys_sync=yes], - [libbacktrace_cv_sys_sync=no]) - fi]) -BACKTRACE_SUPPORTS_THREADS=0 -if test "$libbacktrace_cv_sys_sync" = "yes"; then - BACKTRACE_SUPPORTS_THREADS=1 - AC_DEFINE([HAVE_SYNC_FUNCTIONS], 1, - [Define to 1 if you have the __sync functions]) -fi -AC_SUBST(BACKTRACE_SUPPORTS_THREADS) - -# Test for __atomic support. -AC_CACHE_CHECK([__atomic extensions], -[libbacktrace_cv_sys_atomic], -[if test -n "${with_target_subdir}"; then - libbacktrace_cv_sys_atomic=yes - else - AC_LINK_IFELSE( - [AC_LANG_PROGRAM([int i;], - [__atomic_load_n (&i, __ATOMIC_ACQUIRE); - __atomic_store_n (&i, 1, __ATOMIC_RELEASE);])], - [libbacktrace_cv_sys_atomic=yes], - [libbacktrace_cv_sys_atomic=no]) - fi]) -if test "$libbacktrace_cv_sys_atomic" = "yes"; then - AC_DEFINE([HAVE_ATOMIC_FUNCTIONS], 1, - [Define to 1 if you have the __atomic functions]) -fi + # Test for __atomic support. + AC_CACHE_CHECK([__atomic extensions], + [libbacktrace_cv_sys_atomic], + [ + if test -n "${with_target_subdir}"; then + libbacktrace_cv_sys_atomic=yes + else + AC_LINK_IFELSE( + [ + AC_LANG_PROGRAM([int i;], + [ + __atomic_load_n(&i, __ATOMIC_ACQUIRE); + __atomic_store_n(&i, 1, __ATOMIC_RELEASE); + ] + ) + ], + [libbacktrace_cv_sys_atomic=yes], + [libbacktrace_cv_sys_atomic=no] + ) + fi + ] + ) + if test "$libbacktrace_cv_sys_atomic" = "yes"; then + AC_DEFINE([HAVE_ATOMIC_FUNCTIONS], 1, [Define to 1 if you have the __atomic functions]) + fi -# The library needs to be able to read the executable itself. Compile -# a file to determine the executable format. The awk script -# filetype.awk prints out the file type. -AC_CACHE_CHECK([output filetype], -[libbacktrace_cv_sys_filetype], -[filetype= -AC_COMPILE_IFELSE( - [AC_LANG_PROGRAM([int i;], [int j;])], - [filetype=`${AWK} -f $srcdir/3rdparty/libbacktrace/filetype.awk conftest.$ac_objext`], - [AC_MSG_FAILURE([compiler failed])]) -libbacktrace_cv_sys_filetype=$filetype]) - -# Match the file type to decide what files to compile. -LIBBACKTRACE_FORMAT_FILE= -backtrace_supports_data=yes -case "$libbacktrace_cv_sys_filetype" in -elf*) LIBBACKTRACE_FORMAT_FILE="elf.o" ;; -pecoff) LIBBACKTRACE_FORMAT_FILE="pecoff.o" - backtrace_supports_data=no - ;; -xcoff*) LIBBACKTRACE_FORMAT_FILE="xcoff.o" - backtrace_supports_data=no - ;; -macho*) LIBBACKTRACE_FORMAT_FILE="macho.o" - backtrace_supports_data=no - ;; -*) AC_MSG_WARN([could not determine output file type]) - LIBBACKTRACE_FORMAT_FILE="unknown.o" - backtrace_supported=no - ;; -esac -AC_SUBST(LIBBACKTRACE_FORMAT_FILE) - -# ELF defines. -elfsize= -case "$libbacktrace_cv_sys_filetype" in -elf32) elfsize=32 ;; -elf64) elfsize=64 ;; -*) elfsize=unused -esac -AC_DEFINE_UNQUOTED([BACKTRACE_ELF_SIZE], [$elfsize], [ELF size: 32 or 64]) - -# XCOFF defines. -xcoffsize= -case "$libbacktrace_cv_sys_filetype" in -xcoff32) xcoffsize=32 ;; -xcoff64) xcoffsize=64 ;; -*) xcoffsize=unused -esac -AC_DEFINE_UNQUOTED([BACKTRACE_XCOFF_SIZE], [$xcoffsize], [XCOFF size: 32 or 64]) + # The library needs to be able to read the executable itself. Compile + # a file to determine the executable format. The awk script + # filetype.awk prints out the file type. + AC_CACHE_CHECK([output filetype], + [libbacktrace_cv_sys_filetype], + [ + filetype= + AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM([int i;], [int j;])], + [filetype=`${AWK} -f $srcdir/3rdparty/libbacktrace/filetype.awk conftest.$ac_objext`], + [AC_MSG_FAILURE([compiler failed])] + ) + libbacktrace_cv_sys_filetype=$filetype + ] + ) -BACKTRACE_SUPPORTED=0 -if test "$backtrace_supported" = "yes"; then - BACKTRACE_SUPPORTED=1 -fi -AC_SUBST(BACKTRACE_SUPPORTED) + # Match the file type to decide what files to compile. + LIBBACKTRACE_FORMAT_FILE= + backtrace_supports_data=yes + case "$libbacktrace_cv_sys_filetype" in + elf*) + LIBBACKTRACE_FORMAT_FILE="elf.o" + ;; + pecoff) + LIBBACKTRACE_FORMAT_FILE="pecoff.o" + backtrace_supports_data=no + ;; + xcoff*) + LIBBACKTRACE_FORMAT_FILE="xcoff.o" + backtrace_supports_data=no + ;; + macho*) + LIBBACKTRACE_FORMAT_FILE="macho.o" + backtrace_supports_data=no + ;; + *) + AC_MSG_WARN([could not determine output file type]) + LIBBACKTRACE_FORMAT_FILE="unknown.o" + backtrace_supported=no + ;; + esac + AC_SUBST(LIBBACKTRACE_FORMAT_FILE) + + # ELF defines. + elfsize= + case "$libbacktrace_cv_sys_filetype" in + elf32) + elfsize=32 + ;; + elf64) + elfsize=64 + ;; + *) + elfsize=unused + esac + AC_DEFINE_UNQUOTED([BACKTRACE_ELF_SIZE], [$elfsize], [ELF size: 32 or 64]) + + # XCOFF defines. + xcoffsize= + case "$libbacktrace_cv_sys_filetype" in + xcoff32) + xcoffsize=32 + ;; + xcoff64) + xcoffsize=64 + ;; + *) + xcoffsize=unused + esac + AC_DEFINE_UNQUOTED([BACKTRACE_XCOFF_SIZE], [$xcoffsize], [XCOFF size: 32 or 64]) + + BACKTRACE_SUPPORTED=0 + if test "$backtrace_supported" = "yes"; then + BACKTRACE_SUPPORTED=1 + fi + 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) + BACKTRACE_SUPPORTS_DATA=0 + if test "$backtrace_supports_data" = "yes"; then + BACKTRACE_SUPPORTS_DATA=1 + fi + AC_SUBST(BACKTRACE_SUPPORTS_DATA) -AC_CHECK_FUNC(mmap, [have_mmap=yes], [have_mmap=no]) + AC_CHECK_FUNC(mmap, [have_mmap=yes], [have_mmap=no]) -VIEW_FILE=mmapio.lo -ALLOC_FILE=mmap.lo + VIEW_FILE=mmapio.lo + ALLOC_FILE=mmap.lo -AC_SUBST(VIEW_FILE) -AC_SUBST(ALLOC_FILE) + AC_SUBST(VIEW_FILE) + AC_SUBST(ALLOC_FILE) -BACKTRACE_USES_MALLOC=0 -if test "$ALLOC_FILE" = "alloc.lo"; then - BACKTRACE_USES_MALLOC=1 -fi -AC_SUBST(BACKTRACE_USES_MALLOC) + BACKTRACE_USES_MALLOC=0 + if test "$ALLOC_FILE" = "alloc.lo"; then + BACKTRACE_USES_MALLOC=1 + fi + AC_SUBST(BACKTRACE_USES_MALLOC) -AC_CHECK_FUNC([dl_iterate_phdr], [have_dl_iterate_phdr=yes], - [have_dl_iterate_phdr=no]) -if test "$have_dl_iterate_phdr" = "yes"; then - AC_DEFINE(HAVE_DL_ITERATE_PHDR, 1, [Define if dl_iterate_phdr is available.]) -fi + AC_CHECK_FUNC([dl_iterate_phdr], [have_dl_iterate_phdr=yes], [have_dl_iterate_phdr=no]) + if test "$have_dl_iterate_phdr" = "yes"; then + AC_DEFINE(HAVE_DL_ITERATE_PHDR, 1, [Define if dl_iterate_phdr is available.]) + fi -# Check for the fcntl function. -if test -n "${with_target_subdir}"; then - case "${host}" in - *-*-mingw*) have_fcntl=no ;; - spu-*-*) have_fcntl=no ;; - *) have_fcntl=yes ;; - esac -else - AC_CHECK_FUNC(fcntl, [have_fcntl=yes], [have_fcntl=no]) -fi -if test "$have_fcntl" = "yes"; then - AC_DEFINE([HAVE_FCNTL], 1, - [Define to 1 if you have the fcntl function]) -fi + # Check for the fcntl function. + if test -n "${with_target_subdir}"; then + case "${host}" in + *-*-mingw*) + have_fcntl=no + ;; + spu-*-*) + have_fcntl=no + ;; + *) + have_fcntl=yes + ;; + esac + else + AC_CHECK_FUNC(fcntl, [have_fcntl=yes], [have_fcntl=no]) + fi + if test "$have_fcntl" = "yes"; then + AC_DEFINE([HAVE_FCNTL], 1, [Define to 1 if you have the fcntl function]) + fi -AC_CHECK_DECLS(strnlen) -AC_CHECK_FUNCS(lstat readlink) + AC_CHECK_DECLS(strnlen) + AC_CHECK_FUNCS(lstat readlink) -AC_CHECK_FUNC(getexecname, [have_getexecname=yes], [have_getexecname=no]) -if test "$have_getexecname" = "yes"; then - AC_DEFINE(HAVE_GETEXECNAME, 1, [Define if getexecname is available.]) + AC_CHECK_FUNC(getexecname, [have_getexecname=yes], [have_getexecname=no]) + if test "$have_getexecname" = "yes"; then + AC_DEFINE(HAVE_GETEXECNAME, 1, [Define if getexecname is available.]) + fi fi - - +AC_SUBST(USE_LIBBACKTRACE) # # Buildbot diff --git a/src/char/Makefile.in b/src/char/Makefile.in index dc687d589..88a99c96c 100644 --- a/src/char/Makefile.in +++ b/src/char/Makefile.in @@ -36,12 +36,18 @@ LIBCONFIG_OBJ = $(addprefix $(LIBCONFIG_D)/, libconfig.o grammar.o scanctx.o \ LIBCONFIG_H = $(addprefix $(LIBCONFIG_D)/, libconfig.h grammar.h parsectx.h \ scanctx.h scanner.h strbuf.h wincompat.h) -LIBBACKTRACE_D = $(THIRDPARTY_D)/libbacktrace -LIBBACKTRACE_OBJ = $(addprefix $(LIBBACKTRACE_D)/, atomic.o backtrace.o \ - dwarf.o @LIBBACKTRACE_FORMAT_FILE@ fileline.o mmapio.o mmap.o posix.o print.o \ - simple.o sort.o state.o) -LIBBACKTRACE_H = $(addprefix $(LIBBACKTRACE_D)/, backtrace.h \ - backtrace-supported.h config.h filenames.h internal.h) +ifeq (@USE_LIBBACKTRACE@,yes) + LIBBACKTRACE_D = $(THIRDPARTY_D)/libbacktrace + LIBBACKTRACE_OBJ = $(addprefix $(LIBBACKTRACE_D)/, atomic.o backtrace.o \ + dwarf.o @LIBBACKTRACE_FORMAT_FILE@ fileline.o mmapio.o mmap.o posix.o print.o \ + simple.o sort.o state.o) + LIBBACKTRACE_H = $(addprefix $(LIBBACKTRACE_D)/, backtrace.h \ + backtrace-supported.h config.h filenames.h internal.h) +else + LIBBACKTRACE_D = + LIBBACKTRACE_OBJ = + LIBBACKTRACE_H = +endif MT19937AR_D = $(THIRDPARTY_D)/mt19937ar MT19937AR_OBJ = $(MT19937AR_D)/mt19937ar.o diff --git a/src/common/Makefile.in b/src/common/Makefile.in index 97ba34775..22b974cfd 100644 --- a/src/common/Makefile.in +++ b/src/common/Makefile.in @@ -33,12 +33,18 @@ LIBCONFIG_OBJ = $(addprefix $(LIBCONFIG_D)/, libconfig.o grammar.o scanctx.o \ LIBCONFIG_H = $(addprefix $(LIBCONFIG_D)/, libconfig.h grammar.h parsectx.h \ scanctx.h scanner.h strbuf.h wincompat.h) -LIBBACKTRACE_D = $(THIRDPARTY_D)/libbacktrace -LIBBACKTRACE_OBJ = $(addprefix $(LIBBACKTRACE_D)/, atomic.o backtrace.o \ - dwarf.o @LIBBACKTRACE_FORMAT_FILE@ fileline.o mmapio.o mmap.o posix.o print.o \ - simple.o sort.o state.o) -LIBBACKTRACE_H = $(addprefix $(LIBBACKTRACE_D)/, backtrace.h \ - backtrace-supported.h config.h filenames.h internal.h) +ifeq (@USE_LIBBACKTRACE@,yes) + LIBBACKTRACE_D = $(THIRDPARTY_D)/libbacktrace + LIBBACKTRACE_OBJ = $(addprefix $(LIBBACKTRACE_D)/, atomic.o backtrace.o \ + dwarf.o @LIBBACKTRACE_FORMAT_FILE@ fileline.o mmapio.o mmap.o posix.o print.o \ + simple.o sort.o state.o) + LIBBACKTRACE_H = $(addprefix $(LIBBACKTRACE_D)/, backtrace.h \ + backtrace-supported.h config.h filenames.h internal.h) +else + LIBBACKTRACE_D = + LIBBACKTRACE_OBJ = + LIBBACKTRACE_H = +endif MT19937AR_D = $(THIRDPARTY_D)/mt19937ar MT19937AR_OBJ = $(MT19937AR_D)/mt19937ar.o diff --git a/src/login/Makefile.in b/src/login/Makefile.in index 4f180070c..7252eea04 100644 --- a/src/login/Makefile.in +++ b/src/login/Makefile.in @@ -36,12 +36,18 @@ LIBCONFIG_OBJ = $(addprefix $(LIBCONFIG_D)/, libconfig.o grammar.o scanctx.o \ LIBCONFIG_H = $(addprefix $(LIBCONFIG_D)/, libconfig.h grammar.h parsectx.h \ scanctx.h scanner.h strbuf.h wincompat.h) -LIBBACKTRACE_D = $(THIRDPARTY_D)/libbacktrace -LIBBACKTRACE_OBJ = $(addprefix $(LIBBACKTRACE_D)/, atomic.o backtrace.o \ - dwarf.o @LIBBACKTRACE_FORMAT_FILE@ fileline.o mmapio.o mmap.o posix.o print.o \ - simple.o sort.o state.o) -LIBBACKTRACE_H = $(addprefix $(LIBBACKTRACE_D)/, backtrace.h \ - backtrace-supported.h config.h filenames.h internal.h) +ifeq (@USE_LIBBACKTRACE@,yes) + LIBBACKTRACE_D = $(THIRDPARTY_D)/libbacktrace + LIBBACKTRACE_OBJ = $(addprefix $(LIBBACKTRACE_D)/, atomic.o backtrace.o \ + dwarf.o @LIBBACKTRACE_FORMAT_FILE@ fileline.o mmapio.o mmap.o posix.o print.o \ + simple.o sort.o state.o) + LIBBACKTRACE_H = $(addprefix $(LIBBACKTRACE_D)/, backtrace.h \ + backtrace-supported.h config.h filenames.h internal.h) +else + LIBBACKTRACE_D = + LIBBACKTRACE_OBJ = + LIBBACKTRACE_H = +endif MT19937AR_D = $(THIRDPARTY_D)/mt19937ar MT19937AR_OBJ = $(MT19937AR_D)/mt19937ar.o diff --git a/src/map/Makefile.in b/src/map/Makefile.in index 2b050e99c..75093662f 100644 --- a/src/map/Makefile.in +++ b/src/map/Makefile.in @@ -36,12 +36,18 @@ LIBCONFIG_OBJ = $(addprefix $(LIBCONFIG_D)/, libconfig.o grammar.o scanctx.o \ LIBCONFIG_H = $(addprefix $(LIBCONFIG_D)/, libconfig.h grammar.h parsectx.h \ scanctx.h scanner.h strbuf.h wincompat.h) -LIBBACKTRACE_D = $(THIRDPARTY_D)/libbacktrace -LIBBACKTRACE_OBJ = $(addprefix $(LIBBACKTRACE_D)/, atomic.o backtrace.o \ - dwarf.o @LIBBACKTRACE_FORMAT_FILE@ fileline.o mmapio.o mmap.o posix.o print.o \ - simple.o sort.o state.o) -LIBBACKTRACE_H = $(addprefix $(LIBBACKTRACE_D)/, backtrace.h \ - backtrace-supported.h config.h filenames.h internal.h) +ifeq (@USE_LIBBACKTRACE@,yes) + LIBBACKTRACE_D = $(THIRDPARTY_D)/libbacktrace + LIBBACKTRACE_OBJ = $(addprefix $(LIBBACKTRACE_D)/, atomic.o backtrace.o \ + dwarf.o @LIBBACKTRACE_FORMAT_FILE@ fileline.o mmapio.o mmap.o posix.o print.o \ + simple.o sort.o state.o) + LIBBACKTRACE_H = $(addprefix $(LIBBACKTRACE_D)/, backtrace.h \ + backtrace-supported.h config.h filenames.h internal.h) +else + LIBBACKTRACE_D = + LIBBACKTRACE_OBJ = + LIBBACKTRACE_H = +endif MT19937AR_D = $(THIRDPARTY_D)/mt19937ar MT19937AR_OBJ = $(MT19937AR_D)/mt19937ar.o diff --git a/src/test/Makefile.in b/src/test/Makefile.in index 967d7dcfc..91263c939 100644 --- a/src/test/Makefile.in +++ b/src/test/Makefile.in @@ -36,12 +36,18 @@ LIBCONFIG_OBJ = $(addprefix $(LIBCONFIG_D)/, libconfig.o grammar.o scanctx.o \ LIBCONFIG_H = $(addprefix $(LIBCONFIG_D)/, libconfig.h grammar.h parsectx.h \ scanctx.h scanner.h strbuf.h wincompat.h) -LIBBACKTRACE_D = $(THIRDPARTY_D)/libbacktrace -LIBBACKTRACE_OBJ = $(addprefix $(LIBBACKTRACE_D)/, atomic.o backtrace.o \ - dwarf.o @LIBBACKTRACE_FORMAT_FILE@ fileline.o mmapio.o mmap.o posix.o print.o \ - simple.o sort.o state.o) -LIBBACKTRACE_H = $(addprefix $(LIBBACKTRACE_D)/, backtrace.h \ - backtrace-supported.h config.h filenames.h internal.h) +ifeq (@USE_LIBBACKTRACE@,yes) + LIBBACKTRACE_D = $(THIRDPARTY_D)/libbacktrace + LIBBACKTRACE_OBJ = $(addprefix $(LIBBACKTRACE_D)/, atomic.o backtrace.o \ + dwarf.o @LIBBACKTRACE_FORMAT_FILE@ fileline.o mmapio.o mmap.o posix.o print.o \ + simple.o sort.o state.o) + LIBBACKTRACE_H = $(addprefix $(LIBBACKTRACE_D)/, backtrace.h \ + backtrace-supported.h config.h filenames.h internal.h) +else + LIBBACKTRACE_D = + LIBBACKTRACE_OBJ = + LIBBACKTRACE_H = +endif MT19937AR_D = $(THIRDPARTY_D)/mt19937ar MT19937AR_OBJ = $(MT19937AR_D)/mt19937ar.o -- cgit v1.2.3-70-g09d2