From: Phil Oester Date: Thu, 20 Jul 2006 16:59:04 +0000 (+0000) Subject: Use gcc to build shared objects (Phil Oester ) X-Git-Tag: v1.3.6~13 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=7f5be628f66ec7b8b22e87ace39ee61213c6313b;p=thirdparty%2Fiptables.git Use gcc to build shared objects (Phil Oester ) As suggested by Dmitry Levin and included in Fedora Core releases, use gcc instead of ld to link shared objects. Fedora rpm notes refer to this fixing a plugin problem, but does not offer specifics. But in any event, 'gcc -dumpspecs' does show gcc will pass a number of parameters which in theory it thinks are better. Compile tested both with and without NO_SHARED_LIBS. Closes bug #454. --- diff --git a/Makefile b/Makefile index 12cc34b2..2673fd58 100644 --- a/Makefile +++ b/Makefile @@ -67,7 +67,7 @@ ifeq ($(shell uname -m),sparc64) # The kernel is 64-bit, even though userspace is 32. CFLAGS+=-DIPT_MIN_ALIGN=8 -DKERNEL_64_USERSPACE_32 else - EXT_LDFLAGS=-m elf64_sparc + EXT_LDFLAGS+=-Wl,-m,elf64_sparc endif endif diff --git a/Rules.make b/Rules.make index ffc8996b..17ea0172 100644 --- a/Rules.make +++ b/Rules.make @@ -31,7 +31,7 @@ $(SHARED_LIBS:%.so=%.d): %.d: %.c sed -e 's@^.*\.o:@$*.d $*_sh.o:@' > $@ $(SHARED_LIBS): %.so : %_sh.o - $(LD) -shared $(EXT_LDFLAGS) -o $@ $< + $(CC) -shared $(EXT_LDFLAGS) -o $@ $< $(SHARED_SE_LIBS:%.so=%.d): %.d: %.c @-$(CC) -M -MG $(CFLAGS) $< | \ diff --git a/include/iptables_common.h b/include/iptables_common.h index 64723c3c..e214d1fd 100644 --- a/include/iptables_common.h +++ b/include/iptables_common.h @@ -33,8 +33,10 @@ void exit_error(enum exittype, char *, ...)__attribute__((noreturn, extern const char *program_name, *program_version; extern char *lib_dir; +#define _init __attribute__((constructor)) my_init #ifdef NO_SHARED_LIBS # ifdef _INIT +# undef _init # define _init _INIT # endif extern void init_extensions(void);