[cfe-dev] Illegal instruction problem
eli.friedman at gmail.com
Tue Nov 29 14:38:33 CST 2011
On Tue, Nov 29, 2011 at 12:25 PM, Philip Ashmore
<contact at philipashmore.com> wrote:
> Sorry Chris for sending this to you personally before - I meant to send
> it to the list.
> On 28/11/11 14:40, Chris Lattner wrote:
>> On Nov 27, 2011, at 6:02 PM, Philip Ashmore wrote:
>>> Hi there.
>>> I've just committed new versions of some of my packages in SourceForge:
>>> I've got a problem with the release build (which uses -03 optimisation)
>>> of treedb.
>>> The "fuse" tests fail with an illegal instruction fault.
>> Hi Philip,
>> The most likely cause of this is that you're using undefined behavior
>> (e.g. an uninitialized variable, array out of bounds, etc) in your
>> code that the optimizer is detecting. Please see:
>> for more information.
> OK. Well, I did find a problem in v3c with valgrind - I'll push a new
> release after writing
> this. It has nothing to do with this problem though - fcntl(F_GETLK)
> doesn't set l_pid if
> there's no lock.
> Unfortunately valgrind can't go through setuid/setgid programs, which is
> what the fuse library does
> - it runs fusermount, so I couldn't valgrind the whole test.
> So I tried another way.
> 1. In treedb
> $ cd build/v3c/3-comet
> $ mkdir fuse
> 2. Run the daemon in foreground mode on the "fuse" directory and add
> debug output 'cause we can:
> $ TREEDB_FUSE_TMPDIR=$(readlink -f .) LD_LIBRARY_PATH=.libs:../.libs
> ./lt-treedb-malloc-daemon-d -d fuse
> 3. Debug malloc-test-d
> $ kdbg .libs/malloc-test-d
> 4. Set the command line argument to reserve a 50M heap :
> kdbg->Execution->Arguments 50M
> 5. Set environment variables in kdbg->Execution->Arguments->Environment
> 6. Run the program kdbg->Execution->Run or F5
> It hit an "ud2" instruction - kdbg reports SIGILL - Illegal instruction,
LLVM generates a ud2 in some cases where it can locally prove code is
unreachable because it has undefined behavior. You're most likely
> at treedb's v3c/avl-impl.h line
> 227, in treedb_malloc_AvlAllocator_used_insert_node_after_64 - the
> function name is a macro expansion
> and I've expanded it here as that's what's in the stack trace.
> Unfortunately v3c/avl-impl.h line 227 isn't in the above function - it's
> AVL_TREE_NS(unpack_node)(...) - I won't expand the macro-mangled name here.
> So either kdbg-2.5.0-1 is wrong (not impossible) or the debug
> information or llvm/clang is wrong.
Are you sure it isn't due to inlining?
More information about the cfe-dev