Bug #28381 Building the "embedded" server fails, due to a recent code change
Submitted: 11 May 2007 15:37 Modified: 8 Aug 2007 16:28
Reporter: Joerg Bruehe Email Updates:
Status: Closed Impact on me:
None 
Category:MySQL Server: Compiling Severity:S1 (Critical)
Version:5.1.18 OS:Linux (ICC / IA64)
Assigned to: Antony Curtis CPU Architecture:Any

[11 May 2007 15:37] Joerg Bruehe
Description:
According to the build log, the problem is caused by the changes for WL#2936.

Comparing the log of the last working (test) to the first failing (release) build, there are many new warnings of this type:

> ha_innodb.cc(178): warning #411: class "<unnamed>" defines no constructor to initialize the following:
>             const member "<unnamed>::def_val"
>   static MYSQL_THDVAR_BOOL(support_xa, PLUGIN_VAR_OPCMDARG,
>          ^
>

Much later, linking "mysqltest_embedded" fails with this message:

> /usr/lib/libc_nonshared.a(elf-init.oS)(.text+0x31): In function `__libc_csu_init':
> : relocation truncated to fit: GPREL22 __init_array_start

This breaks both the tar.gz and the RPM build.
A test build skipping the embedded server succeeded in linking,
but I did not run tests.

How to repeat:
Build unsing the Intel compiler for the IA64 CPU.
[12 May 2007 14:12] Antony Curtis
I see the compiler warnings - in fact there are a lot of compiler warnings - in particular warnings against gcc-specific syntax such as the 'pragma implementation' etc.but every attempt to build completes successfully.

However. embedded test run failes - looks like system vars not initialised correctly as results are consistantly missing system vars whenever 'SHOW VARIABLES' is executed.

Is this the faulure that needs to be fixed?
[12 May 2007 15:01] Joerg Bruehe
In the release builds, I don't get so far as to try the tests - linking fails.

Look at the file with the log differences
(left: working test build / right: failing release build, after the push):
    rx2620b-diff-work-fail.log

The warnings about the missing constructor are the new ones (from the push),
and I assume it it this which causes the final link failure.
I agree that the linker error message is not very helpful.

When you write "building completes", are you sure you configured using "--with-embedded-server" ?
In the release builds, this option is what caused it to fail.
Using "--without-embedded-server", I also could build - but that is not the configuration to be published.
[14 May 2007 5:09] Antony Curtis
I have been doing some research and it appears that this error message is an old bug in GNU binutils which was much discussed during 2003.

On the machine in question, I can see...

[mysqldev@rx2620b mysqldev]$ ld --version
GNU ld version 2.14.90.0.4 20030523

It is quite possible that gnu binutils needs to be upgraded on this machine.
[14 May 2007 18:29] Joerg Bruehe
I checked the RedHat web site:
they have binutils-2.14.90.0.4-42 for this platform,
our machine is running binutils-2.14.90.0.4-39.

I filed a sys request about an update.
[15 May 2007 15:00] Joerg Bruehe
The machine has bee upgraded to 
   binutils-2.14.90.0.4-42
but the linker error persists.

That binutils version is the highest one available for RedHat EL AS 3,
so there is no chance for a further upgrade.
[8 Jun 2007 15:28] Antony Curtis
Ok, I have examined this bug.... and it is definitely the bug reported
at http://sources.redhat.com/ml/binutils/2003-11/msg00054.html

However, I was successfully able to compile the code...

> [mysqldev@rx2620b examples]$ PATH=/users/acurtis/ia64tools/bin:$PATH
> [mysqldev@rx2620b examples]$ export PATH
> [mysqldev@rx2620b examples]$ make
> make  all-am
> make[1]: Entering directory `/data/home/mysqldev/tmp-200705311919-5.1.20-beta-17729/rx2620b-icc-glibc23/mysql-5.1.20-beta/libmysqld/examples'
> /bin/sh ../../libtool --preserve-dup-deps --tag=CXX --mode=link icpc -static-libgcc -static-libcxa -i-static  -O3 -unroll2 -ip -mp -restrict -no-ftz   -fno-implicit-templates -fno-exceptions -fno-rtti  -rdynamic  -o mysql_client_test_embedded  mysql_client_test.o ../libmysqld.a -ldl    -lpthread -lrt -lcrypt -lnsl -lm  -lpthread   -lrt -lcrypt -lnsl -lm   ../../zlib/libzlt.la
> icpc -static-libgcc -static-libcxa -i-static -O3 -unroll2 -ip -mp -restrict -no-ftz -fno-implicit-templates -fno-exceptions -fno-rtti -rdynamic -o mysql_client_test_embedded mysql_client_test.o  ../libmysqld.a -ldl -lpthread -lrt -lcrypt -lnsl -lm -lpthread -lrt -lcrypt -lnsl -lm ../../zlib/.libs/libzlt.a -lrt -lcrypt -lnsl -lm
> if icpc -static-libgcc -static-libcxa -i-static -DEMBEDDED_LIBRARY -I. -I. -I../.. -I../../include -I../../include -I. -I../.. -I../../client -I../../regex     -O3 -unroll2 -ip -mp -restrict -no-ftz   -fno-implicit-templates -fno-exceptions -fno-rtti -MT mysql.o -MD -MP -MF ".deps/mysql.Tpo" -c -o mysql.o mysql.cc; \
> then mv -f ".deps/mysql.Tpo" ".deps/mysql.Po"; else rm -f ".deps/mysql.Tpo"; exit 1; fi
> if icpc -static-libgcc -static-libcxa -i-static -DEMBEDDED_LIBRARY -I. -I. -I../.. -I../../include -I../../include -I. -I../.. -I../../client -I../../regex     -O3 -unroll2 -ip -mp -restrict -no-ftz   -fno-implicit-templates -fno-exceptions -fno-rtti -MT readline.o -MD -MP -MF ".deps/readline.Tpo" -c -o readline.o readline.cc; \
> then mv -f ".deps/readline.Tpo" ".deps/readline.Po"; else rm -f ".deps/readline.Tpo"; exit 1; fi
> if icpc -static-libgcc -static-libcxa -i-static -DEMBEDDED_LIBRARY -I. -I. -I../.. -I../../include -I../../include -I. -I../.. -I../../client -I../../regex     -O3 -unroll2 -ip -mp -restrict -no-ftz   -fno-implicit-templates -fno-exceptions -fno-rtti -MT completion_hash.o -MD -MP -MF ".deps/completion_hash.Tpo" -c -o completion_hash.o completion_hash.cc; \
> then mv -f ".deps/completion_hash.Tpo" ".deps/completion_hash.Po"; else rm -f ".deps/completion_hash.Tpo"; exit 1; fi
> /bin/sh ../../libtool --preserve-dup-deps --tag=CXX --mode=link icpc -static-libgcc -static-libcxa -i-static  -O3 -unroll2 -ip -mp -restrict -no-ftz   -fno-implicit-templates -fno-exceptions -fno-rtti  -rdynamic  -o mysql  mysql.o readline.o completion_hash.o ../../cmd-line-utils/readline/libreadline.a -lncurses ../libmysqld.a -ldl    -lpthread -lrt -lcrypt -lnsl -lm  -lpthread   -lrt -lcrypt -lnsl -lm   ../../zlib/libzlt.la
> icpc -static-libgcc -static-libcxa -i-static -O3 -unroll2 -ip -mp -restrict -no-ftz -fno-implicit-templates -fno-exceptions -fno-rtti -rdynamic -o mysql mysql.o readline.o completion_hash.o  ../../cmd-line-utils/readline/libreadline.a -lncurses ../libmysqld.a -ldl -lpthread -lrt -lcrypt -lnsl -lm -lpthread -lrt -lcrypt -lnsl -lm ../../zlib/.libs/libzlt.a -lrt -lcrypt -lnsl -lm
> make[1]: Leaving directory `/data/home/mysqldev/tmp-200705311919-5.1.20-beta-17729/rx2620b-icc-glibc23/mysql-5.1.20-beta/libmysqld/examples'
> [mysqldev@rx2620b examples]$ ./mysql_client_test_embedded
> mysql_embedded: Unknown error 1146
> 070608 12:39:45  InnoDB: Operating system error number 2 in a file operation.
> InnoDB: The error means the system cannot find the path specified.
> InnoDB: If you are installing InnoDB, remember that you must create
> InnoDB: directories yourself, InnoDB does not create them.
> InnoDB: File name /usr/local/mysql/data/ibdata1
> InnoDB: File operation call: 'create'.
> InnoDB: Cannot continue operation.
> [mysqldev@rx2620b examples]$ ld --version
> GNU ld version 2.17
> Copyright 2005 Free Software Foundation, Inc.
> This program is free software; you may redistribute it under the terms of
> the GNU General Public License.  This program has absolutely no warranty.

GNU ld version 2.17 appears to be able to link it just fine.

As best as I can tell (looking at changelogs), the bug is a linker error which was fixed by GNU ld version 2.15... so I cannot reasonably suggest any solution which does not involve moving away from ld ver 2.14.x
[8 Jul 2007 23:00] Bugs System
No feedback was provided for this bug for over a month, so it is
being suspended automatically. If you are able to provide the
information that was originally requested, please do so and change
the status of the bug back to "Open".
[8 Aug 2007 16:28] Joerg Bruehe
The build host as a whole could not be upgraded,
but a newer version of "ld" (2.17 ?) is installed below "/usr/local",
and local configuration files have been changed to use it when a server is built.

This way, linking succeeds.