aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Nikolaus Rath <Nikolaus@rath.org>2017-09-19 16:24:37 +0100
committerGravatar Nikolaus Rath <Nikolaus@rath.org>2017-09-19 16:47:40 +0100
commitf24673cc174297a2cbe452c8f5fd0956d8455fb9 (patch)
treed07fe48178364f28ad4cf14a1eb69bac0bbd151c
parentda363c514b1b94b3df992e05ebacbc3d5ff0cf0e (diff)
Don't use external symbol names in internal files
The fuse_session_loop_mt() and fuse_loop_mt() symbols are only visible when linking against the shared object. The code in lib/, however, is compiled *into* the shared object and should thus use the internal names of these functions. Surprisingly enough, the code still worked before - but only when link time optimization was disabled. Unfortunately, we still can't compile with LTO because it seems that enabling LTO somehow makes the tagged symbols vanish. Without lto, we have: $ nm lib/libfuse3.so | grep fuse_new 0000000000011070 T fuse_new_30 0000000000010a00 t fuse_new_31 0000000000011070 T fuse_new@FUSE_3.0 0000000000010a00 T fuse_new@@FUSE_3.1 and with LTO: $ nm lib/libfuse3.so | grep fuse_new 0000000000019a70 T fuse_new_30 0000000000019270 t fuse_new_31 See also issue #198.
-rw-r--r--lib/cuse_lowlevel.c2
-rw-r--r--lib/fuse.c5
-rw-r--r--lib/fuse_i.h3
-rw-r--r--lib/fuse_loop_mt.c1
-rw-r--r--lib/helper.c2
5 files changed, 6 insertions, 7 deletions
diff --git a/lib/cuse_lowlevel.c b/lib/cuse_lowlevel.c
index 19b2ab6..56e6aa9 100644
--- a/lib/cuse_lowlevel.c
+++ b/lib/cuse_lowlevel.c
@@ -353,7 +353,7 @@ int cuse_lowlevel_main(int argc, char *argv[], const struct cuse_info *ci,
struct fuse_loop_config config;
config.clone_fd = 0;
config.max_idle_threads = 10;
- res = fuse_session_loop_mt(se, &config);
+ res = fuse_session_loop_mt_32(se, &config);
}
else
res = fuse_session_loop(se);
diff --git a/lib/fuse.c b/lib/fuse.c
index 75ae38a..47a9961 100644
--- a/lib/fuse.c
+++ b/lib/fuse.c
@@ -4382,7 +4382,6 @@ int fuse_loop(struct fuse *f)
return fuse_session_loop(f->se);
}
-int fuse_loop_mt_32(struct fuse *f, struct fuse_loop_config *config);
FUSE_SYMVER(".symver fuse_loop_mt_32,fuse_loop_mt@@FUSE_3.2");
int fuse_loop_mt_32(struct fuse *f, struct fuse_loop_config *config)
{
@@ -4393,7 +4392,7 @@ int fuse_loop_mt_32(struct fuse *f, struct fuse_loop_config *config)
if (res)
return -1;
- res = fuse_session_loop_mt(fuse_get_session(f), config);
+ res = fuse_session_loop_mt_32(fuse_get_session(f), config);
fuse_stop_cleanup_thread(f);
return res;
}
@@ -4683,8 +4682,6 @@ void fuse_stop_cleanup_thread(struct fuse *f)
}
-/* Explicit prototype to prevent compiler warnings
- (fuse.h only defines fuse_new()) */
FUSE_SYMVER(".symver fuse_new_31,fuse_new@@FUSE_3.1");
struct fuse *fuse_new_31(struct fuse_args *args,
const struct fuse_operations *op,
diff --git a/lib/fuse_i.h b/lib/fuse_i.h
index 80849ec..cf35551 100644
--- a/lib/fuse_i.h
+++ b/lib/fuse_i.h
@@ -128,3 +128,6 @@ void fuse_session_process_buf_int(struct fuse_session *se,
struct fuse *fuse_new_31(struct fuse_args *args, const struct fuse_operations *op,
size_t op_size, void *private_data);
+int fuse_loop_mt_32(struct fuse *f, struct fuse_loop_config *config);
+int fuse_session_loop_mt_32(struct fuse_session *se, struct fuse_loop_config *config);
+
diff --git a/lib/fuse_loop_mt.c b/lib/fuse_loop_mt.c
index 904539e..731fcf5 100644
--- a/lib/fuse_loop_mt.c
+++ b/lib/fuse_loop_mt.c
@@ -301,7 +301,6 @@ static void fuse_join_worker(struct fuse_mt *mt, struct fuse_worker *w)
free(w);
}
-int fuse_session_loop_mt_32(struct fuse_session *se, struct fuse_loop_config *config);
FUSE_SYMVER(".symver fuse_session_loop_mt_32,fuse_session_loop_mt@@FUSE_3.2");
int fuse_session_loop_mt_32(struct fuse_session *se, struct fuse_loop_config *config)
{
diff --git a/lib/helper.c b/lib/helper.c
index cb7aebc..3627749 100644
--- a/lib/helper.c
+++ b/lib/helper.c
@@ -336,7 +336,7 @@ int fuse_main_real(int argc, char *argv[], const struct fuse_operations *op,
struct fuse_loop_config loop_config;
loop_config.clone_fd = opts.clone_fd;
loop_config.max_idle_threads = opts.max_idle_threads;
- res = fuse_loop_mt(fuse, &loop_config);
+ res = fuse_loop_mt_32(fuse, &loop_config);
}
if (res)
res = 1;