diff options
author | Kaleb S. KEITHLEY <kkeithle@redhat.com> | 2014-11-18 11:08:16 -0500 |
---|---|---|
committer | Shyamsundar Ranganathan <srangana@redhat.com> | 2015-01-12 09:16:08 -0800 |
commit | c49a77001bd80affa70d22ba974d8de9e3f0f0cd (patch) | |
tree | 15cf68f9bbe72f3d4d00f5ae750e4d8ac980af36 /api/src/glfs.c | |
parent | f839e25a1ee67279c0c59da9d7262728133e8b37 (diff) |
api: versioned symbols in libgfapi.so for compatibility
Use versioned symbols to keep libgfapi at libgfapi.so.0.0.0
Revisited to address broken build on Mac OS X
See http://review.gluster.org/9036
Rebased to include http://review.gluster.org/#/c/9376/ (glfs_resolve())
but note that gerrit's "Rebase Change" couldn't do it.
N.B. noticed that glfs_get_volumeid() decl in glfs.h was missing
the __THROW, added it.
On systems using ELF and the GNU toolchain, symbol versions are created
with a .symver asm operand in the .c source file. Clang is claimed to
be compatible with gcc, so we'll pretend for now that this also works
with clang.
On Mac OS X, aliases are created with __asm "magic" in the .h header
file. In the normal case, when both the decl and defn match, that's
all that's needed. In our case though the decl and defn don't match ---
we have, e.g. a defn such as 'int glfs_foo(...)' and the corresponding
decl is 'int pub_glfs_foo(...)'. To make this work we create the necessary
aliases in the library at link time with the -alias_list link option.
Note that this results in there being pairs of symbols in the .dylib,
e.g. _pub_glfs_foo and _glfs_foo$GFAPI_3.4.0. We could use another
link option, -unexported_symbols_list to elide the _pub_glfs_* symbols.
(And we probably should.)
Linux symbol versioning was essentially copied from Solaris; in general
I would expect this to "just work" on Solaris, but until someone tries
we don't really know.
Change-Id: Icb96a3c2d80be7b6d7a6849bb9168f03a947f47c
BUG: 1160709
Signed-off-by: Kaleb S. KEITHLEY <kkeithle@redhat.com>
Reviewed-on: http://review.gluster.org/9143
Tested-by: Gluster Build System <jenkins@build.gluster.com>
Reviewed-by: Niels de Vos <ndevos@redhat.com>
Reviewed-by: Shyamsundar Ranganathan <srangana@redhat.com>
Diffstat (limited to 'api/src/glfs.c')
-rw-r--r-- | api/src/glfs.c | 7 |
1 files changed, 2 insertions, 5 deletions
diff --git a/api/src/glfs.c b/api/src/glfs.c index 04ca7129e8e..ee1e90d75b6 100644 --- a/api/src/glfs.c +++ b/api/src/glfs.c @@ -805,9 +805,6 @@ pub_glfs_init (struct glfs *fs) GFAPI_SYMVER_PUBLIC_DEFAULT(glfs_init, 3.4.0); -extern xlator_t * -priv_glfs_active_subvol (struct glfs *); - int pub_glfs_fini (struct glfs *fs) { @@ -849,7 +846,7 @@ pub_glfs_fini (struct glfs *fs) pthread_mutex_unlock (&fs->mutex); if (fs_init != 0) { - subvol = priv_glfs_active_subvol (fs); + subvol = glfs_active_subvol (fs); if (subvol) { /* PARENT_DOWN within glfs_subvol_done() is issued only on graph switch (new graph should activiate @@ -892,7 +889,7 @@ pub_glfs_fini (struct glfs *fs) goto fail; } } - priv_glfs_subvol_done (fs, subvol); + glfs_subvol_done (fs, subvol); } if (gf_log_fini(ctx) != 0) |