LLVM Bugzilla is read-only and represents the historical archive of all LLVM issues filled before November 26, 2021. Use github to submit LLVM bugs

Bug 37154 - errors on libmariadb
Summary: errors on libmariadb
Status: RESOLVED FIXED
Alias: None
Product: lld
Classification: Unclassified
Component: ELF (show other bugs)
Version: unspecified
Hardware: PC Linux
: P normal
Assignee: Unassigned LLVM Bugs
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2018-04-17 11:45 PDT by claprix
Modified: 2019-08-18 09:26 PDT (History)
4 users (show)

See Also:
Fixed By Commit(s):


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description claprix 2018-04-17 11:45:53 PDT
10.3 branch from https://github.com/MariaDB/server

cmake -DWITHOUT_MROONGA_STORAGE_ENGINE=1 -DWITHOUT_ROCKSDB_STORAGE_ENGINE=1 -DWITHOUT_TOKUDB_STORAGE_ENGINE=1 -DCMAKE_EXE_LINKER_FLAGS=-fuse-ld=lld -DCMAKE_SHARED_LINKER_FLAGS=-fuse-ld=lld -DCMAKE_BUILD_TYPE=Debug -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++ ../mariadb

-DWITHOUT_*_STORAGE_ENGINE=1 just for a build speed up.

[ 59%] Linking C shared library libmariadb.so
cd /home/kevg/work/tmp/libmariadb/libmariadb && /usr/bin/cmake -E cmake_link_script CMakeFiles/libmariadb.dir/link.txt --verbose=1
/home/kevg/bin/clang -fPIC -fdiagnostics-color -Wl,-z,relro,-z,now -fstack-protector --param=ssp-buffer-size=4 -fPIC -g -DENABLED_DEBUG_SYNC -ggdb3 -DSAFE_MUTEX -DSAFEMALLOC -Wall -Wdeclaration-after-statement -Wextra -Wformat-security -Wno-init-self -Wno-null-conversion -Wno-unused-parameter -Wno-unused-private-field -Woverloaded-virtual -Wnon-virtual-dtor -Wvla -Wwrite-strings -fuse-ld=lld -shared -Wl,-soname,libmariadb.so.3 -o libmariadb.so.3 CMakeFiles/mariadb_obj.dir/__/plugins/pvio/pvio_socket.c.o CMakeFiles/mariadb_obj.dir/__/plugins/auth/my_auth.c.o CMakeFiles/mariadb_obj.dir/__/plugins/auth/old_password.c.o CMakeFiles/mariadb_obj.dir/ma_array.c.o CMakeFiles/mariadb_obj.dir/ma_charset.c.o CMakeFiles/mariadb_obj.dir/ma_hash.c.o CMakeFiles/mariadb_obj.dir/ma_net.c.o CMakeFiles/mariadb_obj.dir/mariadb_charset.c.o CMakeFiles/mariadb_obj.dir/ma_time.c.o CMakeFiles/mariadb_obj.dir/ma_default.c.o CMakeFiles/mariadb_obj.dir/ma_errmsg.c.o CMakeFiles/mariadb_obj.dir/mariadb_lib.c.o CMakeFiles/mariadb_obj.dir/ma_list.c.o CMakeFiles/mariadb_obj.dir/ma_pvio.c.o CMakeFiles/mariadb_obj.dir/ma_tls.c.o CMakeFiles/mariadb_obj.dir/ma_alloc.c.o CMakeFiles/mariadb_obj.dir/ma_compress.c.o CMakeFiles/mariadb_obj.dir/ma_init.c.o CMakeFiles/mariadb_obj.dir/ma_password.c.o CMakeFiles/mariadb_obj.dir/ma_ll2str.c.o CMakeFiles/mariadb_obj.dir/ma_sha1.c.o CMakeFiles/mariadb_obj.dir/mariadb_stmt.c.o CMakeFiles/mariadb_obj.dir/ma_loaddata.c.o CMakeFiles/mariadb_obj.dir/ma_stmt_codec.c.o CMakeFiles/mariadb_obj.dir/ma_string.c.o CMakeFiles/mariadb_obj.dir/ma_dtoa.c.o CMakeFiles/mariadb_obj.dir/ma_client_plugin.c.o CMakeFiles/mariadb_obj.dir/ma_io.c.o CMakeFiles/mariadb_obj.dir/secure/openssl.c.o CMakeFiles/mariadb_obj.dir/mariadb_dyncol.c.o CMakeFiles/mariadb_obj.dir/mariadb_async.c.o CMakeFiles/mariadb_obj.dir/ma_context.c.o -lpthread -lz -ldl -lm -lpthread -lpthread -ldl -lm -lssl -lcrypto -Wl,--no-undefined mariadbclient.def 
/home/kevg/bin/ld.lld: error: duplicate symbol 'mysql_get_timeout_value' in version script
/home/kevg/bin/ld.lld: error: duplicate symbol 'mysql_get_timeout_value_ms' in version script
/home/kevg/bin/ld.lld: error: <internal>: symbol "mysql_affected_rows@libmariadbclient_18" has undefined version libmariadbclient_18"
/home/kevg/bin/ld.lld: error: <internal>: symbol "mysql_autocommit@libmariadbclient_18" has undefined version libmariadbclient_18"
/home/kevg/bin/ld.lld: error: <internal>: symbol "mysql_change_user@libmariadbclient_18" has undefined version libmariadbclient_18"
/home/kevg/bin/ld.lld: error: <internal>: symbol "mysql_character_set_name@libmariadbclient_18" has undefined version libmariadbclient_18"
/home/kevg/bin/ld.lld: error: <internal>: symbol "mysql_client_find_plugin@libmariadbclient_18" has undefined version libmariadbclient_18"
/home/kevg/bin/ld.lld: error: <internal>: symbol "mysql_client_register_plugin@libmariadbclient_18" has undefined version libmariadbclient_18"
/home/kevg/bin/ld.lld: error: <internal>: symbol "mysql_close@libmariadbclient_18" has undefined version libmariadbclient_18"
/home/kevg/bin/ld.lld: error: <internal>: symbol "mysql_commit@libmariadbclient_18" has undefined version libmariadbclient_18"
/home/kevg/bin/ld.lld: error: <internal>: symbol "mysql_data_seek@libmariadbclient_18" has undefined version libmariadbclient_18"
/home/kevg/bin/ld.lld: error: <internal>: symbol "mysql_debug@libmariadbclient_18" has undefined version libmariadbclient_18"
/home/kevg/bin/ld.lld: error: <internal>: symbol "mysql_dump_debug_info@libmariadbclient_18" has undefined version libmariadbclient_18"
/home/kevg/bin/ld.lld: error: <internal>: symbol "mysql_embedded@libmariadbclient_18" has undefined version libmariadbclient_18"
/home/kevg/bin/ld.lld: error: <internal>: symbol "mysql_eof@libmariadbclient_18" has undefined version libmariadbclient_18"
/home/kevg/bin/ld.lld: error: <internal>: symbol "mysql_errno@libmariadbclient_18" has undefined version libmariadbclient_18"
/home/kevg/bin/ld.lld: error: <internal>: symbol "mysql_error@libmariadbclient_18" has undefined version libmariadbclient_18"
/home/kevg/bin/ld.lld: error: <internal>: symbol "mysql_escape_string@libmariadbclient_18" has undefined version libmariadbclient_18"
/home/kevg/bin/ld.lld: error: <internal>: symbol "mysql_fetch_field@libmariadbclient_18" has undefined version libmariadbclient_18"
/home/kevg/bin/ld.lld: error: <internal>: symbol "mysql_fetch_field_direct@libmariadbclient_18" has undefined version libmariadbclient_18"
/home/kevg/bin/ld.lld: error: too many errors emitted, stopping now (use -error-limit=0 to see all errors)
clang-6.0: error: linker command failed with exit code 1 (use -v to see invocation)

