[MDEV-8791] AIX: Unresolved Symbols during linking Created: 2015-09-11  Updated: 2016-10-31  Resolved: 2016-10-31

Status: Closed
Project: MariaDB Server
Component/s: Compiling
Affects Version/s: 10.0.21
Fix Version/s: 10.2.3

Type: Bug Priority: Critical
Reporter: Chris Assignee: Vladislav Vaintroub
Resolution: Fixed Votes: 0
Labels: contribution, foundation
Environment:

AIX 6.1
IBM XLC Compiler 13.1.0 with IBM ld
cmake version 3.3.1


Attachments: File build.sh     Text File mariadb_10.0.21.AIX_XLC.patch    
Sprint: 10.1.15

 Description   

 
root@aixbuildhost61: /usr/local/src/mariadb-10.0.21 # cat build.sh
#!/usr/bin/ksh
 
export APPATH="/usr/local/itsvbuild/64"
 
export PATH="$APPATH/bin:$PATH"
export LIBPATH="$APPATH/lib:/usr/lib:/lib:/opt/freeware/lib64:/opt/freeware/lib"
export LD_LIBRARY_PATH="$APPATH/lib:/opt/freeware/lib64:/opt/freeware/lib:/usr/lib:/lib"
export OBJECT_MODE=64
export CC="xlc_r"
export CFLAGS="-q64 -qmaxmem=-1 -DNDEBUG -DSYSV -D_AIX -D_AIX64 -D_AIX41 -D_AIX43 -D_AIX51 -D_AIX52 -D_AIX53 -D_AIX61 -D_AIX71 -D_ALL_SOURCE -DFUNCPROTO=15 -O2 -I$APPATH/include -I/opt/freeware/include"
export CXX="xlC_r"
export CXXFLAGS=$CFLAGS
export LDFLAGS="-L$APPATH/lib -L/opt/freeware/lib64 -L/opt/freeware/lib -Wl,-blibpath:$APPATH/lib:/usr/lib:/lib -Wl,-bmaxdata:0x80000000 -Wl,-b64 -Wl,-bexpall -Wl,-bnoipath"
 
gmake clean
cmake . -DCMAKE_INSTALL_PREFIX=$APPATH -DCMAKE_C_FLAGS="$CFLAGS" -DCMAKE_CXX_FLAGS="$CFLAGS" -DCMAKE_EXE_LINKER_FLAGS="$LDFLAGS" -DCMAKE_SHARED_LINKER_FLAGS="$LDFLAGS -DWITH_UNIT_TESTS=OFF"
gmake
 

[ 60%] Built target sql
Scanning dependencies of target explain_filename-t
[ 60%] Building CXX object unittest/sql/CMakeFiles/explain_filename-t.dir/explain_filename-t.cc.o
"/usr/include/alloca.h", line 34.9: 1540-1401 (I) An unknown "pragma __alloca" is specified.
[ 60%] Linking CXX executable explain_filename-t
ld: 0711-317 ERROR: Undefined symbol: .innobase_strnxfrm(const charset_info_st*,const unsigned char*,unsigned long)
ld: 0711-317 ERROR: Undefined symbol: .trx_sys_file_format_id_to_name(const unsigned long)
ld: 0711-317 ERROR: Undefined symbol: ib_cursor_insert_row(ib_cursor_t*,ib_tuple_t* const)
ld: 0711-317 ERROR: Undefined symbol: ib_cursor_update_row(ib_cursor_t*,ib_tuple_t* const,ib_tuple_t* const)
ld: 0711-317 ERROR: Undefined symbol: ib_tuple_copy(ib_tuple_t*,ib_tuple_t* const)
ld: 0711-317 ERROR: Undefined symbol: ib_tuple_get_n_cols(ib_tuple_t* const)
ld: 0711-317 ERROR: Undefined symbol: ib_tuple_get_n_user_cols(ib_tuple_t* const)
ld: 0711-345 Use the -bloadmap or -bnoquiet option to obtain more information.
unittest/sql/CMakeFiles/explain_filename-t.dir/build.make:115: recipe for target 'unittest/sql/explain_filename-t' failed
gmake[2]: *** [unittest/sql/explain_filename-t] Error 8
CMakeFiles/Makefile2:1290: recipe for target 'unittest/sql/CMakeFiles/explain_filename-t.dir/all' failed
gmake[1]: *** [unittest/sql/CMakeFiles/explain_filename-t.dir/all] Error 2
Makefile:160: recipe for target 'all' failed
gmake: *** [all] Error 2



 Comments   
