dect
/
asterisk
Archived
13
0
Fork 0

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
This commit is contained in:
kpfleming 2009-03-18 02:21:23 +00:00
parent 42822e71ab
commit 870bfecfe6
19 changed files with 321 additions and 191 deletions

View File

@ -51,8 +51,13 @@ endif
# per-target settings will be applied # per-target settings will be applied
CC_CFLAGS=$(PTHREAD_CFLAGS) $(ASTCFLAGS) CC_CFLAGS=$(PTHREAD_CFLAGS) $(ASTCFLAGS)
CXX_CFLAGS=$(PTHREAD_CFLAGS) $(filter-out -Wstrict-prototypes -Wmissing-prototypes -Wmissing-declarations $(AST_DECLARATION_AFTER_STATEMENT),$(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) CC_LIBS=$(PTHREAD_LIBS) $(LIBS)
CXX_LIBS=$(PTHREAD_LIBS) $(LIBS) CXX_LIBS=$(PTHREAD_LIBS) $(LIBS)

View File

@ -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

4
default.exports Normal file
View File

@ -0,0 +1,4 @@
{
local:
*;
};

View File

@ -402,17 +402,17 @@ typedef void (*ao2_destructor_fn)(void *);
#ifdef REF_DEBUG #ifdef REF_DEBUG
#define ao2_t_alloc(arg1, arg2, arg3) _ao2_alloc_debug((arg1), (arg2), (arg3), __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__) #define ao2_alloc(arg1, arg2) __ao2_alloc_debug((arg1), (arg2), "", __FILE__, __LINE__, __PRETTY_FUNCTION__)
#else #else
#define ao2_t_alloc(arg1,arg2,arg3) _ao2_alloc((arg1), (arg2)) #define ao2_t_alloc(arg1,arg2,arg3) __ao2_alloc((arg1), (arg2))
#define ao2_alloc(arg1,arg2) _ao2_alloc((arg1), (arg2)) #define ao2_alloc(arg1,arg2) __ao2_alloc((arg1), (arg2))
#endif #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_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(const size_t data_size, ao2_destructor_fn destructor_fn);
/*! \brief /*! \brief
@ -437,14 +437,14 @@ void *_ao2_alloc(const size_t data_size, ao2_destructor_fn destructor_fn);
*/ */
#ifdef REF_DEBUG #ifdef REF_DEBUG
#define ao2_t_ref(arg1,arg2,arg3) _ao2_ref_debug((arg1), (arg2), (arg3), __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__) #define ao2_ref(arg1,arg2) __ao2_ref_debug((arg1), (arg2), "", __FILE__, __LINE__, __PRETTY_FUNCTION__)
#else #else
#define ao2_t_ref(arg1,arg2,arg3) _ao2_ref((arg1), (arg2)) #define ao2_t_ref(arg1,arg2,arg3) __ao2_ref((arg1), (arg2))
#define ao2_ref(arg1,arg2) _ao2_ref((arg1), (arg2)) #define ao2_ref(arg1,arg2) __ao2_ref((arg1), (arg2))
#endif #endif
int _ao2_ref_debug(void *o, int delta, char *tag, char *file, int line, const char *funcname); 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(void *o, int delta);
/*! \brief /*! \brief
* Lock an object. * Lock an object.
@ -455,8 +455,8 @@ int _ao2_ref(void *o, int delta);
#ifndef DEBUG_THREADS #ifndef DEBUG_THREADS
int ao2_lock(void *a); int ao2_lock(void *a);
#else #else
#define ao2_lock(a) _ao2_lock(a, __FILE__, __PRETTY_FUNCTION__, __LINE__, #a) #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); int __ao2_lock(void *a, const char *file, const char *func, int line, const char *var);
#endif #endif
/*! \brief /*! \brief
@ -468,8 +468,8 @@ int _ao2_lock(void *a, const char *file, const char *func, int line, const char
#ifndef DEBUG_THREADS #ifndef DEBUG_THREADS
int ao2_unlock(void *a); int ao2_unlock(void *a);
#else #else
#define ao2_unlock(a) _ao2_unlock(a, __FILE__, __PRETTY_FUNCTION__, __LINE__, #a) #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); int __ao2_unlock(void *a, const char *file, const char *func, int line, const char *var);
#endif #endif
/*! \brief /*! \brief
@ -481,8 +481,8 @@ int _ao2_unlock(void *a, const char *file, const char *func, int line, const cha
#ifndef DEBUG_THREADS #ifndef DEBUG_THREADS
int ao2_trylock(void *a); int ao2_trylock(void *a);
#else #else
#define ao2_trylock(a) _ao2_trylock(a, __FILE__, __PRETTY_FUNCTION__, __LINE__, #a) #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); int __ao2_trylock(void *a, const char *file, const char *func, int line, const char *var);
#endif #endif
/*! /*!
@ -686,15 +686,15 @@ struct ao2_container;
*/ */
#ifdef REF_DEBUG #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_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_container_alloc(arg1,arg2,arg3) __ao2_container_alloc_debug((arg1), (arg2), (arg3), "", __FILE__, __LINE__, __PRETTY_FUNCTION__)
#else #else
#define ao2_t_container_alloc(arg1,arg2,arg3,arg4) _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)) #define ao2_container_alloc(arg1,arg2,arg3) __ao2_container_alloc((arg1), (arg2), (arg3))
#endif #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); 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, ao2_hash_fn *hash_fn, ao2_callback_fn *cmp_fn,
char *tag, char *file, int line, const char *funcname); char *tag, char *file, int line, const char *funcname);
@ -730,14 +730,14 @@ int ao2_container_count(struct ao2_container *c);
*/ */
#ifdef REF_DEBUG #ifdef REF_DEBUG
#define ao2_t_link(arg1, arg2, arg3) _ao2_link_debug((arg1), (arg2), (arg3), __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__) #define ao2_link(arg1, arg2) __ao2_link_debug((arg1), (arg2), "", __FILE__, __LINE__, __PRETTY_FUNCTION__)
#else #else
#define ao2_t_link(arg1, arg2, arg3) _ao2_link((arg1), (arg2)) #define ao2_t_link(arg1, arg2, arg3) __ao2_link((arg1), (arg2))
#define ao2_link(arg1, arg2) _ao2_link((arg1), (arg2)) #define ao2_link(arg1, arg2) __ao2_link((arg1), (arg2))
#endif #endif
void *_ao2_link_debug(struct ao2_container *c, void *new_obj, char *tag, char *file, int line, const char *funcname); 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(struct ao2_container *c, void *newobj);
/*! /*!
* \brief Remove an object from the container * \brief Remove an object from the container
@ -756,14 +756,14 @@ void *_ao2_link(struct ao2_container *c, void *newobj);
* refcount will be decremented). * refcount will be decremented).
*/ */
#ifdef REF_DEBUG #ifdef REF_DEBUG
#define ao2_t_unlink(arg1, arg2, arg3) _ao2_unlink_debug((arg1), (arg2), (arg3), __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__) #define ao2_unlink(arg1, arg2) __ao2_unlink_debug((arg1), (arg2), "", __FILE__, __LINE__, __PRETTY_FUNCTION__)
#else #else
#define ao2_t_unlink(arg1, arg2, arg3) _ao2_unlink((arg1), (arg2)) #define ao2_t_unlink(arg1, arg2, arg3) __ao2_unlink((arg1), (arg2))
#define ao2_unlink(arg1, arg2) _ao2_unlink((arg1), (arg2)) #define ao2_unlink(arg1, arg2) __ao2_unlink((arg1), (arg2))
#endif #endif
void *_ao2_unlink_debug(struct ao2_container *c, void *obj, char *tag, char *file, int line, const char *funcname); 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(struct ao2_container *c, void *obj);
/*! \brief Used as return value if the flag OBJ_MULTIPLE is set */ /*! \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. * be used to free the additional reference possibly created by this function.
*/ */
#ifdef REF_DEBUG #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_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_callback(arg1,arg2,arg3,arg4) __ao2_callback_debug((arg1), (arg2), (arg3), (arg4), "", __FILE__, __LINE__, __PRETTY_FUNCTION__)
#else #else
#define ao2_t_callback(arg1,arg2,arg3,arg4,arg5) _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)) #define ao2_callback(arg1,arg2,arg3,arg4) __ao2_callback((arg1), (arg2), (arg3), (arg4))
#endif #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, ao2_callback_fn *cb_fn, void *arg, char *tag,
char *file, int line, const char *funcname); 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, enum search_flags flags,
ao2_callback_fn *cb_fn, void *arg); ao2_callback_fn *cb_fn, void *arg);
@ -880,16 +880,16 @@ void *_ao2_callback(struct ao2_container *c,
* \see ao2_callback() * \see ao2_callback()
*/ */
#ifdef REF_DEBUG #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_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_callback_data(arg1,arg2,arg3,arg4,arg5) __ao2_callback_data_debug((arg1), (arg2), (arg3), (arg4), (arg5), "", __FILE__, __LINE__, __PRETTY_FUNCTION__)
#else #else
#define ao2_t_callback_data(arg1,arg2,arg3,arg4,arg5,arg6) _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)) #define ao2_callback_data(arg1,arg2,arg3,arg4,arg5) __ao2_callback_data((arg1), (arg2), (arg3), (arg4), (arg5))
#endif #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, ao2_callback_data_fn *cb_fn, void *arg, void *data, char *tag,
char *file, int line, const char *funcname); 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, enum search_flags flags,
ao2_callback_data_fn *cb_fn, void *arg, void *data); 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 ? * XXX possibly change order of arguments ?
*/ */
#ifdef REF_DEBUG #ifdef REF_DEBUG
#define ao2_t_find(arg1,arg2,arg3,arg4) _ao2_find_debug((arg1), (arg2), (arg3), (arg4), __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__) #define ao2_find(arg1,arg2,arg3) __ao2_find_debug((arg1), (arg2), (arg3), "", __FILE__, __LINE__, __PRETTY_FUNCTION__)
#else #else
#define ao2_t_find(arg1,arg2,arg3,arg4) _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)) #define ao2_find(arg1,arg2,arg3) __ao2_find((arg1), (arg2), (arg3))
#endif #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_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(struct ao2_container *c, void *arg, enum search_flags flags);
/*! \brief /*! \brief
* *
@ -1003,14 +1003,14 @@ struct ao2_iterator {
struct ao2_iterator ao2_iterator_init(struct ao2_container *c, int flags); struct ao2_iterator ao2_iterator_init(struct ao2_container *c, int flags);
#ifdef REF_DEBUG #ifdef REF_DEBUG
#define ao2_t_iterator_next(arg1, arg2) _ao2_iterator_next_debug((arg1), (arg2), __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__) #define ao2_iterator_next(arg1) __ao2_iterator_next_debug((arg1), "", __FILE__, __LINE__, __PRETTY_FUNCTION__)
#else #else
#define ao2_t_iterator_next(arg1, arg2) _ao2_iterator_next((arg1)) #define ao2_t_iterator_next(arg1, arg2) __ao2_iterator_next((arg1))
#define ao2_iterator_next(arg1) _ao2_iterator_next((arg1)) #define ao2_iterator_next(arg1) __ao2_iterator_next((arg1))
#endif #endif
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);
void *_ao2_iterator_next(struct ao2_iterator *a); void *__ao2_iterator_next(struct ao2_iterator *a);
/* extra functions */ /* extra functions */
void ao2_bt(void); /* backtrace */ void ao2_bt(void); /* backtrace */

