[Python-Dev] OpenBSD anyone?

Guido van Rossum guido at python.org
Tue Dec 23 11:20:08 EST 2003


> There are two calls to load_next() in import_module_ex().  The
> segfault is occuring during the second call.
> 
> The code is somewhat pathological in that the callee, load_next(), is
> modifying the caller's /parameters/ by changing the contents of name.
> 
> For some reason, the compiler emits code which makes a copy of
> import_module_ex()'s parameters in the stack frame.  When load_next()
> is called, the reference &name is the location in the
> parameter area of the frame, but when name is tested in the while
> loop, the copy in the local area of the frame is used.  Since this has
> not been modified by load_next(), the fact that name has been set to
> 0x00 is missed.  load_next() gets called erroneously and passes a null
> pointer to strchr.
> 
> I tried a volatile declaration, but no joy.  Adding a proper local,
> mod_name, resolved the problem.

Wow.  Thanks for the analysis.  But this is clearly a compiler bug.
Where do we report that?  And why would it be unique to OpenBSD?

In the mean time, Kurt, please check in your fix -- it can't hurt, and
we might as well avoid the pain for the next person who wants to build
a debugging Python.  The fix could use a comment referring to a
compiler bug, to keep the next maintainer from unfixing it. :-)

--Guido van Rossum (home page: http://www.python.org/~guido/)



More information about the Python-Dev mailing list