[MDEV-13772] ASAN with clang report stack problems in sp.test Created: 2017-09-08  Updated: 2017-09-14  Resolved: 2017-09-14

Status: Closed
Project: MariaDB Server
Component/s: OTHER
Affects Version/s: 10.2.7
Fix Version/s: N/A

Type: Bug Priority: Major
Reporter: Oleksandr Byelkin Assignee: Oleksandr Byelkin
Resolution: Won't Fix Votes: 0
Labels: None


 Description   

ASAN_OPTIONS=abort_on_error=1,disable_coredump=0 ./mysql-test-run --mem sp --debug

Thread 1 (Thread 0x7f8497877700 (LWP 32438)):
#0  __pthread_kill (threadid=<optimized out>, signo=6) at ../sysdeps/unix/sysv/linux/pthread_kill.c:62
#1  0x00000000029c086b in my_write_core (sig=6) at /home/sanja/maria/git/server/mysys/stacktrace.c:477
#2  0x000000000120c3ce in handle_fatal_signal (sig=6) at /home/sanja/maria/git/server/sql/signal_handler.cc:303
#3  <signal handler called>
#4  __GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:58
#5  0x00007f84a15e037a in __GI_abort () at abort.c:89
#6  0x00000000007038fb in __sanitizer::Abort() ()
#7  0x00000000006fca8b in __sanitizer::Die() ()
#8  0x00000000006dd98f in __asan::ReportStackOverflow(__sanitizer::SignalContext const&) ()
#9  0x00000000006dc700 in __asan::AsanOnDeadlySignal(int, void*, void*) ()
#10 <signal handler called>
#11 0x00000000029b6791 in my_thread_name () at /home/sanja/maria/git/server/mysys/my_thr_init.c:426
#12 0x0000000002a4bed0 in DoPrefix (cs=0x608000014020, _line_=203) at /home/sanja/maria/git/server/dbug/dbug.c:1810
#13 0x0000000002a4b424 in _db_enter_ (_func_=0x32301c0 <.str.6> "alloc_root", _file_=0x3230000 <.str.1> "/home/sanja/maria/git/server/mysys/my_alloc.c", _line_=203, _stack_frame_=0x7f849782f5a0) at /home/sanja/maria/git/server/dbug/dbug.c:1130
#14 0x000000000297a3fd in alloc_root (mem_root=0x7f84978579b0, length=5) at /home/sanja/maria/git/server/mysys/my_alloc.c:203
#15 0x000000000297d0f8 in strmake_root (root=0x7f84978579b0, str=0x617000029300 "root`@`localhost` PROCEDURE `c4`(l char(8), x int, s char(16))\ninsert into t1 values (concat(l,s), x)", len=4) at /home/sanja/maria/git/server/mysys/my_alloc.c:445
#16 0x000000000093b291 in Query_arena::strmake (this=0x62a000060288, str=0x617000029300 "root`@`localhost` PROCEDURE `c4`(l char(8), x int, s char(16))\ninsert into t1 values (concat(l,s), x)", size=4) at /home/sanja/maria/git/server/sql/sql_class.h:980
#17 0x00000000009d7f76 in get_token (lip=0x7f849784b728, skip=1, length=4) at /home/sanja/maria/git/server/sql/sql_lex.cc:889
#18 0x00000000009bf74b in lex_one_token (yylval=0x7f8497831100, thd=0x62a000060270) at /home/sanja/maria/git/server/sql/sql_lex.cc:1632
#19 0x00000000009bc899 in MYSQLlex (yylval=0x7f8497831100, thd=0x62a000060270) at /home/sanja/maria/git/server/sql/sql_lex.cc:1249
#20 0x000000000107fe7d in MYSQLparse (thd=0x62a000060270) at /home/sanja/maria/git/server/sql/sql_yacc.cc:21329
#21 0x0000000000a2c249 in parse_sql (thd=0x62a000060270, parser_state=0x7f849784b720, creation_ctx=0x625000228bb8, do_pfs_digest=false) at /home/sanja/maria/git/server/sql/sql_parse.cc:9897
#22 0x00000000017125e3 in sp_compile (thd=0x62a000060270, defstr=0x7f849784d1c0, sql_mode=1411383296, creation_ctx=0x625000228bb8) at /home/sanja/maria/git/server/sql/sp.cc:754
#23 0x000000000170d5cb in db_load_routine (thd=0x62a000060270, type=TYPE_ENUM_PROCEDURE, name=0x7f849784e670, sphp=0x7f849784e860, sql_mode=1411383296, params=0x625000228b18 "l char(8), x int, s char(16)", returns=0x2e96f40 <.str.22> "", body=0x625000228b38 "insert into t1 values (concat(l,s), x)", chistics=..., definer_user_name=0x7f849784da00, definer_host_name=0x7f849784da80, created=20170908153041, modified=20170908153041, creation_ctx=0x625000228bb8) at /home/sanja/maria/git/server/sql/sp.cc:882
#24 0x000000000170f561 in db_find_routine (thd=0x62a000060270, type=TYPE_ENUM_PROCEDURE, name=0x7f849784e670, sphp=0x7f849784e860) at /home/sanja/maria/git/server/sql/sp.cc:667
#25 0x000000000170b0fe in sp_cache_routine (thd=0x62a000060270, type=TYPE_ENUM_PROCEDURE, name=0x7f849784e670, lookup_only=false, sp=0x7f849784e860) at /home/sanja/maria/git/server/sql/sp.cc:2153
#26 0x00000000017111df in sp_cache_routine (thd=0x62a000060270, rt=0x625000221f88, lookup_only=false, sp=0x7f849784e860) at /home/sanja/maria/git/server/sql/sp.cc:2106
#27 0x000000000088a6ae in open_and_process_routine (thd=0x62a000060270, prelocking_ctx=0x625000223990, rt=0x625000221f88, prelocking_strategy=0x7f849784f620, has_prelocking_list=false, ot_ctx=0x7f849784eb80, need_prelocking=0x7f849784ec20, routine_modifies_data=0x7f849784ec30) at /home/sanja/ma



 Comments   
