[LLVMdev] LLVM Interpreter & Qsort

simonH76 acnods at yahoo.com
Wed Feb 20 10:04:54 PST 2013


Hi,

I am trying to run an LLVM analysis on a C++ program that calls qsort(),
using the LLVM interpreter (lli --force-interpreter). The code is the
qsort_large.c file in the MiBench benchmark suite. If I comment the qsort()
call, the execution works fine. If I uncomment the qsort() call, I run into
a segmentation fault error as follows:

0  lli             0x0000000000d35c6f
1  lli             0x0000000000d36199
2  libpthread.so.0 0x0000000004e41cb0
3  libpthread.so.0 0x000000000604e4d2

If I run valgrind, the output is the following:

vex amd64->IR: unhandled instruction bytes: 0x37 0x1 0x0 0x0 0x0 0x0 0x2 0x0
==9222== valgrind: Unrecognised instruction at address 0x604e4d2.
==9222==    at 0x604E4D2: ???
==9222==    by 0x5CA781B: msort_with_tmp.part.0 (msort.c:106)
==9222==    by 0x5CA75A0: msort_with_tmp.part.0 (msort.c:46)
==9222==    by 0x5CA75A0: msort_with_tmp.part.0 (msort.c:46)
==9222==    by 0x5CA75A0: msort_with_tmp.part.0 (msort.c:46)
==9222==    by 0x5CA75A0: msort_with_tmp.part.0 (msort.c:46)
==9222==    by 0x5CA75A0: msort_with_tmp.part.0 (msort.c:46)
==9222==    by 0x5CA75A0: msort_with_tmp.part.0 (msort.c:46)
==9222==    by 0x5CA75A0: msort_with_tmp.part.0 (msort.c:46)
==9222==    by 0x5CA75A0: msort_with_tmp.part.0 (msort.c:46)
==9222==    by 0x5CA75A0: msort_with_tmp.part.0 (msort.c:46)
==9222==    by 0x5CA75A0: msort_with_tmp.part.0 (msort.c:46)
==9222==    by 0x5CA75A0: msort_with_tmp.part.0 (msort.c:46)
==9222==    by 0x5CA7ABA: __GI_qsort_r.constprop.1 (msort.c:46)
==9222==    by 0x5054E87: ffi_call_unix64 (in
/usr/local/lib/libffi.so.6.0.1)
==9222==    by 0x505479C: ffi_call (in /usr/local/lib/libffi.so.6.0.1)
==9222==    by 0x8604AE:
llvm::Interpreter::callExternalFunction(llvm::Function*,
std::vector<llvm::GenericValue, std::allocator<llvm::GenericValue> >
const&) (in /usr/local/bin/lli)
==9222==    by 0x85B49A: llvm::Interpreter::callFunction(llvm::Function*,
std::vector<llvm::GenericValue, std::allocator<llvm::GenericValue> >
const&) (in /usr/local/bin/lli)
==9222==    by 0x85B952: llvm::Interpreter::visitCallSite(llvm::CallSite)
(in /usr/local/bin/lli)
==9222==    by 0x85D638: ??? (in /usr/local/bin/lli)
==9222==    by 0x85BED8: llvm::Interpreter::run() (in /usr/local/bin/lli)
==9222==    by 0x85045A: llvm::Interpreter::runFunction(llvm::Function*,
std::vector<llvm::GenericValue, std::allocator<llvm::GenericValue> >
const&) (in /usr/local/bin/lli)
==9222==    by 0xB93781:
llvm::ExecutionEngine::runFunctionAsMain(llvm::Function*,
std::vector<std::string, std::allocator<std::string> > const&, char
const* const*) (in /usr/local/bin/lli)
==9222==    by 0x4FE861: main (in /usr/local/bin/lli)

This seems to suggest that the problem is the call to the comparator
function within qsort().

I have the following system configuration:
  - Ubuntu 12.04
  - LLVM v.3.2
  - Clang v.3.2
  - LibFFI v.3.0.12
  - Libc v.2.15

Do you happen to know if this behavior is normal?
Does LLVM 3.2 have support for function pointers?

Thank you in advance.
Simon 



--
View this message in context: http://llvm.1065342.n5.nabble.com/LLVM-Interpreter-Qsort-tp55277.html
Sent from the LLVM - Dev mailing list archive at Nabble.com.



More information about the llvm-dev mailing list