From 870bfecfe6ef8214487dd5c5b016d6f5235659d0 Mon Sep 17 00:00:00 2001 From: kpfleming Date: Wed, 18 Mar 2009 02:21:23 +0000 Subject: [PATCH] Merged revisions 182808 via svnmerge from https://origsvn.digium.com/svn/asterisk/branches/1.4 ........ r182808 | kpfleming | 2009-03-17 20:55:22 -0500 (Tue, 17 Mar 2009) | 5 lines Improve the build system to *properly* remove unnecessary symbols from the runtime global namespace. Along the way, change the prefixes on some internal-only API calls to use a common prefix. With these changes, for a module to export symbols into the global namespace, it must have *both* the AST_MODFLAG_GLOBAL_SYMBOLS flag and a linker script that allows the linker to leave the symbols exposed in the module's .so file (see res_odbc.exports for an example). ........ git-svn-id: http://svn.digium.com/svn/asterisk/trunk@182826 f38db490-d61c-443f-a65b-d21fe96a405b --- Makefile.rules | 9 +- build_tools/strip_nonapi | 38 --------- default.exports | 4 + include/asterisk/astobj2.h | 120 +++++++++++++-------------- main/Makefile | 13 +-- main/asterisk.exports | 28 +++++++ main/astobj2.c | 165 ++++++++++++++++++------------------- makeopts.in | 2 + res/res_adsi.exports | 33 ++++++++ res/res_agi.exports | 7 ++ res/res_config_odbc.c | 2 +- res/res_config_pgsql.c | 2 +- res/res_features.exports | 13 +++ res/res_jabber.exports | 13 +++ res/res_monitor.exports | 11 +++ res/res_odbc.exports | 11 +++ res/res_smdi.exports | 18 ++++ res/res_snmp.c | 2 +- res/res_speech.exports | 21 +++++ 19 files changed, 321 insertions(+), 191 deletions(-) delete mode 100755 build_tools/strip_nonapi create mode 100644 default.exports create mode 100644 main/asterisk.exports create mode 100644 res/res_adsi.exports create mode 100644 res/res_agi.exports create mode 100644 res/res_features.exports create mode 100644 res/res_jabber.exports create mode 100644 res/res_monitor.exports create mode 100644 res/res_odbc.exports create mode 100644 res/res_smdi.exports create mode 100644 res/res_speech.exports diff --git a/Makefile.rules b/Makefile.rules index db44a876b..65eb62f8d 100644 --- a/Makefile.rules +++ b/Makefile.rules @@ -51,8 +51,13 @@ endif # per-target settings will be applied CC_CFLAGS=$(PTHREAD_CFLAGS) $(ASTCFLAGS) CXX_CFLAGS=$(PTHREAD_CFLAGS) $(filter-out -Wstrict-prototypes -Wmissing-prototypes -Wmissing-declarations $(AST_DECLARATION_AFTER_STATEMENT),$(ASTCFLAGS)) -CC_LDFLAGS_SO=$(PTHREAD_CFLAGS) $(ASTLDFLAGS) $(SOLINK) -CXX_LDFLAGS_SO=$(PTHREAD_CFLAGS) $(ASTLDFLAGS) $(SOLINK) + +ifeq ($(GNU_LD),1) +SO_SUPPRESS_SYMBOLS=-Wl,--version-script,$(if $(wildcard $(subst .so,.exports,$@)),$(subst .so,.exports,$@),$(ASTTOPDIR)/default.exports) +endif + +CC_LDFLAGS_SO=$(PTHREAD_CFLAGS) $(ASTLDFLAGS) $(SOLINK) $(SO_SUPPRESS_SYMBOLS) +CXX_LDFLAGS_SO=$(PTHREAD_CFLAGS) $(ASTLDFLAGS) $(SOLINK) $(SO_SUPPRESS_SYMBOLS) CC_LIBS=$(PTHREAD_LIBS) $(LIBS) CXX_LIBS=$(PTHREAD_LIBS) $(LIBS) diff --git a/build_tools/strip_nonapi b/build_tools/strip_nonapi deleted file mode 100755 index 17492e6f8..000000000 --- a/build_tools/strip_nonapi +++ /dev/null @@ -1,38 +0,0 @@ -#!/bin/sh -e - -# This script is designed to remove all non-API global symbols from an object -# file. The only global symbols that should be retained are those that belong -# to the official namespace. Unfortunately doing this is platform-specific, as -# the object file manipulation tools are not consistent across platforms. -# -# On platforms where this script does not know what to do, the object file -# will retain non-API global symbols, and this may have unpleasant side effects. -# -# Prefixes that belong to the official namespace are: -# ast_ -# _ast_ -# __ast_ -# astman_ -# pbx_ -# resample_ - -FILTER="${GREP} -v -e ^ast_ -e ^_ast_ -e ^__ast_ -e ^astman_ -e ^pbx_ -e ^resample_" - -case "${PROC}" in - powerpc64) - TEXTSYM=" D " - ;; - *) - TEXTSYM=" T " - ;; -esac - -case "${OSARCH}" in - linux-gnu|FreeBSD) - nm ${1} | ${GREP} -e "$TEXTSYM" | cut -d" " -f3 | ${FILTER} > striplist - sed -e "s/^/-N /" striplist | xargs -n 40 ${STRIP} ${1} - rm -f striplist - ;; - *) - ;; -esac diff --git a/default.exports b/default.exports new file mode 100644 index 000000000..5e767549c --- /dev/null +++ b/default.exports @@ -0,0 +1,4 @@ +{ + local: + *; +}; diff --git a/include/asterisk/astobj2.h b/include/asterisk/astobj2.h index c8a464ed7..fa6b67cc5 100644 --- a/include/asterisk/astobj2.h +++ b/include/asterisk/astobj2.h @@ -402,17 +402,17 @@ typedef void (*ao2_destructor_fn)(void *); #ifdef REF_DEBUG -#define ao2_t_alloc(arg1, arg2, arg3) _ao2_alloc_debug((arg1), (arg2), (arg3), __FILE__, __LINE__, __PRETTY_FUNCTION__) -#define ao2_alloc(arg1, arg2) _ao2_alloc_debug((arg1), (arg2), "", __FILE__, __LINE__, __PRETTY_FUNCTION__) +#define ao2_t_alloc(arg1, arg2, arg3) __ao2_alloc_debug((arg1), (arg2), (arg3), __FILE__, __LINE__, __PRETTY_FUNCTION__) +#define ao2_alloc(arg1, arg2) __ao2_alloc_debug((arg1), (arg2), "", __FILE__, __LINE__, __PRETTY_FUNCTION__) #else -#define ao2_t_alloc(arg1,arg2,arg3) _ao2_alloc((arg1), (arg2)) -#define ao2_alloc(arg1,arg2) _ao2_alloc((arg1), (arg2)) +#define ao2_t_alloc(arg1,arg2,arg3) __ao2_alloc((arg1), (arg2)) +#define ao2_alloc(arg1,arg2) __ao2_alloc((arg1), (arg2)) #endif -void *_ao2_alloc_debug(const size_t data_size, ao2_destructor_fn destructor_fn, char *tag, char *file, int line, const char *funcname); -void *_ao2_alloc(const size_t data_size, ao2_destructor_fn destructor_fn); +void *__ao2_alloc_debug(const size_t data_size, ao2_destructor_fn destructor_fn, char *tag, char *file, int line, const char *funcname); +void *__ao2_alloc(const size_t data_size, ao2_destructor_fn destructor_fn); /*! \brief @@ -437,14 +437,14 @@ void *_ao2_alloc(const size_t data_size, ao2_destructor_fn destructor_fn); */ #ifdef REF_DEBUG -#define ao2_t_ref(arg1,arg2,arg3) _ao2_ref_debug((arg1), (arg2), (arg3), __FILE__, __LINE__, __PRETTY_FUNCTION__) -#define ao2_ref(arg1,arg2) _ao2_ref_debug((arg1), (arg2), "", __FILE__, __LINE__, __PRETTY_FUNCTION__) +#define ao2_t_ref(arg1,arg2,arg3) __ao2_ref_debug((arg1), (arg2), (arg3), __FILE__, __LINE__, __PRETTY_FUNCTION__) +#define ao2_ref(arg1,arg2) __ao2_ref_debug((arg1), (arg2), "", __FILE__, __LINE__, __PRETTY_FUNCTION__) #else -#define ao2_t_ref(arg1,arg2,arg3) _ao2_ref((arg1), (arg2)) -#define ao2_ref(arg1,arg2) _ao2_ref((arg1), (arg2)) +#define ao2_t_ref(arg1,arg2,arg3) __ao2_ref((arg1), (arg2)) +#define ao2_ref(arg1,arg2) __ao2_ref((arg1), (arg2)) #endif -int _ao2_ref_debug(void *o, int delta, char *tag, char *file, int line, const char *funcname); -int _ao2_ref(void *o, int delta); +int __ao2_ref_debug(void *o, int delta, char *tag, char *file, int line, const char *funcname); +int __ao2_ref(void *o, int delta); /*! \brief * Lock an object. @@ -455,8 +455,8 @@ int _ao2_ref(void *o, int delta); #ifndef DEBUG_THREADS int ao2_lock(void *a); #else -#define ao2_lock(a) _ao2_lock(a, __FILE__, __PRETTY_FUNCTION__, __LINE__, #a) -int _ao2_lock(void *a, const char *file, const char *func, int line, const char *var); +#define ao2_lock(a) __ao2_lock(a, __FILE__, __PRETTY_FUNCTION__, __LINE__, #a) +int __ao2_lock(void *a, const char *file, const char *func, int line, const char *var); #endif /*! \brief @@ -468,8 +468,8 @@ int _ao2_lock(void *a, const char *file, const char *func, int line, const char #ifndef DEBUG_THREADS int ao2_unlock(void *a); #else -#define ao2_unlock(a) _ao2_unlock(a, __FILE__, __PRETTY_FUNCTION__, __LINE__, #a) -int _ao2_unlock(void *a, const char *file, const char *func, int line, const char *var); +#define ao2_unlock(a) __ao2_unlock(a, __FILE__, __PRETTY_FUNCTION__, __LINE__, #a) +int __ao2_unlock(void *a, const char *file, const char *func, int line, const char *var); #endif /*! \brief @@ -481,8 +481,8 @@ int _ao2_unlock(void *a, const char *file, const char *func, int line, const cha #ifndef DEBUG_THREADS int ao2_trylock(void *a); #else -#define ao2_trylock(a) _ao2_trylock(a, __FILE__, __PRETTY_FUNCTION__, __LINE__, #a) -int _ao2_trylock(void *a, const char *file, const char *func, int line, const char *var); +#define ao2_trylock(a) __ao2_trylock(a, __FILE__, __PRETTY_FUNCTION__, __LINE__, #a) +int __ao2_trylock(void *a, const char *file, const char *func, int line, const char *var); #endif /*! @@ -686,15 +686,15 @@ struct ao2_container; */ #ifdef REF_DEBUG -#define ao2_t_container_alloc(arg1,arg2,arg3,arg4) _ao2_container_alloc_debug((arg1), (arg2), (arg3), (arg4), __FILE__, __LINE__, __PRETTY_FUNCTION__) -#define ao2_container_alloc(arg1,arg2,arg3) _ao2_container_alloc_debug((arg1), (arg2), (arg3), "", __FILE__, __LINE__, __PRETTY_FUNCTION__) +#define ao2_t_container_alloc(arg1,arg2,arg3,arg4) __ao2_container_alloc_debug((arg1), (arg2), (arg3), (arg4), __FILE__, __LINE__, __PRETTY_FUNCTION__) +#define ao2_container_alloc(arg1,arg2,arg3) __ao2_container_alloc_debug((arg1), (arg2), (arg3), "", __FILE__, __LINE__, __PRETTY_FUNCTION__) #else -#define ao2_t_container_alloc(arg1,arg2,arg3,arg4) _ao2_container_alloc((arg1), (arg2), (arg3)) -#define ao2_container_alloc(arg1,arg2,arg3) _ao2_container_alloc((arg1), (arg2), (arg3)) +#define ao2_t_container_alloc(arg1,arg2,arg3,arg4) __ao2_container_alloc((arg1), (arg2), (arg3)) +#define ao2_container_alloc(arg1,arg2,arg3) __ao2_container_alloc((arg1), (arg2), (arg3)) #endif -struct ao2_container *_ao2_container_alloc(const unsigned int n_buckets, +struct ao2_container *__ao2_container_alloc(const unsigned int n_buckets, ao2_hash_fn *hash_fn, ao2_callback_fn *cmp_fn); -struct ao2_container *_ao2_container_alloc_debug(const unsigned int n_buckets, +struct ao2_container *__ao2_container_alloc_debug(const unsigned int n_buckets, ao2_hash_fn *hash_fn, ao2_callback_fn *cmp_fn, char *tag, char *file, int line, const char *funcname); @@ -730,14 +730,14 @@ int ao2_container_count(struct ao2_container *c); */ #ifdef REF_DEBUG -#define ao2_t_link(arg1, arg2, arg3) _ao2_link_debug((arg1), (arg2), (arg3), __FILE__, __LINE__, __PRETTY_FUNCTION__) -#define ao2_link(arg1, arg2) _ao2_link_debug((arg1), (arg2), "", __FILE__, __LINE__, __PRETTY_FUNCTION__) +#define ao2_t_link(arg1, arg2, arg3) __ao2_link_debug((arg1), (arg2), (arg3), __FILE__, __LINE__, __PRETTY_FUNCTION__) +#define ao2_link(arg1, arg2) __ao2_link_debug((arg1), (arg2), "", __FILE__, __LINE__, __PRETTY_FUNCTION__) #else -#define ao2_t_link(arg1, arg2, arg3) _ao2_link((arg1), (arg2)) -#define ao2_link(arg1, arg2) _ao2_link((arg1), (arg2)) +#define ao2_t_link(arg1, arg2, arg3) __ao2_link((arg1), (arg2)) +#define ao2_link(arg1, arg2) __ao2_link((arg1), (arg2)) #endif -void *_ao2_link_debug(struct ao2_container *c, void *new_obj, char *tag, char *file, int line, const char *funcname); -void *_ao2_link(struct ao2_container *c, void *newobj); +void *__ao2_link_debug(struct ao2_container *c, void *new_obj, char *tag, char *file, int line, const char *funcname); +void *__ao2_link(struct ao2_container *c, void *newobj); /*! * \brief Remove an object from the container @@ -756,14 +756,14 @@ void *_ao2_link(struct ao2_container *c, void *newobj); * refcount will be decremented). */ #ifdef REF_DEBUG -#define ao2_t_unlink(arg1, arg2, arg3) _ao2_unlink_debug((arg1), (arg2), (arg3), __FILE__, __LINE__, __PRETTY_FUNCTION__) -#define ao2_unlink(arg1, arg2) _ao2_unlink_debug((arg1), (arg2), "", __FILE__, __LINE__, __PRETTY_FUNCTION__) +#define ao2_t_unlink(arg1, arg2, arg3) __ao2_unlink_debug((arg1), (arg2), (arg3), __FILE__, __LINE__, __PRETTY_FUNCTION__) +#define ao2_unlink(arg1, arg2) __ao2_unlink_debug((arg1), (arg2), "", __FILE__, __LINE__, __PRETTY_FUNCTION__) #else -#define ao2_t_unlink(arg1, arg2, arg3) _ao2_unlink((arg1), (arg2)) -#define ao2_unlink(arg1, arg2) _ao2_unlink((arg1), (arg2)) +#define ao2_t_unlink(arg1, arg2, arg3) __ao2_unlink((arg1), (arg2)) +#define ao2_unlink(arg1, arg2) __ao2_unlink((arg1), (arg2)) #endif -void *_ao2_unlink_debug(struct ao2_container *c, void *obj, char *tag, char *file, int line, const char *funcname); -void *_ao2_unlink(struct ao2_container *c, void *obj); +void *__ao2_unlink_debug(struct ao2_container *c, void *obj, char *tag, char *file, int line, const char *funcname); +void *__ao2_unlink(struct ao2_container *c, void *obj); /*! \brief Used as return value if the flag OBJ_MULTIPLE is set */ @@ -851,16 +851,16 @@ struct ao2_list { * be used to free the additional reference possibly created by this function. */ #ifdef REF_DEBUG -#define ao2_t_callback(arg1,arg2,arg3,arg4,arg5) _ao2_callback_debug((arg1), (arg2), (arg3), (arg4), (arg5), __FILE__, __LINE__, __PRETTY_FUNCTION__) -#define ao2_callback(arg1,arg2,arg3,arg4) _ao2_callback_debug((arg1), (arg2), (arg3), (arg4), "", __FILE__, __LINE__, __PRETTY_FUNCTION__) +#define ao2_t_callback(arg1,arg2,arg3,arg4,arg5) __ao2_callback_debug((arg1), (arg2), (arg3), (arg4), (arg5), __FILE__, __LINE__, __PRETTY_FUNCTION__) +#define ao2_callback(arg1,arg2,arg3,arg4) __ao2_callback_debug((arg1), (arg2), (arg3), (arg4), "", __FILE__, __LINE__, __PRETTY_FUNCTION__) #else -#define ao2_t_callback(arg1,arg2,arg3,arg4,arg5) _ao2_callback((arg1), (arg2), (arg3), (arg4)) -#define ao2_callback(arg1,arg2,arg3,arg4) _ao2_callback((arg1), (arg2), (arg3), (arg4)) +#define ao2_t_callback(arg1,arg2,arg3,arg4,arg5) __ao2_callback((arg1), (arg2), (arg3), (arg4)) +#define ao2_callback(arg1,arg2,arg3,arg4) __ao2_callback((arg1), (arg2), (arg3), (arg4)) #endif -void *_ao2_callback_debug(struct ao2_container *c, enum search_flags flags, +void *__ao2_callback_debug(struct ao2_container *c, enum search_flags flags, ao2_callback_fn *cb_fn, void *arg, char *tag, char *file, int line, const char *funcname); -void *_ao2_callback(struct ao2_container *c, +void *__ao2_callback(struct ao2_container *c, enum search_flags flags, ao2_callback_fn *cb_fn, void *arg); @@ -880,16 +880,16 @@ void *_ao2_callback(struct ao2_container *c, * \see ao2_callback() */ #ifdef REF_DEBUG -#define ao2_t_callback_data(arg1,arg2,arg3,arg4,arg5,arg6) _ao2_callback_data_debug((arg1), (arg2), (arg3), (arg4), (arg5), (arg6), __FILE__, __LINE__, __PRETTY_FUNCTION__) -#define ao2_callback_data(arg1,arg2,arg3,arg4,arg5) _ao2_callback_data_debug((arg1), (arg2), (arg3), (arg4), (arg5), "", __FILE__, __LINE__, __PRETTY_FUNCTION__) +#define ao2_t_callback_data(arg1,arg2,arg3,arg4,arg5,arg6) __ao2_callback_data_debug((arg1), (arg2), (arg3), (arg4), (arg5), (arg6), __FILE__, __LINE__, __PRETTY_FUNCTION__) +#define ao2_callback_data(arg1,arg2,arg3,arg4,arg5) __ao2_callback_data_debug((arg1), (arg2), (arg3), (arg4), (arg5), "", __FILE__, __LINE__, __PRETTY_FUNCTION__) #else -#define ao2_t_callback_data(arg1,arg2,arg3,arg4,arg5,arg6) _ao2_callback_data((arg1), (arg2), (arg3), (arg4), (arg5)) -#define ao2_callback_data(arg1,arg2,arg3,arg4,arg5) _ao2_callback_data((arg1), (arg2), (arg3), (arg4), (arg5)) +#define ao2_t_callback_data(arg1,arg2,arg3,arg4,arg5,arg6) __ao2_callback_data((arg1), (arg2), (arg3), (arg4), (arg5)) +#define ao2_callback_data(arg1,arg2,arg3,arg4,arg5) __ao2_callback_data((arg1), (arg2), (arg3), (arg4), (arg5)) #endif -void *_ao2_callback_data_debug(struct ao2_container *c, enum search_flags flags, +void *__ao2_callback_data_debug(struct ao2_container *c, enum search_flags flags, ao2_callback_data_fn *cb_fn, void *arg, void *data, char *tag, char *file, int line, const char *funcname); -void *_ao2_callback_data(struct ao2_container *c, +void *__ao2_callback_data(struct ao2_container *c, enum search_flags flags, ao2_callback_data_fn *cb_fn, void *arg, void *data); @@ -897,14 +897,14 @@ void *_ao2_callback_data(struct ao2_container *c, * XXX possibly change order of arguments ? */ #ifdef REF_DEBUG -#define ao2_t_find(arg1,arg2,arg3,arg4) _ao2_find_debug((arg1), (arg2), (arg3), (arg4), __FILE__, __LINE__, __PRETTY_FUNCTION__) -#define ao2_find(arg1,arg2,arg3) _ao2_find_debug((arg1), (arg2), (arg3), "", __FILE__, __LINE__, __PRETTY_FUNCTION__) +#define ao2_t_find(arg1,arg2,arg3,arg4) __ao2_find_debug((arg1), (arg2), (arg3), (arg4), __FILE__, __LINE__, __PRETTY_FUNCTION__) +#define ao2_find(arg1,arg2,arg3) __ao2_find_debug((arg1), (arg2), (arg3), "", __FILE__, __LINE__, __PRETTY_FUNCTION__) #else -#define ao2_t_find(arg1,arg2,arg3,arg4) _ao2_find((arg1), (arg2), (arg3)) -#define ao2_find(arg1,arg2,arg3) _ao2_find((arg1), (arg2), (arg3)) +#define ao2_t_find(arg1,arg2,arg3,arg4) __ao2_find((arg1), (arg2), (arg3)) +#define ao2_find(arg1,arg2,arg3) __ao2_find((arg1), (arg2), (arg3)) #endif -void *_ao2_find_debug(struct ao2_container *c, void *arg, enum search_flags flags, char *tag, char *file, int line, const char *funcname); -void *_ao2_find(struct ao2_container *c, void *arg, enum search_flags flags); +void *__ao2_find_debug(struct ao2_container *c, void *arg, enum search_flags flags, char *tag, char *file, int line, const char *funcname); +void *__ao2_find(struct ao2_container *c, void *arg, enum search_flags flags); /*! \brief * @@ -1003,14 +1003,14 @@ struct ao2_iterator { struct ao2_iterator ao2_iterator_init(struct ao2_container *c, int flags); #ifdef REF_DEBUG -#define ao2_t_iterator_next(arg1, arg2) _ao2_iterator_next_debug((arg1), (arg2), __FILE__, __LINE__, __PRETTY_FUNCTION__) -#define ao2_iterator_next(arg1) _ao2_iterator_next_debug((arg1), "", __FILE__, __LINE__, __PRETTY_FUNCTION__) +#define ao2_t_iterator_next(arg1, arg2) __ao2_iterator_next_debug((arg1), (arg2), __FILE__, __LINE__, __PRETTY_FUNCTION__) +#define ao2_iterator_next(arg1) __ao2_iterator_next_debug((arg1), "", __FILE__, __LINE__, __PRETTY_FUNCTION__) #else -#define ao2_t_iterator_next(arg1, arg2) _ao2_iterator_next((arg1)) -#define ao2_iterator_next(arg1) _ao2_iterator_next((arg1)) +#define ao2_t_iterator_next(arg1, arg2) __ao2_iterator_next((arg1)) +#define ao2_iterator_next(arg1) __ao2_iterator_next((arg1)) #endif -void *_ao2_iterator_next_debug(struct ao2_iterator *a, char *tag, char *file, int line, const char *funcname); -void *_ao2_iterator_next(struct ao2_iterator *a); +void *__ao2_iterator_next_debug(struct ao2_iterator *a, char *tag, char *file, int line, const char *funcname); +void *__ao2_iterator_next(struct ao2_iterator *a); /* extra functions */ void ao2_bt(void); /* backtrace */ diff --git a/main/Makefile b/main/Makefile index aec3d7ed6..eee481c14 100644 --- a/main/Makefile +++ b/main/Makefile @@ -111,6 +111,10 @@ ifneq ($(findstring USE_HOARD_ALLOCATOR,$(MENUSELECT_CFLAGS)),) endif endif +ifeq ($(GNU_LD),1) +ASTLINK+=-Wl,--version-script,asterisk.exports +endif + CHECK_SUBDIR: # do nothing, just make sure that we recurse in the subdir/ editline/libedit.a: CHECK_SUBDIR @@ -171,15 +175,14 @@ ifneq ($(findstring ENABLE_UPLOADS,$(MENUSELECT_CFLAGS)),) GMIMELDFLAGS+=$(GMIME_LIB) endif -$(MAIN_TGT): $(OBJS) editline/libedit.a db1-ast/libdb1.a $(AST_EMBED_LDSCRIPTS) +$(MAIN_TGT): $(OBJS) editline/libedit.a db1-ast/libdb1.a $(AST_EMBED_LDSCRIPTS) asterisk.exports @$(CC) -c -o buildinfo.o $(ASTCFLAGS) buildinfo.c - $(ECHO_PREFIX) echo " [LD] $^ -> $@" + $(ECHO_PREFIX) echo " [LD] $(OBJS) editline/libedit.a db1-ast/libdb1.a $(AST_EMBED_LDSCRIPTS) -> $@" ifneq ($(findstring chan_h323,$(MENUSELECT_CHANNELS)),) - $(CMD_PREFIX) $(CC) $(STATIC_BUILD) -o $@ $(ASTLINK) $(AST_EMBED_LDFLAGS) $(ASTLDFLAGS) $^ buildinfo.o $(AST_LIBS) $(AST_EMBED_LIBS) $(GMIMELDFLAGS) + $(CMD_PREFIX) $(CC) $(STATIC_BUILD) -o $@ $(ASTLINK) $(AST_EMBED_LDFLAGS) $(ASTLDFLAGS) $(OBJS) editline/libedit.a db1-ast/libdb1.a $(AST_EMBED_LDSCRIPTS) buildinfo.o $(AST_LIBS) $(AST_EMBED_LIBS) $(GMIMELDFLAGS) else - $(CMD_PREFIX) $(CXX) $(STATIC_BUILD) -o $@ $(ASTLINK) $(AST_EMBED_LDFLAGS) $(ASTLDFLAGS) $(H323LDFLAGS) $^ buildinfo.o $(AST_LIBS) $(AST_EMBED_LIBS) $(H323LDLIBS) $(GMIMELDFLAGS) + $(CMD_PREFIX) $(CXX) $(STATIC_BUILD) -o $@ $(ASTLINK) $(AST_EMBED_LDFLAGS) $(ASTLDFLAGS) $(H323LDFLAGS) $(OBJS) editline/libedit.a db1-ast/libdb1.a $(AST_EMBED_LDSCRIPTS) buildinfo.o $(AST_LIBS) $(AST_EMBED_LIBS) $(H323LDLIBS) $(GMIMELDFLAGS) endif - $(CMD_PREFIX) $(ASTTOPDIR)/build_tools/strip_nonapi $@ || rm $@ clean:: rm -f asterisk diff --git a/main/asterisk.exports b/main/asterisk.exports new file mode 100644 index 000000000..f18c0fff0 --- /dev/null +++ b/main/asterisk.exports @@ -0,0 +1,28 @@ +{ + global: + ast_*; + _ast_*; + __ast_*; + pbx_*; + astman_*; + ao2_*; + __ao2_*; + option_debug; + option_verbose; + dahdi_chan_name; + dahdi_chan_name_len; + dahdi_chan_mode; + cid_di; + cid_dr; + clidsb; + MD5*; + sched_*; + io_*; + jb_*; + channelreloadreason2txt; + devstate2str; + manager_event; + dialed_interface_info; + local: + *; +}; diff --git a/main/astobj2.c b/main/astobj2.c index 7dd4c7ec1..36d943843 100644 --- a/main/astobj2.c +++ b/main/astobj2.c @@ -134,20 +134,20 @@ enum ao2_callback_type { /* the underlying functions common to debug and non-debug versions */ -static int __ao2_ref(void *user_data, const int delta); -static void *__ao2_alloc(size_t data_size, ao2_destructor_fn destructor_fn); -static struct ao2_container *__ao2_container_alloc(struct ao2_container *c, const uint n_buckets, ao2_hash_fn *hash_fn, - ao2_callback_fn *cmp_fn); -static struct bucket_list *__ao2_link(struct ao2_container *c, void *user_data, const char *file, int line, const char *func); -static void *__ao2_callback(struct ao2_container *c, - const enum search_flags flags, void *cb_fn, void *arg, void *data, enum ao2_callback_type type, - char *tag, char *file, int line, const char *funcname); -static void * __ao2_iterator_next(struct ao2_iterator *a, struct bucket_list **q); +static int internal_ao2_ref(void *user_data, const int delta); +static void *internal_ao2_alloc(size_t data_size, ao2_destructor_fn destructor_fn); +static struct ao2_container *internal_ao2_container_alloc(struct ao2_container *c, const uint n_buckets, ao2_hash_fn *hash_fn, + ao2_callback_fn *cmp_fn); +static struct bucket_list *internal_ao2_link(struct ao2_container *c, void *user_data, const char *file, int line, const char *func); +static void *internal_ao2_callback(struct ao2_container *c, + const enum search_flags flags, void *cb_fn, void *arg, void *data, enum ao2_callback_type type, + char *tag, char *file, int line, const char *funcname); +static void *internal_ao2_iterator_next(struct ao2_iterator *a, struct bucket_list **q); #ifndef DEBUG_THREADS int ao2_lock(void *user_data) #else -int _ao2_lock(void *user_data, const char *file, const char *func, int line, const char *var) +int __ao2_lock(void *user_data, const char *file, const char *func, int line, const char *var) #endif { struct astobj2 *p = INTERNAL_OBJ(user_data); @@ -169,7 +169,7 @@ int _ao2_lock(void *user_data, const char *file, const char *func, int line, con #ifndef DEBUG_THREADS int ao2_unlock(void *user_data) #else -int _ao2_unlock(void *user_data, const char *file, const char *func, int line, const char *var) +int __ao2_unlock(void *user_data, const char *file, const char *func, int line, const char *var) #endif { struct astobj2 *p = INTERNAL_OBJ(user_data); @@ -191,7 +191,7 @@ int _ao2_unlock(void *user_data, const char *file, const char *func, int line, c #ifndef DEBUG_THREADS int ao2_trylock(void *user_data) #else -int _ao2_trylock(void *user_data, const char *file, const char *func, int line, const char *var) +int __ao2_trylock(void *user_data, const char *file, const char *func, int line, const char *var) #endif { struct astobj2 *p = INTERNAL_OBJ(user_data); @@ -227,7 +227,7 @@ void *ao2_object_get_lockaddr(void *obj) */ -int _ao2_ref_debug(void *user_data, const int delta, char *tag, char *file, int line, const char *funcname) +int __ao2_ref_debug(void *user_data, const int delta, char *tag, char *file, int line, const char *funcname) { struct astobj2 *obj = INTERNAL_OBJ(user_data); @@ -244,20 +244,20 @@ int _ao2_ref_debug(void *user_data, const int delta, char *tag, char *file, int fprintf(refo, "%p **call destructor** %s:%d:%s (%s)\n", user_data, file, line, funcname, tag); fclose(refo); } - return __ao2_ref(user_data, delta); + return internal_ao2_ref(user_data, delta); } -int _ao2_ref(void *user_data, const int delta) +int __ao2_ref(void *user_data, const int delta) { struct astobj2 *obj = INTERNAL_OBJ(user_data); if (obj == NULL) return -1; - return __ao2_ref(user_data, delta); + return internal_ao2_ref(user_data, delta); } -static int __ao2_ref(void *user_data, const int delta) +static int internal_ao2_ref(void *user_data, const int delta) { struct astobj2 *obj = INTERNAL_OBJ(user_data); int current_value; @@ -303,7 +303,7 @@ static int __ao2_ref(void *user_data, const int delta) * We always alloc at least the size of a void *, * for debugging purposes. */ -static void *__ao2_alloc(size_t data_size, ao2_destructor_fn destructor_fn) +static void *internal_ao2_alloc(size_t data_size, ao2_destructor_fn destructor_fn) { /* allocation */ struct astobj2 *obj; @@ -332,13 +332,13 @@ static void *__ao2_alloc(size_t data_size, ao2_destructor_fn destructor_fn) return EXTERNAL_OBJ(obj); } -void *_ao2_alloc_debug(size_t data_size, ao2_destructor_fn destructor_fn, char *tag, char *file, int line, const char *funcname) +void *__ao2_alloc_debug(size_t data_size, ao2_destructor_fn destructor_fn, char *tag, char *file, int line, const char *funcname) { /* allocation */ void *obj; FILE *refo = fopen(REF_FILE,"a"); - obj = __ao2_alloc(data_size, destructor_fn); + obj = internal_ao2_alloc(data_size, destructor_fn); if (obj == NULL) return NULL; @@ -352,9 +352,9 @@ void *_ao2_alloc_debug(size_t data_size, ao2_destructor_fn destructor_fn, char * return obj; } -void *_ao2_alloc(size_t data_size, ao2_destructor_fn destructor_fn) +void *__ao2_alloc(size_t data_size, ao2_destructor_fn destructor_fn) { - return __ao2_alloc(data_size, destructor_fn); + return internal_ao2_alloc(data_size, destructor_fn); } @@ -418,8 +418,8 @@ static int hash_zero(const void *user_obj, const int flags) /* * A container is just an object, after all! */ -static struct ao2_container *__ao2_container_alloc(struct ao2_container *c, const unsigned int n_buckets, ao2_hash_fn *hash_fn, - ao2_callback_fn *cmp_fn) +static struct ao2_container *internal_ao2_container_alloc(struct ao2_container *c, const unsigned int n_buckets, ao2_hash_fn *hash_fn, + ao2_callback_fn *cmp_fn) { /* XXX maybe consistency check on arguments ? */ /* compute the container size */ @@ -439,28 +439,27 @@ static struct ao2_container *__ao2_container_alloc(struct ao2_container *c, cons return c; } -struct ao2_container *_ao2_container_alloc_debug(const unsigned int n_buckets, ao2_hash_fn *hash_fn, - ao2_callback_fn *cmp_fn, char *tag, char *file, int line, const char *funcname) +struct ao2_container *__ao2_container_alloc_debug(const unsigned int n_buckets, ao2_hash_fn *hash_fn, + ao2_callback_fn *cmp_fn, char *tag, char *file, int line, const char *funcname) { /* XXX maybe consistency check on arguments ? */ /* compute the container size */ size_t container_size = sizeof(struct ao2_container) + n_buckets * sizeof(struct bucket); - struct ao2_container *c = _ao2_alloc_debug(container_size, container_destruct_debug, tag, file, line, funcname); + struct ao2_container *c = __ao2_alloc_debug(container_size, container_destruct_debug, tag, file, line, funcname); - return __ao2_container_alloc(c, n_buckets, hash_fn, cmp_fn); + return internal_ao2_container_alloc(c, n_buckets, hash_fn, cmp_fn); } -struct ao2_container * -_ao2_container_alloc(const unsigned int n_buckets, ao2_hash_fn *hash_fn, - ao2_callback_fn *cmp_fn) +struct ao2_container *__ao2_container_alloc(const unsigned int n_buckets, ao2_hash_fn *hash_fn, + ao2_callback_fn *cmp_fn) { /* XXX maybe consistency check on arguments ? */ /* compute the container size */ size_t container_size = sizeof(struct ao2_container) + n_buckets * sizeof(struct bucket); - struct ao2_container *c = _ao2_alloc(container_size, container_destruct); + struct ao2_container *c = __ao2_alloc(container_size, container_destruct); - return __ao2_container_alloc(c, n_buckets, hash_fn, cmp_fn); + return internal_ao2_container_alloc(c, n_buckets, hash_fn, cmp_fn); } /*! @@ -486,7 +485,7 @@ struct bucket_list { * link an object to a container */ -static struct bucket_list *__ao2_link(struct ao2_container *c, void *user_data, const char *file, int line, const char *func) +static struct bucket_list *internal_ao2_link(struct ao2_container *c, void *user_data, const char *file, int line, const char *func) { int i; /* create a new list entry */ @@ -516,23 +515,23 @@ static struct bucket_list *__ao2_link(struct ao2_container *c, void *user_data, return p; } -void *_ao2_link_debug(struct ao2_container *c, void *user_data, char *tag, char *file, int line, const char *funcname) +void *__ao2_link_debug(struct ao2_container *c, void *user_data, char *tag, char *file, int line, const char *funcname) { - struct bucket_list *p = __ao2_link(c, user_data, file, line, funcname); + struct bucket_list *p = internal_ao2_link(c, user_data, file, line, funcname); if (p) { - _ao2_ref_debug(user_data, +1, tag, file, line, funcname); + __ao2_ref_debug(user_data, +1, tag, file, line, funcname); ao2_unlock(c); } return p; } -void *_ao2_link(struct ao2_container *c, void *user_data) +void *__ao2_link(struct ao2_container *c, void *user_data) { - struct bucket_list *p = __ao2_link(c, user_data, __FILE__, __LINE__, __PRETTY_FUNCTION__); + struct bucket_list *p = internal_ao2_link(c, user_data, __FILE__, __LINE__, __PRETTY_FUNCTION__); if (p) { - _ao2_ref(user_data, +1); + __ao2_ref(user_data, +1); ao2_unlock(c); } return p; @@ -550,23 +549,23 @@ int ao2_match_by_addr(void *user_data, void *arg, int flags) * Unlink an object from the container * and destroy the associated * ao2_bucket_list structure. */ -void *_ao2_unlink_debug(struct ao2_container *c, void *user_data, char *tag, - char *file, int line, const char *funcname) +void *__ao2_unlink_debug(struct ao2_container *c, void *user_data, char *tag, + char *file, int line, const char *funcname) { if (INTERNAL_OBJ(user_data) == NULL) /* safety check on the argument */ return NULL; - _ao2_callback_debug(c, OBJ_UNLINK | OBJ_POINTER | OBJ_NODATA, ao2_match_by_addr, user_data, tag, file, line, funcname); + __ao2_callback_debug(c, OBJ_UNLINK | OBJ_POINTER | OBJ_NODATA, ao2_match_by_addr, user_data, tag, file, line, funcname); return NULL; } -void *_ao2_unlink(struct ao2_container *c, void *user_data) +void *__ao2_unlink(struct ao2_container *c, void *user_data) { if (INTERNAL_OBJ(user_data) == NULL) /* safety check on the argument */ return NULL; - _ao2_callback(c, OBJ_UNLINK | OBJ_POINTER | OBJ_NODATA, ao2_match_by_addr, user_data); + __ao2_callback(c, OBJ_UNLINK | OBJ_POINTER | OBJ_NODATA, ao2_match_by_addr, user_data); return NULL; } @@ -595,9 +594,9 @@ static int cb_true_data(void *user_data, void *arg, void *data, int flags) * aren't an excessive load to the system, as the callback should not be * called as often as, say, the ao2_ref func is called. */ -static void *__ao2_callback(struct ao2_container *c, - const enum search_flags flags, void *cb_fn, void *arg, void *data, enum ao2_callback_type type, - char *tag, char *file, int line, const char *funcname) +static void *internal_ao2_callback(struct ao2_container *c, + const enum search_flags flags, void *cb_fn, void *arg, void *data, enum ao2_callback_type type, + char *tag, char *file, int line, const char *funcname) { int i, last; /* search boundaries */ void *ret = NULL; @@ -675,9 +674,9 @@ static void *__ao2_callback(struct ao2_container *c, /* it is important to handle this case before the unlink */ ret = EXTERNAL_OBJ(cur->astobj); if (tag) - _ao2_ref_debug(ret, 1, tag, file, line, funcname); + __ao2_ref_debug(ret, 1, tag, file, line, funcname); else - _ao2_ref(ret, 1); + __ao2_ref(ret, 1); } if (flags & OBJ_UNLINK) { /* must unlink */ @@ -689,9 +688,9 @@ static void *__ao2_callback(struct ao2_container *c, /* update number of elements and version */ ast_atomic_fetchadd_int(&c->elements, -1); if (tag) - _ao2_ref_debug(EXTERNAL_OBJ(x->astobj), -1, tag, file, line, funcname); + __ao2_ref_debug(EXTERNAL_OBJ(x->astobj), -1, tag, file, line, funcname); else - _ao2_ref(EXTERNAL_OBJ(x->astobj), -1); + __ao2_ref(EXTERNAL_OBJ(x->astobj), -1); free(x); /* free the link record */ } @@ -715,45 +714,45 @@ static void *__ao2_callback(struct ao2_container *c, return ret; } -void *_ao2_callback_debug(struct ao2_container *c, - const enum search_flags flags, - ao2_callback_fn *cb_fn, void *arg, - char *tag, char *file, int line, const char *funcname) +void *__ao2_callback_debug(struct ao2_container *c, + const enum search_flags flags, + ao2_callback_fn *cb_fn, void *arg, + char *tag, char *file, int line, const char *funcname) { - return __ao2_callback(c,flags, cb_fn, arg, NULL, DEFAULT, tag, file, line, funcname); + return internal_ao2_callback(c,flags, cb_fn, arg, NULL, DEFAULT, tag, file, line, funcname); } -void *_ao2_callback(struct ao2_container *c, const enum search_flags flags, - ao2_callback_fn *cb_fn, void *arg) +void *__ao2_callback(struct ao2_container *c, const enum search_flags flags, + ao2_callback_fn *cb_fn, void *arg) { - return __ao2_callback(c,flags, cb_fn, arg, NULL, DEFAULT, NULL, NULL, 0, NULL); + return internal_ao2_callback(c,flags, cb_fn, arg, NULL, DEFAULT, NULL, NULL, 0, NULL); } -void *_ao2_callback_data_debug(struct ao2_container *c, - const enum search_flags flags, - ao2_callback_data_fn *cb_fn, void *arg, void *data, - char *tag, char *file, int line, const char *funcname) +void *__ao2_callback_data_debug(struct ao2_container *c, + const enum search_flags flags, + ao2_callback_data_fn *cb_fn, void *arg, void *data, + char *tag, char *file, int line, const char *funcname) { - return __ao2_callback(c, flags, cb_fn, arg, data, WITH_DATA, tag, file, line, funcname); + return internal_ao2_callback(c, flags, cb_fn, arg, data, WITH_DATA, tag, file, line, funcname); } -void *_ao2_callback_data(struct ao2_container *c, const enum search_flags flags, - ao2_callback_data_fn *cb_fn, void *arg, void *data) +void *__ao2_callback_data(struct ao2_container *c, const enum search_flags flags, + ao2_callback_data_fn *cb_fn, void *arg, void *data) { - return __ao2_callback(c, flags, cb_fn, arg, data, WITH_DATA, NULL, NULL, 0, NULL); + return internal_ao2_callback(c, flags, cb_fn, arg, data, WITH_DATA, NULL, NULL, 0, NULL); } /*! * the find function just invokes the default callback with some reasonable flags. */ -void *_ao2_find_debug(struct ao2_container *c, void *arg, enum search_flags flags, char *tag, char *file, int line, const char *funcname) +void *__ao2_find_debug(struct ao2_container *c, void *arg, enum search_flags flags, char *tag, char *file, int line, const char *funcname) { - return _ao2_callback_debug(c, flags, c->cmp_fn, arg, tag, file, line, funcname); + return __ao2_callback_debug(c, flags, c->cmp_fn, arg, tag, file, line, funcname); } -void *_ao2_find(struct ao2_container *c, void *arg, enum search_flags flags) +void *__ao2_find(struct ao2_container *c, void *arg, enum search_flags flags) { - return _ao2_callback(c, flags, c->cmp_fn, arg); + return __ao2_callback(c, flags, c->cmp_fn, arg); } /*! @@ -772,7 +771,7 @@ struct ao2_iterator ao2_iterator_init(struct ao2_container *c, int flags) /* * move to the next element in the container. */ -static void * __ao2_iterator_next(struct ao2_iterator *a, struct bucket_list **q) +static void *internal_ao2_iterator_next(struct ao2_iterator *a, struct bucket_list **q) { int lim; struct bucket_list *p = NULL; @@ -827,16 +826,16 @@ found: return ret; } -void * _ao2_iterator_next_debug(struct ao2_iterator *a, char *tag, char *file, int line, const char *funcname) +void *__ao2_iterator_next_debug(struct ao2_iterator *a, char *tag, char *file, int line, const char *funcname) { struct bucket_list *p; void *ret = NULL; - ret = __ao2_iterator_next(a, &p); + ret = internal_ao2_iterator_next(a, &p); if (p) { /* inc refcount of returned object */ - _ao2_ref_debug(ret, 1, tag, file, line, funcname); + __ao2_ref_debug(ret, 1, tag, file, line, funcname); } if (!(a->flags & F_AO2I_DONTLOCK)) @@ -845,16 +844,16 @@ void * _ao2_iterator_next_debug(struct ao2_iterator *a, char *tag, char *file, i return ret; } -void * _ao2_iterator_next(struct ao2_iterator *a) +void *__ao2_iterator_next(struct ao2_iterator *a) { struct bucket_list *p = NULL; void *ret = NULL; - ret = __ao2_iterator_next(a, &p); + ret = internal_ao2_iterator_next(a, &p); if (p) { /* inc refcount of returned object */ - _ao2_ref(ret, 1); + __ao2_ref(ret, 1); } if (!(a->flags & F_AO2I_DONTLOCK)) @@ -868,13 +867,13 @@ void * _ao2_iterator_next(struct ao2_iterator *a) */ static int cd_cb(void *obj, void *arg, int flag) { - _ao2_ref(obj, -1); + __ao2_ref(obj, -1); return 0; } static int cd_cb_debug(void *obj, void *arg, int flag) { - _ao2_ref_debug(obj, -1, "deref object via container destroy", __FILE__, __LINE__, __PRETTY_FUNCTION__); + __ao2_ref_debug(obj, -1, "deref object via container destroy", __FILE__, __LINE__, __PRETTY_FUNCTION__); return 0; } @@ -883,7 +882,7 @@ static void container_destruct(void *_c) struct ao2_container *c = _c; int i; - _ao2_callback(c, OBJ_UNLINK, cd_cb, NULL); + __ao2_callback(c, OBJ_UNLINK, cd_cb, NULL); for (i = 0; i < c->n_buckets; i++) { struct bucket_list *current; @@ -903,7 +902,7 @@ static void container_destruct_debug(void *_c) struct ao2_container *c = _c; int i; - _ao2_callback_debug(c, OBJ_UNLINK, cd_cb_debug, NULL, "container_destruct_debug called", __FILE__, __LINE__, __PRETTY_FUNCTION__); + __ao2_callback_debug(c, OBJ_UNLINK, cd_cb_debug, NULL, "container_destruct_debug called", __FILE__, __LINE__, __PRETTY_FUNCTION__); for (i = 0; i < c->n_buckets; i++) { struct bucket_list *current; diff --git a/makeopts.in b/makeopts.in index ef02abd1b..56ad56fc4 100644 --- a/makeopts.in +++ b/makeopts.in @@ -47,6 +47,8 @@ GC_LDFLAGS=@GC_LDFLAGS@ PTHREAD_CFLAGS=@PTHREAD_CFLAGS@ PTHREAD_LIBS=@PTHREAD_LIBS@ +GNU_LD=@GNU_LD@ + prefix = @prefix@ exec_prefix = @exec_prefix@ diff --git a/res/res_adsi.exports b/res/res_adsi.exports new file mode 100644 index 000000000..a4119dc1f --- /dev/null +++ b/res/res_adsi.exports @@ -0,0 +1,33 @@ +{ + global: + ast_adsi_available; + ast_adsi_begin_download; + ast_adsi_channel_restore; + ast_adsi_clear_screen; + ast_adsi_clear_soft_keys; + ast_adsi_connect_session; + ast_adsi_data_mode; + ast_adsi_disconnect_session; + ast_adsi_display; + ast_adsi_download_connect; + ast_adsi_download_disconnect; + ast_adsi_end_download; + ast_adsi_get_cpeid; + ast_adsi_get_cpeinfo; + ast_adsi_input_control; + ast_adsi_input_format; + ast_adsi_load_session; + ast_adsi_load_soft_key; + ast_adsi_print; + ast_adsi_query_cpeid; + ast_adsi_query_cpeinfo; + ast_adsi_read_encoded_dtmf; + ast_adsi_set_keys; + ast_adsi_set_line; + ast_adsi_transmit_message; + ast_adsi_transmit_message_full; + ast_adsi_unload_session; + ast_adsi_voice_mode; + local: + *; +}; diff --git a/res/res_agi.exports b/res/res_agi.exports new file mode 100644 index 000000000..e1b11968f --- /dev/null +++ b/res/res_agi.exports @@ -0,0 +1,7 @@ +{ + global: + ast_agi_register; + ast_agi_unregister; + local: + *; +}; diff --git a/res/res_config_odbc.c b/res/res_config_odbc.c index 8da1e2915..bb43de607 100644 --- a/res/res_config_odbc.c +++ b/res/res_config_odbc.c @@ -1067,7 +1067,7 @@ static int reload_module(void) return 0; } -AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_GLOBAL_SYMBOLS, "Realtime ODBC configuration", +AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_DEFAULT, "Realtime ODBC configuration", .load = load_module, .unload = unload_module, .reload = reload_module, diff --git a/res/res_config_pgsql.c b/res/res_config_pgsql.c index 877901243..609f0b2ae 100644 --- a/res/res_config_pgsql.c +++ b/res/res_config_pgsql.c @@ -1530,7 +1530,7 @@ static char *handle_cli_realtime_pgsql_status(struct ast_cli_entry *e, int cmd, } /* needs usecount semantics defined */ -AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_GLOBAL_SYMBOLS, "PostgreSQL RealTime Configuration Driver", +AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_DEFAULT, "PostgreSQL RealTime Configuration Driver", .load = load_module, .unload = unload_module, .reload = reload diff --git a/res/res_features.exports b/res/res_features.exports new file mode 100644 index 000000000..344a652c8 --- /dev/null +++ b/res/res_features.exports @@ -0,0 +1,13 @@ +{ + global: + ast_bridge_call; + ast_masq_park_call; + ast_park_call; + ast_parking_ext; + ast_pickup_call; + ast_pickup_ext; + ast_register_feature; + ast_unregister_feature; + local: + *; +}; diff --git a/res/res_jabber.exports b/res/res_jabber.exports new file mode 100644 index 000000000..8df1fee0e --- /dev/null +++ b/res/res_jabber.exports @@ -0,0 +1,13 @@ +{ + global: + ast_aji_create_chat; + ast_aji_disconnect; + ast_aji_get_client; + ast_aji_get_clients; + ast_aji_increment_mid; + ast_aji_invite_chat; + ast_aji_join_chat; + ast_aji_send; + local: + *; +}; diff --git a/res/res_monitor.exports b/res/res_monitor.exports new file mode 100644 index 000000000..4352dc8b6 --- /dev/null +++ b/res/res_monitor.exports @@ -0,0 +1,11 @@ +{ + global: + ast_monitor_change_fname; + ast_monitor_pause; + ast_monitor_setjoinfiles; + ast_monitor_start; + ast_monitor_stop; + ast_monitor_unpause; + local: + *; +}; diff --git a/res/res_odbc.exports b/res/res_odbc.exports new file mode 100644 index 000000000..1e38d49da --- /dev/null +++ b/res/res_odbc.exports @@ -0,0 +1,11 @@ +{ + global: + ast_odbc_backslash_is_escape; + ast_odbc_prepare_and_execute; + ast_odbc_release_obj; + ast_odbc_request_obj; + ast_odbc_sanity_check; + ast_odbc_smart_execute; + local: + *; +}; diff --git a/res/res_smdi.exports b/res/res_smdi.exports new file mode 100644 index 000000000..7fe3edff3 --- /dev/null +++ b/res/res_smdi.exports @@ -0,0 +1,18 @@ +{ + global: + ast_smdi_interface_find; + ast_smdi_interface_unref; + ast_smdi_md_message_destroy; + ast_smdi_md_message_pop; + ast_smdi_md_message_putback; + ast_smdi_md_message_wait; + ast_smdi_mwi_message_destroy; + ast_smdi_mwi_message_pop; + ast_smdi_mwi_message_putback; + ast_smdi_mwi_message_wait; + ast_smdi_mwi_message_wait_station; + ast_smdi_mwi_set; + ast_smdi_mwi_unset; + local: + *; +}; diff --git a/res/res_snmp.c b/res/res_snmp.c index f3cedfb1d..635330e92 100644 --- a/res/res_snmp.c +++ b/res/res_snmp.c @@ -115,7 +115,7 @@ static int unload_module(void) return ((thread != AST_PTHREADT_NULL) ? pthread_join(thread, NULL) : 0); } -AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_GLOBAL_SYMBOLS, "SNMP [Sub]Agent for Asterisk", +AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_DEFAULT, "SNMP [Sub]Agent for Asterisk", .load = load_module, .unload = unload_module, ); diff --git a/res/res_speech.exports b/res/res_speech.exports new file mode 100644 index 000000000..226660735 --- /dev/null +++ b/res/res_speech.exports @@ -0,0 +1,21 @@ +{ + global: + ast_speech_change; + ast_speech_change_results_type; + ast_speech_change_state; + ast_speech_destroy; + ast_speech_dtmf; + ast_speech_grammar_activate; + ast_speech_grammar_deactivate; + ast_speech_grammar_load; + ast_speech_grammar_unload; + ast_speech_new; + ast_speech_register; + ast_speech_results_free; + ast_speech_results_get; + ast_speech_start; + ast_speech_unregister; + ast_speech_write; + local: + *; +};