Bug #79236 Enabling Undefined Behavior Sanitizer fails linking of *_embedded executables
Submitted: 11 Nov 2015 15:37 Modified: 8 Mar 2016 9:48
Reporter: Laurynas Biveinis (OCA) Email Updates:
Status: Closed Impact on me:
None 
Category:MySQL Server: Compiling Severity:S3 (Non-critical)
Version:5.7.9,5.7.11 OS:Ubuntu (15.10)
Assigned to: CPU Architecture:Any
Tags: ubsan

[11 Nov 2015 15:37] Laurynas Biveinis
Description:
Linking CXX executable mysql_client_test_embedded
../libmysqld.a(sql_base.cc.o):(.data.rel+0x98): undefined reference to `typeinfo for Relay_log_info'
../libmysqld.a(sql_base.cc.o):(.data.rel+0xcd8): undefined reference to `typeinfo for Relay_log_info'
../libmysqld.a(sql_base.cc.o):(.data.rel+0x7218): undefined reference to `typeinfo for Relay_log_info'
../libmysqld.a(sql_base.cc.o):(.data.rel+0x7298): undefined reference to `typeinfo for Relay_log_info'
../libmysqld.a(sql_base.cc.o):(.data.rel+0x7458): undefined reference to `typeinfo for Relay_log_info'
collect2: error: ld returned 1 exit status
libmysqld/examples/CMakeFiles/mysql_client_test_embedded.dir/build.make:88: recipe for target 'libmysqld/examples/mysql_client_test_embedded' failed
make[2]: *** [libmysqld/examples/mysql_client_test_embedded] Error 1
CMakeFiles/Makefile2:7090: recipe for target 'libmysqld/examples/CMakeFiles/mysql_client_test_embedded.dir/all' failed
make[1]: *** [libmysqld/examples/CMakeFiles/mysql_client_test_embedded.dir/all] Error 2
Makefile:146: recipe for target 'all' failed
make: *** [all] Error 2

How to repeat:
$ cmake ../mysql-5.7.9/ -DBUILD_CONFIG=mysql_release -DWITH_DEBUG=ON -DWITH_UBSAN=ON -DWITH_SSL=system -DWITH_BOOST=~/mysql-boost
...
$ make
...

Removing -DWITH_UBSAN=ON allows build to complete.
[11 Nov 2015 15:44] Laurynas Biveinis
With make -k the same happens for

Linking CXX executable mysql_embedded
../libmysqld.a(sql_base.cc.o):(.data.rel+0x98): undefined reference to `typeinfo for Relay_log_info'
../libmysqld.a(sql_base.cc.o):(.data.rel+0xcd8): undefined reference to `typeinfo for Relay_log_info'
../libmysqld.a(sql_base.cc.o):(.data.rel+0x7218): undefined reference to `typeinfo for Relay_log_info'
../libmysqld.a(sql_base.cc.o):(.data.rel+0x7298): undefined reference to `typeinfo for Relay_log_info'
../libmysqld.a(sql_base.cc.o):(.data.rel+0x7458): undefined reference to `typeinfo for Relay_log_info'
collect2: error: ld returned 1 exit status
libmysqld/examples/CMakeFiles/mysql_embedded.dir/build.make:140: recipe for target 'libmysqld/examples/mysql_embedded' failed
make[2]: *** [libmysqld/examples/mysql_embedded] Error 1
make[2]: Target 'libmysqld/examples/CMakeFiles/mysql_embedded.dir/build' not remade because of errors.
CMakeFiles/Makefile2:7126: recipe for target 'libmysqld/examples/CMakeFiles/mysql_embedded.dir/all' failed
make[1]: *** [libmysqld/examples/CMakeFiles/mysql_embedded.dir/all] Error 2
Scanning dependencies of target mysqltest_embedded