Comment by Chris [ 2015-09-17 ]

detailed output of linker command

root@aixbuildhost61: /usr/local/src/mariadb-10.0.21/sql # /opt/IBM/xlC/13.1.0/bin/xlC_r   -q64 -qmaxmem=-1 -qhalt=e -qstaticinline -qcpluscmt -DNDEBUG -DSYSV -D_AIX -D_AIX64 -D_AIX41 -D_AIX43 -D_AIX51 -D_AIX52 -D_AIX53 -D_AIX61 -D_AIX71 -D_ALL_SOURCE -DFUNCPROTO=15 -O2 -I/usr/local/itsvbuild/64/include -I/opt/freeware/include -qthreaded -qhalt=e -qstaticinline -g -DDBUG_OFF   -L/usr/local/itsvbuild/64/lib -L/opt/freeware/lib64 -L/opt/freeware/lib -Wl,-blibpath:/usr/local/itsvbuild/64/lib:/usr/lib:/lib -Wl,-bmaxdata:0x80000000 -Wl,-b64 -Wl,-bexpfull -Wl,-bnoipath -Wl,-bbigtoc CMakeFiles/mysqld.dir/main.cc.o  -o mysqld -Wl,-brtl,-bnoipath,-bexpfull libsql.a ../storage/csv/libcsv.a ../storage/heap/libheap.a ../storage/maria/libaria.a ../storage/myisam/libmyisam.a ../storage/myisammrg/libmyisammrg.a ../storage/perfschema/libperfschema.a ../storage/xtradb/libxtradb.a libpartition.a ../mysys_ssl/libmysys_ssl.a ../mysys/libmysys.a ../dbug/libdbug.a ../mysys/libmysys.a ../dbug/libdbug.a ../zlib/libzlib.a -lm ../strings/libstrings.a ../vio/libvio.a ../pcre/libpcre.a /usr/local/itsvbuild/64/lib/libssl.so /usr/local/itsvbuild/64/lib/libcrypto.so -Wl,-blibpath:/usr/lib:/lib -bnoquiet
(ld): setopt 64
(ld): halt 4
(ld): setopt noipath
(ld): setopt bigtoc
(ld): setopt noipath
(ld): setopt rtl
(ld): setopt rtllib
ld: 0711-317 ERROR: Undefined symbol: .innobase_strnxfrm(const charset_info_st*,const unsigned char*,unsigned long)
(ld): setopt expfull
ld: 0711-317 ERROR: Undefined symbol: .trx_sys_file_format_id_to_name(const unsigned long)
(ld): setopt symbolic:1
ld: 0711-317 ERROR: Undefined symbol: ib_cursor_insert_row(ib_cursor_t*,ib_tuple_t* const)
(ld): setfflag 4
ld: 0711-317 ERROR: Undefined symbol: ib_cursor_update_row(ib_cursor_t*,ib_tuple_t* const,ib_tuple_t* const)
(ld): cdtors 0 all 0 s
ld: 0711-317 ERROR: Undefined symbol: ib_tuple_copy(ib_tuple_t*,ib_tuple_t* const)
(ld): savename mysqld
ld: 0711-317 ERROR: Undefined symbol: ib_tuple_get_n_cols(ib_tuple_t* const)
(ld): filelist 29 1
(ld): i /lib/crt0_64.o
(ld): i /lib/crti_64.o
(ld): i CMakeFiles/mysqld.dir/main.cc.o
(ld): i libsql.a
(ld): i ../storage/csv/libcsv.a
(ld): i ../storage/heap/libheap.a
(ld): i ../storage/maria/libaria.a
(ld): i ../storage/myisam/libmyisam.a
(ld): i ../storage/myisammrg/libmyisammrg.a
(ld): i ../storage/perfschema/libperfschema.a
(ld): i ../storage/xtradb/libxtradb.a
(ld): i libpartition.a
(ld): i ../mysys_ssl/libmysys_ssl.a
(ld): i ../mysys/libmysys.a
(ld): i ../dbug/libdbug.a
(ld): i ../zlib/libzlib.a
(ld): lib /usr/lib/libm.a
(ld): i ../strings/libstrings.a
(ld): i ../vio/libvio.a
(ld): i ../pcre/libpcre.a
(ld): i /usr/local/itsvbuild/64/lib/libssl.so
(ld): i /usr/local/itsvbuild/64/lib/libcrypto.so
(ld): lib /opt/IBM/xlc/13.1.0/lib/libxlopt.a
(ld): lib /opt/IBM/xlc/13.1.0/lib/libxlipa.a
(ld): lib /opt/IBM/xlc/13.1.0/lib/libxl.a
(ld): lib /usr/lib/libC.a
(ld): lib /usr/lib/libpthreads.a
(ld): lib /usr/lib/libc.a
(ld): lib /usr/lib/librtl.a
LIBRARY: Shared object libssl.so: 622 symbols imported.
LIBRARY: Shared object libcrypto.so: 4059 symbols imported.
LIBRARY: Symbols imported from import file /usr/lib/libC.a[shr_32.imp]: 0
LIBRARY: Symbols imported from import file /usr/lib/libC.a[shr2_32.imp]: 0
LIBRARY: Symbols imported from import file /usr/lib/libC.a[shr3_32.imp]: 0
LIBRARY: Symbols imported from import file /usr/lib/libC.a[ansi_32.imp]: 0
LIBRARY: Symbols imported from import file /usr/lib/libC.a[shr_64.imp]: 393
LIBRARY: Symbols imported from import file /usr/lib/libC.a[shr2_64.imp]: 24
LIBRARY: Symbols imported from import file /usr/lib/libC.a[shr3_64.imp]: 28
LIBRARY: Symbols imported from import file /usr/lib/libC.a[ansi_64.imp]: 3765
LIBRARY: Shared object libpthreads.a[shr_xpg5_64.o]: 342 symbols imported.
LIBRARY: Shared object libc.a[shr_64.o]: 2978 symbols imported.
LIBRARY: Shared object libc.a[posix_aio_64.o]: 20 symbols imported.
LIBRARY: Shared object libc.a[aio_64.o]: 18 symbols imported.
LIBRARY: Shared object libc.a[pse_64.o]: 8 symbols imported.
LIBRARY: Shared object libc.a[dl_64.o]: 4 symbols imported.
LIBRARY: Shared object libc.a[pty_64.o]: 1 symbols imported.
LIBRARY: Shared object librtl.a[lazy42_64.o]: 3 symbols imported.
FILELIST: Number of previously inserted files processed: 29
(ld): resolve
RESOLVE: 73483 of 173516 symbols were kept.
(ld): addgl /usr/lib/glink64.o
ADDGL: Glink code added for 379 symbols.
(ld): er full
ld: 0711-318 ERROR: Undefined symbols were found.
        The following symbols are in error:
 Symbol                    Inpndx  TY CL Source-File(Object-File) OR Import-File{Shared-object}
                              RLD: Address  Section  Rld-type Referencing Symbol
 ----------------------------------------------------------------------------------------------
 .innobase_strnxfrm(const charset_info_st*,const unsigned char*,unsigned long) [5235]  ER PR /usr/local/src/mariadb-10.0.21/storage/xtradb/fts/fts0opt.cc(../storage/xtradb/libxtradb.a[fts0opt.cc.o])
                                   00000da0 .text    R_RBR    [2645]  .fts_index_fetch_nodes(trx_t*,que_fork_t**,fts_table_t*,const fts_string_t*,fts_fetch_t*)
                                   00000f70 .text    R_RBR    [2645]  .fts_index_fetch_nodes(trx_t*,que_fork_t**,fts_table_t*,const fts_string_t*,fts_fetch_t*)
                                   00005ff4 .text    R_RBR    [3754]  <.IPRA.$fts_optimize_words(fts_optimize_t*,dict_index_t*,fts_string_t*)>
                                   00006378 .text    R_RBR    [3754]  <.IPRA.$fts_optimize_words(fts_optimize_t*,dict_index_t*,fts_string_t*)>
                                   00006e90 .text    R_RBR    [3911]  <.IPRA.$fts_index_fetch_words(fts_optimize_t*,const fts_string_t*,unsigned long)>
                                   00007424 .text    R_RBR    [3960]  <.fts_optimize_set_next_word(const charset_info_st*,fts_string_t*)>
                                   00008ac8 .text    R_RBR    [4203]  <.IPRA.$fts_optimize_write_word(trx_t*,fts_table_t*,fts_string_t*,ib_vector_t*)>
 .innobase_strnxfrm(const charset_info_st*,const unsigned char*,unsigned long) [12202] ER PR /usr/local/src/mariadb-10.0.21/storage/xtradb/fts/fts0fts.cc(../storage/xtradb/libxtradb.a[fts0fts.cc.o])
                                   00015024 .text    R_RBR    [9736]  <.IPRA.$fts_sync_write_words(trx_t*,fts_index_cache_t*)>
 .innobase_strnxfrm(const charset_info_st*,const unsigned char*,unsigned long) [4465]  ER PR /usr/local/src/mariadb-10.0.21/storage/xtradb/row/row0ftsort.cc(../storage/xtradb/libxtradb.a[row0ftsort.cc.o])
                                   00002aac .text    R_RBR    [2573]  <.IPRA.$row_merge_fts_doc_tokenize(row_merge_buf_t**,unsigned long,fts_doc_t*,dtype_t*,merge_file_t**,unsigned long,fts_tokenize_ctx*)>
                                   00004840 .text    R_RBR    [3363]  <.IPRA.$row_merge_write_fts_word(trx_t*,que_fork_t**,fts_tokenizer_word_t*,fts_table_t*,const charset_info_st*)>
 .trx_sys_file_format_id_to_name(const unsigned long) [10066] ER PR /usr/local/src/mariadb-10.0.21/storage/xtradb/handler/i_s.cc(../storage/xtradb/libxtradb.a[i_s.cc.o])
                                   0000c5a0 .text    R_RBR    [6331]  <.IPRA.$i_s_dict_fill_sys_tables(THD*,dict_table_t*,TABLE*)>
                                   0000d76c .text    R_RBR    [6442]  <.IPRA.$i_s_dict_fill_sys_tablespaces(THD*,unsigned long,const char*,unsigned long,TABLE*)>
 .trx_sys_file_format_id_to_name(const unsigned long) [18983] ER PR /usr/local/src/mariadb-10.0.21/storage/xtradb/handler/ha_innodb.cc(../storage/xtradb/libxtradb.a[ha_innodb.cc.o])
                                   00000364 .text    R_RBR    [5256]  <.innobase_init(void*)>
                                   00000e80 .text    R_RBR    [5256]  <.innobase_init(void*)>
                                   0001c4bc .text    R_RBR    [10591] <.innodb_file_format_name_validate(THD*,st_mysql_sys_var*,void*,st_mysql_value*)>
                                   0001c610 .text    R_RBR    [10612] <.innodb_file_format_name_update(THD*,st_mysql_sys_var*,void*,const void*)>
                                   0001c63c .text    R_RBR    [10612] <.innodb_file_format_name_update(THD*,st_mysql_sys_var*,void*,const void*)>
                                   0001c810 .text    R_RBR    [10631] <.innodb_file_format_max_validate(THD*,st_mysql_sys_var*,void*,st_mysql_value*)>
                                   0001c844 .text    R_RBR    [10631] <.innodb_file_format_max_validate(THD*,st_mysql_sys_var*,void*,st_mysql_value*)>
                                   00022924 .text    R_RBR    [12160] <.IPRA.$innobase_file_format_name_lookup(const char*)>
                                   00022994 .text    R_RBR    [12160] <.IPRA.$innobase_file_format_name_lookup(const char*)>
 ib_cursor_insert_row(ib_cursor_t*,ib_tuple_t* const) [18946] ER DS /usr/local/src/mariadb-10.0.21/storage/xtradb/handler/ha_innodb.cc(../storage/xtradb/libxtradb.a[ha_innodb.cc.o])
                                   0002ed20 .data    R_POS    [18705] innodb_api_cb
                                   0002c248 .data    R_POS    [18948] <ib_cursor_insert_row(ib_cursor_t*,ib_tuple_t* const)>
 ib_cursor_update_row(ib_cursor_t*,ib_tuple_t* const,ib_tuple_t* const) [18938] ER DS /usr/local/src/mariadb-10.0.21/storage/xtradb/handler/ha_innodb.cc(../storage/xtradb/libxtradb.a[ha_innodb.cc.o])
                                   0002ed30 .data    R_POS    [18705] innodb_api_cb
                                   0002c238 .data    R_POS    [18940] <ib_cursor_update_row(ib_cursor_t*,ib_tuple_t* const,ib_tuple_t* const)>
 ib_tuple_copy(ib_tuple_t*,ib_tuple_t* const) [18902] ER DS /usr/local/src/mariadb-10.0.21/storage/xtradb/handler/ha_innodb.cc(../storage/xtradb/libxtradb.a[ha_innodb.cc.o])
                                   0002ed78 .data    R_POS    [18705] innodb_api_cb
                                   0002c1f0 .data    R_POS    [18904] <ib_tuple_copy(ib_tuple_t*,ib_tuple_t* const)>
 ib_tuple_get_n_cols(ib_tuple_t* const) [18834] ER DS /usr/local/src/mariadb-10.0.21/storage/xtradb/handler/ha_innodb.cc(../storage/xtradb/libxtradb.a[ha_innodb.cc.o])
                                   0002ee00 .data    R_POS    [18705] innodb_api_cb
                                   0002c168 .data    R_POS    [18836] <ib_tuple_get_n_cols(ib_tuple_t* const)>
 ib_tuple_get_n_user_cols(ib_tuple_t* const) [18738] ER DS /usr/local/src/mariadb-10.0.21/storage/xtradb/handler/ha_innodb.cc(../storage/xtradb/libxtradb.a[ha_innodb.cc.o])
                                   0002eec0 .data    R_POS    [18705] innodb_api_cb
                                   0002c0a8 .data    R_POS    [18740] <ib_tuple_get_n_user_cols(ib_tuple_t* const)>
