Bug#759803: python-llvm: Causes segfault on printing certain values

2014-08-30 Thread Robert
Package: python-llvm
Version: 0.12.6-2
Severity: important

Dear Maintainer,

python-llvm (llvm-py upstream) has been giving me quite a few issues
lately.

I wrote a quick test to see how easy it would be to generate some code
with it, and kept getting segfaults. That was a red flag right away;
python code shouldn't ever segfault unless you're doing something
strange.

I boiled it down to a MWE, attached below with some notes on where
segfaults happen. I also ran a backtrace with gdb to see where it was
segfaulting, although I didn't do any digging through source files to
see where improper checking/other bugs might be.

-- System Information:
Debian Release: jessie/sid
  APT prefers testing-updates
  APT policy: (500, 'testing-updates'), (500, 'testing')
Architecture: i386 (i686)

Kernel: Linux 3.14-1-686-pae (SMP w/4 CPU cores)
Locale: LANG=en_US.UTF-8, LC_CTYPE=en_US.UTF-8 (charmap=UTF-8)
Shell: /bin/sh linked to /bin/dash

Versions of packages python-llvm depends on:
ii  libc6   2.19-7
ii  libffi6 3.1-2
ii  libgcc1 1:4.9.1-4
ii  libllvm3.4  1:3.4.2-6
ii  libstdc++6  4.9.1-4
ii  libtinfo5   5.9+20140712-2
ii  python  2.7.8-1

python-llvm recommends no packages.

python-llvm suggests no packages.

-- no debconf information

*** /home/rwb/python/parse/test.py
import llvm.core as llvm

module = llvm.Module.new(main)
int = llvm.Type.int()

func = llvm.Function.new(module, int, main)
block = func.append_basic_block(entry)
builder = llvm.Builder.new(block)

# Segfault.
# print(func)

left = llvm.Constant.int(int, 1)
right = llvm.Constant.int(int, 1)

print(left)
print(right)

tmp = builder.add(left, right, tmp)

# Segfault.
# print(block)

# Unclear if this should be 0 or 1.
print(len(block.instructions))
builder.ret(tmp)
print(len(block.instructions))
print(block.instructions[0].opcode_name)

# Segfault.
print(block.instructions[0])

*** /home/rwb/python/parse/gdb.txt
Starting program: /usr/bin/python test.py
warning: Could not load shared library symbols for linux-gate.so.1.
Do you need set solib-search-path or set sysroot?
[Thread debugging using libthread_db enabled]
Using host libthread_db library 
/lib/i386-linux-gnu/i686/cmov/libthread_db.so.1.

Program received signal SIGSEGV, Segmentation fault.
0xb60aec55 in llvm::Function::BuildLazyArguments() const () from 
/usr/lib/i386-linux-gnu/libLLVM-3.4.so.1
#0  0xb60aec55 in llvm::Function::BuildLazyArguments() const () from 
/usr/lib/i386-linux-gnu/libLLVM-3.4.so.1
#1  0xb613fc25 in llvm::TypeFinder::run(llvm::Module const, bool) ()
   from /usr/lib/i386-linux-gnu/libLLVM-3.4.so.1
#2  0xb604f32a in llvm::TypePrinting::incorporateTypes(llvm::Module const) ()
   from /usr/lib/i386-linux-gnu/libLLVM-3.4.so.1
#3  0xb6051ac7 in llvm::AssemblyWriter::init() () from 
/usr/lib/i386-linux-gnu/libLLVM-3.4.so.1
#4  0xb6051b84 in 
llvm::AssemblyWriter::AssemblyWriter(llvm::formatted_raw_ostream, 
llvm::SlotTracker, llvm::Module const*, llvm::AssemblyAnnotationWriter*) () 
from /usr/lib/i386-linux-gnu/libLLVM-3.4.so.1
#5  0xb6058df1 in llvm::Value::print(llvm::raw_ostream, 
llvm::AssemblyAnnotationWriter*) const ()
   from /usr/lib/i386-linux-gnu/libLLVM-3.4.so.1