Linking CXX executable mysqltest_embedded
../libmysqld.a(sql_base.cc.o):(.data.rel+0x98): undefined reference to `typeinfo for Relay_log_info'
../libmysqld.a(sql_base.cc.o):(.data.rel+0xcd8): undefined reference to `typeinfo for Relay_log_info'
../libmysqld.a(sql_base.cc.o):(.data.rel+0x7218): undefined reference to `typeinfo for Relay_log_info'
../libmysqld.a(sql_base.cc.o):(.data.rel+0x7298): undefined reference to `typeinfo for Relay_log_info'
../libmysqld.a(sql_base.cc.o):(.data.rel+0x7458): undefined reference to `typeinfo for Relay_log_info'
collect2: error: ld returned 1 exit status
libmysqld/examples/CMakeFiles/mysqltest_embedded.dir/build.make:88: recipe for target 'libmysqld/examples/mysqltest_embedded' failed
make[2]: *** [libmysqld/examples/mysqltest_embedded] Error 1
make[2]: Target 'libmysqld/examples/CMakeFiles/mysqltest_embedded.dir/build' not remade because of errors.
CMakeFiles/Makefile2:7161: recipe for target 'libmysqld/examples/CMakeFiles/mysqltest_embedded.dir/all' failed
make[1]: *** [libmysqld/examples/CMakeFiles/mysqltest_embedded.dir/all] Error 2
[11 Nov 2015 21:21] MySQL Verification Team
Compiling on Debian

Attachment: buildbug79236.txt (text/plain), 152.96 KiB.

[11 Nov 2015 21:24] MySQL Verification Team
Thank you for the bug repoet. I couldn't repeat on Debian I attached the compiling output so you can give me a tip if I did something wrong.

miguel@debianvb:~/mysql-5.7.9$ lsb_release -a
No LSB modules are available.
Distributor ID:	Debian
Description:	Debian GNU/Linux 8.2 (jessie)
Release:	8.2
Codename:	jessie
miguel@debianvb:~/mysql-5.7.9$ gcc --version
gcc (Debian 4.9.2-10) 4.9.2

Scanning dependencies of target mysql_client_test_embedded
[100%] Building C object libmysqld/examples/CMakeFiles/mysql_client_test_embedded.dir/__/__/testclients/mysql_client_test.c.o
Linking CXX executable mysql_client_test_embedded
[100%] Built target mysql_client_test_embedded
Scanning dependencies of target mysql_embedded
[100%] Building CXX object libmysqld/examples/CMakeFiles/mysql_embedded.dir/__/__/client/completion_hash.cc.o
[100%] Building CXX object libmysqld/examples/CMakeFiles/mysql_embedded.dir/__/__/client/mysql.cc.o
[100%] Building CXX object libmysqld/examples/CMakeFiles/mysql_embedded.dir/__/__/client/readline.cc.o
Linking CXX executable mysql_embedded
[100%] Built target mysql_embedded
Scanning dependencies of target mysqltest_embedded
[100%] Building CXX object libmysqld/examples/CMakeFiles/mysqltest_embedded.dir/__/__/client/mysqltest.cc.o
Linking CXX executable mysqltest_embedded
[100%] Built target mysqltest_embedded
Scanning dependencies of target my_safe_process
[100%] Building CXX object mysql-test/lib/My/SafeProcess/CMakeFiles/my_safe_process.dir/safe_process.cc.o
Linking CXX executable my_safe_process
[100%] Built target my_safe_process
[11 Nov 2015 21:29] MySQL Verification Team
miguel@debianvb:~/mysql-5.7.9$ dpkg -l libubsan*
Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend
|/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)
||/ Name                                Version                Architecture           Description
+++-===================================-======================-======================-============================================================================
ii  libubsan0:amd64                     4.9.2-10               amd64                  UBSan -- undefined behaviour sanitizer (runtime)
un  libubsan0-dbg                       <none>                 <none>                 (no description available)
[12 Nov 2015 0:47] MySQL Verification Team
Thank you for the bug report.

/usr/bin/ar: creating /home/miguel/mysql-5.7.9/libmysqld/libmysqld.a
[100%] Built target mysqlserver
Scanning dependencies of target mysql_client_test_embedded
[100%] Building C object libmysqld/examples/CMakeFiles/mysql_client_test_embedded.dir/__/__/testclients/mysql_client_test.c.o
Linking CXX executable mysql_client_test_embedded
../libmysqld.a(sql_base.cc.o):(.data.rel+0x98): undefined reference to `typeinfo for Relay_log_info'
../libmysqld.a(sql_base.cc.o):(.data.rel+0xcd8): undefined reference to `typeinfo for Relay_log_info'
../libmysqld.a(sql_base.cc.o):(.data.rel+0x7218): undefined reference to `typeinfo for Relay_log_info'
../libmysqld.a(sql_base.cc.o):(.data.rel+0x7298): undefined reference to `typeinfo for Relay_log_info'
../libmysqld.a(sql_base.cc.o):(.data.rel+0x7458): undefined reference to `typeinfo for Relay_log_info'
collect2: error: ld returned 1 exit status
libmysqld/examples/CMakeFiles/mysql_client_test_embedded.dir/build.make:88: recipe for target 'libmysqld/examples/mysql_client_test_embedded' failed
make[2]: *** [libmysqld/examples/mysql_client_test_embedded] Error 1
CMakeFiles/Makefile2:7783: recipe for target 'libmysqld/examples/CMakeFiles/mysql_client_test_embedded.dir/all' failed
make[1]: *** [libmysqld/examples/CMakeFiles/mysql_client_test_embedded.dir/all] Error 2
Makefile:136: recipe for target 'all' failed
make: *** [all] Error 2
miguel@ubuntu1510:~/mysql-5.7.9$ lsb_release -a
No LSB modules are available.
Distributor ID:	Ubuntu
Description:	Ubuntu 15.10
Release:	15.10
Codename:	wily
miguel@ubuntu1510:~/mysql-5.7.9$ gcc --version
gcc (Ubuntu 5.2.1-22ubuntu2) 5.2.1 20151010
Copyright (C) 2015 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