Comment by Oleksandr Byelkin [ 2017-09-13 ]

CC=clang-4.0 CXX=clang++-4.0 cmake ./ -GNinja -DCMAKE_BUILD_TYPE=Debug -DWITH_ASAN=YES -DPLUGIN_TOKUDB=NO && ninja

Comment by Oleksandr Byelkin [ 2017-09-13 ]

There is really not so much stack left:
#4 0x00000000009d7fc6 in get_token (lip=0x7fffec2db728, skip=1, length=4) at sql/sql_lex.cc:889
(gdb) p my_thread_stack_size - (lip->m_thd->thread_stack - (char*)&length)
$6 = 7960

#define STACK_MIN_SIZE 16000 // Abort if less stack during eval.

Comment by Oleksandr Byelkin [ 2017-09-13 ]

It looks like stack was eaten by MYSQLparse compiled by clang with no optimizations (non-debug version works with no problems):

#9  0x00000000010801cd in MYSQLparse (thd=0x62a000060270) at sql/sql_yacc.cc:21329
(gdb) p my_thread_stack_size - (thd->thread_stack-(char*)&yychar)
$3 = 120948
(gdb) frame 8
#8  0x00000000009bc8e9 in MYSQLlex (yylval=0x7fffec2c1100, thd=0x62a000060270) at sql/sql_lex.cc:1249
(gdb) p my_thread_stack_size - (thd->thread_stack-(char*)&lip)
$4 = 13584

Comment by Oleksandr Byelkin [ 2017-09-14 ]

The problem appears only with ASAN & clang & debug. Easy workaround is -mysqld=-thread-stack=500000

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