diff options
author | Shehjar Tikoo <shehjart@gluster.com> | 2009-06-29 09:38:29 +0000 |
---|---|---|
committer | Anand V. Avati <avati@dev.gluster.com> | 2009-06-30 15:24:53 -0700 |
commit | e513b78e658c1b3052bf28e8a72199df8ad04cae (patch) | |
tree | 055a88db753bb08db6f0e425ccb56c0cd079fda3 | |
parent | e4a4d04a691a27c1e52e8e0f78458fb4ebf00912 (diff) |
booster: Fix build problems with various libtool versions
We've been facing a problem on some test systems where the
booster.so is built by libtool as an executable rather than
a dynamically loadable library.
This problem is probably caused by it seeing a _init function in
the source. This is the name of the libc initiliazation
function so it could be the source of the problem.
In any case, ld-preloadable libraries must not have a function
called _init, instead they need to have __attribute ((constructor))
as the attribute for any and all functions the library wants
executed before the program's main(). Our earlier approach was
inherently problematic.
This commit also cleans up the booster Makefile for better
build behaviour. Credit: Harsha.
Signed-off-by: Anand V. Avati <avati@dev.gluster.com>
-rw-r--r-- | booster/src/Makefile.am | 25 | ||||
-rw-r--r-- | booster/src/booster.c | 7 |
2 files changed, 20 insertions, 12 deletions
diff --git a/booster/src/Makefile.am b/booster/src/Makefile.am index a51585912..6402c8d79 100644 --- a/booster/src/Makefile.am +++ b/booster/src/Makefile.am @@ -1,18 +1,21 @@ -xlatordir = $(libdir)/glusterfs/$(PACKAGE_VERSION)/xlator/performance - -ldpreload_PROGRAMS = glusterfs-booster.so +ldpreload_LTLIBRARIES = libglusterfs-booster.la ldpreloaddir = $(libdir)/glusterfs/ noinst_HEADERS = booster_fstab.h booster-fd.h -glusterfs_booster_so_SOURCES = booster.c booster_stat.c booster_fstab.c booster-fd.c -glusterfs_booster_so_CFLAGS = -I$(top_srcdir)/libglusterfsclient/src/ -D_GNU_SOURCE -D$(GF_HOST_OS) -fPIC -Wall \ - -pthread $(GF_BOOSTER_CFLAGS) -glusterfs_booster_so_CPPFLAGS = -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE \ +libglusterfs_booster_la_SOURCES = booster.c booster_stat.c booster_fstab.c booster-fd.c +libglusterfs_booster_la_CFLAGS = -I$(top_srcdir)/libglusterfsclient/src/ -D_GNU_SOURCE -D$(GF_HOST_OS) -fPIC -Wall \ + -pthread $(GF_BOOSTER_CFLAGS) -shared -nostartfiles +libglusterfs_booster_la_CPPFLAGS = -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE \ -I$(top_srcdir)/libglusterfsclient/src \ -I$(top_srcdir)/libglusterfs/src -DDATADIR=\"$(localstatedir)\" \ -DCONFDIR=\"$(sysconfdir)/glusterfs\" -glusterfs_booster_so_LDFLAGS = -shared -nostartfiles -glusterfs_booster_so_LDADD = -L$(top_builddir)/libglusterfs/src -lglusterfs \ - -L$(top_builddir)/libglusterfsclient/src -lglusterfsclient -CLEANFILES = +libglusterfs_booster_la_LDFLAGS = -module -avoidversion +libglusterfs_booster_la_LIBADD = $(top_builddir)/libglusterfs/src/libglusterfs.la $(top_builddir)/libglusterfsclient/src/libglusterfsclient.la + +CLEANFILES = + +uninstall-local: + rm -f $(DESTDIR)$(ldpreloaddir)/glusterfs-booster.so +install-data-hook: + ln -sf libglusterfs-booster.so $(DESTDIR)$(ldpreloaddir)/glusterfs-booster.so diff --git a/booster/src/booster.c b/booster/src/booster.c index 26cf6b611..0ed914b1f 100644 --- a/booster/src/booster.c +++ b/booster/src/booster.c @@ -49,6 +49,11 @@ #define GF_UNIT_KB 1024 #endif +/* attr constructor registers this function with libc's + * _init function as a function that must be called before + * the main() of the program. + */ +static void booster_lib_init (void) __attribute__((constructor)); extern fd_t * fd_ref (fd_t *fd); @@ -2194,7 +2199,7 @@ out: } void -_init (void) +booster_lib_init (void) { RESOLVE (open); |