miguel@ubuntu1510:~/mysql-5.7.9$ dpkg -l libubsan*
Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend
|/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)
||/ Name                            Version              Architecture         Description
+++-===============================-====================-====================-====================================================================
ii  libubsan0:amd64                 5.2.1-22ubuntu2      amd64                UBSan -- undefined behaviour sanitizer (runtime)
un  libubsan0-dbg                   <none>               <none>               (no description available)
miguel@ubuntu1510:~/mysql-5.7.9$
[12 Nov 2015 16:53] Paul DuBois
Noted in 5.7.11, 5.8.0 changelogs.

Some replication-only code was not protected with #ifdef and failed
to compile with the WITH_UBSAN CMake option enabled.
[7 Mar 2016 7:27] Laurynas Biveinis
Re-opening, with 5.7.11 I still see the same:
$ cmake ../mysql-5.7.11/ -DBUILD_CONFIG=mysql_release -DWITH_DEBUG=ON -DWITH_UBSAN=ON -DWITH_BOOST=~/mysql-boost
...
$ make
...
inking CXX executable mysql_embedded
Linking CXX executable mysqltest_embedded
Linking CXX executable mysql_client_test_embedded
../libmysqld.a(sql_class.cc.o):(.data.rel+0x1818): undefined reference to `typeinfo for Relay_log_info'
../libmysqld.a(sql_class.cc.o):(.data.rel+0x1898): undefined reference to `typeinfo for Relay_log_info'
../libmysqld.a(sql_class.cc.o):(.data.rel+0x1918): undefined reference to `typeinfo for Relay_log_info'
collect2: error: ld returned 1 exit status
libmysqld/examples/CMakeFiles/mysql_embedded.dir/build.make:138: recipe for target 'libmysqld/examples/mysql_embedded' failed
make[2]: *** [libmysqld/examples/mysql_embedded] Error 1
CMakeFiles/Makefile2:7385: recipe for target 'libmysqld/examples/CMakeFiles/mysql_embedded.dir/all' failed
make[1]: *** [libmysqld/examples/CMakeFiles/mysql_embedded.dir/all] Error 2
make[1]: *** Waiting for unfinished jobs....
../libmysqld.a(sql_class.cc.o):(.data.rel+0x1818): undefined reference to `typeinfo for Relay_log_info'
../libmysqld.a(sql_class.cc.o):(.data.rel+0x1898): undefined reference to `typeinfo for Relay_log_info'
../libmysqld.a(sql_class.cc.o):(.data.rel+0x1918): undefined reference to `typeinfo for Relay_log_info'
collect2: error: ld returned 1 exit status
libmysqld/examples/CMakeFiles/mysqltest_embedded.dir/build.make:86: recipe for target 'libmysqld/examples/mysqltest_embedded' failed
make[2]: *** [libmysqld/examples/mysqltest_embedded] Error 1
CMakeFiles/Makefile2:7420: recipe for target 'libmysqld/examples/CMakeFiles/mysqltest_embedded.dir/all' failed
make[1]: *** [libmysqld/examples/CMakeFiles/mysqltest_embedded.dir/all] Error 2
../libmysqld.a(sql_class.cc.o):(.data.rel+0x1818): undefined reference to `typeinfo for Relay_log_info'
../libmysqld.a(sql_class.cc.o):(.data.rel+0x1898): undefined reference to `typeinfo for Relay_log_info'
../libmysqld.a(sql_class.cc.o):(.data.rel+0x1918): undefined reference to `typeinfo for Relay_log_info'
collect2: error: ld returned 1 exit status
libmysqld/examples/CMakeFiles/mysql_client_test_embedded.dir/build.make:86: recipe for target 'libmysqld/examples/mysql_client_test_embedded' failed
make[2]: *** [libmysqld/examples/mysql_client_test_embedded] Error 1
CMakeFiles/Makefile2:7349: recipe for target 'libmysqld/examples/CMakeFiles/mysql_client_test_embedded.dir/all' failed
make[1]: *** [libmysqld/examples/CMakeFiles/mysql_client_test_embedded.dir/all] Error 2
Makefile:146: recipe for target 'all' failed
make: *** [all] Error 2
[7 Mar 2016 7:28] Laurynas Biveinis
updating version field
[8 Mar 2016 9:48] Jon Olav Hauglid
Should be fixed again in the next 5.7 release.