#6  0xb78ff3ed in ?? () from /usr/lib/python2.7/dist-packages/llvmpy/_api.so
#7  0x08104248 in PyEval_EvalFrameEx ()
#8  0x080ff28d in PyEval_EvalCodeEx ()
#9  0x08101f4b in PyEval_EvalFrameEx ()
#10 0x08118e25 in ?? ()
#11 0x08134317 in ?? ()
#12 0x08107919 in PyEval_CallObjectWithKeywords ()
#13 0x081bf23d in ?? ()
#14 0x0816715c in ?? ()
#15 0x080f3018 in ?? ()
#16 0x0810125f in PyEval_EvalFrameEx ()
#17 0x08118e25 in ?? ()
#18 0x08134317 in ?? ()
#19 0x08107919 in PyEval_CallObjectWithKeywords ()
#20 0x081bf23d in ?? ()
#21 0x08157a97 in PyObject_Str ()
#22 0x08156235 in ?? ()
#23 0x08155ca8 in PyFile_WriteObject ()
#24 0x081059c4 in PyEval_EvalFrameEx ()
#25 0x080ff28d in PyEval_EvalCodeEx ()
#26 0x08132e5c in ?? ()
#27 0x0812a2b8 in PyRun_FileExFlags ()
#28 0x0812948a in PyRun_SimpleFileExFlags ()
#29 0x080d4b74 in Py_Main ()
#30 0x080d45fb in main ()
quit
A debugging session is active.

Inferior 1 [process 24157] will be killed.

Quit anyway? (y or n)


-- 
To UNSUBSCRIBE, email to debian-bugs-dist-requ...@lists.debian.org
with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org



Bug#759803: python-llvm: Causes segfault on printing certain values

2014-08-30 Thread Sylvestre Ledru
severity 759803 normal
thanks



On 30/08/2014 17:26, Robert wrote:
 Package: python-llvm
 Version: 0.12.6-2
 Severity: important

 Dear Maintainer,

 python-llvm (llvm-py upstream) has been giving me quite a few issues
 lately.

 I wrote a quick test to see how easy it would be to generate some code
 with it, and kept getting segfaults. That was a red flag right away;
 python code shouldn't ever segfault unless you're doing something
 strange.

In theory, yes.

However, it is the way LLVM is designed.
If an incorrect IR is given, LLVM is going to crash, crashing Python in
the meantime.

FYI, there is the exact same issue with the OCaml binding.

Cheers,
Sylvestre


-- 
To UNSUBSCRIBE, email to debian-bugs-dist-requ...@lists.debian.org
with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org



Bug#759803: python-llvm: Causes segfault on printing certain values

2014-08-30 Thread rwb
 However, it is the way LLVM is designed.
 If an incorrect IR is given, LLVM is going to crash, crashing Python in
 the meantime.
Fair enough, but that seems strange for a python module to do. Even
calling `func.verify()` causes a segfault, which according to the docs
(http://www.llvmpy.org/llvmpy-doc/0.12.7/doc/llvm.core.Function.html#verify)
is something you should call to _prevent_ crashing.  Maybe upstream
could add some checks and raise exceptions rather than segfaulting?

(ignoring that though, the note about the instruction count being unclear
seems to be because LLVM is smart enough to see that they're both
constants and doesn't bother with splipping the first add instruction
in (messing around with one of the examples on the site points to
this))

On Sat, Aug 30, 2014 at 05:39:12PM +0200, Sylvestre Ledru wrote:
 severity 759803 normal
 thanks
 
 
 
 On 30/08/2014 17:26, Robert wrote:
  Package: python-llvm
  Version: 0.12.6-2
  Severity: important
 
  Dear Maintainer,
 
  python-llvm (llvm-py upstream) has been giving me quite a few issues
  lately.
 
  I wrote a quick test to see how easy it would be to generate some code
  with it, and kept getting segfaults. That was a red flag right away;
  python code shouldn't ever segfault unless you're doing something
  strange.
 
 In theory, yes.
 
 However, it is the way LLVM is designed.
 If an incorrect IR is given, LLVM is going to crash, crashing Python in
 the meantime.
 
 FYI, there is the exact same issue with the OCaml binding.
 
 Cheers,
 Sylvestre


-- 
To UNSUBSCRIBE, email to debian-bugs-dist-requ...@lists.debian.org
with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org