ld: 0711-317 ERROR: Undefined symbol: ib_tuple_get_n_user_cols(ib_tuple_t* const)
ER: The return code is 8.
 

Comment by Jan Lindström (Inactive) [ 2015-09-17 ]

We do not have currently builder for AIX. You may either wait until we get one or even better contribute a fix to resolve above errors.

Comment by Chris [ 2015-09-23 ]

i added a patch file and a build script which produces a usable mariadb, but innodb throws an assertion error. with disabled innodb everything works.

innodb assertion error:

root@aixbuildhost61: /usr/local/mariadb # ../scripts/mysql_install_db
  --basedir=/usr/local/mariadb --datadir=/usr/local/mariadb/data
  --user=mysql
 
  150922 09:53:25 mysqld_safe Starting mysqld daemon with databases from /usr/local/mariadb/data
  150922  9:53:25 [Note] /usr/local/mariadb/bin/mysqld (mysqld 10.0.21-MariaDB) starting as process 7077926 ...
  150922  9:53:25 [Note] InnoDB: Using mutexes to ref count buffer pool pages
  150922  9:53:25 [Note] InnoDB: The InnoDB memory heap is disabled
  150922  9:53:25 [Note] InnoDB: Mutexes and rw_locks use GCC atomic builtins
  150922  9:53:25 [Note] InnoDB: GCC builtin __sync_synchronize() is used for memory barrier
  150922  9:53:25 [Note] InnoDB: Compressed tables use zlib 1.2.3
  2015-09-22 09:53:25 1  InnoDB: Assertion failure in thread 1 in file sync0arr.cc line 1239
  InnoDB: Failing assertion: sync_wait_array == NULL
  InnoDB: We intentionally generate a memory trap.
  InnoDB: Submit a detailed bug report to http://bugs.mysql.com.
  InnoDB: If you get repeated assertion failures or crashes, even
  InnoDB: immediately after the mysqld startup, there may be
  InnoDB: corruption in the InnoDB tablespace. Please refer to
  InnoDB: http://dev.mysql.com/doc/refman/5.6/en/forcing-innodb-recovery.html
  InnoDB: about forcing recovery.
  150922 09:53:25 mysqld_safe mysqld from pid file /usr/local/mariadb/data/aixbuildhost61.pid ended

