| Bug #80096 | ndb_print_file core dump on Solaris | ||
|---|---|---|---|
| Submitted: | 21 Jan 2016 10:11 | Modified: | 30 Mar 2016 10:21 |
| Reporter: | Magnus Blåudd | Email Updates: | |
| Status: | Closed | Impact on me: | |
| Category: | MySQL Cluster: Cluster (NDB) storage engine | Severity: | S3 (Non-critical) |
| Version: | 7.5.1 | OS: | Any |
| Assigned to: | CPU Architecture: | Any | |
[21 Jan 2016 10:11]
Magnus Blåudd
[22 Jan 2016 14:05]
Magnus Blåudd
Posted by developer: Caused by a SIGBUS when using localtime. Some unaligned data is passed in. Probably need rewrite to use a aligned buffer on the stack. t@1 (l@1) program terminated by signal BUS (invalid address alignment) 0xffffffff7e581900: localtime+0x0030: ldx [%i0], %i0 current thread: t@1 =>[1] localtime(0x10048c0e4, 0xffffffff7e200280, 0x0, 0xffffffff7e782000, 0x20072c, 0xffffffff7e000198), at 0xffffffff7e581900 [2] ctime(0x10048c0e4, 0xffffffff7e200240, 0x5, 0xffffffff7fff9430, 0x100, 0x70501), at 0xffffffff7e570310 [3] _ZlsR6NdbOutRKN12File_formats16Zero_page_headerE(0x10048c180, 0x10048c0c8, 0xffffffff7e787ba4, 0x10048c180, 0x100309ba8, 0x10048c180), at 0x10001c7ec [4] _ZlsR6NdbOutRKN12File_formats8Datafile9Zero_pageE(0x10048c180, 0x10048c0c8, 0x0, 0x4, 0x2000000080, 0x0), at 0x10001c824 [5] _ZL15print_zero_pageiPvj(0x0, 0x10049c3f0, 0x8000, 0xffffffff7e787c80, 0x10048c180, 0x10048c0c8), at 0x10001bd50 [6] main(0xffffffff7e787c80, 0x8000, 0x1004176a8, 0x0, 0xffffffff7fff9890, 0x8000), at 0x100057504 current thread: t@1 =>[1] localtime(0x10048c0e4, 0xffffffff7e200280, 0x0, 0xffffffff7e782000, 0x20072c, 0xffffffff7e000198), at 0xffffffff7e581900 [2] ctime(0x10048c0e4, 0xffffffff7e200240, 0x5, 0xffffffff7fff9430, 0x100, 0x70501), at 0xffffffff7e570310 [3] _ZlsR6NdbOutRKN12File_formats16Zero_page_headerE(0x10048c180, 0x10048c0c8, 0xffffffff7e787ba4, 0x10048c180, 0x100309ba8, 0x10048c180), at 0x10001c7ec [4] _ZlsR6NdbOutRKN12File_formats8Datafile9Zero_pageE(0x10048c180, 0x10048c0c8, 0x0, 0x4, 0x2000000080, 0x0), at 0x10001c824 [5] _ZL15print_zero_pageiPvj(0x0, 0x10049c3f0, 0x8000, 0xffffffff7e787c80, 0x10048c180, 0x10048c0c8), at 0x10001bd50 [6] main(0xffffffff7e787c80, 0x8000, 0x1004176a8, 0x0, 0xffffffff7fff9890, 0x8000), at 0x100057504
[22 Jan 2016 14:09]
Magnus Blåudd
Posted by developer:
NdbOut&
operator<<(NdbOut& out, const File_formats::Zero_page_header& obj)
{
char buf[256];
out << "page size: " << obj.m_page_size << endl;
out << "ndb version: " << obj.m_ndb_version << ", " <<
ndbGetVersionString(obj.m_ndb_version, 0, 0, buf, sizeof(buf)) << endl;
out << "ndb node id: " << obj.m_node_id << endl;
out << "file type: " << obj.m_file_type << endl;
out << "time: " << obj.m_time << ", "
<< ctime((time_t*)&obj.m_time)<< endl;
^^^^
return out;
}
[24 Mar 2016 10:37]
Mauritz Sundell
Posted by developer:
Crash is in
NdbOut&
operator<<(NdbOut& out, const File_formats::Zero_page_header& obj)
{
char buf[256];
out << "page size: " << obj.m_page_size << endl;
out << "ndb version: " << obj.m_ndb_version << ", " <<
ndbGetVersionString(obj.m_ndb_version, 0, 0, buf, sizeof(buf)) << endl;
out << "ndb node id: " << obj.m_node_id << endl;
out << "file type: " << obj.m_file_type << endl;
out << "time: " << obj.m_time << ", "
<< ctime((time_t*)&obj.m_time)<< endl;
^^^^^^^^^^^^ m_time is a 32bit word aligned on 4byte, but not on 8byte. and time_t is 8 byte!
return out;
}
$ grep TIME_T ../CMakeCache.txt
HAVE_SIZEOF_TIME_T:INTERNAL=TRUE
SIZEOF_TIME_T:INTERNAL=8
[msundell@vimur09]~/build-7.5/mysql-test: /opt/SUNWspro/bin/dbx ../storage/ndb/src/kernel/blocks/ndb_print_file var/log/ndb.ndb_print_file/core
For information about new features see `help changes'
To remove this message, put `dbxenv suppress_startup_message 7.6' in your .dbxrc
Reading ndb_print_file
core file header read successfully
Reading ld.so.1
Reading libnsl.so.1
Reading libsocket.so.1
Reading libstdc++.so.6.0.18
dbx: warning: unknown location expression code (0xe0)
dbx: warning: unknown location expression code (0xe0)
Reading libm.so.2
Reading libgcc_s.so.1
Reading libc.so.1
program terminated by signal BUS (invalid address alignment)
0xffffffff7e57f0d0: localtime+0x0030: ldx [%i0], %i0
(dbx) up
0xffffffff7e56de90: ctime+0x0024: call localtime ! 0xffffffff7e57f0a0
(dbx) up
0x00000001000244a0: _ZlsR6NdbOutRKN12File_formats16Zero_page_headerE+0x0254: call ctime [PLT] ! 0x100452cc0
(dbx) up
0x000000010002451c: _ZlsR6NdbOutRKN12File_formats8Datafile9Zero_pageE+0x0018: call _ZlsR6NdbOutRKN12File_formats16Zero_page_headerE ! 0x10002424c
(dbx) up
0x00000001000223d4: _ZL15print_zero_pageiPvj+0x01dc: call _ZlsR6NdbOutRKN12File_formats8Datafile9Zero_pageE ! 0x100024504
[30 Mar 2016 10:21]
Jon Stephens
Fixed in NDB 7.4.11 and 7.5.2. Documented as follows:
The ndb_print_file utility failed consistently on Solaris 9 for SPARC.
Closed.
