diff options
author | kpfleming <kpfleming@f38db490-d61c-443f-a65b-d21fe96a405b> | 2009-03-18 01:55:22 +0000 |
---|---|---|
committer | kpfleming <kpfleming@f38db490-d61c-443f-a65b-d21fe96a405b> | 2009-03-18 01:55:22 +0000 |
commit | ab574c1a269daa27014b5f5eb315ec1332d9a13c (patch) | |
tree | a9d77a0b1fa81644f952c54e6d506ae2232f2a16 /main | |
parent | d3323c9c37e93007eae9df8b25a174fc9cbcbbfa (diff) |
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/branches/1.4@182808 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'main')
-rw-r--r-- | main/Makefile | 13 | ||||
-rw-r--r-- | main/asterisk.exports | 28 | ||||
-rw-r--r-- | main/astobj2.c | 6 |
3 files changed, 39 insertions, 8 deletions
diff --git a/main/Makefile b/main/Makefile index c8a878378..0b83191e0 100644 --- a/main/Makefile +++ b/main/Makefile @@ -94,6 +94,10 @@ ifeq ($(OSARCH),SunOS) ASTLINK= endif +ifeq ($(GNU_LD),1) +ASTLINK+=-Wl,--version-script,asterisk.exports +endif + editline/libedit.a: cd editline && test -f config.h || CFLAGS="$(PTHREAD_CFLAGS) $(subst $(ASTTOPDIR),../../,$(ASTCFLAGS:-Werror=))" LDFLAGS="$(ASTLDFLAGS)" ./configure --build=$(BUILD_PLATFORM) --host=$(HOST_PLATFORM) --with-ncurses=$(NCURSES_DIR) --with-curses=$(CURSES_DIR) --with-termcap=$(TERMCAP_DIR) --with-tinfo=$(TINFO_DIR) $(MAKE) -C editline libedit.a @@ -133,20 +137,19 @@ else H323LDLIBS= endif -asterisk: $(OBJS) editline/libedit.a db1-ast/libdb1.a $(AST_EMBED_LDSCRIPTS) +asterisk: $(OBJS) editline/libedit.a db1-ast/libdb1.a $(AST_EMBED_LDSCRIPTS) asterisk.exports @$(ASTTOPDIR)/build_tools/make_build_h > $(ASTTOPDIR)/include/asterisk/build.h.tmp @if cmp -s $(ASTTOPDIR)/include/asterisk/build.h.tmp $(ASTTOPDIR)/include/asterisk/build.h ; then echo ; else \ mv $(ASTTOPDIR)/include/asterisk/build.h.tmp $(ASTTOPDIR)/include/asterisk/build.h ; \ fi @rm -f $(ASTTOPDIR)/include/asterisk/build.h.tmp @$(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) + $(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) else - $(CMD_PREFIX) $(CXX) $(STATIC_BUILD) -o $@ $(ASTLINK) $(AST_EMBED_LDFLAGS) $(ASTLDFLAGS) $(H323LDFLAGS) $^ buildinfo.o $(AST_LIBS) $(AST_EMBED_LIBS) $(H323LDLIBS) + $(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) 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 56ab75a21..8157c78cf 100644 --- a/main/astobj2.c +++ b/main/astobj2.c @@ -128,7 +128,7 @@ static inline struct astobj2 *INTERNAL_OBJ(void *user_data) #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); @@ -150,7 +150,7 @@ int _ao2_lock(void *user_data, const char *file, const char *func, int line, con #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); @@ -177,7 +177,7 @@ int _ao2_trylock(void *user_data, const char *file, const char *func, int line, #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); |