this was reported to percona, but they said its mariadb's turn to look at this, because mariadb's implementation is "different", whatever that means.

is this bug Bug #47213 already applied to the mariadb/innodb/xtradb source?

Comment by Jan Lindström (Inactive) [ 2015-09-23 ]

Hi,

In file sync0arr.cc line 149 there is something like:

static	sync_array_t**	sync_wait_array;

replace this with:

static	sync_array_t**	sync_wait_array=NULL;

Can you create git pull request from your changes, there are some changes that need review also from other than me. I do not fully understand why you changed linkage of some innodb funtions to "C", can this be replaced by using correct types (using cast when necessary) on callers ?

Comment by Chris [ 2015-09-23 ]

i changed sync0arr.cc and the error changed also.

150923 12:01:02 mysqld_safe mysqld from pid file /var/run/mysqld/mysqld.pid ended
150923 12:06:28 mysqld_safe Starting mysqld daemon with databases from /mysql
150923 12:06:28 [Note] /usr/local/mariadb/bin/mysqld (mysqld 10.0.21-MariaDB) starting as process 8257558 ...
150923 12:06:28 [Note] InnoDB: Using mutexes to ref count buffer pool pages
150923 12:06:28 [Note] InnoDB: The InnoDB memory heap is disabled
150923 12:06:28 [Note] InnoDB: Mutexes and rw_locks use GCC atomic builtins
150923 12:06:28 [Note] InnoDB: GCC builtin __sync_synchronize() is used for memory barrier
150923 12:06:28 [Note] InnoDB: Compressed tables use zlib 1.2.3
150923 12:06:28 mysqld_safe mysqld from pid file /var/run/mysqld/mysqld.pid ended
/usr/local/mariadb/bin/mysqld_safe[27]: 8257688 Memory fault

