Don't use external symbol names in internal files
authorNikolaus Rath <Nikolaus@rath.org>
Tue, 19 Sep 2017 15:24:37 +0000 (16:24 +0100)
committerNikolaus Rath <Nikolaus@rath.org>
Tue, 19 Sep 2017 15:47:40 +0000 (16:47 +0100)
commitf24673cc174297a2cbe452c8f5fd0956d8455fb9
treed07fe48178364f28ad4cf14a1eb69bac0bbd151c
parentda363c514b1b94b3df992e05ebacbc3d5ff0cf0e
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.
lib/cuse_lowlevel.c
lib/fuse.c
lib/fuse_i.h
lib/fuse_loop_mt.c
lib/helper.c