View File

@ -111,6 +111,10 @@ ifneq ($(findstring USE_HOARD_ALLOCATOR,$(MENUSELECT_CFLAGS)),)
endif endif
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/ CHECK_SUBDIR: # do nothing, just make sure that we recurse in the subdir/
editline/libedit.a: CHECK_SUBDIR editline/libedit.a: CHECK_SUBDIR
@ -171,15 +175,14 @@ ifneq ($(findstring ENABLE_UPLOADS,$(MENUSELECT_CFLAGS)),)
GMIMELDFLAGS+=$(GMIME_LIB) GMIMELDFLAGS+=$(GMIME_LIB)
endif 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 @$(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)),) 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 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 endif
$(CMD_PREFIX) $(ASTTOPDIR)/build_tools/strip_nonapi $@ || rm $@
clean:: clean::
rm -f asterisk rm -f asterisk

28
main/asterisk.exports Normal file
View File

@ -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:
*;
};

View File

@ -134,20 +134,20 @@ enum ao2_callback_type {
/* the underlying functions common to debug and non-debug versions */ /* the underlying functions common to debug and non-debug versions */
static int __ao2_ref(void *user_data, const int delta); static int internal_ao2_ref(void *user_data, const int delta);
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);
static struct ao2_container *__ao2_container_alloc(struct ao2_container *c, const uint n_buckets, ao2_hash_fn *hash_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); 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 struct bucket_list *internal_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, 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, 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); char *tag, char *file, int line, const char *funcname);
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);
#ifndef DEBUG_THREADS #ifndef DEBUG_THREADS
int ao2_lock(void *user_data) int ao2_lock(void *user_data)
#else #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 #endif
{ {
struct astobj2 *p = INTERNAL_OBJ(user_data); 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 #ifndef DEBUG_THREADS
int ao2_unlock(void *user_data) int ao2_unlock(void *user_data)
#else #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 #endif
{ {
struct astobj2 *p = INTERNAL_OBJ(user_data); 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 #ifndef DEBUG_THREADS
int ao2_trylock(void *user_data) int ao2_trylock(void *user_data)
#else #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 #endif
{ {
struct astobj2 *p = INTERNAL_OBJ(user_data); 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); 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); fprintf(refo, "%p **call destructor** %s:%d:%s (%s)\n", user_data, file, line, funcname, tag);
fclose(refo); 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); struct astobj2 *obj = INTERNAL_OBJ(user_data);
if (obj == NULL) if (obj == NULL)
return -1; 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); struct astobj2 *obj = INTERNAL_OBJ(user_data);
int current_value; 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 *, * We always alloc at least the size of a void *,
* for debugging purposes. * 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 */ /* allocation */
struct astobj2 *obj; struct astobj2 *obj;
@ -332,13 +332,13 @@ static void *__ao2_alloc(size_t data_size, ao2_destructor_fn destructor_fn)
return EXTERNAL_OBJ(obj); 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 */ /* allocation */
void *obj; void *obj;
FILE *refo = fopen(REF_FILE,"a"); FILE *refo = fopen(REF_FILE,"a");
obj = __ao2_alloc(data_size, destructor_fn); obj = internal_ao2_alloc(data_size, destructor_fn);
if (obj == NULL) if (obj == NULL)
return NULL; return NULL;
@ -352,9 +352,9 @@ void *_ao2_alloc_debug(size_t data_size, ao2_destructor_fn destructor_fn, char *
return obj; 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! * 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, 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) ao2_callback_fn *cmp_fn)
{ {
/* XXX maybe consistency check on arguments ? */ /* XXX maybe consistency check on arguments ? */
/* compute the container size */ /* compute the container size */
@ -439,28 +439,27 @@ static struct ao2_container *__ao2_container_alloc(struct ao2_container *c, cons
return c; return c;
} }
struct ao2_container *_ao2_container_alloc_debug(const unsigned int n_buckets, ao2_hash_fn *hash_fn, 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) ao2_callback_fn *cmp_fn, char *tag, char *file, int line, const char *funcname)
{ {
/* XXX maybe consistency check on arguments ? */ /* XXX maybe consistency check on arguments ? */
/* compute the container size */ /* compute the container size */
size_t container_size = sizeof(struct ao2_container) + n_buckets * sizeof(struct bucket); 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 * struct ao2_container *__ao2_container_alloc(const unsigned int n_buckets, ao2_hash_fn *hash_fn,
_ao2_container_alloc(const unsigned int n_buckets, ao2_hash_fn *hash_fn, ao2_callback_fn *cmp_fn)
ao2_callback_fn *cmp_fn)
{ {
/* XXX maybe consistency check on arguments ? */ /* XXX maybe consistency check on arguments ? */
/* compute the container size */ /* compute the container size */
size_t container_size = sizeof(struct ao2_container) + n_buckets * sizeof(struct bucket); 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 * 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; int i;
/* create a new list entry */ /* create a new list entry */
@ -516,23 +515,23 @@ static struct bucket_list *__ao2_link(struct ao2_container *c, void *user_data,
return p; 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) { 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); ao2_unlock(c);
} }
return p; 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) { if (p) {
_ao2_ref(user_data, +1); __ao2_ref(user_data, +1);
ao2_unlock(c); ao2_unlock(c);
} }
return p; return p;
@ -550,23 +549,23 @@ int ao2_match_by_addr(void *user_data, void *arg, int flags)
* Unlink an object from the container * Unlink an object from the container
* and destroy the associated * ao2_bucket_list structure. * and destroy the associated * ao2_bucket_list structure.
*/ */
void *_ao2_unlink_debug(struct ao2_container *c, void *user_data, char *tag, void *__ao2_unlink_debug(struct ao2_container *c, void *user_data, char *tag,
char *file, int line, const char *funcname) char *file, int line, const char *funcname)
{ {
if (INTERNAL_OBJ(user_data) == NULL) /* safety check on the argument */ if (INTERNAL_OBJ(user_data) == NULL) /* safety check on the argument */
return NULL; 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; 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 */ if (INTERNAL_OBJ(user_data) == NULL) /* safety check on the argument */
return NULL; 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; 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 * 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. * called as often as, say, the ao2_ref func is called.
*/ */
static void *__ao2_callback(struct ao2_container *c, 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, 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) char *tag, char *file, int line, const char *funcname)
{ {
int i, last; /* search boundaries */ int i, last; /* search boundaries */
void *ret = NULL; 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 */ /* it is important to handle this case before the unlink */
ret = EXTERNAL_OBJ(cur->astobj); ret = EXTERNAL_OBJ(cur->astobj);
if (tag) if (tag)
_ao2_ref_debug(ret, 1, tag, file, line, funcname); __ao2_ref_debug(ret, 1, tag, file, line, funcname);
else else
_ao2_ref(ret, 1); __ao2_ref(ret, 1);
} }
if (flags & OBJ_UNLINK) { /* must unlink */ if (flags & OBJ_UNLINK) { /* must unlink */
@ -689,9 +688,9 @@ static void *__ao2_callback(struct ao2_container *c,
/* update number of elements and version */ /* update number of elements and version */
ast_atomic_fetchadd_int(&c->elements, -1); ast_atomic_fetchadd_int(&c->elements, -1);
if (tag) 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 else
_ao2_ref(EXTERNAL_OBJ(x->astobj), -1); __ao2_ref(EXTERNAL_OBJ(x->astobj), -1);
free(x); /* free the link record */ free(x); /* free the link record */
} }
@ -715,45 +714,45 @@ static void *__ao2_callback(struct ao2_container *c,
return ret; return ret;
} }
void *_ao2_callback_debug(struct ao2_container *c, void *__ao2_callback_debug(struct ao2_container *c,
const enum search_flags flags, const enum search_flags flags,
ao2_callback_fn *cb_fn, void *arg, ao2_callback_fn *cb_fn, void *arg,
char *tag, char *file, int line, const char *funcname) 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, void *__ao2_callback(struct ao2_container *c, const enum search_flags flags,
ao2_callback_fn *cb_fn, void *arg) 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, void *__ao2_callback_data_debug(struct ao2_container *c,
const enum search_flags flags, const enum search_flags flags,
ao2_callback_data_fn *cb_fn, void *arg, void *data, ao2_callback_data_fn *cb_fn, void *arg, void *data,
char *tag, char *file, int line, const char *funcname) 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, void *__ao2_callback_data(struct ao2_container *c, const enum search_flags flags,
ao2_callback_data_fn *cb_fn, void *arg, void *data) 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. * 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. * 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; int lim;
struct bucket_list *p = NULL; struct bucket_list *p = NULL;
@ -827,16 +826,16 @@ found:
return ret; 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; struct bucket_list *p;
void *ret = NULL; void *ret = NULL;
ret = __ao2_iterator_next(a, &p); ret = internal_ao2_iterator_next(a, &p);
if (p) { if (p) {
/* inc refcount of returned object */ /* 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)) 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; return ret;
} }
void * _ao2_iterator_next(struct ao2_iterator *a) void *__ao2_iterator_next(struct ao2_iterator *a)
{ {
struct bucket_list *p = NULL; struct bucket_list *p = NULL;
void *ret = NULL; void *ret = NULL;
ret = __ao2_iterator_next(a, &p); ret = internal_ao2_iterator_next(a, &p);
if (p) { if (p) {
/* inc refcount of returned object */ /* inc refcount of returned object */
_ao2_ref(ret, 1); __ao2_ref(ret, 1);
} }
if (!(a->flags & F_AO2I_DONTLOCK)) 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) static int cd_cb(void *obj, void *arg, int flag)
{ {
_ao2_ref(obj, -1); __ao2_ref(obj, -1);
return 0; return 0;
} }
static int cd_cb_debug(void *obj, void *arg, int flag) 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; return 0;
} }
@ -883,7 +882,7 @@ static void container_destruct(void *_c)
struct ao2_container *c = _c; struct ao2_container *c = _c;
int i; 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++) { for (i = 0; i < c->n_buckets; i++) {
struct bucket_list *current; struct bucket_list *current;
@ -903,7 +902,7 @@ static void container_destruct_debug(void *_c)
struct ao2_container *c = _c; struct ao2_container *c = _c;
int i; 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++) { for (i = 0; i < c->n_buckets; i++) {
struct bucket_list *current; struct bucket_list *current;

View File

@ -47,6 +47,8 @@ GC_LDFLAGS=@GC_LDFLAGS@
PTHREAD_CFLAGS=@PTHREAD_CFLAGS@ PTHREAD_CFLAGS=@PTHREAD_CFLAGS@
PTHREAD_LIBS=@PTHREAD_LIBS@ PTHREAD_LIBS=@PTHREAD_LIBS@
GNU_LD=@GNU_LD@
prefix = @prefix@ prefix = @prefix@
exec_prefix = @exec_prefix@ exec_prefix = @exec_prefix@

33
res/res_adsi.exports Normal file
View File

@ -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:
*;
};

7
res/res_agi.exports Normal file
View File

@ -0,0 +1,7 @@
{
global:
ast_agi_register;
ast_agi_unregister;
local:
*;
};

View File

@ -1067,7 +1067,7 @@ static int reload_module(void)
return 0; 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, .load = load_module,
.unload = unload_module, .unload = unload_module,
.reload = reload_module, .reload = reload_module,

View File

@ -1530,7 +1530,7 @@ static char *handle_cli_realtime_pgsql_status(struct ast_cli_entry *e, int cmd,
} }
/* needs usecount semantics defined */ /* 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, .load = load_module,
.unload = unload_module, .unload = unload_module,
.reload = reload .reload = reload

13
res/res_features.exports Normal file
View File

@ -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:
*;
};

13
res/res_jabber.exports Normal file
View File

@ -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:
*;
};

11
res/res_monitor.exports Normal file
View File

@ -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:
*;
};

11
res/res_odbc.exports Normal file
View File

@ -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:
*;
};

18
res/res_smdi.exports Normal file
View File

@ -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:
*;
};

View File

@ -115,7 +115,7 @@ static int unload_module(void)
return ((thread != AST_PTHREADT_NULL) ? pthread_join(thread, NULL) : 0); 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, .load = load_module,
.unload = unload_module, .unload = unload_module,
); );

21
res/res_speech.exports Normal file
View File

@ -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:
*;
};