the reason i changed some functions to "C" linkage,is because we got mixed up symbol resolutions between C and C++, which resulted in the mentioned "unresolved symbols" error.

what to you mean with "git pull request from your changes"? i do not use any repository here.

Comment by Jan Lindström (Inactive) [ 2015-09-23 ]

Changing the linkage of these InnoDB API callbacks would break existing applications using this API, you would need to add something for AIX in addition what is on api0api.h and in line typedef void (*ib_cb_t)(void); Correct, for git pull request you need to have branch from git.

Comment by Chris [ 2015-09-23 ]

github repo created, just in case.

https://github.com/flynn1973/mariadb-aix

Comment by Chris [ 2015-09-24 ]

i narrowed down the linking problem, to a c++ name mangling inconsisteny. with a corresponding compiler option (switching to a very old name mangling pattern), the innodb code compiles without modification.

any hints what could be a possible reason for the "Failing assertion: sync_wait_array == NULL"?

Comment by Jan Lindström (Inactive) [ 2015-09-29 ]

Hi, I think that on your case compiler does not initialize global variables as expected.

Comment by Sergey Vojtovich [ 2016-10-28 ]

wlad, could you review fix for this bug?

Comment by Vladislav Vaintroub [ 2016-10-28 ]

Ok to push.

Comment by Sergey Vojtovich [ 2016-10-31 ]

A bunch of fixes was pushed to 10.2: https://github.com/MariaDB/server/commit/71e11bce34339a69576321d6c40838fa65208dc7

Since we don't have AIX around, we may have missed some fixes. Feel free to report new bug if compilation still fails.

Generated at Thu Feb 08 07:29:50 UTC 2024 using Jira 8.20.16#820016-sha1:9d11dbea5f4be3d4cc21f03a88dd11d8c8687422.