Build works with ld.
Gold complains on incorrect VERSION usage.

I don't know what's correct behaviour but I suspect <internal> is not something user supposed to see.

This looks like a bit useful information https://github.com/MariaDB/server/commit/f91561bf54f5e2f1f97f3fddcb866898730ae343
Comment 1 claprix 2018-04-17 11:46:39 PDT
$ ld.lld --version
LLD 7.0.0 (https://llvm.org/git/lld.git 73e702cea18c1794328ecb1a3126db223e070fe2) (compatible with GNU linkers)
Comment 2 George Rimar 2018-05-15 08:03:20 PDT
I guess we could avoid printing "<internal>" once and forever with something like https://reviews.llvm.org/D45375.
Comment 3 Fangrui Song 2018-06-12 21:03:46 PDT
I can still get the following messages linking libmariadb.so but no other issues

error: duplicate symbol 'mysql_get_timeout_value' in version script
error: duplicate symbol 'mysql_get_timeout_value_ms' in version script
Comment 4 claprix 2018-06-14 01:23:27 PDT
Yes, no internal errors on a recent lld. But difference between GNU ld and lld remains. Note that lld.llvm.org says that lld is a drop-in replacement for GNU linkers. This is not true. One of GNU ld and lld has a bug.
Comment 5 Fangrui Song 2019-08-18 09:26:59 PDT
I think this is likely a bug of the version script. It assigns multiple versions to a symbol, thus the lld error, though ld.bfd just ignores it.

https://reviews.llvm.org/D64549 relaxed the errors to warnings. gold should issue warnings as well.

gold is also a drop-in replacement of ld.bfd, but that doesn't mean gold/lld necessarily copy every corner case of ld.bfd. We should be careful on behavior differences, but I think on this particular one warning/error is a more sensible action.